diff --git a/autobuild.xml b/autobuild.xml
index 6d874b3bdcfea2394b7e232bde4e5953018ca4a0..c14c37753c81c092c58e2be44c47b14f891fa70e 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -860,9 +860,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>11d0794582e91a57f6524ad345f2399d</string>
+              <string>772d3ae9d4a1d3e36eadcfb4b81ca47f</string>
               <key>url</key>
-              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/87791/805924/googlemock-1.7.0.563853-darwin64-563853.tar.bz2</string>
+              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/109950/956085/googlemock-1.7.0.577943-darwin64-577943.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -884,9 +884,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>47303c9bb9a06c6f488f9d7b2b2282c4</string>
+              <string>61df276991917f710d27cb578d9df25b</string>
               <key>url</key>
-              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/109524/952870/googlemock-1.7.0.577708-windows-577708.tar.bz2</string>
+              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/109953/956105/googlemock-1.7.0.577943-windows-577943.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -896,16 +896,16 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c166bbd8787a68c1a4ba75179c58dda6</string>
+              <string>cc1307e11133755eac29ab04ef240092</string>
               <key>url</key>
-              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/109525/952878/googlemock-1.7.0.577708-windows64-577708.tar.bz2</string>
+              <string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/109952/956106/googlemock-1.7.0.577943-windows64-577943.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows64</string>
           </map>
         </map>
         <key>version</key>
-        <string>1.7.0.577708</string>
+        <string>1.7.0.577943</string>
       </map>
       <key>gstreamer</key>
       <map>
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index e72475cbc4c09195b2d973b493b63624b22e5e3a..c8807364b9f137a06295d80894cd3514c186470b 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -194,9 +194,15 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
   # development must be done after the build as we do in viewer_manifest.py for
   # released builds
   # https://stackoverflow.com/a/54296008
+  # With Xcode 14.1, apparently you must take drastic steps to prevent
+  # implicit signing.
+  set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED NO)
+  set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED NO)
   # "-" represents "Sign to Run Locally" and empty string represents "Do Not Sign"
   set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
-
+  set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "")
+  set(CMAKE_XCODE_ATTRIBUTE_DISABLE_MANUAL_TARGET_ORDER_BUILD_WARNING YES)
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_64_TO_32_BIT_CONVERSION NO)
   set(CMAKE_OSX_ARCHITECTURES "${ARCH}")
   string(REPLACE "i686"  "i386"   CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
   string(REPLACE "AMD64" "x86_64" CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
diff --git a/indra/llappearance/llwearabletype.h b/indra/llappearance/llwearabletype.h
index 793a33cc8717e2acbded8270038dda31d427d981..1fbe19ddd1be0d70c9f170b3fc0f34570690cbdf 100644
--- a/indra/llappearance/llwearabletype.h
+++ b/indra/llappearance/llwearabletype.h
@@ -37,7 +37,7 @@ class LLWearableType : public LLParamSingleton<LLWearableType>
 {
 	LLSINGLETON(LLWearableType, LLTranslationBridge::ptr_t &trans);
 	~LLWearableType();
-	void initSingleton();
+	void initSingleton() override;
 public: 
 	enum EType
 	{
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
index 8ddd13279398cc5b51d3cb77b97f41e7477dc91d..c658075a31f8d0176261a4da19cc9c0a16a5a150 100644
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -905,14 +905,14 @@ bool unix_post_minidump_callback(const char *dump_dir,
 	// heap allocations in a crash handler.
 	
 	// path format: <dump_dir>/<minidump_id>.dmp
-	int dirPathLength = strlen(dump_dir);
-	int idLength = strlen(minidump_id);
+	auto dirPathLength = strlen(dump_dir);
+	auto idLength = strlen(minidump_id);
 	
 	// The path must not be truncated.
 	llassert((dirPathLength + idLength + 5) <= LLApp::MAX_MINDUMP_PATH_LENGTH);
 	
 	char * path = LLApp::instance()->getMiniDumpFilename();
-	S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH;
+	auto remaining = LLApp::MAX_MINDUMP_PATH_LENGTH;
 	strncpy(path, dump_dir, remaining);
 	remaining -= dirPathLength;
 	path += dirPathLength;
diff --git a/indra/llcommon/llbase64.cpp b/indra/llcommon/llbase64.cpp
index 4e82cf7f209b2edfba28601135a294405f0003de..bb85fe32a3cff7b7805a77416ea3aeea3c48ba7d 100644
--- a/indra/llcommon/llbase64.cpp
+++ b/indra/llcommon/llbase64.cpp
@@ -42,7 +42,7 @@ std::string LLBase64::encode(const U8* input, size_t input_size)
 		&& input_size > 0)
 	{
 		// Yes, it returns int.
-		int b64_buffer_length = apr_base64_encode_len(input_size);
+		int b64_buffer_length = apr_base64_encode_len(narrow(input_size));
 		char* b64_buffer = new char[b64_buffer_length];
 		
 		// This is faster than apr_base64_encode() if you know
@@ -52,7 +52,7 @@ std::string LLBase64::encode(const U8* input, size_t input_size)
 		b64_buffer_length = apr_base64_encode_binary(
 			b64_buffer,
 			input,
-			input_size);
+			narrow(input_size));
 		output.assign(b64_buffer);
 		delete[] b64_buffer;
 	}
diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h
index dbff921f167eb5f69262de816911c73e7c9e3845..a6da94005b202c7188eb9f22d7ae063652274892 100644
--- a/indra/llcommon/llcoros.h
+++ b/indra/llcommon/llcoros.h
@@ -92,7 +92,7 @@ class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
     LLSINGLETON(LLCoros);
     ~LLCoros();
 
-    void cleanupSingleton();
+    void cleanupSingleton() override;
 public:
     /// The viewer's use of the term "coroutine" became deeply embedded before
     /// the industry term "fiber" emerged to distinguish userland threads from
diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h
index 5a4b8325f427dd2bb7f5f72a04097f7487015eb7..5c46f6a79651ecd4b6e117342b0576575623f26a 100644
--- a/indra/llcommon/lldefs.h
+++ b/indra/llcommon/lldefs.h
@@ -28,6 +28,7 @@
 #define LL_LLDEFS_H
 
 #include "stdtypes.h"
+#include <type_traits>
 
 // Often used array indices
 const U32	VX			= 0;
@@ -168,80 +169,79 @@ const U32	MAXADDRSTR		= 17;		// 123.567.901.345 = 15 chars + \0 + 1 for good luc
 //   llclampb(a)     // clamps a to [0 .. 255]
 //   				   
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2)
+template <typename T1, typename T2> 
+inline auto llmax(T1 d1, T2 d2)
 {
 	return (d1 > d2) ? d1 : d2;
 }
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3)
+template <typename T1, typename T2, typename T3> 
+inline auto llmax(T1 d1, T2 d2, T3 d3)
 {
-	LLDATATYPE r = llmax(d1,d2);
+	auto r = llmax(d1,d2);
 	return llmax(r, d3);
 }
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llmax(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3, const LLDATATYPE& d4)
+template <typename T1, typename T2, typename T3, typename T4> 
+inline auto llmax(T1 d1, T2 d2, T3 d3, T4 d4)
 {
-	LLDATATYPE r1 = llmax(d1,d2);
-	LLDATATYPE r2 = llmax(d3,d4);
+	auto r1 = llmax(d1,d2);
+	auto r2 = llmax(d3,d4);
 	return llmax(r1, r2);
 }
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2)
+template <typename T1, typename T2> 
+inline auto llmin(T1 d1, T2 d2)
 {
 	return (d1 < d2) ? d1 : d2;
 }
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3)
+template <typename T1, typename T2, typename T3> 
+inline auto llmin(T1 d1, T2 d2, T3 d3)
 {
-	LLDATATYPE r = llmin(d1,d2);
+	auto r = llmin(d1,d2);
 	return (r < d3 ? r : d3);
 }
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llmin(const LLDATATYPE& d1, const LLDATATYPE& d2, const LLDATATYPE& d3, const LLDATATYPE& d4)
+template <typename T1, typename T2, typename T3, typename T4> 
+inline auto llmin(T1 d1, T2 d2, T3 d3, T4 d4)
 {
-	LLDATATYPE r1 = llmin(d1,d2);
-	LLDATATYPE r2 = llmin(d3,d4);
+	auto r1 = llmin(d1,d2);
+	auto r2 = llmin(d3,d4);
 	return llmin(r1, r2);
 }
 
-template <class LLDATATYPE> 
-inline LLDATATYPE llclamp(const LLDATATYPE& a, const LLDATATYPE& minval, const LLDATATYPE& maxval)
+template <typename A, typename MIN, typename MAX> 
+inline A llclamp(A a, MIN minval, MAX maxval)
 {
-	if ( a < minval )
+	A aminval{ static_cast<A>(minval) }, amaxval{ static_cast<A>(maxval) };
+	if ( a < aminval )
 	{
-		return minval;
+		return aminval;
 	}
-	else if ( a > maxval )
+	else if ( a > amaxval )
 	{
-		return maxval;
+		return amaxval;
 	}
 	return a;
 }
 
 template <class LLDATATYPE> 
-inline LLDATATYPE llclampf(const LLDATATYPE& a)
+inline LLDATATYPE llclampf(LLDATATYPE a)
 {
-	return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)1);
+	return llmin(llmax(a, LLDATATYPE(0)), LLDATATYPE(1));
 }
 
 template <class LLDATATYPE> 
-inline LLDATATYPE llclampb(const LLDATATYPE& a)
+inline LLDATATYPE llclampb(LLDATATYPE a)
 {
-	return llmin(llmax(a, (LLDATATYPE)0), (LLDATATYPE)255);
+	return llmin(llmax(a, LLDATATYPE(0)), LLDATATYPE(255));
 }
 
 template <class LLDATATYPE> 
 inline void llswap(LLDATATYPE& lhs, LLDATATYPE& rhs)
 {
-	LLDATATYPE tmp = lhs;
-	lhs = rhs;
-	rhs = tmp;
+	std::swap(lhs, rhs);
 }
 
 #endif // LL_LLDEFS_H
diff --git a/indra/llcommon/lldependencies.cpp b/indra/llcommon/lldependencies.cpp
index 0d5757effddf550c331c91a0b78b9e6267aac27c..db546c5c3b3cdce406f6ba60af9fc51f45d23cf1 100644
--- a/indra/llcommon/lldependencies.cpp
+++ b/indra/llcommon/lldependencies.cpp
@@ -42,7 +42,7 @@
 // other Linden headers
 #include "llexception.h"
 
-LLDependenciesBase::VertexList LLDependenciesBase::topo_sort(int vertices, const EdgeList& edges) const
+LLDependenciesBase::VertexList LLDependenciesBase::topo_sort(size_t vertices, const EdgeList& edges) const
 {
     // Construct a Boost Graph Library graph according to the constraints
     // we've collected. It seems as though we ought to be able to capture
diff --git a/indra/llcommon/lldependencies.h b/indra/llcommon/lldependencies.h
index db2bbab8b040269e04bec4638b70bea4dd6fa4e4..950af4a4ad650bd3724b0e0eb7045cc2995748c5 100644
--- a/indra/llcommon/lldependencies.h
+++ b/indra/llcommon/lldependencies.h
@@ -126,7 +126,7 @@ class LL_COMMON_API LLDependenciesBase
 protected:
     typedef std::vector< std::pair<std::size_t, std::size_t> > EdgeList;
     typedef std::vector<std::size_t> VertexList;
-    VertexList topo_sort(int vertices, const EdgeList& edges) const;
+    VertexList topo_sort(size_t vertices, const EdgeList& edges) const;
 
     /**
      * refpair is specifically intended to capture a pair of references. This
@@ -539,7 +539,7 @@ class LLDependencies: public LLDependenciesBase
                 for (typename DepNodeMap::const_iterator nmi = mNodes.begin(), nmend = mNodes.end();
                      nmi != nmend; ++nmi)
                 {
-                    int thisnode = vmap[nmi->first];
+                    auto thisnode = vmap[nmi->first];
                     // after dependencies: build edges from the named node to this one
                     for (typename DepNode::dep_set::const_iterator ai = nmi->second.after.begin(),
                                                                    aend = nmi->second.after.end();
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 919d2dabc4a1d75040e72f9c504ee0dfe9f5eb44..519426e9d180c88cc1300cb5e7f10d9ef02332f9 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -1514,7 +1514,7 @@ namespace LLError
 		const size_t BUF_SIZE = 64;
 		char time_str[BUF_SIZE];	/* Flawfinder: ignore */
 		
-		int chars = strftime(time_str, BUF_SIZE, 
+		auto chars = strftime(time_str, BUF_SIZE, 
 								  "%Y-%m-%dT%H:%M:%SZ",
 								  gmtime(&now));
 
diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp
index 5b6d4efbe98b8259d09197444b7cc914d80bf554..cd0ab6bc2980242a0456f6a76894e7999fb72e9b 100644
--- a/indra/llcommon/lleventdispatcher.cpp
+++ b/indra/llcommon/lleventdispatcher.cpp
@@ -178,7 +178,7 @@ class LL_COMMON_API LLSDArgsMapper
     // store it as a map from name string to position index. Of course that's
     // easy to generate from the incoming names array, but why do it more than
     // once?
-    typedef std::map<LLSD::String, LLSD::Integer> IndexMap;
+    typedef std::map<LLSD::String, size_t> IndexMap;
     IndexMap _indexes;
     // Generated array of default values, aligned with the array of param names.
     LLSD _defaults;
@@ -197,9 +197,9 @@ LLSDArgsMapper::LLSDArgsMapper(const std::string& function,
     {
         LL_ERRS("LLSDArgsMapper") << function << " names must be an array, not " << names << LL_ENDL;
     }
-    LLSD::Integer nparams(_names.size());
+    auto nparams(_names.size());
     // From _names generate _indexes.
-    for (LLSD::Integer ni = 0, nend = _names.size(); ni < nend; ++ni)
+    for (size_t ni = 0, nend = _names.size(); ni < nend; ++ni)
     {
         _indexes[_names[ni]] = ni;
     }
@@ -214,7 +214,7 @@ LLSDArgsMapper::LLSDArgsMapper(const std::string& function,
 
     if (defaults.isUndefined() || defaults.isArray())
     {
-        LLSD::Integer ndefaults = defaults.size();
+        auto ndefaults = defaults.size();
         // defaults is a (possibly empty) array. Right-align it with names.
         if (ndefaults > nparams)
         {
@@ -224,10 +224,10 @@ LLSDArgsMapper::LLSDArgsMapper(const std::string& function,
 
         // Offset by which we slide defaults array right to right-align with
         // _names array
-        LLSD::Integer offset = nparams - ndefaults;
+        auto offset = nparams - ndefaults;
         // Fill rightmost _defaults entries from defaults, and mark them as
         // filled
-        for (LLSD::Integer i = 0, iend = ndefaults; i < iend; ++i)
+        for (size_t i = 0, iend = ndefaults; i < iend; ++i)
         {
             _defaults[i + offset] = defaults[i];
             _has_dft[i + offset] = 1;
@@ -247,7 +247,7 @@ LLSDArgsMapper::LLSDArgsMapper(const std::string& function,
                 continue;
             }
 
-            LLSD::Integer pos = ixit->second;
+            auto pos = ixit->second;
             // Store default value at that position in the _defaults array.
             _defaults[pos] = mi->second;
             // Don't forget to record the fact that we've filled this
@@ -301,7 +301,7 @@ LLSD LLSDArgsMapper::map(const LLSD& argsmap) const
     {
         // Fill args from array. If there are too many args in passed array,
         // ignore the rest.
-        LLSD::Integer size(argsmap.size());
+        auto size(argsmap.size());
         if (size > args.size())
         {
             // We don't just use std::min() because we want to sneak in this
@@ -338,7 +338,7 @@ LLSD LLSDArgsMapper::map(const LLSD& argsmap) const
                                             << mi->first << "=" << mi->second << LL_ENDL;
                 continue;
             }
-            LLSD::Integer pos = ixit->second;
+            auto pos = ixit->second;
             // Store the value at that position in the args array.
             args[pos] = mi->second;
             // Don't forget to record the fact that we've filled this
@@ -349,7 +349,7 @@ LLSD LLSDArgsMapper::map(const LLSD& argsmap) const
 
     // Fill any remaining holes from _defaults.
     LLSD unfilled(LLSD::emptyArray());
-    for (LLSD::Integer i = 0, iend = args.size(); i < iend; ++i)
+    for (size_t i = 0, iend = args.size(); i < iend; ++i)
     {
         if (! filled[i])
         {
@@ -503,9 +503,9 @@ struct LLEventDispatcher::MapParamsDispatchEntry: public LLEventDispatcher::Para
         if (defaults.isArray() || defaults.isUndefined())
         {
             // Right-align the params and defaults arrays.
-            LLSD::Integer offset = params.size() - defaults.size();
+            auto offset = params.size() - defaults.size();
             // Now the name of every defaults[i] is at params[i + offset].
-            for (LLSD::Integer i(0), iend(defaults.size()); i < iend; ++i)
+            for (size_t i(0), iend(defaults.size()); i < iend; ++i)
             {
                 // Erase this optional param from mRequired.
                 mRequired.erase(params[i + offset].asString());
diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h
index 02535a59e7e1a7c7e5efa7e6c2a6f597e2889126..34f2a5985aa6c6ab34da6590a2931a7942c0ceb7 100644
--- a/indra/llcommon/llinstancetracker.h
+++ b/indra/llcommon/llinstancetracker.h
@@ -99,7 +99,7 @@ class LLInstanceTracker
         return mSelf;
     }
 
-    static S32 instanceCount() 
+    static size_t instanceCount() 
     { 
         return LockStatic()->mMap.size(); 
     }
@@ -363,7 +363,7 @@ class LLInstanceTracker<T, void, KEY_COLLISION_BEHAVIOR>
         return mSelf;
     }
     
-    static S32 instanceCount()
+    static size_t instanceCount()
     {
         return LockStatic()->mSet.size();
     }
diff --git a/indra/llcommon/llkeybind.cpp b/indra/llcommon/llkeybind.cpp
index 38696c2258b7d4de12ff1ad8d0a8f5603ff47ea5..12e57ae94b97c2b7579e0afe47d8316764269e45 100644
--- a/indra/llcommon/llkeybind.cpp
+++ b/indra/llcommon/llkeybind.cpp
@@ -30,6 +30,7 @@
 
 #include "llsd.h"
 #include "llsdutil.h"
+#include <algorithm>
 
 LLKeyData::LLKeyData()
     :
@@ -180,10 +181,10 @@ LLKeyBind::LLKeyBind(const LLSD &key_bind)
 
 bool LLKeyBind::operator==(const LLKeyBind& rhs)
 {
-    U32 size = mData.size();
+    auto size = mData.size();
     if (size != rhs.mData.size()) return false;
 
-    for (U32 i = 0; i < size; i++)
+    for (size_t i = 0; i < size; i++)
     {
         if (mData[i] != rhs.mData[i]) return false;
     }
@@ -193,7 +194,7 @@ bool LLKeyBind::operator==(const LLKeyBind& rhs)
 
 bool LLKeyBind::operator!=(const LLKeyBind& rhs)
 {
-    U32 size = mData.size();
+    auto size = mData.size();
     if (size != rhs.mData.size()) return true;
 
     for (U32 i = 0; i < size; i++)
@@ -213,19 +214,23 @@ bool LLKeyBind::isEmpty() const
     return true;
 }
 
-LLSD LLKeyBind::asLLSD() const
+LLKeyBind::data_vector_t::const_iterator LLKeyBind::endNonEmpty() const
 {
-    S32 last = mData.size() - 1;
-    while (mData[last].empty())
-    {
-        last--;
-    }
+    // search backwards for last non-empty entry, then turn back into forwards
+    // iterator (.base() call)
+    return std::find_if_not(mData.rbegin(), mData.rend(),
+                            [](const auto& kdata){ return kdata.empty(); }).base();
+}
 
+LLSD LLKeyBind::asLLSD() const
+{
     LLSD data;
-    for (S32 i = 0; i <= last; ++i)
+    auto end{ endNonEmpty() };
+    for (auto it = mData.begin(); it < end; ++it)
     {
-        // append even if empty to not affect visual representation
-        data.append(mData[i].asLLSD());
+        // append intermediate entries even if empty to not affect visual
+        // representation
+        data.append(it->asLLSD());
     }
     return data;
 }
@@ -380,16 +385,10 @@ void LLKeyBind::resetKeyData(S32 index)
 
 void LLKeyBind::trimEmpty()
 {
-    S32 last = mData.size() - 1;
-    while (last >= 0 && mData[last].empty())
-    {
-        mData.erase(mData.begin() + last);
-        last--;
-    }
+    mData.erase(endNonEmpty(), mData.end());
 }
 
-U32 LLKeyBind::getDataCount()
+size_t LLKeyBind::getDataCount()
 {
     return mData.size();
 }
-
diff --git a/indra/llcommon/llkeybind.h b/indra/llcommon/llkeybind.h
index c6b4bd970f43c716bab9e0d6061e7e5d79df5d4e..488f5094117c286a02ac7991f7151d8e77bca2a0 100644
--- a/indra/llcommon/llkeybind.h
+++ b/indra/llcommon/llkeybind.h
@@ -95,11 +95,13 @@ class LLKeyBind
     void clear() { mData.clear(); }
     // if there any empty LLKeyData in the end of the array, remove them
     void trimEmpty();
-    U32 getDataCount();
+    size_t getDataCount();
 
 private:
     typedef std::vector<LLKeyData> data_vector_t;
     data_vector_t mData;
+
+    data_vector_t::const_iterator endNonEmpty() const;
 };
 
 
diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp
index 2704f8b6de120db414a2130b8ed861c92e89909c..c87c0758fee9b54b38370293f29b0d8110ed066c 100644
--- a/indra/llcommon/llleap.cpp
+++ b/indra/llcommon/llleap.cpp
@@ -231,7 +231,8 @@ class LLLeapImpl: public LLLeap
         }
 |*==========================================================================*/
 
-        LL_DEBUGS("EventHost") << "Sending: " << buffer.tellp() << ':';
+        LL_DEBUGS("EventHost") << "Sending: "
+                               << static_cast<U64>(buffer.tellp()) << ':';
         std::string::size_type truncate(80);
         if (buffer.tellp() <= truncate)
         {
@@ -244,7 +245,8 @@ class LLLeapImpl: public LLLeap
         LL_CONT << LL_ENDL;
 
         LLProcess::WritePipe& childin(mChild->getWritePipe(LLProcess::STDIN));
-        childin.get_ostream() << buffer.tellp() << ':' << buffer.str() << std::flush;
+        childin.get_ostream() << static_cast<U64>(buffer.tellp())
+                              << ':' << buffer.str() << std::flush;
         return false;
     }
 
diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp
index f942a976b7ecba321780038b53000b595be329e7..9b2a2bab60f48195614aa9d1a16c201681d9f477 100644
--- a/indra/llcommon/llmd5.cpp
+++ b/indra/llcommon/llmd5.cpp
@@ -96,10 +96,10 @@ LLMD5::LLMD5()
 // operation, processing another message block, and updating the
 // context.
 
-void LLMD5::update (const uint1 *input, const uint4 input_length) {
+void LLMD5::update (const uint1 *input, const size_t input_length) {
 
-  uint4 input_index, buffer_index;
-  uint4 buffer_space;                // how much space is left in buffer
+  size_t input_index, buffer_index;
+  size_t buffer_space;                // how much space is left in buffer
 
   if (finalized){  // so we can't update!
 	  std::cerr << "LLMD5::update:  Can't update a finalized digest!" << std::endl;
@@ -107,14 +107,10 @@ void LLMD5::update (const uint1 *input, const uint4 input_length) {
   }
 
   // Compute number of bytes mod 64
-  buffer_index = (unsigned int)((count[0] >> 3) & 0x3F);
+  buffer_index = size_t((count >> 3) & 0x3F);
 
   // Update number of bits
-  if (  (count[0] += ((uint4) input_length << 3))<((uint4) input_length << 3) )
-    count[1]++;
-
-  count[1] += ((uint4)input_length >> 29);
-
+  count += input_length << 3;
 
   buffer_space = 64 - buffer_index;  // how much space is left in buffer
 
@@ -192,7 +188,7 @@ void  LLMD5::update(const std::string& s)
 void LLMD5::finalize (){
 
   unsigned char bits[8];		/* Flawfinder: ignore */
-  unsigned int index, padLen;
+  size_t index, padLen;
   static uint1 PADDING[64]={
     0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -204,11 +200,12 @@ void LLMD5::finalize (){
     return;
   }
 
-  // Save number of bits
-  encode (bits, count, 8);
+  // Save number of bits.
+  // Treat count, a uint64_t, as uint4[2].
+  encode (bits, reinterpret_cast<uint4*>(&count), 8);
 
   // Pad out to 56 mod 64.
-  index = (uint4) ((count[0] >> 3) & 0x3f);
+  index = size_t((count >> 3) & 0x3f);
   padLen = (index < 56) ? (56 - index) : (120 - index);
   update (PADDING, padLen);
 
@@ -340,8 +337,7 @@ void LLMD5::init(){
   finalized=0;  // we just started!
 
   // Nothing counted, so count=0
-  count[0] = 0;
-  count[1] = 0;
+  count = 0;
 
   // Load magic initialization constants.
   state[0] = 0x67452301;
@@ -508,9 +504,9 @@ void LLMD5::transform (const U8 block[64]){
 
 // Encodes input (UINT4) into output (unsigned char). Assumes len is
 // a multiple of 4.
-void LLMD5::encode (uint1 *output, const uint4 *input, const uint4 len) {
+void LLMD5::encode (uint1 *output, const uint4 *input, const size_t len) {
 
-  unsigned int i, j;
+  size_t i, j;
 
   for (i = 0, j = 0; j < len; i++, j += 4) {
     output[j]   = (uint1)  (input[i] & 0xff);
@@ -525,9 +521,9 @@ void LLMD5::encode (uint1 *output, const uint4 *input, const uint4 len) {
 
 // Decodes input (unsigned char) into output (UINT4). Assumes len is
 // a multiple of 4.
-void LLMD5::decode (uint4 *output, const uint1 *input, const uint4 len){
+void LLMD5::decode (uint4 *output, const uint1 *input, const size_t len){
 
-  unsigned int i, j;
+  size_t i, j;
 
   for (i = 0, j = 0; j < len; i++, j += 4)
     output[i] = ((uint4)input[j]) | (((uint4)input[j+1]) << 8) |
diff --git a/indra/llcommon/llmd5.h b/indra/llcommon/llmd5.h
index 1526e6ac3c0d5ea50b3c0d0862ac491e5f3c6972..8530dc03891d9d9e85d203709b918bfa66cf3fbd 100644
--- a/indra/llcommon/llmd5.h
+++ b/indra/llcommon/llmd5.h
@@ -86,7 +86,7 @@ class LL_COMMON_API LLMD5 {
 public:
 // methods for controlled operation:
   LLMD5              ();  // simple initializer
-  void  update     (const uint1 *input, const uint4 input_length);
+  void  update     (const uint1 *input, const size_t input_length);
   void  update     (std::istream& stream);
   void  update     (FILE *file);
   void  update     (const std::string& str);
@@ -110,7 +110,7 @@ class LL_COMMON_API LLMD5 {
 
 // next, the private data:
   uint4 state[4];
-  uint4 count[2];     // number of *bits*, mod 2^64
+  uint64_t count;     // number of *bits*, mod 2^64
   uint1 buffer[64];   // input buffer
   uint1 digest[16];
   uint1 finalized;
@@ -120,8 +120,8 @@ class LL_COMMON_API LLMD5 {
   void transform        (const uint1 *buffer);  // does the real update work.  Note 
                                           // that length is implied to be 64.
 
-  static void encode    (uint1 *dest, const uint4 *src, const uint4 length);
-  static void decode    (uint4 *dest, const uint1 *src, const uint4 length);
+  static void encode    (uint1 *dest, const uint4 *src, const size_t length);
+  static void decode    (uint4 *dest, const uint1 *src, const size_t length);
 
 };
 
diff --git a/indra/llcommon/llmetricperformancetester.cpp b/indra/llcommon/llmetricperformancetester.cpp
index 100eb57555c8362ce46e0a4f44ba9753dbcc9d67..864ecf650b6586c25271cd689418e59241b3d52a 100644
--- a/indra/llcommon/llmetricperformancetester.cpp
+++ b/indra/llcommon/llmetricperformancetester.cpp
@@ -111,8 +111,8 @@ LLSD LLMetricPerformanceTesterBasic::analyzeMetricPerformanceLog(std::istream& i
 			{
 				ret[label]["Name"] = iter->second["Name"] ;
 				
-				S32 num_of_metrics = tester->getNumberOfMetrics() ;
-				for(S32 index = 0 ; index < num_of_metrics ; index++)
+				auto num_of_metrics = tester->getNumberOfMetrics() ;
+				for(size_t index = 0 ; index < num_of_metrics ; index++)
 				{
 					ret[label][ tester->getMetricName(index) ] = iter->second[ tester->getMetricName(index) ] ;
 				}
diff --git a/indra/llcommon/llmetricperformancetester.h b/indra/llcommon/llmetricperformancetester.h
index 2e99ed979df939396b3d2bcbbaaf40737cd3b9a7..6561a78f03edad84459e4857cc216c0928f905ce 100644
--- a/indra/llcommon/llmetricperformancetester.h
+++ b/indra/llcommon/llmetricperformancetester.h
@@ -67,12 +67,12 @@ class LL_COMMON_API LLMetricPerformanceTesterBasic
 	/**
 	 * @return Returns the number of the test metrics in this tester instance.
 	 */
-	S32 getNumberOfMetrics() const { return mMetricStrings.size() ;}
+	auto getNumberOfMetrics() const { return mMetricStrings.size() ;}
 	/**
 	 * @return Returns the metric name at index
 	 * @param[in] index - Index on the list of metrics managed by this tester instance.
 	 */
-	std::string getMetricName(S32 index) const { return mMetricStrings[index] ;}
+	std::string getMetricName(size_t index) const { return mMetricStrings[index] ;}
 
 protected:
 	/**
diff --git a/indra/llcommon/llmortician.cpp b/indra/llcommon/llmortician.cpp
index 93c7d520f2b46325fe73fb68178f2cd01d7925f8..b6ad40c2afedaa8b511916e57af08bc3773970d8 100644
--- a/indra/llcommon/llmortician.cpp
+++ b/indra/llcommon/llmortician.cpp
@@ -37,9 +37,9 @@ LLMortician::~LLMortician()
 	sGraveyard.remove(this);
 }
 
-U32 LLMortician::logClass(std::stringstream &str)
+size_t LLMortician::logClass(std::stringstream &str)
 {
-    U32 size = sGraveyard.size();
+    auto size = sGraveyard.size();
     str << "Mortician graveyard count: " << size;
     str << " Zealous: " << (sDestroyImmediate ? "True" : "False");
     if (size == 0)
diff --git a/indra/llcommon/llmortician.h b/indra/llcommon/llmortician.h
index 41cb49fab15d73ab8be712ca287f4cbab4c17d36..f92c5a11db44f942244bac595e582793e050261b 100644
--- a/indra/llcommon/llmortician.h
+++ b/indra/llcommon/llmortician.h
@@ -34,8 +34,8 @@ class LL_COMMON_API LLMortician
 {
 public:
 	LLMortician() { mIsDead = FALSE; }
-	static U32 graveyardCount() { return sGraveyard.size(); };
-	static U32 logClass(std::stringstream &str);
+	static auto graveyardCount() { return sGraveyard.size(); };
+	static size_t logClass(std::stringstream &str);
 	static void updateClass();
 	virtual ~LLMortician();
 	void die();
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
index 8cef4293cd7cdb4ec204a6ad59e8ba37cf4fe6a1..b06fee0ec2ea612d906a7089b2987eb6e0e503ad 100644
--- a/indra/llcommon/llqueuedthread.cpp
+++ b/indra/llcommon/llqueuedthread.cpp
@@ -110,7 +110,7 @@ void LLQueuedThread::shutdown()
 
 // MAIN THREAD
 // virtual
-S32 LLQueuedThread::update(F32 max_time_ms)
+size_t LLQueuedThread::update(F32 max_time_ms)
 {
 	if (!mStarted)
 	{
@@ -123,11 +123,11 @@ S32 LLQueuedThread::update(F32 max_time_ms)
 	return updateQueue(max_time_ms);
 }
 
-S32 LLQueuedThread::updateQueue(F32 max_time_ms)
+size_t LLQueuedThread::updateQueue(F32 max_time_ms)
 {
 	F64 max_time = (F64)max_time_ms * .001;
 	LLTimer timer;
-	S32 pending = 1;
+	size_t pending = 1;
 
 	// Frame Update
 	if (mThreaded)
@@ -164,9 +164,9 @@ void LLQueuedThread::incQueue()
 
 //virtual
 // May be called from any thread
-S32 LLQueuedThread::getPending()
+size_t LLQueuedThread::getPending()
 {
-	S32 res;
+	size_t res;
 	lockData();
 	res = mRequestQueue.size();
 	unlockData();
@@ -399,7 +399,7 @@ bool LLQueuedThread::check()
 //============================================================================
 // Runs on its OWN thread
 
-S32 LLQueuedThread::processNextRequest()
+size_t LLQueuedThread::processNextRequest()
 {
 	QueuedRequest *req;
 	// Get next request from pool
@@ -473,8 +473,7 @@ S32 LLQueuedThread::processNextRequest()
 		LLTrace::get_thread_recorder()->pushToParent();
 	}
 
-	S32 pending = getPending();
-	return pending;
+	return getPending();
 }
 
 // virtual
@@ -511,7 +510,7 @@ void LLQueuedThread::run()
 
 		threadedUpdate();
 		
-		int pending_work = processNextRequest();
+		auto pending_work = processNextRequest();
 
 		if (pending_work == 0)
 		{
diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h
index 5d3f8736467fa7f6967d6d9017f53d7bd4d16227..90fce3dc5d71173bef7b18388305f11dd1eabe48 100644
--- a/indra/llcommon/llqueuedthread.h
+++ b/indra/llcommon/llqueuedthread.h
@@ -167,19 +167,19 @@ class LL_COMMON_API LLQueuedThread : public LLThread
 protected:
 	handle_t generateHandle();
 	bool addRequest(QueuedRequest* req);
-	S32  processNextRequest(void);
+	size_t  processNextRequest(void);
 	void incQueue();
 
 public:
 	bool waitForResult(handle_t handle, bool auto_complete = true);
 
-	virtual S32 update(F32 max_time_ms);
-	S32 updateQueue(F32 max_time_ms);
-	
+	virtual size_t update(F32 max_time_ms);
+	size_t updateQueue(F32 max_time_ms);
+
 	void waitOnPending();
 	void printQueueStats();
 
-	virtual S32 getPending();
+	virtual size_t getPending();
 	bool getThreaded() { return mThreaded ? true : false; }
 
 	// Request accessors
diff --git a/indra/llcommon/llrun.cpp b/indra/llcommon/llrun.cpp
index f5d3f302fa0daf78ab4602c51c2157331d1de0db..a3b3fccf4bb494c6e57f1b4b63c26ca285b7d177 100644
--- a/indra/llcommon/llrun.cpp
+++ b/indra/llcommon/llrun.cpp
@@ -47,7 +47,7 @@ LLRunner::~LLRunner()
 	mRunEvery.clear();
 }
 
-S32 LLRunner::run()
+size_t LLRunner::run()
 {
 	// We collect all of the runnables which should be run. Since the
 	// runnables are allowed to adjust the run list, we need to copy
diff --git a/indra/llcommon/llrun.h b/indra/llcommon/llrun.h
index a1174053667fbd82b7620381fe572b10eeddb012..d610f86234f63f6c256d208ff7cd2a529e5f4a3d 100644
--- a/indra/llcommon/llrun.h
+++ b/indra/llcommon/llrun.h
@@ -85,7 +85,7 @@ class LL_COMMON_API LLRunner
 	 *
 	 * @return Returns the number of runnables run.
 	 */
-	S32 run();
+	size_t run();
 
 	/** 
 	 * @brief Add a runnable to the run list.
diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp
index 807b3d13f830f162bdd4378ceb1a2d6f8907f591..590915e9d242bbac5f5fa179876463d18738306c 100644
--- a/indra/llcommon/llsd.cpp
+++ b/indra/llcommon/llsd.cpp
@@ -36,6 +36,18 @@
 #include "llsdserialize.h"
 #include "stringize.h"
 
+#include <limits>
+
+// Defend against a caller forcibly passing a negative number into an unsigned
+// size_t index param
+inline
+bool was_negative(size_t i)
+{
+    return (i > std::numeric_limits<int>::max());
+}
+#define NEGATIVE_EXIT(i) if (was_negative(i)) return
+#define NEGATIVE_RETURN(i, result) NEGATIVE_EXIT(i) (result)
+
 #ifndef LL_RELEASE_FOR_DOWNLOAD
 #define NAME_UNNAMED_NAMESPACE
 #endif
@@ -136,10 +148,10 @@ class LLSD::Impl
 	virtual void erase(const String&)			{ }
 	virtual const LLSD& ref(const String&) const{ return undef(); }
 	
-	virtual int size() const					{ return 0; }
-	virtual LLSD get(Integer) const				{ return LLSD(); }
-	virtual void erase(Integer)					{ }
-	virtual const LLSD& ref(Integer) const		{ return undef(); }
+	virtual size_t size() const					{ return 0; }
+	virtual LLSD get(size_t) const				{ return LLSD(); }
+	virtual void erase(size_t)					{ }
+	virtual const LLSD& ref(size_t) const		{ return undef(); }
 
 	virtual LLSD::map_const_iterator beginMap() const { return endMap(); }
 	virtual LLSD::map_const_iterator endMap() const { static const std::map<String, LLSD> empty; return empty.end(); }
@@ -272,7 +284,7 @@ namespace
 		virtual LLSD::UUID		asUUID() const	{ return LLUUID(mValue); }
 		virtual LLSD::Date		asDate() const	{ return LLDate(mValue); }
 		virtual LLSD::URI		asURI() const	{ return LLURI(mValue); }
-		virtual int				size() const	{ return mValue.size(); }
+		virtual size_t			size() const	{ return mValue.size(); }
 		virtual const LLSD::String&	asStringRef() const { return mValue; }
 	};
 	
@@ -377,9 +389,9 @@ namespace
 
 		virtual bool has(const LLSD::String&) const; 
 
-		using LLSD::Impl::get; // Unhiding get(LLSD::Integer)
-		using LLSD::Impl::erase; // Unhiding erase(LLSD::Integer)
-		using LLSD::Impl::ref; // Unhiding ref(LLSD::Integer)
+		using LLSD::Impl::get; // Unhiding get(size_t)
+		using LLSD::Impl::erase; // Unhiding erase(size_t)
+		using LLSD::Impl::ref; // Unhiding ref(size_t)
 		virtual LLSD get(const LLSD::String&) const; 
 		virtual LLSD getKeys() const; 
 		        void insert(const LLSD::String& k, const LLSD& v);
@@ -387,7 +399,7 @@ namespace
 		              LLSD& ref(const LLSD::String&);
 		virtual const LLSD& ref(const LLSD::String&) const;
 
-		virtual int size() const { return mData.size(); }
+		virtual size_t size() const { return mData.size(); }
 
 		LLSD::map_iterator beginMap() { return mData.begin(); }
 		LLSD::map_iterator endMap() { return mData.end(); }
@@ -518,14 +530,14 @@ namespace
 		using LLSD::Impl::get; // Unhiding get(LLSD::String)
 		using LLSD::Impl::erase; // Unhiding erase(LLSD::String)
 		using LLSD::Impl::ref; // Unhiding ref(LLSD::String)
-		virtual int size() const; 
-		virtual LLSD get(LLSD::Integer) const;
-		        void set(LLSD::Integer, const LLSD&);
-		        void insert(LLSD::Integer, const LLSD&);
+		virtual size_t size() const; 
+		virtual LLSD get(size_t) const;
+		        void set(size_t, const LLSD&);
+		        void insert(size_t, const LLSD&);
 		        LLSD& append(const LLSD&);
-		virtual void erase(LLSD::Integer);
-		              LLSD& ref(LLSD::Integer);
-		virtual const LLSD& ref(LLSD::Integer) const; 
+		virtual void erase(size_t);
+		              LLSD& ref(size_t);
+		virtual const LLSD& ref(size_t) const; 
 
 		LLSD::array_iterator beginArray() { return mData.begin(); }
 		LLSD::array_iterator endArray() { return mData.end(); }
@@ -550,85 +562,82 @@ namespace
 			return *this;
 		}
 	}
-	
-	int ImplArray::size() const		{ return mData.size(); }
-	
-	LLSD ImplArray::get(LLSD::Integer i) const
+
+	size_t ImplArray::size() const		{ return mData.size(); }
+
+	LLSD ImplArray::get(size_t i) const
 	{
-		if (i < 0) { return LLSD(); }
+		NEGATIVE_RETURN(i, LLSD());
 		DataVector::size_type index = i;
-		
+
 		return (index < mData.size()) ? mData[index] : LLSD();
 	}
-	
-	void ImplArray::set(LLSD::Integer i, const LLSD& v)
+
+	void ImplArray::set(size_t i, const LLSD& v)
 	{
-		if (i < 0) { return; }
+		NEGATIVE_EXIT(i);
 		DataVector::size_type index = i;
-		
+
 		if (index >= mData.size())
 		{
 			mData.resize(index + 1);
 		}
-		
+
 		mData[index] = v;
 	}
-	
-	void ImplArray::insert(LLSD::Integer i, const LLSD& v)
+
+	void ImplArray::insert(size_t i, const LLSD& v)
 	{
-		if (i < 0) 
-		{
-			return;
-		}
+		NEGATIVE_EXIT(i);
 		DataVector::size_type index = i;
-		
+
 		if (index >= mData.size())	// tbd - sanity check limit for index ?
 		{
 			mData.resize(index + 1);
 		}
-		
+
 		mData.insert(mData.begin() + index, v);
 	}
-	
+
 	LLSD& ImplArray::append(const LLSD& v)
 	{
 		mData.push_back(v);
 		return mData.back();
 	}
-	
-	void ImplArray::erase(LLSD::Integer i)
+
+	void ImplArray::erase(size_t i)
 	{
-		if (i < 0) { return; }
+		NEGATIVE_EXIT(i);
 		DataVector::size_type index = i;
-		
+
 		if (index < mData.size())
 		{
 			mData.erase(mData.begin() + index);
 		}
 	}
-	
-	LLSD& ImplArray::ref(LLSD::Integer i)
+
+	LLSD& ImplArray::ref(size_t i)
 	{
-		DataVector::size_type index = i >= 0 ? i : 0;
-		
+		DataVector::size_type index = was_negative(i)? 0 : i;
+
 		if (index >= mData.size())
 		{
-			mData.resize(i + 1);
+			mData.resize(index + 1);
 		}
-		
+
 		return mData[index];
 	}
 
-	const LLSD& ImplArray::ref(LLSD::Integer i) const
+	const LLSD& ImplArray::ref(size_t i) const
 	{
-		if (i < 0) { return undef(); }
+		NEGATIVE_RETURN(i, undef());
 		DataVector::size_type index = i;
-		
+
 		if (index >= mData.size())
 		{
 			return undef();
 		}
-		
+
 		return mData[index];
 	}
 
@@ -841,9 +850,6 @@ LLSD::LLSD(const Date& v) : impl(0)		{ ALLOC_LLSD_OBJECT;	assign(v); }
 LLSD::LLSD(const URI& v) : impl(0)		{ ALLOC_LLSD_OBJECT;	assign(v); }
 LLSD::LLSD(const Binary& v) : impl(0)	{ ALLOC_LLSD_OBJECT;	assign(v); }
 
-// Convenience Constructors
-LLSD::LLSD(F32 v) : impl(0)				{ ALLOC_LLSD_OBJECT;	assign((Real)v); }
-
 // Scalar Assignment
 void LLSD::assign(Boolean v)			{ safe(impl).assign(impl, v); }
 void LLSD::assign(Integer v)			{ safe(impl).assign(impl, v); }
@@ -912,7 +918,7 @@ LLSD LLSD::emptyArray()
 	return v;
 }
 
-int LLSD::size() const					{ return safe(impl).size(); }
+size_t LLSD::size() const				{ return safe(impl).size(); }
  
 LLSD LLSD::get(Integer i) const			{ return safe(impl).get(i); } 
 void LLSD::set(Integer i, const LLSD& v){ makeArray(impl).set(i, v); }
@@ -926,12 +932,12 @@ LLSD& LLSD::with(Integer i, const LLSD& v)
 LLSD& LLSD::append(const LLSD& v)		{ return makeArray(impl).append(v); }
 void LLSD::erase(Integer i)				{ makeArray(impl).erase(i); }
 
-LLSD& LLSD::operator[](Integer i)
+LLSD& LLSD::operator[](size_t i)
 { 
     LL_PROFILE_ZONE_SCOPED_CATEGORY_LLSD;
     return makeArray(impl).ref(i); 
 }
-const LLSD& LLSD::operator[](Integer i) const
+const LLSD& LLSD::operator[](size_t i) const
 { 
     LL_PROFILE_ZONE_SCOPED_CATEGORY_LLSD;
     return safe(impl).ref(i);
@@ -956,7 +962,7 @@ static const char *llsd_dump(const LLSD &llsd, bool useXMLFormat)
 			out << LLSDNotationStreamer(llsd);
 		out_string = out.str();
 	}
-	int len = out_string.length();
+	auto len = out_string.length();
 	sStorage = new char[len + 1];
 	memcpy(sStorage, out_string.c_str(), len);
 	sStorage[len] = '\0';
diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h
index 24cb9bbce170d0f358f9e7ed3b2d5ca8eec1b38f..92a1fc58a511766d5c2ca02cb071913965981b50 100644
--- a/indra/llcommon/llsd.h
+++ b/indra/llcommon/llsd.h
@@ -192,7 +192,17 @@ class LL_COMMON_API LLSD
 
 	/** @name Convenience Constructors */
 	//@{
-		LLSD(F32); // F32 -> Real
+		// support construction from size_t et al.
+		template <typename VALUE,
+				  typename std::enable_if<std::is_integral<VALUE>::value &&
+										  ! std::is_same<VALUE, Boolean>::value,
+										  bool>::type = true>
+		LLSD(VALUE v): LLSD(Integer(narrow(v))) {}
+		// support construction from F32 et al.
+		template <typename VALUE,
+				  typename std::enable_if<std::is_floating_point<VALUE>::value,
+										  bool>::type = true>
+		LLSD(VALUE v): LLSD(Real(narrow(v))) {}
 	//@}
 	
 	/** @name Scalar Assignment */
@@ -275,7 +285,7 @@ class LL_COMMON_API LLSD
 	//@{
 		LLSD(const char*);
 		void assign(const char*);
-		LLSD& operator=(const char* v)	{ assign(v); return *this; }
+		LLSD& operator=(const char* v) { assign(v); return *this; }
 	//@}
 	
 	/** @name Map Values */
@@ -313,14 +323,24 @@ class LL_COMMON_API LLSD
 		LLSD& append(const LLSD&);
 		void erase(Integer);
 		LLSD& with(Integer, const LLSD&);
-		
-		const LLSD& operator[](Integer) const;
-		LLSD& operator[](Integer);
+
+		// accept size_t so we can index relative to size()
+		const LLSD& operator[](size_t) const;
+		LLSD& operator[](size_t);
+		// template overloads to support int literals, U32 et al.
+		template <typename IDX,
+				  typename std::enable_if<std::is_convertible<IDX, size_t>::value,
+										  bool>::type = true>
+		const LLSD& operator[](IDX i) const { return (*this)[size_t(i)]; }
+		template <typename IDX,
+				  typename std::enable_if<std::is_convertible<IDX, size_t>::value,
+										  bool>::type = true>
+		LLSD& operator[](IDX i) { return (*this)[size_t(i)]; }
 	//@}
 
 	/** @name Iterators */
 	//@{
-		int size() const;
+		size_t size() const;
 
 		typedef std::map<String, LLSD>::iterator		map_iterator;
 		typedef std::map<String, LLSD>::const_iterator	map_const_iterator;
diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp
index 8b4a0ee6d87404f638b397019e18a03b9a47567b..af57f4ac5ec212c97ad3477cb9ed15572f0e6a48 100644
--- a/indra/llcommon/llsdserialize.cpp
+++ b/indra/llcommon/llsdserialize.cpp
@@ -50,7 +50,7 @@
 #include "lluri.h"
 
 // File constants
-static const int MAX_HDR_LEN = 20;
+static const size_t MAX_HDR_LEN = 20;
 static const S32 UNZIP_LLSD_MAX_DEPTH = 96;
 static const char LEGACY_NON_HEADER[] = "<llsd>";
 const std::string LLSD_BINARY_HEADER("LLSD/Binary");
@@ -99,7 +99,7 @@ void LLSDSerialize::serialize(const LLSD& sd, std::ostream& str, ELLSD_Serialize
 }
 
 // static
-bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, S32 max_bytes)
+bool LLSDSerialize::deserialize(LLSD& sd, std::istream& str, llssize max_bytes)
 {
 	LLPointer<LLSDParser> p = NULL;
 	char hdr_buf[MAX_HDR_LEN + 1] = ""; /* Flawfinder: ignore */
@@ -252,7 +252,7 @@ F64 ll_ntohd(F64 netdouble)
  * @return Returns number of bytes read off of the stream. Returns
  * PARSE_FAILURE (-1) on failure.
  */
-int deserialize_string(std::istream& istr, std::string& value, S32 max_bytes);
+llssize deserialize_string(std::istream& istr, std::string& value, llssize max_bytes);
 
 /**
  * @brief Parse a delimited string. 
@@ -263,7 +263,7 @@ int deserialize_string(std::istream& istr, std::string& value, S32 max_bytes);
  * @return Returns number of bytes read off of the stream. Returns
  * PARSE_FAILURE (-1) on failure.
  */
-int deserialize_string_delim(std::istream& istr, std::string& value, char d);
+llssize deserialize_string_delim(std::istream& istr, std::string& value, char d);
 
 /**
  * @brief Read a raw string off the stream.
@@ -277,10 +277,10 @@ int deserialize_string_delim(std::istream& istr, std::string& value, char d);
  * @return Returns number of bytes read off of the stream. Returns
  * PARSE_FAILURE (-1) on failure.
  */
-int deserialize_string_raw(
+llssize deserialize_string_raw(
 	std::istream& istr,
 	std::string& value,
-	S32 max_bytes);
+	llssize max_bytes);
 
 /**
  * @brief helper method for dealing with the different notation boolean format.
@@ -292,7 +292,7 @@ int deserialize_string_raw(
  * @return Returns number of bytes read off of the stream. Returns
  * PARSE_FAILURE (-1) on failure.
  */
-int deserialize_boolean(
+llssize deserialize_boolean(
 	std::istream& istr,
 	LLSD& data,
 	const std::string& compare,
@@ -329,7 +329,7 @@ LLSDParser::LLSDParser()
 LLSDParser::~LLSDParser()
 { }
 
-S32 LLSDParser::parse(std::istream& istr, LLSD& data, S32 max_bytes, S32 max_depth)
+S32 LLSDParser::parse(std::istream& istr, LLSD& data, llssize max_bytes, S32 max_depth)
 {
 	mCheckLimits = (LLSDSerialize::SIZE_UNLIMITED == max_bytes) ? false : true;
 	mMaxBytesLeft = max_bytes;
@@ -359,7 +359,7 @@ std::istream& LLSDParser::get(
 	char delim) const
 {
 	istr.get(s, n, delim);
-	if(mCheckLimits) mMaxBytesLeft -= (int)istr.gcount();
+	if(mCheckLimits) mMaxBytesLeft -= istr.gcount();
 	return istr;
 }
 
@@ -369,7 +369,7 @@ std::istream& LLSDParser::get(
 		char delim) const		
 {
 	istr.get(sb, delim);
-	if(mCheckLimits) mMaxBytesLeft -= (int)istr.gcount();
+	if(mCheckLimits) mMaxBytesLeft -= istr.gcount();
 	return istr;
 }
 
@@ -393,11 +393,11 @@ std::istream& LLSDParser::read(
 	std::streamsize n) const
 {
 	istr.read(s, n);
-	if(mCheckLimits) mMaxBytesLeft -= (int)istr.gcount();
+	if(mCheckLimits) mMaxBytesLeft -= istr.gcount();
 	return istr;
 }
 
-void LLSDParser::account(S32 bytes) const
+void LLSDParser::account(llssize bytes) const
 {
 	if(mCheckLimits) mMaxBytesLeft -= bytes;
 }
@@ -502,7 +502,7 @@ S32 LLSDNotationParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) c
 		c = istr.peek();
 		if(isalpha(c))
 		{
-			int cnt = deserialize_boolean(
+			auto cnt = deserialize_boolean(
 				istr,
 				data,
 				NOTATION_FALSE_SERIAL,
@@ -532,7 +532,7 @@ S32 LLSDNotationParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) c
 		c = istr.peek();
 		if(isalpha(c))
 		{
-			int cnt = deserialize_boolean(istr,data,NOTATION_TRUE_SERIAL,true);
+			auto cnt = deserialize_boolean(istr,data,NOTATION_TRUE_SERIAL,true);
 			if(PARSE_FAILURE == cnt) parse_count = cnt;
 			else account(cnt);
 		}
@@ -608,7 +608,7 @@ S32 LLSDNotationParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) c
 		c = get(istr); // pop the 'l'
 		c = get(istr); // pop the delimiter
 		std::string str;
-		int cnt = deserialize_string_delim(istr, str, c);
+		auto cnt = deserialize_string_delim(istr, str, c);
 		if(PARSE_FAILURE == cnt)
 		{
 			parse_count = PARSE_FAILURE;
@@ -631,7 +631,7 @@ S32 LLSDNotationParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) c
 		c = get(istr); // pop the 'd'
 		c = get(istr); // pop the delimiter
 		std::string str;
-		int cnt = deserialize_string_delim(istr, str, c);
+		auto cnt = deserialize_string_delim(istr, str, c);
 		if(PARSE_FAILURE == cnt)
 		{
 			parse_count = PARSE_FAILURE;
@@ -663,7 +663,7 @@ S32 LLSDNotationParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) c
 
 	default:
 		parse_count = PARSE_FAILURE;
-		LL_INFOS() << "Unrecognized character while parsing: int(" << (int)c
+		LL_INFOS() << "Unrecognized character while parsing: int(" << int(c)
 			<< ")" << LL_ENDL;
 		break;
 	}
@@ -694,7 +694,7 @@ S32 LLSDNotationParser::parseMap(std::istream& istr, LLSD& map, S32 max_depth) c
 				{
 					putback(istr, c);
 					found_name = true;
-					int count = deserialize_string(istr, name, mMaxBytesLeft);
+					auto count = deserialize_string(istr, name, mMaxBytesLeft);
 					if(PARSE_FAILURE == count) return PARSE_FAILURE;
 					account(count);
 				}
@@ -776,7 +776,7 @@ S32 LLSDNotationParser::parseArray(std::istream& istr, LLSD& array, S32 max_dept
 bool LLSDNotationParser::parseString(std::istream& istr, LLSD& data) const
 {
 	std::string value;
-	int count = deserialize_string(istr, value, mMaxBytesLeft);
+	auto count = deserialize_string(istr, value, mMaxBytesLeft);
 	if(PARSE_FAILURE == count) return false;
 	account(count);
 	data = value;
@@ -803,13 +803,13 @@ bool LLSDNotationParser::parseBinary(std::istream& istr, LLSD& data) const
 	{
 		// We probably have a valid raw binary stream. determine
 		// the size, and read it.
-		S32 len = strtol(buf + 2, NULL, 0);
+		auto len = strtol(buf + 2, NULL, 0);
 		if(mCheckLimits && (len > mMaxBytesLeft)) return false;
 		std::vector<U8> value;
 		if(len)
 		{
 			value.resize(len);
-			account((int)fullread(istr, (char *)&value[0], len));
+			account(fullread(istr, (char *)&value[0], len));
 		}
 		c = get(istr); // strip off the trailing double-quote
 		data = value;
@@ -1006,7 +1006,7 @@ S32 LLSDBinaryParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) con
 	case '"':
 	{
 		std::string value;
-		int cnt = deserialize_string_delim(istr, value, c);
+		auto cnt = deserialize_string_delim(istr, value, c);
 		if(PARSE_FAILURE == cnt)
 		{
 			parse_count = PARSE_FAILURE;
@@ -1093,7 +1093,7 @@ S32 LLSDBinaryParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) con
 			if(size > 0)
 			{
 				value.resize(size);
-				account((int)fullread(istr, (char*)&value[0], size));
+				account(fullread(istr, (char*)&value[0], size));
 			}
 			data = value;
 		}
@@ -1107,7 +1107,7 @@ S32 LLSDBinaryParser::doParse(std::istream& istr, LLSD& data, S32 max_depth) con
 
 	default:
 		parse_count = PARSE_FAILURE;
-		LL_INFOS() << "Unrecognized character while parsing: int(" << (int)c
+		LL_INFOS() << "Unrecognized character while parsing: int(" << int(c)
 			<< ")" << LL_ENDL;
 		break;
 	}
@@ -1141,7 +1141,7 @@ S32 LLSDBinaryParser::parseMap(std::istream& istr, LLSD& map, S32 max_depth) con
 		case '\'':
 		case '"':
 		{
-			int cnt = deserialize_string_delim(istr, name, c);
+			auto cnt = deserialize_string_delim(istr, name, c);
 			if(PARSE_FAILURE == cnt) return PARSE_FAILURE;
 			account(cnt);
 			break;
@@ -1225,7 +1225,7 @@ bool LLSDBinaryParser::parseString(
 	if(size)
 	{
 		buf.resize(size);
-		account((int)fullread(istr, &buf[0], size));
+		account(fullread(istr, &buf[0], size));
 		value.assign(buf.begin(), buf.end());
 	}
 	return true;
@@ -1429,7 +1429,7 @@ S32 LLSDNotationFormatter::format_impl(const LLSD& data, std::ostream& ostr,
 				ostr << std::uppercase;
 				auto oldfill(ostr.fill('0'));
 				auto oldwidth(ostr.width());
-				for (int i = 0; i < buffer.size(); i++)
+				for (size_t i = 0; i < buffer.size(); i++)
 				{
 					// have to restate setw() before every conversion
 					ostr << std::setw(2) << (int) buffer[i];
@@ -1592,7 +1592,7 @@ void LLSDBinaryFormatter::formatString(
 /**
  * local functions
  */
-int deserialize_string(std::istream& istr, std::string& value, S32 max_bytes)
+llssize deserialize_string(std::istream& istr, std::string& value, llssize max_bytes)
 {
 	int c = istr.get();
 	if(istr.fail())
@@ -1602,7 +1602,7 @@ int deserialize_string(std::istream& istr, std::string& value, S32 max_bytes)
 		return LLSDParser::PARSE_FAILURE;
 	}
 
-	int rv = LLSDParser::PARSE_FAILURE;
+	llssize rv = LLSDParser::PARSE_FAILURE;
 	switch(c)
 	{
 	case '\'':
@@ -1622,7 +1622,7 @@ int deserialize_string(std::istream& istr, std::string& value, S32 max_bytes)
 	return rv + 1; // account for the character grabbed at the top.
 }
 
-int deserialize_string_delim(
+llssize deserialize_string_delim(
 	std::istream& istr,
 	std::string& value,
 	char delim)
@@ -1632,7 +1632,7 @@ int deserialize_string_delim(
 	bool found_hex = false;
 	bool found_digit = false;
 	U8 byte = 0;
-	int count = 0;
+	llssize count = 0;
 
 	while (true)
 	{
@@ -1647,7 +1647,7 @@ int deserialize_string_delim(
 		}
 
 		char next_char = (char)next_byte; // Now that we know it's not EOF
-		
+
 		if(found_escape)
 		{
 			// next character(s) is a special sequence.
@@ -1725,16 +1725,16 @@ int deserialize_string_delim(
 	return count;
 }
 
-int deserialize_string_raw(
+llssize deserialize_string_raw(
 	std::istream& istr,
 	std::string& value,
-	S32 max_bytes)
+	llssize max_bytes)
 {
-	int count = 0;
+	llssize count = 0;
 	const S32 BUF_LEN = 20;
 	char buf[BUF_LEN];		/* Flawfinder: ignore */
 	istr.get(buf, BUF_LEN - 1, ')');
-	count += (int)istr.gcount();
+	count += istr.gcount();
 	int c = istr.get();
 	c = istr.get();
 	count += 2;
@@ -1743,13 +1743,13 @@ int deserialize_string_raw(
 		// We probably have a valid raw string. determine
 		// the size, and read it.
 		// *FIX: This is memory inefficient.
-		S32 len = strtol(buf + 1, NULL, 0);
+		auto len = strtol(buf + 1, NULL, 0);
 		if((max_bytes>0)&&(len>max_bytes)) return LLSDParser::PARSE_FAILURE;
 		std::vector<char> buf;
 		if(len)
 		{
 			buf.resize(len);
-			count += (int)fullread(istr, (char *)&buf[0], len);
+			count += fullread(istr, (char *)&buf[0], len);
 			value.assign(buf.begin(), buf.end());
 		}
 		c = istr.get();
@@ -2038,7 +2038,7 @@ void serialize_string(const std::string& value, std::ostream& str)
 	}
 }
 
-int deserialize_boolean(
+llssize deserialize_boolean(
 	std::istream& istr,
 	LLSD& data,
 	const std::string& compare,
@@ -2055,7 +2055,7 @@ int deserialize_boolean(
 	//  * set data to LLSD::null
 	//  * return LLSDParser::PARSE_FAILURE (-1)
 	//
-	int bytes_read = 0;
+	llssize bytes_read = 0;
 	std::string::size_type ii = 0;
 	char c = istr.peek();
 	while((++ii < compare.size())
@@ -2110,7 +2110,7 @@ std::string zip_llsd(LLSD& data)
 
 	U8 out[CHUNK];
 
-	strm.avail_in = source.size();
+	strm.avail_in = narrow(source.size());
 	strm.next_in = (U8*) source.data();
 	U8* output = NULL;
 
@@ -2173,7 +2173,7 @@ std::string zip_llsd(LLSD& data)
 LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, std::istream& is, S32 size)
 {
 	U8* result = NULL;
-	U32 cur_size = 0;
+	llssize cur_size = 0;
 	z_stream strm;
 		
 	const U32 CHUNK = 65536;
@@ -2294,7 +2294,7 @@ LLUZipHelper::EZipRresult LLUZipHelper::unzip_llsd(LLSD& data, std::istream& is,
 //This unzip function will only work with a gzip header and trailer - while the contents
 //of the actual compressed data is the same for either format (gzip vs zlib ), the headers
 //and trailers are different for the formats.
-U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize, std::istream& is, S32 size )
+U8* unzip_llsdNavMesh( bool& valid, size_t& outsize, std::istream& is, S32 size )
 {
 	if (size == 0)
 	{
diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h
index d6079fd9fa81c9cfecd29c84a7be6921432a29d9..bd5ef668c0a8c80f284e21bd8d2015772154b4dc 100644
--- a/indra/llcommon/llsdserialize.h
+++ b/indra/llcommon/llsdserialize.h
@@ -77,7 +77,7 @@ class LL_COMMON_API LLSDParser : public LLRefCount
 	 * @return Returns the number of LLSD objects parsed into
 	 * data. Returns PARSE_FAILURE (-1) on parse failure.
 	 */
-	S32 parse(std::istream& istr, LLSD& data, S32 max_bytes, S32 max_depth = -1);
+	S32 parse(std::istream& istr, LLSD& data, llssize max_bytes, S32 max_depth = -1);
 
 	/** Like parse(), but uses a different call (istream.getline()) to read by lines
 	 *  This API is better suited for XML, where the parse cannot tell
@@ -194,7 +194,7 @@ class LL_COMMON_API LLSDParser : public LLRefCount
 	 * Conceptually const since it only modifies mutable members.
 	 * @param bytes The number of bytes read.
 	 */
-	void account(S32 bytes) const;
+	void account(llssize bytes) const;
 
 protected:
 	/**
@@ -205,7 +205,7 @@ class LL_COMMON_API LLSDParser : public LLRefCount
 	/**
 	 * @brief The maximum number of bytes left to be parsed.
 	 */
-	mutable S32 mMaxBytesLeft;
+	mutable llssize mMaxBytesLeft;
 	
 	/**
 	 * @brief Use line-based reading to get text
@@ -336,7 +336,7 @@ class LL_COMMON_API LLSDXMLParser : public LLSDParser
 	class Impl;
 	Impl& impl;
 
-	void parsePart(const char* buf, int len);
+	void parsePart(const char* buf, llssize len);
 	friend class LLSDSerialize;
 };
 
@@ -756,7 +756,7 @@ class LL_COMMON_API LLSDSerialize
 	 * @param max_bytes the maximum number of bytes to parse
 	 * @return Returns true if the stream appears to contain valid data
 	 */
-	static bool deserialize(LLSD& sd, std::istream& str, S32 max_bytes);
+	static bool deserialize(LLSD& sd, std::istream& str, llssize max_bytes);
 
 	/*
 	 * Notation Methods
@@ -778,12 +778,12 @@ class LL_COMMON_API LLSDSerialize
 						 LLSDFormatter::EFormatterOptions(LLSDFormatter::OPTIONS_PRETTY | 
 														  LLSDFormatter::OPTIONS_PRETTY_BINARY));
 	}
-	static S32 fromNotation(LLSD& sd, std::istream& str, S32 max_bytes)
+	static S32 fromNotation(LLSD& sd, std::istream& str, llssize max_bytes)
 	{
 		LLPointer<LLSDNotationParser> p = new LLSDNotationParser;
 		return p->parse(str, sd, max_bytes);
 	}
-	static LLSD fromNotation(std::istream& str, S32 max_bytes)
+	static LLSD fromNotation(std::istream& str, llssize max_bytes)
 	{
 		LLPointer<LLSDNotationParser> p = new LLSDNotationParser;
 		LLSD sd;
@@ -834,12 +834,12 @@ class LL_COMMON_API LLSDSerialize
 		LLPointer<LLSDBinaryFormatter> f = new LLSDBinaryFormatter;
 		return f->format(sd, str, LLSDFormatter::OPTIONS_NONE);
 	}
-	static S32 fromBinary(LLSD& sd, std::istream& str, S32 max_bytes, S32 max_depth = -1)
+	static S32 fromBinary(LLSD& sd, std::istream& str, llssize max_bytes, S32 max_depth = -1)
 	{
 		LLPointer<LLSDBinaryParser> p = new LLSDBinaryParser;
 		return p->parse(str, sd, max_bytes, max_depth);
 	}
-	static LLSD fromBinary(std::istream& str, S32 max_bytes, S32 max_depth = -1)
+	static LLSD fromBinary(std::istream& str, llssize max_bytes, S32 max_depth = -1)
 	{
 		LLPointer<LLSDBinaryParser> p = new LLSDBinaryParser;
 		LLSD sd;
@@ -867,5 +867,5 @@ class LL_COMMON_API LLUZipHelper : public LLRefCount
 LL_COMMON_API std::string zip_llsd(LLSD& data);
 
 
-LL_COMMON_API U8* unzip_llsdNavMesh( bool& valid, unsigned int& outsize,std::istream& is, S32 size);
+LL_COMMON_API U8* unzip_llsdNavMesh( bool& valid, size_t& outsize,std::istream& is, S32 size);
 #endif // LL_LLSDSERIALIZE_H
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
index 0da824d6945b1f3222b4a74ce810e86973ba98da..ac128c9f86dc34c3a6c625d0ff43335e53864185 100644
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -196,12 +196,12 @@ S32 LLSDXMLFormatter::format_impl(const LLSD& data, std::ostream& ostr,
 			// *FIX: memory inefficient.
 			// *TODO: convert to use LLBase64
 			ostr << pre << "<binary encoding=\"base64\">";
-			int b64_buffer_length = apr_base64_encode_len(buffer.size());
+			int b64_buffer_length = apr_base64_encode_len(narrow(buffer.size()));
 			char* b64_buffer = new char[b64_buffer_length];
 			b64_buffer_length = apr_base64_encode_binary(
 				b64_buffer,
 				&buffer[0],
-				buffer.size());
+				narrow(buffer.size()));
 			ostr.write(b64_buffer, b64_buffer_length - 1);
 			delete[] b64_buffer;
 			ostr << "</binary>" << post;
@@ -260,7 +260,7 @@ class LLSDXMLParser::Impl
 	S32 parse(std::istream& input, LLSD& data);
 	S32 parseLines(std::istream& input, LLSD& data);
 
-	void parsePart(const char *buf, int len);
+	void parsePart(const char *buf, llssize len);
 	
 	void reset();
 
@@ -542,7 +542,7 @@ LLSDXMLParser::Impl::findAttribute(const XML_Char* name, const XML_Char** pairs)
 	return NULL;
 }
 
-void LLSDXMLParser::Impl::parsePart(const char* buf, int len)
+void LLSDXMLParser::Impl::parsePart(const char* buf, llssize len)
 {
 	if ( buf != NULL 
 		&& len > 0 )
@@ -915,7 +915,7 @@ LLSDXMLParser::~LLSDXMLParser()
 	delete &impl;
 }
 
-void LLSDXMLParser::parsePart(const char *buf, int len)
+void LLSDXMLParser::parsePart(const char *buf, llssize len)
 {
 	impl.parsePart(buf, len);
 }
diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h
index 51ef514cf78785157d20fa83d8c031c274cddad4..cbe5ab6406b0eac442328707474231028c091af1 100644
--- a/indra/llcommon/llsingleton.h
+++ b/indra/llcommon/llsingleton.h
@@ -802,7 +802,7 @@ class LLLockedSingleton : public LLParamSingleton<DT>
 private:                                                                \
     /* implement LLSingleton pure virtual method whose sole purpose */  \
     /* is to remind people to use this macro */                         \
-    virtual void you_must_use_LLSINGLETON_macro() {}                    \
+    virtual void you_must_use_LLSINGLETON_macro() override {}                    \
     friend class LLSingleton<DERIVED_CLASS>;                            \
     DERIVED_CLASS(__VA_ARGS__)
 
diff --git a/indra/llcommon/llstreamtools.cpp b/indra/llcommon/llstreamtools.cpp
index d7a6f47932cc4147015e06ce05617793ef5aba76..1ff15fcf89599b8877efc95ec1d2b32bed7e024d 100644
--- a/indra/llcommon/llstreamtools.cpp
+++ b/indra/llcommon/llstreamtools.cpp
@@ -118,7 +118,7 @@ bool skip_to_next_word(std::istream& input_stream)
 
 bool skip_to_end_of_next_keyword(const char* keyword, std::istream& input_stream)
 {
-	int key_length = strlen(keyword);	 /*Flawfinder: ignore*/
+	auto key_length = strlen(keyword);	 /*Flawfinder: ignore*/
 	if (0 == key_length)
 	{
 		return false;
@@ -315,7 +315,7 @@ bool unget_line(const std::string& line, std::istream& input_stream)
 // returns true if removed last char
 bool remove_last_char(char c, std::string& line)
 {
-	int line_size = line.size();
+	auto line_size = line.size();
 	if (line_size > 1
 		&& c == line[line_size - 1])
 	{
@@ -330,9 +330,8 @@ bool remove_last_char(char c, std::string& line)
 // "\\n" ---> '\n' (backslash n becomes carriage return)
 void unescape_string(std::string& line)
 {
-	int line_size = line.size();
-	int index = 0;
-	while (index < line_size - 1)
+	auto line_size = line.size();
+	for (size_t index = 0; line_size >= 1 && index < line_size - 1; ++index)
 	{
 		if ('\\' == line[index])
 		{
@@ -347,7 +346,6 @@ void unescape_string(std::string& line)
 				line_size--;
 			}
 		}
-		index++;
 	}
 }
 
@@ -356,9 +354,8 @@ void unescape_string(std::string& line)
 // '\n' ---> "\\n"  (carriage return becomes backslash n)
 void escape_string(std::string& line)
 {
-	int line_size = line.size();
-	int index = 0;
-	while (index < line_size)
+	auto line_size = line.size();
+	for (size_t index = 0; index < line_size; ++index)
 	{
 		if ('\\' == line[index])
 		{
@@ -372,31 +369,27 @@ void escape_string(std::string& line)
 			line_size++;
 			index++;
 		}
-		index++;
 	}
 }
 
 // removes '\n' characters
 void replace_newlines_with_whitespace(std::string& line)
 {
-	int line_size = line.size();
-	int index = 0;
-	while (index < line_size)
+	auto line_size = line.size();
+	for (size_t index = 0; index < line_size; ++index)
 	{
 		if ('\n' == line[index])
 		{
 			line.replace(index, 1, " ");
 		}
-		index++;
 	}
 }
 
 // erases any double-quote characters in 'line'
 void remove_double_quotes(std::string& line)
 {
-	int index = 0;
-	int line_size = line.size();
-	while (index < line_size)
+	auto line_size = line.size();
+	for (size_t index = 0; index < line_size; )
 	{
 		if ('"' == line[index])
 		{
@@ -424,22 +417,21 @@ void get_keyword_and_value(std::string& keyword,
 						   const std::string& line)
 {
 	// skip initial whitespace
-	int line_size = line.size();
-	int line_index = 0;
+	auto line_size = line.size();
+	size_t line_index = 0;
 	char c;
-	while (line_index < line_size)
+	for ( ; line_index < line_size; ++line_index)
 	{
 		c = line[line_index];
 		if (!LLStringOps::isSpace(c))
 		{
 			break;
 		}
-		line_index++;
 	}
 
 	// get the keyword
 	keyword.clear();
-	while (line_index < line_size)
+	for ( ; line_index < line_size; ++line_index)
 	{
 		c = line[line_index];
 		if (LLStringOps::isSpace(c) || '\r' == c || '\n' == c)
@@ -447,7 +439,6 @@ void get_keyword_and_value(std::string& keyword,
 			break;
 		}
 		keyword += c;
-		line_index++;
 	}
 
 	// get the value
@@ -465,7 +456,7 @@ void get_keyword_and_value(std::string& keyword,
 			line_index++;
 		}
 
-		while (line_index < line_size)
+		for ( ; line_index < line_size; ++line_index)
 		{
 			c = line[line_index];
 			if ('\r' == c || '\n' == c)
@@ -473,7 +464,6 @@ void get_keyword_and_value(std::string& keyword,
 				break;
 			}
 			value += c;
-			line_index++;
 		}
 	}
 }
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 5da3609b43a841ad4cbdc060381c21b9fc4cb1ab..cda1791e45c9d29e0f0b343f796d44a06bf149ac 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -142,7 +142,7 @@ std::string rawstr_to_utf8(const std::string& raw)
 	return wstring_to_utf8str(wstr);
 }
 
-S32 wchar_to_utf8chars(llwchar in_char, char* outchars)
+std::ptrdiff_t wchar_to_utf8chars(llwchar in_char, char* outchars)
 {
 	U32 cur_char = (U32)in_char;
 	char* base = outchars;
@@ -193,7 +193,7 @@ S32 wchar_to_utf8chars(llwchar in_char, char* outchars)
 	return outchars - base;
 }	
 
-S32 utf16chars_to_wchar(const U16* inchars, llwchar* outchar)
+auto utf16chars_to_wchar(const U16* inchars, llwchar* outchar)
 {
 	const U16* base = inchars;
 	U16 cur_char = *inchars++;
@@ -311,7 +311,7 @@ S32 wstring_utf16_length(const LLWString &wstr, const S32 woffset, const S32 wle
 // and whose equivalent utf-16 string does not exceeds the given utf16_length.
 S32 wstring_wstring_length_from_utf16_length(const LLWString & wstr, const S32 woffset, const S32 utf16_length, BOOL *unaligned)
 {
-	const S32 end = wstr.length();
+	const auto end = wstr.length();
 	BOOL u = FALSE;
 	S32 n = woffset + utf16_length;
 	S32 i = woffset;
@@ -427,7 +427,7 @@ LLWString utf8str_to_wstring(const char* utf8str, size_t len)
 			}
 
 			// Check that this character doesn't go past the end of the string
-			S32 end = (len < (i + cont_bytes)) ? len : (i + cont_bytes);
+			auto end = (len < (i + cont_bytes)) ? len : (i + cont_bytes);
 			do
 			{
 				++i;
@@ -472,7 +472,7 @@ std::string wstring_to_utf8str(const llwchar* utf32str, size_t len)
 	while (i < len)
 	{
 		char tchars[8];		/* Flawfinder: ignore */
-		S32 n = wchar_to_utf8chars(utf32str[i], tchars);
+		auto n = wchar_to_utf8chars(utf32str[i], tchars);
 		tchars[n] = 0;
 		out += tchars;
 		i++;
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index 093d7cb9ab06dca80ecfac3875a9c273fce6045b..9afbea9afec3daf62f8c6fd1b592fee2d10dcc06 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -666,7 +666,7 @@ ll_convert_forms(ll_convert_alias,     LLWString,     std::string,   utf8str_to_
 // Same function, better name. JC
 inline LLWString utf8string_to_wstring(const std::string& utf8_string) { return utf8str_to_wstring(utf8_string); }
 
-LL_COMMON_API S32 wchar_to_utf8chars(llwchar inchar, char* outchars);
+LL_COMMON_API std::ptrdiff_t wchar_to_utf8chars(llwchar inchar, char* outchars);
 
 ll_convert_forms(ll_convert_alias,     std::string, LLWString,     wstring_to_utf8str);
 ll_convert_forms(ll_convert_u16_alias, std::string, llutf16string, utf16str_to_utf8str);
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index a8b5c7b3a8a8dfd563946f1354e8331e11bae76d..91cb65b815a8cab24a123a91f9e2c827207ebef4 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -273,7 +273,7 @@ LLOSInfo::LLOSInfo() :
 	{
 		const char * DARWIN_PRODUCT_NAME = "Mac OS X";
 		
-		S32 major_version, minor_version, bugfix_version = 0;
+		int64_t major_version, minor_version, bugfix_version = 0;
 
 		if (LLGetDarwinOSInfo(major_version, minor_version, bugfix_version))
 		{
@@ -454,14 +454,14 @@ LLOSInfo::LLOSInfo() :
 
 #ifndef LL_WINDOWS
 // static
-S32 LLOSInfo::getMaxOpenFiles()
+long LLOSInfo::getMaxOpenFiles()
 {
-	const S32 OPEN_MAX_GUESS = 256;
+	const long OPEN_MAX_GUESS = 256;
 
 #ifdef	OPEN_MAX
-	static S32 open_max = OPEN_MAX;
+	static long open_max = OPEN_MAX;
 #else
-	static S32 open_max = 0;
+	static long open_max = 0;
 #endif
 
 	if (0 == open_max)
@@ -909,7 +909,7 @@ void LLMemoryInfo::stream(std::ostream& s) const
 	// Now stream stats
 	BOOST_FOREACH(const MapEntry& pair, inMap(mStatsMap))
 	{
-		s << pfx << std::setw(key_width+1) << (pair.first + ':') << ' ';
+		s << pfx << std::setw(narrow(key_width+1)) << (pair.first + ':') << ' ';
 		LLSD value(pair.second);
 		if (value.isInteger())
 			s << std::setw(12) << value.asInteger();
@@ -1280,7 +1280,7 @@ class FrameWatcher
                     << " seconds ";
         }
 
-	S32 precision = LL_CONT.precision();
+	auto precision = LL_CONT.precision();
 
         LL_CONT << std::fixed << std::setprecision(1) << framerate << '\n'
                 << LLMemoryInfo();
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
index 5ffbf5a732b07a2659350f92310349fd4f319a44..70a03810c5d948bd6eed1c3291549c5b18e552c1 100644
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -59,7 +59,7 @@ class LL_COMMON_API LLOSInfo : public LLSingleton<LLOSInfo>
 	S32 mBuild;
 
 #ifndef LL_WINDOWS
-	static S32 getMaxOpenFiles();
+	static long getMaxOpenFiles();
 #endif
 	static bool is64Bit();
 
diff --git a/indra/llcommon/llsys_objc.h b/indra/llcommon/llsys_objc.h
index 35599a574b7212c9eb00e3be9522283a0a760973..b48ff97bdbeae96e9856a31f077b12123c8b1867 100644
--- a/indra/llcommon/llsys_objc.h
+++ b/indra/llcommon/llsys_objc.h
@@ -27,7 +27,11 @@
 #ifndef LL_LLSYS_OBJC_H
 #define LL_LLSYS_OBJC_H
 
-bool LLGetDarwinOSInfo(int &major, int &minor, int &patch);
+#include <cstdint>
+
+// C++ land doesn't define NSInteger, and we don't want to introduce that for
+// this one case, so use int64_t instead (which is equivalent).
+bool LLGetDarwinOSInfo(int64_t &major, int64_t &minor, int64_t &patch);
 
 
 #endif // LL_LLSYS_OBJC_H
diff --git a/indra/llcommon/llsys_objc.mm b/indra/llcommon/llsys_objc.mm
index cdb1e320d5c7924895c1630be6bedbf1c90352bb..3fd85fb1c9c61e0665c67cda9f9ca610aeab5b44 100644
--- a/indra/llcommon/llsys_objc.mm
+++ b/indra/llcommon/llsys_objc.mm
@@ -27,12 +27,12 @@
 #import "llsys_objc.h"
 #import <AppKit/AppKit.h>
 
-static int intAtStringIndex(NSArray *array, int index)
+static auto intAtStringIndex(NSArray *array, int index)
 {
     return [(NSString *)[array objectAtIndex:index] integerValue];
 }
 
-bool LLGetDarwinOSInfo(int &major, int &minor, int &patch)
+bool LLGetDarwinOSInfo(int64_t &major, int64_t &minor, int64_t &patch)
 {
     if (NSAppKitVersionNumber > NSAppKitVersionNumber10_8)
     {
diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h
index 68d79cdd12d7d565d824bdd6f981e8dbca8d0b7f..f396a71e6f713c352c14d965ebd6ac955e1e159e 100644
--- a/indra/llcommon/llthreadsafequeue.h
+++ b/indra/llcommon/llthreadsafequeue.h
@@ -82,7 +82,7 @@ class LLThreadSafeQueue
 
 	// Limiting the number of pending items prevents unbounded growth of the
 	// underlying queue.
-	LLThreadSafeQueue(U32 capacity = 1024);
+	LLThreadSafeQueue(size_t capacity = 1024);
 	virtual ~LLThreadSafeQueue() {}
 
 	// Add an element to the queue (will block if the queue has reached
@@ -179,7 +179,7 @@ class LLThreadSafeQueue
 protected:
 	typedef QueueT queue_type;
 	QueueT mStorage;
-	U32 mCapacity;
+	size_t mCapacity;
 	bool mClosed;
 
 	boost::fibers::timed_mutex mLock;
@@ -262,7 +262,7 @@ namespace LL
 *   LLThreadSafeQueue implementation
 *****************************************************************************/
 template<typename ElementT, typename QueueT>
-LLThreadSafeQueue<ElementT, QueueT>::LLThreadSafeQueue(U32 capacity) :
+LLThreadSafeQueue<ElementT, QueueT>::LLThreadSafeQueue(size_t capacity) :
     mCapacity(capacity),
     mClosed(false)
 {
diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp
index aaa6df325cb741060c7b66c0ee2c0c5a0462760b..58bedacf43187aae9a57adcedc662cee29944e26 100644
--- a/indra/llcommon/lltimer.cpp
+++ b/indra/llcommon/lltimer.cpp
@@ -121,9 +121,14 @@ U32 micro_sleep(U64 us, U32 max_yields)
     U64 start = get_clock_count();
     // This is kernel dependent.  Currently, our kernel generates software clock
     // interrupts at 250 Hz (every 4,000 microseconds).
-    const U64 KERNEL_SLEEP_INTERVAL_US = 4000;
-
-    S32 num_sleep_intervals = (us - (KERNEL_SLEEP_INTERVAL_US >> 1)) / KERNEL_SLEEP_INTERVAL_US;
+    const S64 KERNEL_SLEEP_INTERVAL_US = 4000;
+
+    // Use signed arithmetic to discover whether a sleep is even necessary. If
+    // either 'us' or KERNEL_SLEEP_INTERVAL_US is unsigned, the compiler
+    // promotes the difference to unsigned. If 'us' is less than half
+    // KERNEL_SLEEP_INTERVAL_US, the unsigned difference will be hugely
+    // positive, resulting in a crazy long wait.
+    auto num_sleep_intervals = (S64(us) - (KERNEL_SLEEP_INTERVAL_US >> 1)) / KERNEL_SLEEP_INTERVAL_US;
     if (num_sleep_intervals > 0)
     {
         U64 sleep_time = (num_sleep_intervals * KERNEL_SLEEP_INTERVAL_US) - (KERNEL_SLEEP_INTERVAL_US >> 1);
diff --git a/indra/llcommon/lltrace.cpp b/indra/llcommon/lltrace.cpp
index acdda5fe1e2af3ad7af9da39e54dc8d1febbaf50..ff671a837089be312599ff7c9f010a8a61bd7e83 100644
--- a/indra/llcommon/lltrace.cpp
+++ b/indra/llcommon/lltrace.cpp
@@ -65,7 +65,7 @@ void TimeBlockTreeNode::setParent( BlockTimerStatHandle* parent )
 	llassert_always(parent != mBlock);
 	llassert_always(parent != NULL);
 
-	TimeBlockTreeNode* parent_tree_node = get_thread_recorder()->getTimeBlockTreeNode(parent->getIndex());
+	TimeBlockTreeNode* parent_tree_node = get_thread_recorder()->getTimeBlockTreeNode(narrow(parent->getIndex()));
 	if (!parent_tree_node) return;
 
 	if (mParent)
diff --git a/indra/llcommon/lltrace.h b/indra/llcommon/lltrace.h
index fcd8753f753004dfca5c7fed93a90b78544ab943..580cf0a5fdb7e76aa613f9ed3d754a6bab4ab732 100644
--- a/indra/llcommon/lltrace.h
+++ b/indra/llcommon/lltrace.h
@@ -340,7 +340,7 @@ inline void claim_alloc(MemStatHandle& measurement, const T& value)
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 #if LL_TRACE_ENABLED
-	S32 size = MeasureMem<T>::measureFootprint(value);
+	auto size = MeasureMem<T>::measureFootprint(value);
 	if(size == 0) return;
 	MemAccumulator& accumulator = measurement.getCurrentAccumulator();
 	accumulator.mSize.sample(accumulator.mSize.hasValue() ? accumulator.mSize.getLastValue() + (F64)size : (F64)size);
@@ -353,7 +353,7 @@ inline void disclaim_alloc(MemStatHandle& measurement, const T& value)
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 #if LL_TRACE_ENABLED
-	S32 size = MeasureMem<T>::measureFootprint(value);
+	auto size = MeasureMem<T>::measureFootprint(value);
 	if(size == 0) return;
 	MemAccumulator& accumulator = measurement.getCurrentAccumulator();
 	accumulator.mSize.sample(accumulator.mSize.hasValue() ? accumulator.mSize.getLastValue() - (F64)size : -(F64)size);
diff --git a/indra/llcommon/lltraceaccumulators.cpp b/indra/llcommon/lltraceaccumulators.cpp
index fe447d531923d7c4a8cb15614993b5941743ab8b..6bd886ae98aff6bf4e64b61412fbf7d88f9be05e 100644
--- a/indra/llcommon/lltraceaccumulators.cpp
+++ b/indra/llcommon/lltraceaccumulators.cpp
@@ -96,9 +96,9 @@ void AccumulatorBufferGroup::makeCurrent()
 	ThreadRecorder* thread_recorder = get_thread_recorder();
 	AccumulatorBuffer<TimeBlockAccumulator>& timer_accumulator_buffer = mStackTimers;
 	// update stacktimer parent pointers
-	for (S32 i = 0, end_i = mStackTimers.size(); i < end_i; i++)
+	for (size_t i = 0, end_i = mStackTimers.size(); i < end_i; i++)
 	{
-		TimeBlockTreeNode* tree_node = thread_recorder->getTimeBlockTreeNode(i);
+		TimeBlockTreeNode* tree_node = thread_recorder->getTimeBlockTreeNode(narrow(i));
 		if (tree_node)
 		{
 			timer_accumulator_buffer[i].mParent = tree_node->mParent;
diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp
index 8cbb0db135292216143bd0553c8cebd11d2b2bb2..dd148dd08adef80ef96c0a4fadc5f211ca321f70 100644
--- a/indra/llcommon/lltracerecording.cpp
+++ b/indra/llcommon/lltracerecording.cpp
@@ -606,7 +606,8 @@ void PeriodicRecording::nextPeriod()
 	mCurPeriod = (mCurPeriod + 1) % mRecordingPeriods.size();
 	old_recording.splitTo(getCurRecording());
 
-	mNumRecordedPeriods = llmin((S32)mRecordingPeriods.size() - 1, mNumRecordedPeriods + 1);
+	mNumRecordedPeriods = mRecordingPeriods.empty()? 0 :
+		llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + 1);
 }
 
 void PeriodicRecording::appendRecording(Recording& recording)
@@ -625,21 +626,21 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
 	getCurRecording().update();
 	other.getCurRecording().update();
 	
-	const S32 other_recording_slots = other.mRecordingPeriods.size();
-	const S32 other_num_recordings = other.getNumRecordedPeriods();
-	const S32 other_current_recording_index = other.mCurPeriod;
-	const S32 other_oldest_recording_index = (other_current_recording_index + other_recording_slots - other_num_recordings) % other_recording_slots;
+	const auto other_recording_slots = other.mRecordingPeriods.size();
+	const auto other_num_recordings = other.getNumRecordedPeriods();
+	const auto other_current_recording_index = other.mCurPeriod;
+	const auto other_oldest_recording_index = (other_current_recording_index + other_recording_slots - other_num_recordings) % other_recording_slots;
 
 	// append first recording into our current slot
 	getCurRecording().appendRecording(other.mRecordingPeriods[other_oldest_recording_index]);
 
 	// from now on, add new recordings for everything after the first
-	S32 other_index = (other_oldest_recording_index + 1) % other_recording_slots;
+	auto other_index = (other_oldest_recording_index + 1) % other_recording_slots;
 
 	if (mAutoResize)
 	{
 		// push back recordings for everything in the middle
-		S32 other_index = (other_oldest_recording_index + 1) % other_recording_slots;
+		auto other_index = (other_oldest_recording_index + 1) % other_recording_slots;
 		while (other_index != other_current_recording_index)
 		{
 			mRecordingPeriods.push_back(other.mRecordingPeriods[other_index]);
@@ -652,8 +653,8 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
 			mRecordingPeriods.push_back(other.mRecordingPeriods[other_current_recording_index]);
 		}
 
-		mCurPeriod = mRecordingPeriods.size() - 1;
-		mNumRecordedPeriods = mRecordingPeriods.size() - 1;
+		mCurPeriod = mRecordingPeriods.empty()? 0 : mRecordingPeriods.size() - 1;
+		mNumRecordedPeriods = mCurPeriod;
 	}
 	else
 	{
@@ -682,7 +683,7 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
 		llassert(num_to_copy >= 1);
 		// advance to last recording period copied, and make that our current period
 		mCurPeriod = (mCurPeriod + num_to_copy - 1) % mRecordingPeriods.size();
-		mNumRecordedPeriods = llmin((S32)mRecordingPeriods.size() - 1, mNumRecordedPeriods + num_to_copy - 1);
+		mNumRecordedPeriods = llmin(mRecordingPeriods.size() - 1, mNumRecordedPeriods + num_to_copy - 1);
 	}
 
 	// end with fresh period, otherwise next appendPeriodicRecording() will merge the first
@@ -695,10 +696,10 @@ F64Seconds PeriodicRecording::getDuration() const
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	F64Seconds duration;
-	S32 num_periods = mRecordingPeriods.size();
-	for (S32 i = 1; i <= num_periods; i++)
+	auto num_periods = mRecordingPeriods.size();
+	for (size_t i = 1; i <= num_periods; i++)
 	{
-		S32 index = (mCurPeriod + num_periods - i) % num_periods;
+		auto index = (mCurPeriod + num_periods - i) % num_periods;
 		duration += mRecordingPeriods[index].getDuration();
 	}
 	return duration;
@@ -734,16 +735,16 @@ const Recording& PeriodicRecording::getCurRecording() const
 	return mRecordingPeriods[mCurPeriod];
 }
 
-Recording& PeriodicRecording::getPrevRecording( S32 offset )
+Recording& PeriodicRecording::getPrevRecording( size_t offset )
 {
-	S32 num_periods = mRecordingPeriods.size();
+	auto num_periods = mRecordingPeriods.size();
 	offset = llclamp(offset, 0, num_periods - 1);
 	return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
 }
 
-const Recording& PeriodicRecording::getPrevRecording( S32 offset ) const
+const Recording& PeriodicRecording::getPrevRecording( size_t offset ) const
 {
-	S32 num_periods = mRecordingPeriods.size();
+	auto num_periods = mRecordingPeriods.size();
 	offset = llclamp(offset, 0, num_periods - 1);
 	return mRecordingPeriods[(mCurPeriod + num_periods - offset) % num_periods];
 }
@@ -790,7 +791,7 @@ void PeriodicRecording::handleSplitTo(PeriodicRecording& other)
 	getCurRecording().splitTo(other.getCurRecording());
 }
 
-F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -812,7 +813,7 @@ F64 PeriodicRecording::getPeriodMin( const StatType<EventAccumulator>& stat, S32
 			: NaN;
 }
 
-F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -835,7 +836,7 @@ F64 PeriodicRecording::getPeriodMax( const StatType<EventAccumulator>& stat, S32
 }
 
 // calculates means using aggregates per period
-F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -858,7 +859,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<EventAccumulator>& stat, S3
 			: NaN;
 }
 
-F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -883,7 +884,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<EventAccumulat
 			: NaN;
 }
 
-F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -905,7 +906,7 @@ F64 PeriodicRecording::getPeriodMin( const StatType<SampleAccumulator>& stat, S3
 			: NaN;
 }
 
-F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/)
+F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/)
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -928,7 +929,7 @@ F64 PeriodicRecording::getPeriodMax(const StatType<SampleAccumulator>& stat, S32
 }
 
 
-F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -951,7 +952,7 @@ F64 PeriodicRecording::getPeriodMean( const StatType<SampleAccumulator>& stat, S
 			: NaN;
 }
 
-F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -977,7 +978,7 @@ F64 PeriodicRecording::getPeriodMedian( const StatType<SampleAccumulator>& stat,
 	return F64((buf.size() % 2 == 0) ? (buf[buf.size() / 2 - 1] + buf[buf.size() / 2]) / 2 : buf[buf.size() / 2]);
 }
 
-F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -1003,7 +1004,7 @@ F64 PeriodicRecording::getPeriodStandardDeviation( const StatType<SampleAccumula
 }
 
 
-F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -1018,12 +1019,12 @@ F64Kilobytes PeriodicRecording::getPeriodMin( const StatType<MemAccumulator>& st
 	return min_val;
 }
 
-F64Kilobytes PeriodicRecording::getPeriodMin(const MemStatHandle& stat, S32 num_periods)
+F64Kilobytes PeriodicRecording::getPeriodMin(const MemStatHandle& stat, size_t num_periods)
 {
 	return getPeriodMin(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
 }
 
-F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/)
+F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/)
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -1038,12 +1039,12 @@ F64Kilobytes PeriodicRecording::getPeriodMax(const StatType<MemAccumulator>& sta
 	return max_val;
 }
 
-F64Kilobytes PeriodicRecording::getPeriodMax(const MemStatHandle& stat, S32 num_periods)
+F64Kilobytes PeriodicRecording::getPeriodMax(const MemStatHandle& stat, size_t num_periods)
 {
 	return getPeriodMax(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
 }
 
-F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -1059,12 +1060,12 @@ F64Kilobytes PeriodicRecording::getPeriodMean( const StatType<MemAccumulator>& s
 	return mean / F64(num_periods);
 }
 
-F64Kilobytes PeriodicRecording::getPeriodMean(const MemStatHandle& stat, S32 num_periods)
+F64Kilobytes PeriodicRecording::getPeriodMean(const MemStatHandle& stat, size_t num_periods)
 {
 	return getPeriodMean(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
 }
 
-F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, S32 num_periods /*= S32_MAX*/ )
+F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAccumulator>& stat, size_t num_periods /*= S32_MAX*/ )
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 	num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -1089,7 +1090,7 @@ F64Kilobytes PeriodicRecording::getPeriodStandardDeviation( const StatType<MemAc
 			: NaN);
 }
 
-F64Kilobytes PeriodicRecording::getPeriodStandardDeviation(const MemStatHandle& stat, S32 num_periods)
+F64Kilobytes PeriodicRecording::getPeriodStandardDeviation(const MemStatHandle& stat, size_t num_periods)
 {
 	return getPeriodStandardDeviation(static_cast<const StatType<MemAccumulator>&>(stat), num_periods);
 }
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index 556b7470cf56afb6e5bd94944b44bddb4bfc8e0a..8b56721f42f1ef7f219642bd319d993e100c4dcf 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -334,7 +334,7 @@ namespace LLTrace
 		~PeriodicRecording();
 
 		void nextPeriod();
-		S32 getNumRecordedPeriods() 
+		auto getNumRecordedPeriods() 
 		{ 
 			// current period counts if not active
 			return mNumRecordedPeriods + (isStarted() ? 0 : 1); 
@@ -348,24 +348,24 @@ namespace LLTrace
 		const Recording& getLastRecording() const;
 		Recording& getCurRecording();
 		const Recording& getCurRecording() const;
-		Recording& getPrevRecording(S32 offset);
-		const Recording& getPrevRecording(S32 offset) const;
+		Recording& getPrevRecording(size_t offset);
+		const Recording& getPrevRecording(size_t offset) const;
 		Recording snapshotCurRecording() const;
 
 		template <typename T>
-		S32 getSampleCount(const StatType<T>& stat, S32 num_periods = S32_MAX)
-        {
-            LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
+		auto getSampleCount(const StatType<T>& stat, size_t num_periods = S32_MAX)
+		{
+			LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
 
-            S32 num_samples = 0;
-			for (S32 i = 1; i <= num_periods; i++)
+			size_t num_samples = 0;
+			for (size_t i = 1; i <= num_periods; i++)
 			{
 				Recording& recording = getPrevRecording(i);
 				num_samples += recording.getSampleCount(stat);
 			}
 			return num_samples;
-        }
+		}
         
 		//
 		// PERIODIC MIN
@@ -373,7 +373,7 @@ namespace LLTrace
 
 		// catch all for stats that have a defined sum
 		template <typename T>
-		typename T::value_t getPeriodMin(const StatType<T>& stat, S32 num_periods = S32_MAX)
+		typename T::value_t getPeriodMin(const StatType<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -396,33 +396,33 @@ namespace LLTrace
 		}
 
 		template<typename T>
-		T getPeriodMin(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		T getPeriodMin(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return T(getPeriodMin(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
 		}
 
-		F64 getPeriodMin(const StatType<SampleAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodMin(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T>
-		T getPeriodMin(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		T getPeriodMin(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return T(getPeriodMin(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
 		}
 
-		F64 getPeriodMin(const StatType<EventAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodMin(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T>
-		T getPeriodMin(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		T getPeriodMin(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return T(getPeriodMin(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
 		}
 
-		F64Kilobytes getPeriodMin(const StatType<MemAccumulator>& stat, S32 num_periods = S32_MAX);
-		F64Kilobytes getPeriodMin(const MemStatHandle& stat, S32 num_periods = S32_MAX);
+		F64Kilobytes getPeriodMin(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
+		F64Kilobytes getPeriodMin(const MemStatHandle& stat, size_t num_periods = S32_MAX);
 
 		template <typename T>
-		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMinPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -437,7 +437,7 @@ namespace LLTrace
 		}
 
 		template<typename T>
-		typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodMinPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodMinPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
@@ -449,7 +449,7 @@ namespace LLTrace
 
 		// catch all for stats that have a defined sum
 		template <typename T>
-		typename T::value_t getPeriodMax(const StatType<T>& stat, S32 num_periods = S32_MAX)
+		typename T::value_t getPeriodMax(const StatType<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -472,33 +472,33 @@ namespace LLTrace
 		}
 
 		template<typename T>
-		T getPeriodMax(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		T getPeriodMax(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return T(getPeriodMax(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
 		}
 
-		F64 getPeriodMax(const StatType<SampleAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodMax(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T>
-		T getPeriodMax(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		T getPeriodMax(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return T(getPeriodMax(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
 		}
 
-		F64 getPeriodMax(const StatType<EventAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodMax(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T>
-		T getPeriodMax(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		T getPeriodMax(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return T(getPeriodMax(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
 		}
 
-		F64Kilobytes getPeriodMax(const StatType<MemAccumulator>& stat, S32 num_periods = S32_MAX);
-		F64Kilobytes getPeriodMax(const MemStatHandle& stat, S32 num_periods = S32_MAX);
+		F64Kilobytes getPeriodMax(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
+		F64Kilobytes getPeriodMax(const MemStatHandle& stat, size_t num_periods = S32_MAX);
 
 		template <typename T>
-		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMaxPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -513,7 +513,7 @@ namespace LLTrace
 		}
 
 		template<typename T>
-		typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodMaxPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodMaxPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
@@ -525,7 +525,7 @@ namespace LLTrace
 
 		// catch all for stats that have a defined sum
 		template <typename T>
-		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMean(const StatType<T >& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -546,32 +546,32 @@ namespace LLTrace
 		}
 
 		template<typename T>
-		typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodMean(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
 		}
-		F64 getPeriodMean(const StatType<SampleAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodMean(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T> 
-		typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodMean(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
 		}
 
-		F64 getPeriodMean(const StatType<EventAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodMean(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T>
-		typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodMean(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodMean(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
 		}
 
-		F64Kilobytes getPeriodMean(const StatType<MemAccumulator>& stat, S32 num_periods = S32_MAX);
-		F64Kilobytes getPeriodMean(const MemStatHandle& stat, S32 num_periods = S32_MAX);
+		F64Kilobytes getPeriodMean(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
+		F64Kilobytes getPeriodMean(const MemStatHandle& stat, size_t num_periods = S32_MAX);
 		
 		template <typename T>
-		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMeanPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -593,16 +593,16 @@ namespace LLTrace
 		}
 
 		template<typename T>
-		typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodMeanPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodMeanPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
 		}
 
-        F64 getPeriodMedian( const StatType<SampleAccumulator>& stat, S32 num_periods = S32_MAX);
+        F64 getPeriodMedian( const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
 
         template <typename T>
-        typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMedianPerSec(const StatType<T>& stat, S32 num_periods = S32_MAX)
+        typename RelatedTypes<typename T::value_t>::fractional_t getPeriodMedianPerSec(const StatType<T>& stat, size_t num_periods = S32_MAX)
         {
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
             num_periods = llmin(num_periods, getNumRecordedPeriods());
@@ -622,7 +622,7 @@ namespace LLTrace
         }
 
         template<typename T>
-        typename RelatedTypes<T>::fractional_t getPeriodMedianPerSec(const CountStatHandle<T>& stat, S32 num_periods = S32_MAX)
+        typename RelatedTypes<T>::fractional_t getPeriodMedianPerSec(const CountStatHandle<T>& stat, size_t num_periods = S32_MAX)
         {
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
             return typename RelatedTypes<T>::fractional_t(getPeriodMedianPerSec(static_cast<const StatType<CountAccumulator>&>(stat), num_periods));
@@ -632,25 +632,25 @@ namespace LLTrace
 		// PERIODIC STANDARD DEVIATION
 		//
 
-		F64 getPeriodStandardDeviation(const StatType<SampleAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodStandardDeviation(const StatType<SampleAccumulator>& stat, size_t num_periods = S32_MAX);
 
 		template<typename T> 
-		typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const SampleStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<SampleAccumulator>&>(stat), num_periods));
 		}
 
-		F64 getPeriodStandardDeviation(const StatType<EventAccumulator>& stat, S32 num_periods = S32_MAX);
+		F64 getPeriodStandardDeviation(const StatType<EventAccumulator>& stat, size_t num_periods = S32_MAX);
 		template<typename T>
-		typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, S32 num_periods = S32_MAX)
+		typename RelatedTypes<T>::fractional_t getPeriodStandardDeviation(const EventStatHandle<T>& stat, size_t num_periods = S32_MAX)
 		{
             LL_PROFILE_ZONE_SCOPED_CATEGORY_STATS;
 			return typename RelatedTypes<T>::fractional_t(getPeriodStandardDeviation(static_cast<const StatType<EventAccumulator>&>(stat), num_periods));
 		}
 
-		F64Kilobytes getPeriodStandardDeviation(const StatType<MemAccumulator>& stat, S32 num_periods = S32_MAX);
-		F64Kilobytes getPeriodStandardDeviation(const MemStatHandle& stat, S32 num_periods = S32_MAX);
+		F64Kilobytes getPeriodStandardDeviation(const StatType<MemAccumulator>& stat, size_t num_periods = S32_MAX);
+		F64Kilobytes getPeriodStandardDeviation(const MemStatHandle& stat, size_t num_periods = S32_MAX);
 
 	private:
 		// implementation for LLStopWatchControlsMixin
@@ -662,8 +662,8 @@ namespace LLTrace
 	private:
 		std::vector<Recording>	mRecordingPeriods;
 		const bool				mAutoResize;
-		S32						mCurPeriod;
-		S32						mNumRecordedPeriods;
+		size_t					mCurPeriod;
+		size_t					mNumRecordedPeriods;
 	};
 
 	PeriodicRecording& get_frame_recording();
diff --git a/indra/llcommon/lltracethreadrecorder.cpp b/indra/llcommon/lltracethreadrecorder.cpp
index 26db15eaa0be7ef682786170d172a884235cb87a..4028a5ce973593bdb432c5584e1c351dbb301b7e 100644
--- a/indra/llcommon/lltracethreadrecorder.cpp
+++ b/indra/llcommon/lltracethreadrecorder.cpp
@@ -125,7 +125,7 @@ ThreadRecorder::~ThreadRecorder()
 #endif
 }
 
-TimeBlockTreeNode* ThreadRecorder::getTimeBlockTreeNode( S32 index )
+TimeBlockTreeNode* ThreadRecorder::getTimeBlockTreeNode( size_t index )
 {
 #if LL_TRACE_ENABLED
 	if (0 <= index && index < mNumTimeBlockTreeNodes)
diff --git a/indra/llcommon/lltracethreadrecorder.h b/indra/llcommon/lltracethreadrecorder.h
index 8fd1e5ef58cc4df9bf1a41c7aa9f316d221995a3..8ee6729ac6de0f1a3f26aa05f97fc4110aa7e08c 100644
--- a/indra/llcommon/lltracethreadrecorder.h
+++ b/indra/llcommon/lltracethreadrecorder.h
@@ -57,7 +57,7 @@ namespace LLTrace
 		void pullFromChildren();
 		void pushToParent();
 
-		TimeBlockTreeNode* getTimeBlockTreeNode(S32 index);
+		TimeBlockTreeNode* getTimeBlockTreeNode(size_t index);
 
 	protected:
 		void init();
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
index 4b91b2cacaf4007ab467ff4a7c505a7e32ff8826..97838e296e82c1dc94a9818f4536321a582878ed 100644
--- a/indra/llcommon/llworkerthread.cpp
+++ b/indra/llcommon/llworkerthread.cpp
@@ -81,9 +81,9 @@ void LLWorkerThread::clearDeleteList()
 }
 
 // virtual
-S32 LLWorkerThread::update(F32 max_time_ms)
+size_t LLWorkerThread::update(F32 max_time_ms)
 {
-	S32 res = LLQueuedThread::update(max_time_ms);
+	auto res = LLQueuedThread::update(max_time_ms);
 	// Delete scheduled workers
 	std::vector<LLWorkerClass*> delete_list;
 	std::vector<LLWorkerClass*> abort_list;
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
index 0387e75c6530107a89957b7470aa0ea986df9dd1..e3004d7242c7c3552bd4886d502082719d02f06d 100644
--- a/indra/llcommon/llworkerthread.h
+++ b/indra/llcommon/llworkerthread.h
@@ -88,7 +88,7 @@ class LL_COMMON_API LLWorkerThread : public LLQueuedThread
 	LLWorkerThread(const std::string& name, bool threaded = true, bool should_pause = false);
 	~LLWorkerThread();
 
-	/*virtual*/ S32 update(F32 max_time_ms);
+	/*virtual*/ size_t update(F32 max_time_ms);
 	
 	handle_t addWorkRequest(LLWorkerClass* workerclass, S32 param, U32 priority = PRIORITY_NORMAL);
 	
diff --git a/indra/llcommon/stdtypes.h b/indra/llcommon/stdtypes.h
index b07805b62831271404212e025f1b9151c76eb86b..da8512169c689826cdd8ded90f97b2b34cea82f9 100644
--- a/indra/llcommon/stdtypes.h
+++ b/indra/llcommon/stdtypes.h
@@ -26,16 +26,23 @@
 #ifndef LL_STDTYPES_H
 #define LL_STDTYPES_H
 
+#include <cassert>
 #include <cfloat>
 #include <climits>
+#include <limits>
+#include <type_traits>
 
-typedef signed char			S8;
+typedef signed char				S8;
 typedef unsigned char			U8;
 typedef signed short			S16;
 typedef unsigned short			U16;
-typedef signed int			S32;
+typedef signed int				S32;
 typedef unsigned int			U32;
 
+// to express an index that might go negative
+// (ssize_t is provided by SOME compilers, don't collide)
+typedef typename std::make_signed<size_t>::type llssize;
+
 #if LL_WINDOWS
 // https://docs.microsoft.com/en-us/cpp/build/reference/zc-wchar-t-wchar-t-is-native-type
 // https://docs.microsoft.com/en-us/cpp/cpp/fundamental-types-cpp
@@ -45,7 +52,7 @@ typedef unsigned int			U32;
 // The version of clang available with VS 2019 also defines wchar_t as __wchar_t
 // which is also 16 bits.
 // In any case, llwchar should be a UTF-32 type.
-typedef U32				llwchar;
+typedef U32					llwchar;
 #else
 typedef wchar_t				llwchar;
 // What we'd actually want is a simple module-scope 'if constexpr' to test
@@ -76,7 +83,7 @@ typedef double				F64;
 typedef S32				BOOL;
 typedef U8				KEY;
 typedef U32				MASK;
-typedef U32             		TPACKETID;
+typedef U32				TPACKETID;
 
 // Use #define instead of consts to avoid conversion headaches
 #define S8_MAX		(SCHAR_MAX)
@@ -118,4 +125,95 @@ typedef U8 LLPCode;
 typedef int intptr_t;
 #endif
 
+/*****************************************************************************
+*   Narrowing
+*****************************************************************************/
+/**
+ * narrow() is used to cast a wider type to a narrower type with validation.
+ *
+ * In many cases we take the size() of a container and try to pass it to an
+ * S32 or a U32 parameter. We used to be able to assume that the size of
+ * anything we could fit into memory could be expressed as a 32-bit int. With
+ * 64-bit viewers, though, size_t as returned by size() and length() and so
+ * forth is 64 bits, and the compiler is unhappy about stuffing such values
+ * into 32-bit types.
+ *
+ * It works to force the compiler to truncate, e.g. static_cast<S32>(len) or
+ * S32(len) or (S32)len, but we can do better.
+ *
+ * For:
+ * @code
+ * std::vector<Object> container;
+ * void somefunc(S32 size);
+ * @endcode
+ * call:
+ * @code
+ * somefunc(narrow(container.size()));
+ * @endcode
+ *
+ * narrow() truncates but, in RelWithDebInfo builds, it validates (using
+ * assert()) that the passed value can validly be expressed by the destination
+ * type.
+ */
+// narrow_holder is a struct that accepts the passed value as its original
+// type and provides templated conversion functions to other types. Once we're
+// building with compilers that support Class Template Argument Deduction, we
+// can rename this class template 'narrow' and eliminate the narrow() factory
+// function below.
+template <typename FROM>
+class narrow_holder
+{
+private:
+    FROM mValue;
+
+public:
+    narrow_holder(FROM value): mValue(value) {}
+
+    /*---------------------- Narrowing unsigned to signed ----------------------*/
+    template <typename TO,
+              typename std::enable_if<std::is_unsigned<FROM>::value &&
+                                      std::is_signed<TO>::value,
+                                      bool>::type = true>
+    inline
+    operator TO() const
+    {
+        // The reason we skip the
+        // assert(value >= std::numeric_limits<TO>::lowest());
+        // like the overload below is that to perform the above comparison,
+        // the compiler promotes the signed lowest() to the unsigned FROM
+        // type, making it hugely positive -- so a reasonable 'value' will
+        // always fail the assert().
+        assert(mValue <= std::numeric_limits<TO>::max());
+        return static_cast<TO>(mValue);
+    }
+
+    /*----------------------- Narrowing all other cases ------------------------*/
+    template <typename TO,
+              typename std::enable_if<! (std::is_unsigned<FROM>::value &&
+                                         std::is_signed<TO>::value),
+                                      bool>::type = true>
+    inline
+    operator TO() const
+    {
+        // two different assert()s so we can tell which condition failed
+        assert(mValue <= std::numeric_limits<TO>::max());
+        // Funny, with floating point types min() is "positive epsilon" rather
+        // than "largest negative" -- that's lowest().
+        assert(mValue >= std::numeric_limits<TO>::lowest());
+        // Do we really expect to use this with floating point types?
+        // If so, does it matter if a very small value truncates to zero?
+        //assert(fabs(mValue) >= std::numeric_limits<TO>::min());
+        return static_cast<TO>(mValue);
+    }
+};
+
+/// narrow() factory function returns a narrow_holder<FROM>(), which can be
+/// implicitly converted to the target type.
+template <typename FROM>
+inline
+narrow_holder<FROM> narrow(FROM value)
+{
+    return { value };
+}
+
 #endif
diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp
index 9da1ecfd67a71fc87cf889f118c986e6b7a79ffe..966dc2c5aa2fa4882f750e2951c3688b2713d4c7 100644
--- a/indra/llcommon/tests/lleventdispatcher_test.cpp
+++ b/indra/llcommon/tests/lleventdispatcher_test.cpp
@@ -335,7 +335,7 @@ namespace tut
         // Full, partial defaults arrays for params for freena(), freenb()
         LLSD dft_array_full, dft_array_partial;
         // Start index of partial defaults arrays
-        const LLSD::Integer partial_offset;
+        const size_t partial_offset;
         // Full, partial defaults maps for params for freena(), freenb()
         LLSD dft_map_full, dft_map_partial;
         // Most of the above are indexed by "a" or "b". Useful to have an
diff --git a/indra/llcommon/tests/llsingleton_test.cpp b/indra/llcommon/tests/llsingleton_test.cpp
index 15ffe68e67251ec7001fe29185787433cbf8bd00..6f8aaaa0cbcfe9d91eff50e42c34e9962afd2107 100644
--- a/indra/llcommon/tests/llsingleton_test.cpp
+++ b/indra/llcommon/tests/llsingleton_test.cpp
@@ -47,8 +47,8 @@ public:                                             \
         DEP_INIT  /* dependency in initSingleton */ \
     } sDepFlag;                                     \
                                                     \
-    void initSingleton();                           \
-    void cleanupSingleton();                        \
+    void initSingleton() override;                  \
+    void cleanupSingleton() override;               \
 };                                                  \
                                                     \
 CLS::dep_flag CLS::sDepFlag = DEP_NONE
@@ -300,7 +300,7 @@ namespace tut
     {
         LLSINGLETON_EMPTY_CTOR(CircularPInit);
     public:
-        virtual void initSingleton()
+        virtual void initSingleton() override
         {
             // never mind indirection, just go straight for the circularity
             CircularPInit *pt = getInstance();
diff --git a/indra/llcommon/threadsafeschedule.h b/indra/llcommon/threadsafeschedule.h
index 3e0da94c0278054c894f248bf613ee222f55de00..2d82d6a15e1ae47e4767432f31394e96b5190fad 100644
--- a/indra/llcommon/threadsafeschedule.h
+++ b/indra/llcommon/threadsafeschedule.h
@@ -82,7 +82,7 @@ namespace LL
         using TimePoint = ThreadSafeSchedulePrivate::TimePoint;
         using Clock = TimePoint::clock;
 
-        ThreadSafeSchedule(U32 capacity=1024):
+        ThreadSafeSchedule(size_t capacity=1024):
             super(capacity)
         {}
 
diff --git a/indra/llcorehttp/bufferarray.cpp b/indra/llcorehttp/bufferarray.cpp
index e0b2876a0016167b6dc007da55e8eef869f54287..8d2e7c6a63b6fb17a586e6091e44f2917c6c4b74 100644
--- a/indra/llcorehttp/bufferarray.cpp
+++ b/indra/llcorehttp/bufferarray.cpp
@@ -196,7 +196,7 @@ size_t BufferArray::read(size_t pos, void * dst, size_t len)
 		return 0;
 	
 	size_t result(0), offset(0);
-	const int block_limit(mBlocks.size());
+	const auto block_limit(mBlocks.size());
 	int block_start(findBlock(pos, &offset));
 	if (block_start < 0)
 		return 0;
@@ -228,7 +228,7 @@ size_t BufferArray::write(size_t pos, const void * src, size_t len)
 		return 0;
 	
 	size_t result(0), offset(0);
-	const int block_limit(mBlocks.size());
+	const auto block_limit(mBlocks.size());
 	int block_start(findBlock(pos, &offset));
 
 	if (block_start >= 0)
@@ -288,7 +288,7 @@ int BufferArray::findBlock(size_t pos, size_t * ret_offset)
 	if (pos >= mLen)
 		return -1;		// Doesn't exist
 
-	const int block_limit(mBlocks.size());
+	const int block_limit(narrow(mBlocks.size()));
 	for (int i(0); i < block_limit; ++i)
 	{
 		if (pos < mBlocks[i]->mUsed)
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index 0dbb744bcf9985bd9f7192801356eaf7587ebbf6..ff4336d2deacd54c3c8156476e54e9ba62ca2288 100644
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -46,7 +46,7 @@ LLImageDecodeThread::~LLImageDecodeThread()
 
 // MAIN THREAD
 // virtual
-S32 LLImageDecodeThread::update(F32 max_time_ms)
+size_t LLImageDecodeThread::update(F32 max_time_ms)
 {
     LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE;
 	LLMutexLock lock(mCreationMutex);
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
index 1bfb0ddfd3f28ca36ff3dd1b760a61dd7cff32fa..54814c24c5785a8d9daa76276f56eb99290e2fa6 100644
--- a/indra/llimage/llimageworker.h
+++ b/indra/llimage/llimageworker.h
@@ -78,7 +78,7 @@ class LLImageDecodeThread : public LLQueuedThread
 	handle_t decodeImage(LLImageFormatted* image,
 						 U32 priority, S32 discard, BOOL needs_aux,
 						 Responder* responder);
-	S32 update(F32 max_time_ms);
+	size_t update(F32 max_time_ms);
 
 	// Used by unit tests to check the consistency of the thread instance
 	S32 tut_size();
diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp
index 675da65af21d25a08bf83ff6ab53720028763b50..818a8b5cc3e37bde93e60764a35513f5c2d213eb 100644
--- a/indra/llinventory/llfoldertype.cpp
+++ b/indra/llinventory/llfoldertype.cpp
@@ -60,7 +60,7 @@ class LLFolderDictionary : public LLSingleton<LLFolderDictionary>,
 {
 	LLSINGLETON(LLFolderDictionary);
 protected:
-	virtual LLFolderType::EType notFound() const
+	virtual LLFolderType::EType notFound() const override
 	{
 		return LLFolderType::FT_NONE;
 	}
diff --git a/indra/llinventory/llinventorysettings.cpp b/indra/llinventory/llinventorysettings.cpp
index 81485b3a975183050ade43ba87b4013af63a58e4..bc604097da79ba67d012bb3c6b365b03e794331e 100644
--- a/indra/llinventory/llinventorysettings.cpp
+++ b/indra/llinventory/llinventorysettings.cpp
@@ -62,7 +62,7 @@ class LLSettingsDictionary : public LLSingleton<LLSettingsDictionary>,
 {
     LLSINGLETON(LLSettingsDictionary);
 
-    void initSingleton();
+    void initSingleton() override;
 };
 
 LLSettingsDictionary::LLSettingsDictionary() 
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index 83a92f08d0ec2e1695e0fbb424a5c8e1d1eebd0c..a129f0a6f07aee9fe9f3074226f021eeac9b0f99 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -152,24 +152,24 @@ LLSettingsSky::validation_list_t legacyHazeValidationList()
     {
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_AMBIENT,             false,  LLSD::TypeArray, 
             boost::bind(&LLSettingsBase::Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(3.0f, 3.0f, 3.0f, "*"))));
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_BLUE_DENSITY,        false,  LLSD::TypeArray, 
             boost::bind(&LLSettingsBase::Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(3.0f, 3.0f, 3.0f, "*"))));
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_BLUE_HORIZON,        false,  LLSD::TypeArray, 
             boost::bind(&LLSettingsBase::Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(3.0f, 3.0f, 3.0f, "*"))));
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_HAZE_DENSITY,        false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(5.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 5.0f))));
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_HAZE_HORIZON,        false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(5.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 5.0f))));
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_MULTIPLIER,  false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0001f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0001f, 2.0f))));
         legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DISTANCE_MULTIPLIER, false,  LLSD::TypeReal,
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0001f)(1000.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0001f, 1000.0f))));
     }
     return legacyHazeValidation;
 }
@@ -180,19 +180,19 @@ LLSettingsSky::validation_list_t rayleighValidationList()
     if (rayleighValidation.empty())
     {
         rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH,      false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(32768.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 32768.0f))));
 
         rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM,   false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f))));
         
         rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-1.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(-1.0f, 1.0f))));
 
         rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f))));
 
         rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
     }
     return rayleighValidation;
 }
@@ -203,19 +203,19 @@ LLSettingsSky::validation_list_t absorptionValidationList()
     if (absorptionValidation.empty())
     {
         absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH,      false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(32768.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 32768.0f))));
 
         absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM,   false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f))));
         
         absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-1.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(-1.0f, 1.0f))));
 
         absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f))));
 
         absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
     }
     return absorptionValidation;
 }
@@ -226,22 +226,22 @@ LLSettingsSky::validation_list_t mieValidationList()
     if (mieValidation.empty())
     {
         mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH,      false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(32768.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 32768.0f))));
 
         mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM,   false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f))));
         
         mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-1.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(-1.0f, 1.0f))));
 
         mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f))));
 
         mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
 
         mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_MIE_ANISOTROPY_FACTOR, false,  LLSD::TypeReal,  
-            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
     }
     return mieValidation;
 }
@@ -546,89 +546,86 @@ LLSettingsSky::validation_list_t LLSettingsSky::validationList()
     static validation_list_t validation;
 
     if (validation.empty())
-    {   // Note the use of LLSD(LLSDArray()()()...) This is due to an issue with the 
-        // copy constructor for LLSDArray.  Directly binding the LLSDArray as 
-        // a parameter without first wrapping it in a pure LLSD object will result 
-        // in deeply nested arrays like this [[[[[[[[[[v1,v2,v3]]]]]]]]]]
+    {
         validation.push_back(Validator(SETTING_BLOOM_TEXTUREID,     true,  LLSD::TypeUUID));
         validation.push_back(Validator(SETTING_RAINBOW_TEXTUREID,   false,  LLSD::TypeUUID));
         validation.push_back(Validator(SETTING_HALO_TEXTUREID,      false,  LLSD::TypeUUID));
 
         validation.push_back(Validator(SETTING_CLOUD_COLOR,         true,  LLSD::TypeArray, 
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(1.0f)(1.0f)(1.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(1.0f, 1.0f, 1.0f, "*"))));
         validation.push_back(Validator(SETTING_CLOUD_POS_DENSITY1,  true,  LLSD::TypeArray, 
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(1.0f)(1.0f)(3.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(1.0f, 1.0f, 3.0f, "*"))));
         validation.push_back(Validator(SETTING_CLOUD_POS_DENSITY2,  true,  LLSD::TypeArray, 
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(1.0f)(1.0f)(1.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(1.0f, 1.0f, 1.0f, "*"))));
         validation.push_back(Validator(SETTING_CLOUD_SCALE,         true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.001f)(3.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.001f, 3.0f))));
         validation.push_back(Validator(SETTING_CLOUD_SCROLL_RATE,   true,  LLSD::TypeArray, 
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(-50.0f)(-50.0f)),
-                LLSD(LLSDArray(50.0f)(50.0f)))));
+                llsd::array(-50.0f, -50.0f),
+                llsd::array(50.0f, 50.0f))));
         validation.push_back(Validator(SETTING_CLOUD_SHADOW,        true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
         validation.push_back(Validator(SETTING_CLOUD_TEXTUREID,     false, LLSD::TypeUUID));
         validation.push_back(Validator(SETTING_CLOUD_VARIANCE,      false,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
 
         validation.push_back(Validator(SETTING_DOME_OFFSET,         false, LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
         validation.push_back(Validator(SETTING_DOME_RADIUS,         false, LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(2000.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 2000.0f))));
         validation.push_back(Validator(SETTING_GAMMA,               true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(20.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 20.0f))));
         validation.push_back(Validator(SETTING_GLOW,                true,  LLSD::TypeArray, 
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.2f)("*")(-10.0f)("*")),
-                LLSD(LLSDArray(40.0f)("*")(10.0f)("*")))));
+                llsd::array(0.2f, "*", -10.0f, "*"),
+                llsd::array(40.0f, "*", 10.0f, "*"))));
         
         validation.push_back(Validator(SETTING_MAX_Y,               true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(10000.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 10000.0f))));
         validation.push_back(Validator(SETTING_MOON_ROTATION,       true,  LLSD::TypeArray, &Validator::verifyQuaternionNormal));
         validation.push_back(Validator(SETTING_MOON_SCALE,          false, LLSD::TypeReal,
-                boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.25f)(20.0f))), LLSD::Real(1.0)));
+                boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.25f, 20.0f)), LLSD::Real(1.0)));
         validation.push_back(Validator(SETTING_MOON_TEXTUREID,      false, LLSD::TypeUUID));
         validation.push_back(Validator(SETTING_MOON_BRIGHTNESS,     false,  LLSD::TypeReal, 
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
 
         validation.push_back(Validator(SETTING_STAR_BRIGHTNESS,     true,  LLSD::TypeReal, 
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(500.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 500.0f))));
         validation.push_back(Validator(SETTING_SUNLIGHT_COLOR,      true,  LLSD::TypeArray, 
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")),
-                LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*")))));
+                llsd::array(0.0f, 0.0f, 0.0f, "*"),
+                llsd::array(3.0f, 3.0f, 3.0f, "*"))));
         validation.push_back(Validator(SETTING_SUN_ROTATION,        true,  LLSD::TypeArray, &Validator::verifyQuaternionNormal));
         validation.push_back(Validator(SETTING_SUN_SCALE,           false, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.25f)(20.0f))), LLSD::Real(1.0)));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.25f, 20.0f)), LLSD::Real(1.0)));
         validation.push_back(Validator(SETTING_SUN_TEXTUREID, false, LLSD::TypeUUID));
 
         validation.push_back(Validator(SETTING_PLANET_RADIUS,       true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(32768.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 32768.0f))));
 
         validation.push_back(Validator(SETTING_SKY_BOTTOM_RADIUS,   true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(32768.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 32768.0f))));
 
         validation.push_back(Validator(SETTING_SKY_TOP_RADIUS,       true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(32768.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 32768.0f))));
 
         validation.push_back(Validator(SETTING_SUN_ARC_RADIANS,      true,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(0.1f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 0.1f))));
 
         validation.push_back(Validator(SETTING_SKY_MOISTURE_LEVEL,      false,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
 
         validation.push_back(Validator(SETTING_SKY_DROPLET_RADIUS,      false,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(5.0f)(1000.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(5.0f, 1000.0f))));
 
         validation.push_back(Validator(SETTING_SKY_ICE_LEVEL,      false,  LLSD::TypeReal,  
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
 
         validation.push_back(Validator(SETTING_RAYLEIGH_CONFIG, true, LLSD::TypeArray, &validateRayleighLayers));
         validation.push_back(Validator(SETTING_ABSORPTION_CONFIG, true, LLSD::TypeArray, &validateAbsorptionLayers));
@@ -719,7 +716,7 @@ LLSD LLSettingsSky::defaults(const LLSettingsBase::TrackPosition& position)
         dfltsetting[SETTING_CLOUD_POS_DENSITY1] = LLColor4(1.0000, 0.5260, 1.0000, 0.0).getValue();
         dfltsetting[SETTING_CLOUD_POS_DENSITY2] = LLColor4(1.0000, 0.5260, 1.0000, 0.0).getValue();
         dfltsetting[SETTING_CLOUD_SCALE]        = LLSD::Real(0.4199);
-        dfltsetting[SETTING_CLOUD_SCROLL_RATE]  = LLSDArray(0.0f)(0.0f);
+        dfltsetting[SETTING_CLOUD_SCROLL_RATE]  = llsd::array(0.0f, 0.0f);
         dfltsetting[SETTING_CLOUD_SHADOW]       = LLSD::Real(0.2699);
         dfltsetting[SETTING_CLOUD_VARIANCE]     = LLSD::Real(0.0);
 
diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp
index 90f99e81986dba3d0694d851c46bb5ead53d39d2..f19beb5be5f068dfca107cf9c478463b7bd8f918 100644
--- a/indra/llinventory/llsettingswater.cpp
+++ b/indra/llinventory/llsettingswater.cpp
@@ -222,42 +222,38 @@ LLSettingsWater::validation_list_t LLSettingsWater::validationList()
     static validation_list_t validation;
 
     if (validation.empty())
-    {   // Note the use of LLSD(LLSDArray()()()...) This is due to an issue with the 
-        // copy constructor for LLSDArray.  Directly binding the LLSDArray as 
-        // a parameter without first wrapping it in a pure LLSD object will result 
-        // in deeply nested arrays like this [[[[[[[[[[v1,v2,v3]]]]]]]]]]
-
+    {
         validation.push_back(Validator(SETTING_BLUR_MULTIPLIER, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-0.5f)(0.5f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(-0.5f, 0.5f))));
         validation.push_back(Validator(SETTING_FOG_COLOR, true, LLSD::TypeArray,
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)(1.0f)),
-                LLSD(LLSDArray(1.0f)(1.0f)(1.0f)(1.0f)))));
+                llsd::array(0.0f, 0.0f, 0.0f, 1.0f),
+                llsd::array(1.0f, 1.0f, 1.0f, 1.0f))));
         validation.push_back(Validator(SETTING_FOG_DENSITY, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-10.0f)(10.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(-10.0f, 10.0f))));
         validation.push_back(Validator(SETTING_FOG_MOD, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(20.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 20.0f))));
         validation.push_back(Validator(SETTING_FRESNEL_OFFSET, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
         validation.push_back(Validator(SETTING_FRESNEL_SCALE, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f))));
         validation.push_back(Validator(SETTING_NORMAL_MAP, true, LLSD::TypeUUID));
         validation.push_back(Validator(SETTING_NORMAL_SCALE, true, LLSD::TypeArray,
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(0.0f)(0.0f)(0.0f)),
-                LLSD(LLSDArray(10.0f)(10.0f)(10.0f)))));
+                llsd::array(0.0f, 0.0f, 0.0f),
+                llsd::array(10.0f, 10.0f, 10.0f))));
         validation.push_back(Validator(SETTING_SCALE_ABOVE, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(3.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 3.0f))));
         validation.push_back(Validator(SETTING_SCALE_BELOW, true, LLSD::TypeReal,
-            boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(3.0f)))));
+            boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 3.0f))));
         validation.push_back(Validator(SETTING_WAVE1_DIR, true, LLSD::TypeArray,
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(-20.0f)(-20.0f)),
-                LLSD(LLSDArray(20.0f)(20.0f)))));
+                llsd::array(-20.0f, -20.0f),
+                llsd::array(20.0f, 20.0f))));
         validation.push_back(Validator(SETTING_WAVE2_DIR, true, LLSD::TypeArray,
             boost::bind(&Validator::verifyVectorMinMax, _1, _2,
-                LLSD(LLSDArray(-20.0f)(-20.0f)),
-                LLSD(LLSDArray(20.0f)(20.0f)))));
+                llsd::array(-20.0f, -20.0f),
+                llsd::array(20.0f, 20.0f))));
     }
 
     return validation;
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index be25592d541764bdc7e2d2717f307bda7ff5c2ed..ed5334d31b5ee994923cffdceae8ab9846e9307a 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -2398,7 +2398,7 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
 
 		mVolumeFaces.resize(face_count);
 
-		for (U32 i = 0; i < face_count; ++i)
+		for (size_t i = 0; i < face_count; ++i)
 		{
 			LLVolumeFace& face = mVolumeFaces[i];
 
diff --git a/indra/llmessage/llexperiencecache.h b/indra/llmessage/llexperiencecache.h
index 1c97133723aeca89b512f5a7c2383d110d37a14e..8be4c64dfca9d48fc75960c579bc0617b71fb375 100644
--- a/indra/llmessage/llexperiencecache.h
+++ b/indra/llmessage/llexperiencecache.h
@@ -106,7 +106,7 @@ class LLExperienceCache: public LLSingleton < LLExperienceCache >
 private:
     virtual ~LLExperienceCache();
 
-    virtual void initSingleton();
+    virtual void initSingleton() override;
 
     typedef boost::function<LLSD(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &, LLCore::HttpRequest::ptr_t, std::string)> permissionInvoker_fn;
 
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
index 25f6977e145afcdfa5248708c34286d7c30564c5..8a64cdbfaaf55f6cde1e0309f4203022924d8eb8 100644
--- a/indra/llmessage/llproxy.h
+++ b/indra/llmessage/llproxy.h
@@ -226,7 +226,7 @@ class LLProxy: public LLSingleton<LLProxy>
 	LLSINGLETON(LLProxy);
 	LOG_CLASS(LLProxy);
 
-    /*virtual*/ void initSingleton();
+    /*virtual*/ void initSingleton() override;
 
 public:
 	// Static check for enabled status for UDP packets. Call from main thread only.
diff --git a/indra/llrender/llfontbitmapcache.cpp b/indra/llrender/llfontbitmapcache.cpp
index 8809f9f475fbaae2412ad1bd9b70fb83621bdb15..42b0045cf3aabf2ddf60462239539c81cc6467e4 100644
--- a/indra/llrender/llfontbitmapcache.cpp
+++ b/indra/llrender/llfontbitmapcache.cpp
@@ -92,6 +92,20 @@ BOOL LLFontBitmapCache::nextOpenPos(S32 width, S32& pos_x, S32& pos_y, EFontGlyp
 		{
 			// We're out of space in the current image, or no image
 			// has been allocated yet.  Make a new one.
+            
+            S32 image_width = mMaxCharWidth * 20;
+            S32 pow_iw = 2;
+            while (pow_iw < image_width)
+            {
+                pow_iw *= 2;
+            }
+            image_width = pow_iw;
+            image_width = llmin(512, image_width); // Don't make bigger than 512x512, ever.
+            S32 image_height = image_width;
+            
+            mBitmapWidth = image_width;
+            mBitmapHeight = image_height;
+            
 			S32 num_components = getNumComponents(bitmap_type);
 			mImageRawVec[bitmap_idx].push_back(new LLImageRaw(mBitmapWidth, mBitmapHeight, num_components));
 			bitmap_num = mImageRawVec[bitmap_idx].size() - 1;
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 5535c07615dd4119d805d7a4b1e46838de35d87f..e4010579b3c94a233cc374f56e9660394b664ab0 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -798,11 +798,11 @@ void LLFontFreetype::setSubImageLuminanceAlpha(U32 x, U32 y, U32 bitmap_num, U32
 
 	llassert(!mIsFallback);
 	llassert(image_raw && (image_raw->getComponents() == 2));
-
 	
 	U8 *target = image_raw->getData();
+    llassert(target);
 
-	if (!data)
+	if (!data || !target)
 	{
 		return;
 	}
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
index 44c61dcdbc238db8c528b86b476604fc7a99b852..4fc3836248ed9804cd342fe982a88ec4bc09fcd1 100644
--- a/indra/llui/CMakeLists.txt
+++ b/indra/llui/CMakeLists.txt
@@ -53,8 +53,8 @@ set(llui_SOURCE_FILES
     lldockcontrol.cpp
     lldraghandle.cpp
     lleditmenuhandler.cpp
-	llemojidictionary.cpp
-	llemojihelper.cpp
+    llemojidictionary.cpp
+    llemojihelper.cpp
     llf32uictrl.cpp
     llfiltereditor.cpp
     llflashtimer.cpp
@@ -165,8 +165,8 @@ set(llui_HEADER_FILES
     lldockablefloater.h
     lldockcontrol.h
     lleditmenuhandler.h
-	llemojidictionary.h
-	llemojihelper.h
+    llemojidictionary.h
+    llemojihelper.h
     llf32uictrl.h
     llfiltereditor.h 
     llflashtimer.h
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 7c381161c92bac5bc7a4f2a617657c1196ac9984..d736aa6634879ca33fc27023000f539c59db6a8f 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -337,7 +337,7 @@ void LLNotificationForm::addElement(const std::string& type, const std::string&
 	element["name"] = name;
 	element["text"] = name;
 	element["value"] = value;
-	element["index"] = mFormData.size();
+	element["index"] = LLSD::Integer(mFormData.size());
 	element["enabled"] = enabled;
 	mFormData.append(element);
 }
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 921398a69325f8f942795d256751df762540aad2..4d9a33f1d7ad7bce5b7613f1e401da97dc90b083 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -913,7 +913,7 @@ class LLNotifications :
 	/* virtual */ LLNotificationPtr add(const std::string& name, 
 						const LLSD& substitutions, 
 						const LLSD& payload, 
-						LLNotificationFunctorRegistry::ResponseFunctor functor);
+						LLNotificationFunctorRegistry::ResponseFunctor functor) override;
 	LLNotificationPtr add(const LLNotification::Params& p);
 
 	void add(const LLNotificationPtr pNotif);
@@ -964,8 +964,8 @@ class LLNotifications :
 	bool isVisibleByRules(LLNotificationPtr pNotification);
 	
 private:
-	/*virtual*/ void initSingleton();
-	/*virtual*/ void cleanupSingleton();
+	/*virtual*/ void initSingleton() override;
+	/*virtual*/ void cleanupSingleton() override;
 	
 	void loadPersistentNotifications();
 
diff --git a/indra/llui/llspellcheck.h b/indra/llui/llspellcheck.h
index 3da5e30955795bc5f11e7904b5226f504d0bf9c3..14f9b44fe45b3c7bc8330dfd9cd3cb6d6dcb7187 100644
--- a/indra/llui/llspellcheck.h
+++ b/indra/llui/llspellcheck.h
@@ -47,7 +47,7 @@ class LLSpellChecker : public LLSingleton<LLSpellChecker>
 protected:
 	void addToDictFile(const std::string& dict_path, const std::string& word);
 	void initHunspell(const std::string& dict_language);
-	void initSingleton();
+	void initSingleton() override;
 
 public:
 	typedef std::list<std::string> dict_list_t;
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index b2c05776041c27fe91f52dc0076ef18259e6645d..dff4bf9617baf1f8df6c6f226890b2dd39062459 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1997,19 +1997,8 @@ LLTextBase::segment_set_t::const_iterator LLTextBase::getEditableSegIterContaini
 
 LLTextBase::segment_set_t::iterator LLTextBase::getSegIterContaining(S32 index)
 {
-
 	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment();
 
-	S32 text_len = 0;
-	if (!useLabel())
-	{
-		text_len = getLength();
-	}
-	else
-	{
-		text_len = mLabel.getWString().length();
-	}
-
 	// when there are no segments, we return the end iterator, which must be checked by caller
 	if (mSegments.size() <= 1) { return mSegments.begin(); }
 
@@ -2023,16 +2012,6 @@ LLTextBase::segment_set_t::const_iterator LLTextBase::getSegIterContaining(S32 i
 {
 	static LLPointer<LLIndexSegment> index_segment = new LLIndexSegment();
 
-	S32 text_len = 0;
-	if (!useLabel())
-	{
-		text_len = getLength();
-	}
-	else
-	{
-		text_len = mLabel.getWString().length();
-	}
-
 	// when there are no segments, we return the end iterator, which must be checked by caller
 	if (mSegments.size() <= 1) { return mSegments.begin(); }
 
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 7e1f727607486388f646d91f3712f6c06b284af0..9b3691e4045a54b48180d9354be37d500e1ade65 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -187,7 +187,7 @@ class LLEmojiTextSegment : public LLNormalTextSegment
 	LLEmojiTextSegment(const LLColor4& color, S32 start, S32 end, LLTextBase& editor, BOOL is_visible = TRUE);
 
 	bool canEdit() const override { return false; }
-	BOOL handleToolTip(S32 x, S32 y, MASK mask);
+	BOOL handleToolTip(S32 x, S32 y, MASK mask) override;
 };
 
 // Text segment that changes it's style depending of mouse pointer position ( is it inside or outside segment)
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
index 67dd24341cde6babcb0a7ff806b3ff881b7be2a8..d71dc8d859f2c9920d771076c0d7fc96848756bc 100644
--- a/indra/llui/lluictrl.h
+++ b/indra/llui/lluictrl.h
@@ -263,7 +263,7 @@ class LLUICtrl
 	class LLTextInputFilter : public LLQueryFilter, public LLSingleton<LLTextInputFilter>
 	{
 		LLSINGLETON_EMPTY_CTOR(LLTextInputFilter);
-		/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const 
+		/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override
 		{
 			return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl *>(view)->acceptsTextInput(), TRUE);
 		}
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 74abe5469023292a8ed22b2d86c220bf78a0aeaa..2b7f05dcda1d992c2842087c9b1c53a8766f3bb4 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1953,7 +1953,7 @@ class CompareByTabOrder
 class SortByTabOrder : public LLQuerySorter, public LLSingleton<SortByTabOrder>
 {
 	LLSINGLETON_EMPTY_CTOR(SortByTabOrder);
-	/*virtual*/ void sort(LLView * parent, LLView::child_list_t &children) const 
+	/*virtual*/ void sort(LLView * parent, LLView::child_list_t &children) const override
 	{
 		children.sort(CompareByTabOrder(parent->getTabOrder(), parent->getDefaultTabGroup()));
 	}
@@ -1977,7 +1977,7 @@ const LLViewQuery & LLView::getTabOrderQuery()
 class LLFocusRootsFilter : public LLQueryFilter, public LLSingleton<LLFocusRootsFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLFocusRootsFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const 
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override
 	{
 		return filterResult_t(view->isCtrl() && view->isFocusRoot(), !view->isFocusRoot());
 	}
diff --git a/indra/llui/llviewquery.h b/indra/llui/llviewquery.h
index 21bb1be26f8d5c86a17e19c569446d79ecbebf8d..4bc9c4a08efe393935a3634c154a0375e344ea4c 100644
--- a/indra/llui/llviewquery.h
+++ b/indra/llui/llviewquery.h
@@ -55,37 +55,37 @@ class LLQuerySorter
 class LLLeavesFilter : public LLQueryFilter, public LLSingleton<LLLeavesFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLLeavesFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override;
 };
 
 class LLRootsFilter : public LLQueryFilter, public LLSingleton<LLRootsFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLRootsFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override;
 };
 
 class LLVisibleFilter : public LLQueryFilter, public LLSingleton<LLVisibleFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLVisibleFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override;
 };
 
 class LLEnabledFilter : public LLQueryFilter, public LLSingleton<LLEnabledFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLEnabledFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override;
 };
 
 class LLTabStopFilter : public LLQueryFilter, public LLSingleton<LLTabStopFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLTabStopFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override;
 };
 
 class LLCtrlFilter : public LLQueryFilter, public LLSingleton<LLCtrlFilter>
 {
 	LLSINGLETON_EMPTY_CTOR(LLCtrlFilter);
-	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const;
+	/*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const override;
 };
 
 template <class T>
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index bca8e98c87acbcbcb524b3077448231f4644ec58..ee55657dd84f03b310a35f22eaf69da84c674682 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -449,7 +449,7 @@ set(viewer_SOURCE_FILES
     llpaneleditsky.cpp
     llpaneleditwater.cpp
     llpaneleditwearable.cpp
-	llpanelemojicomplete.cpp
+    llpanelemojicomplete.cpp
     llpanelenvironment.cpp
     llpanelexperiencelisteditor.cpp
     llpanelexperiencelog.cpp
@@ -1081,7 +1081,7 @@ set(viewer_HEADER_FILES
     llpaneleditsky.h
     llpaneleditwater.h
     llpaneleditwearable.h
-	llpanelemojicomplete.h
+    llpanelemojicomplete.h
     llpanelenvironment.h
     llpanelexperiencelisteditor.h
     llpanelexperiencelog.h
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 8af5fdfc93e14efc4d2fc2ebad25cbfe4c733f5d..a4b4caddf1325e2637fa4bcf4a32ed6a61bf86db 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3194,15 +3194,16 @@ LLSD LLAppViewer::getViewerInfo() const
 	// LLFloaterAbout.
 	LLSD info;
 	auto& versionInfo(LLVersionInfo::instance());
-	info["VIEWER_VERSION"] = LLSDArray(versionInfo.getMajor())(versionInfo.getMinor())(versionInfo.getPatch())(versionInfo.getBuild());
+	info["VIEWER_VERSION"] = llsd::array(versionInfo.getMajor(), versionInfo.getMinor(),
+										 versionInfo.getPatch(), versionInfo.getBuild());
 	info["VIEWER_VERSION_STR"] = versionInfo.getVersion();
 	info["CHANNEL"] = versionInfo.getChannel();
-    info["ADDRESS_SIZE"] = ADDRESS_SIZE;
-    std::string build_config = versionInfo.getBuildConfig();
-    if (build_config != "Release")
-    {
-        info["BUILD_CONFIG"] = build_config;
-    }
+	info["ADDRESS_SIZE"] = ADDRESS_SIZE;
+	std::string build_config = versionInfo.getBuildConfig();
+	if (build_config != "Release")
+	{
+		info["BUILD_CONFIG"] = build_config;
+	}
 
 	// return a URL to the release notes for this viewer, such as:
 	// https://releasenotes.secondlife.com/viewer/2.1.0.123456.html
diff --git a/indra/newview/llautoreplace.h b/indra/newview/llautoreplace.h
index 23cc3136468575a3ce1dce365cc4cb525c94c28e..a1eebf9dcbdf8e056938ed5c4c35855c831c994f 100644
--- a/indra/newview/llautoreplace.h
+++ b/indra/newview/llautoreplace.h
@@ -203,7 +203,7 @@ class LLAutoReplace : public LLSingleton<LLAutoReplace>
     void setSettings(const LLAutoReplaceSettings& settings);
 
 private:
-    /*virtual*/ void initSingleton();
+    /*virtual*/ void initSingleton() override;
 
     LLAutoReplaceSettings mSettings; ///< configuration information
 	
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
index 8abe350196bd9630de2a4e6de8e3f4591d95f423..22ae595d66b0db015d8982667226e5f5ce204ea6 100644
--- a/indra/newview/llchannelmanager.h
+++ b/indra/newview/llchannelmanager.h
@@ -46,7 +46,7 @@ class LLChannelManager : public LLSingleton<LLChannelManager>
 	LLSINGLETON(LLChannelManager);
 	virtual ~LLChannelManager();
 
-	void cleanupSingleton();
+	void cleanupSingleton() override;
 public:
 
 
diff --git a/indra/newview/llchicletbar.h b/indra/newview/llchicletbar.h
index 6c521dc1d504f176b0f3cfc367ed10ece092af14..c295b999624f71e32fd2bbba5515000627a39fdc 100644
--- a/indra/newview/llchicletbar.h
+++ b/indra/newview/llchicletbar.h
@@ -43,11 +43,11 @@ class LLChicletBar
 
 public:
 
-	BOOL postBuild();
+	BOOL postBuild() override;
 
 	LLChicletPanel*	getChicletPanel() { return mChicletPanel; }
 
-	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
+	/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent) override;
 
 
 	/**
diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h
index 820a5db49143c77ea49c549b12f7d85416bf7728..54aeedcf9ac13a7787d98f449fca60065b52173a 100644
--- a/indra/newview/llconversationlog.h
+++ b/indra/newview/llconversationlog.h
@@ -125,11 +125,11 @@ class LLConversationLog : public LLSingleton<LLConversationLog>, LLIMSessionObse
 	void removeObserver(LLConversationLogObserver* observer);
 
 	// LLIMSessionObserver triggers
-	virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg);
-    virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {}; // Stub
-	virtual void sessionRemoved(const LLUUID& session_id){}											// Stub
-	virtual void sessionVoiceOrIMStarted(const LLUUID& session_id){};								// Stub
-	virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id){};	// Stub
+	virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg) override;
+    virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) override {}; // Stub
+	virtual void sessionRemoved(const LLUUID& session_id) override{}											// Stub
+	virtual void sessionVoiceOrIMStarted(const LLUUID& session_id) override{};								// Stub
+	virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) override{};	// Stub
 
 	void notifyObservers();
 
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 42a226cd18f843bdc40ed58e07f30543e58eedc4..d9269224afd87a2ee120f77f9d321dfdb2324942 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -101,7 +101,7 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManag
 	~LLFeatureManager() {cleanupFeatureTables();}
 
 	// initialize this by loading feature table and gpu table
-	void initSingleton();
+	void initSingleton() override;
 
 public:
 
diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp
index 8633fe4e5e58d487a38f63c93dfb86d54defca51..a3222d622fec8695b3aeb184aecf7a5e28a5ba7d 100644
--- a/indra/newview/llfloaterlandholdings.cpp
+++ b/indra/newview/llfloaterlandholdings.cpp
@@ -39,6 +39,7 @@
 #include "llfloaterworldmap.h"
 #include "llproductinforequest.h"
 #include "llscrolllistctrl.h"
+#include "llsdutil.h"
 #include "llstatusbar.h"
 #include "lltextbox.h"
 #include "llscrolllistctrl.h"
@@ -79,24 +80,25 @@ BOOL LLFloaterLandHoldings::postBuild()
 	for(S32 i = 0; i < count; ++i)
 	{
 		LLUUID id(gAgent.mGroups.at(i).mID);
-
-		LLSD element;
-		element["id"] = id;
-		element["columns"][0]["column"] = "group";
-		element["columns"][0]["value"] = gAgent.mGroups.at(i).mName;
-		element["columns"][0]["font"] = "SANSSERIF";
-
 		LLUIString areastr = getString("area_string");
 		areastr.setArg("[AREA]", llformat("%d", gAgent.mGroups.at(i).mContribution));
-		element["columns"][1]["column"] = "area";
-		element["columns"][1]["value"] = areastr;
-		element["columns"][1]["font"] = "SANSSERIF";
 
-		grant_list->addElement(element);
+		grant_list->addElement(
+			llsd::map(
+				"id", id,
+				"columns", llsd::array(
+					llsd::map(
+						"column", "group",
+						"value", gAgent.mGroups.at(i).mName,
+						"font", "SANSSERIF"),
+					llsd::map(
+						"column", "area",
+						"value", areastr,
+						"font", "SANSSERIF"))));
 	}
-	
+
 	center();
-	
+
 	return TRUE;
 }
 
@@ -108,8 +110,8 @@ LLFloaterLandHoldings::~LLFloaterLandHoldings()
 
 void LLFloaterLandHoldings::onOpen(const LLSD& key)
 {
-    LLScrollListCtrl *list = getChild<LLScrollListCtrl>("parcel list");
-    list->clearRows();
+	LLScrollListCtrl *list = getChild<LLScrollListCtrl>("parcel list");
+	list->clearRows();
 
 	// query_id null is known to be us
 	const LLUUID& query_id = LLUUID::null;
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index f5679d7d85d97749e494f803895bd11b866be87e..ef0dda7949c63fd3fdcc657143ffa96a5e612444 100644
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -55,7 +55,7 @@ class LLFriendCardsManager
     };
 
 	// LLFriendObserver implementation
-	void changed(U32 mask)
+	void changed(U32 mask) override
 	{
 		onFriendListUpdate(mask);
 	}
diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h
index 7c8e8279c257ee49038a071f58d3a9dae4a4943a..7bb60f00e2c5450719a69c302b01d83915f4085f 100644
--- a/indra/newview/llgesturemgr.h
+++ b/indra/newview/llgesturemgr.h
@@ -135,7 +135,7 @@ class LLGestureMgr : public LLSingleton<LLGestureMgr>, public LLInventoryFetchIt
 	void notifyObservers();
 
 	// Overriding so we can update active gesture names and notify observers 
-	void changed(U32 mask); 
+	void changed(U32 mask) override;
 
 	BOOL matchPrefix(const std::string& in_str, std::string* out_str);
 
@@ -150,7 +150,7 @@ class LLGestureMgr : public LLSingleton<LLGestureMgr>, public LLInventoryFetchIt
 	void runStep(LLMultiGesture* gesture, LLGestureStep* step);
 
 	// LLInventoryCompletionObserver trigger
-	void done();
+	void done() override;
 
 	// Used by loadGesture
 	static void onLoadComplete(const LLUUID& asset_uuid,
diff --git a/indra/newview/llimagefiltersmanager.h b/indra/newview/llimagefiltersmanager.h
index d06212d85aea06a7ad0d911723c2b8d7965c19de..05d1806da4043088307779977e127b56858676ee 100644
--- a/indra/newview/llimagefiltersmanager.h
+++ b/indra/newview/llimagefiltersmanager.h
@@ -45,7 +45,7 @@ class LLImageFiltersManager : public LLSingleton<LLImageFiltersManager>
 	void loadAllFilters();
 	void loadFiltersFromDir(const std::string& dir);
     
-	/*virtual*/ void initSingleton();
+	/*virtual*/ void initSingleton() override;
     
 	// List of filters : first is the user friendly localized name, second is the xml file name
     std::map<std::string,std::string> mFiltersList;
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 326e8f22e3061829ca0edddbaaf3200c5ed69a4c..353373f3b4e07a81c36d48723f724a0b2d0f1ab3 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -506,7 +506,7 @@ class LLCallDialogManager : public LLSingleton<LLCallDialogManager>
 	static void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent);
 
 private:
-	void initSingleton();
+	void initSingleton() override;
 	void onVoiceChannelChangedInt(const LLUUID &session_id);
 	void onVoiceChannelStateChangedInt(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent);
 
diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
index 0d426fbd48438459ba10e43158810531be336233..f86c2acd10643ab5de115335a1fe054198b24b28 100644
--- a/indra/newview/llmutelist.h
+++ b/indra/newview/llmutelist.h
@@ -73,7 +73,7 @@ class LLMuteList : public LLSingleton<LLMuteList>
 {
 	LLSINGLETON(LLMuteList);
 	~LLMuteList();
-	/*virtual*/ void cleanupSingleton();
+	/*virtual*/ void cleanupSingleton() override;
 public:
 	// reasons for auto-unmuting a resident
 	enum EAutoReason 
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 11c671294a3c4d745c3348c0ce39ad4068bf2871..4649f5bcb0f42f8dabb61ca6df879e567a5fa858 100755
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -92,10 +92,10 @@ class LLNavigationBar
 
 public:
 	
-	/*virtual*/ void	draw();
-	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
-	/*virtual*/ BOOL	postBuild();
-	/*virtual*/ void	setVisible(BOOL visible);
+	/*virtual*/ void	draw() override;
+	/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
+	/*virtual*/ BOOL	postBuild() override;
+	/*virtual*/ void	setVisible(BOOL visible) override;
 
 	void handleLoginComplete();
 	void clearHistoryCache();
diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h
index 77041db68d094c475df3615fac856a6024f0f475..77bb3543aa065f5bcfa6e04e7eef80a69fb1015c 100644
--- a/indra/newview/lloutfitobserver.h
+++ b/indra/newview/lloutfitobserver.h
@@ -41,7 +41,7 @@ class LLOutfitObserver: public LLInventoryObserver, public LLSingleton<LLOutfitO
 
 public:
 
-	virtual void changed(U32 mask);
+	virtual void changed(U32 mask) override;
 
 	void notifyOutfitLockChanged() { mOutfitLockChanged();  }
 
diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h
index 2116b350bec115904325cddd1bcc0543d0673170..aa0f80652588315c8e0bef5ffc701a61e864f5b9 100644
--- a/indra/newview/llpanelemojicomplete.h
+++ b/indra/newview/llpanelemojicomplete.h
@@ -85,7 +85,7 @@ class LLPanelEmojiComplete : public LLUICtrl
 	LLUIImagePtr	mSelectedImage;
 
 	LLWString       mEmojis;
-	U16             mVisibleEmojis = 0;
+	size_t          mVisibleEmojis = 0;
 	size_t          mFirstVisible = 0;
 	size_t          mScrollPos = 0;
 	size_t          mCurSelected = 0;
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index 78dd99702906f95f2f32bc6aa0045d838ceb6dbb..b6c263e33157fc1386baccec0d0d2b68b256ac1f 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -46,8 +46,8 @@ class LLPanelTopInfoBar : public LLPanel, public LLSingleton<LLPanelTopInfoBar>,
 public:
 	typedef boost::signals2::signal<void ()> resize_signal_t;
 
-	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void draw();
+	/*virtual*/ BOOL postBuild() override;
+	/*virtual*/ void draw() override;
 
 	/**
 	 * Updates location and parcel icons on login complete
@@ -83,7 +83,7 @@ class LLPanelTopInfoBar : public LLPanel, public LLSingleton<LLPanelTopInfoBar>,
 	 */
 	void initParcelIcons();
 
-	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+	BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
 
 	/**
 	 * Handles clicks on the parcel icons.
diff --git a/indra/newview/llpathfindingnavmesh.cpp b/indra/newview/llpathfindingnavmesh.cpp
index 0287c07f962c0573f930c3bc9994efa44d178446..c297cac771fe75f89eadce7de06de1cbeb5c3107 100644
--- a/indra/newview/llpathfindingnavmesh.cpp
+++ b/indra/newview/llpathfindingnavmesh.cpp
@@ -143,7 +143,7 @@ void LLPathfindingNavMesh::handleNavMeshResult(const LLSD &pContent, U32 pNavMes
 			unsigned int binSize = value.size();
 			std::string newStr(reinterpret_cast<const char *>(&value[0]), binSize);
 			std::istringstream streamdecomp( newStr );
-			unsigned int decompBinSize = 0;
+			size_t decompBinSize = 0;
 			bool valid = false;
 			U8* pUncompressedNavMeshContainer = unzip_llsdNavMesh( valid, decompBinSize, streamdecomp, binSize ) ;
 			if ( !valid )
diff --git a/indra/newview/llpathfindingpathtool.h b/indra/newview/llpathfindingpathtool.h
index 88cb3a15f89e1e2131d4f613b1ebd746712a9616..f98624e30d2bf0dca4029b2d2917c912f131bc90 100644
--- a/indra/newview/llpathfindingpathtool.h
+++ b/indra/newview/llpathfindingpathtool.h
@@ -66,17 +66,17 @@ class LLPathfindingPathTool : public LLTool, public LLSingleton<LLPathfindingPat
 	typedef boost::signals2::signal<void (void)> path_event_signal_t;
 	typedef boost::signals2::connection          path_event_slot_t;
 
-	virtual BOOL      handleMouseDown(S32 pX, S32 pY, MASK pMask);
-	virtual BOOL      handleMouseUp(S32 pX, S32 pY, MASK pMask);
-	virtual BOOL      handleMiddleMouseDown(S32 pX, S32 pY, MASK pMask);
-	virtual BOOL      handleMiddleMouseUp(S32 pX, S32 pY, MASK pMask);
-	virtual BOOL      handleRightMouseDown(S32 pX, S32 pY, MASK pMask);
-	virtual BOOL      handleRightMouseUp(S32 pX, S32 pY, MASK pMask);
-	virtual BOOL      handleDoubleClick(S32 x, S32 y, MASK mask);
+	virtual BOOL      handleMouseDown(S32 pX, S32 pY, MASK pMask) override;
+	virtual BOOL      handleMouseUp(S32 pX, S32 pY, MASK pMask) override;
+	virtual BOOL      handleMiddleMouseDown(S32 pX, S32 pY, MASK pMask) override;
+	virtual BOOL      handleMiddleMouseUp(S32 pX, S32 pY, MASK pMask) override;
+	virtual BOOL      handleRightMouseDown(S32 pX, S32 pY, MASK pMask) override;
+	virtual BOOL      handleRightMouseUp(S32 pX, S32 pY, MASK pMask) override;
+	virtual BOOL      handleDoubleClick(S32 x, S32 y, MASK mask) override;
 
-	virtual BOOL      handleHover(S32 pX, S32 pY, MASK pMask);
+	virtual BOOL      handleHover(S32 pX, S32 pY, MASK pMask) override;
 
-	virtual BOOL      handleKey(KEY pKey, MASK pMask);
+	virtual BOOL      handleKey(KEY pKey, MASK pMask) override;
 
 	EPathStatus       getPathStatus() const;
 
diff --git a/indra/newview/llproductinforequest.h b/indra/newview/llproductinforequest.h
index d1036374e8008302ff83f8b8d68ee12f4d7eaade..0b94c39d1147ad7965022d34672206f0216f7f79 100644
--- a/indra/newview/llproductinforequest.h
+++ b/indra/newview/llproductinforequest.h
@@ -46,7 +46,7 @@ class LLProductInfoRequestManager : public LLSingleton<LLProductInfoRequestManag
 	std::string getDescriptionForSku(const std::string& sku);
 
 private:
-	/* virtual */ void initSingleton();
+	/* virtual */ void initSingleton() override;
 
     void getLandDescriptionsCoro(std::string url);
     LLSD mSkuDescriptions;
diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h
index 1b322f2c0a98b3a68d70ad59815b6987db474e4e..0c04222a9faf54673e7c82b02ca99117a1c798ab 100644
--- a/indra/newview/llrecentpeople.h
+++ b/indra/newview/llrecentpeople.h
@@ -106,7 +106,7 @@ class LLRecentPeople: public LLSingleton<LLRecentPeople>, public LLOldEvents::LL
 	/**
 	 * LLSimpleListener interface.
 	 */
-	/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+	/*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) override;
 
 	void updateAvatarsArrivalTime(uuid_vec_t& uuids);
 	F32 getArrivalTimeByID(const LLUUID& id);
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index 7c762170a77da6b753004d3b19ff3b456a174a33..1930faa1a00eefb5ba1e02e3f325ea673a8a2efd 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -568,11 +568,11 @@ void LLSettingsVOSky::convertAtmosphericsToLegacy(LLSD& legacy, LLSD& settings)
         legacy[SETTING_BLUE_DENSITY] = ensure_array_4(legacyhaze[SETTING_BLUE_DENSITY], 1.0);
         legacy[SETTING_BLUE_HORIZON] = ensure_array_4(legacyhaze[SETTING_BLUE_HORIZON], 1.0);
 
-        legacy[SETTING_DENSITY_MULTIPLIER] = LLSDArray(legacyhaze[SETTING_DENSITY_MULTIPLIER].asReal())(0.0f)(0.0f)(1.0f);
-        legacy[SETTING_DISTANCE_MULTIPLIER] = LLSDArray(legacyhaze[SETTING_DISTANCE_MULTIPLIER].asReal())(0.0f)(0.0f)(1.0f);
+        legacy[SETTING_DENSITY_MULTIPLIER]  = llsd::array(legacyhaze[SETTING_DENSITY_MULTIPLIER].asReal(), 0.0f, 0.0f, 1.0f);
+        legacy[SETTING_DISTANCE_MULTIPLIER] = llsd::array(legacyhaze[SETTING_DISTANCE_MULTIPLIER].asReal(), 0.0f, 0.0f, 1.0f);
 
-        legacy[SETTING_HAZE_DENSITY]        = LLSDArray(legacyhaze[SETTING_HAZE_DENSITY])(0.0f)(0.0f)(1.0f);
-        legacy[SETTING_HAZE_HORIZON]        = LLSDArray(legacyhaze[SETTING_HAZE_HORIZON])(0.0f)(0.0f)(1.0f);
+        legacy[SETTING_HAZE_DENSITY]        = llsd::array(legacyhaze[SETTING_HAZE_DENSITY], 0.0f, 0.0f, 1.0f);
+        legacy[SETTING_HAZE_HORIZON]        = llsd::array(legacyhaze[SETTING_HAZE_HORIZON], 0.0f, 0.0f, 1.0f);
     }
 }
 
@@ -586,15 +586,15 @@ LLSD LLSettingsVOSky::convertToLegacy(const LLSettingsSky::ptr_t &psky, bool isA
     legacy[SETTING_CLOUD_COLOR] = ensure_array_4(settings[SETTING_CLOUD_COLOR], 1.0);
     legacy[SETTING_CLOUD_POS_DENSITY1] = ensure_array_4(settings[SETTING_CLOUD_POS_DENSITY1], 1.0);
     legacy[SETTING_CLOUD_POS_DENSITY2] = ensure_array_4(settings[SETTING_CLOUD_POS_DENSITY2], 1.0);
-    legacy[SETTING_CLOUD_SCALE] = LLSDArray(settings[SETTING_CLOUD_SCALE])(LLSD::Real(0.0))(LLSD::Real(0.0))(LLSD::Real(1.0));       
+    legacy[SETTING_CLOUD_SCALE] = llsd::array(settings[SETTING_CLOUD_SCALE], LLSD::Real(0.0), LLSD::Real(0.0), LLSD::Real(1.0));
     legacy[SETTING_CLOUD_SCROLL_RATE] = settings[SETTING_CLOUD_SCROLL_RATE];
-    legacy[SETTING_LEGACY_ENABLE_CLOUD_SCROLL] = LLSDArray(LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][0].asReal())))
-        (LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][1].asReal())));     
-    legacy[SETTING_CLOUD_SHADOW] = LLSDArray(settings[SETTING_CLOUD_SHADOW].asReal())(0.0f)(0.0f)(1.0f);    
-    legacy[SETTING_GAMMA] = LLSDArray(settings[SETTING_GAMMA])(0.0f)(0.0f)(1.0f);
+    legacy[SETTING_LEGACY_ENABLE_CLOUD_SCROLL] = llsd::array(LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][0].asReal())),
+        LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][1].asReal())));     
+    legacy[SETTING_CLOUD_SHADOW] = llsd::array(settings[SETTING_CLOUD_SHADOW].asReal(), 0.0f, 0.0f, 1.0f);    
+    legacy[SETTING_GAMMA] = llsd::array(settings[SETTING_GAMMA], 0.0f, 0.0f, 1.0f);
     legacy[SETTING_GLOW] = ensure_array_4(settings[SETTING_GLOW], 1.0);
     legacy[SETTING_LIGHT_NORMAL] = ensure_array_4(psky->getLightDirection().getValue(), 0.0f);
-    legacy[SETTING_MAX_Y] = LLSDArray(settings[SETTING_MAX_Y])(0.0f)(0.0f)(1.0f);
+    legacy[SETTING_MAX_Y] = llsd::array(settings[SETTING_MAX_Y], 0.0f, 0.0f, 1.0f);
     legacy[SETTING_STAR_BRIGHTNESS] = settings[SETTING_STAR_BRIGHTNESS].asReal() / 250.0f; // convert from 0-500 -> 0-2 ala pre-FS-compat changes
     legacy[SETTING_SUNLIGHT_COLOR] = ensure_array_4(settings[SETTING_SUNLIGHT_COLOR], 1.0f);
     
@@ -1062,7 +1062,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n
 
     newsettings[SETTING_NAME] = name;
 
-    LLSD watertrack = LLSDArray(
+    LLSD watertrack = llsd::array(
         LLSDMap(SETTING_KEYKFRAME, LLSD::Real(0.0f))
         (SETTING_KEYNAME, "water:Default"));
 
@@ -1077,7 +1077,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n
         skytrack.append(entry);
     }
 
-    newsettings[SETTING_TRACKS] = LLSDArray(watertrack)(skytrack);
+    newsettings[SETTING_TRACKS] = llsd::array(watertrack, skytrack);
 
     LLSD frames(LLSD::emptyMap());
 
@@ -1165,7 +1165,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyMessage(const LLUUID &regio
     watersettings[SETTING_NAME] = watername;
     frames[watername] = watersettings;
 
-    LLSD watertrack = LLSDArray(
+    LLSD watertrack = llsd::array(
             LLSDMap(SETTING_KEYKFRAME, LLSD::Real(0.0f))
             (SETTING_KEYNAME, watername));
 
@@ -1179,7 +1179,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyMessage(const LLUUID &regio
 
     LLSD newsettings = LLSDMap
         ( SETTING_NAME, "Region (legacy)" )
-        ( SETTING_TRACKS, LLSDArray(watertrack)(skytrack))
+        ( SETTING_TRACKS, llsd::array(watertrack, skytrack))
         ( SETTING_FRAMES, frames )
         ( SETTING_TYPE, "daycycle" );
 
@@ -1360,7 +1360,7 @@ LLSD LLSettingsVODay::convertToLegacy(const LLSettingsVODay::ptr_t &pday)
         skys[name.str()] = std::static_pointer_cast<LLSettingsSky>((*it).second);
         
         F32 frame = ((tracksky.size() == 1) && (it == tracksky.begin())) ? -1.0f : (*it).first;
-        llsdcycle.append( LLSDArray(LLSD::Real(frame))(name.str()) );
+        llsdcycle.append( llsd::array(LLSD::Real(frame), name.str()) );
     }
 
     LLSD llsdskylist(LLSD::emptyMap());
@@ -1373,7 +1373,7 @@ LLSD LLSettingsVODay::convertToLegacy(const LLSettingsVODay::ptr_t &pday)
         llsdskylist[(*its).first] = llsdsky;
     }
 
-    return LLSDArray(LLSD::emptyMap())(llsdcycle)(llsdskylist)(llsdwater);
+    return llsd::array(LLSD::emptyMap(), llsdcycle, llsdskylist, llsdwater);
 }
 
 LLSettingsSkyPtr_t  LLSettingsVODay::getDefaultSky() const
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index ed795b515586ea1b41cc34d02afe412bcc61b3f0..22c9481687770fc3f0f4064b8c49cfd99af85b1b 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -338,7 +338,7 @@ class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeak
 	LOG_CLASS(LLActiveSpeakerMgr);
 
 protected:
-	virtual void updateSpeakerList();
+	virtual void updateSpeakerList() override;
 };
 
 class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLLocalSpeakerMgr>
@@ -347,7 +347,7 @@ class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLLocalSpeaker
 	~LLLocalSpeakerMgr ();
 	LOG_CLASS(LLLocalSpeakerMgr);
 protected:
-	virtual void updateSpeakerList();
+	virtual void updateSpeakerList() override;
 };
 
 #endif // LL_LLSPEAKERS_H
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index 5ca1d4b4a57d597c558f4594052f70ed31acacb3..94b7470c6654c5f296c4869ff08e960dc8fe2323 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -84,7 +84,7 @@ class SpeakingIndicatorManager : public LLSingleton<SpeakingIndicatorManager>, L
 	 * So, method does not calculate difference between these list it only switches off already 
 	 * switched on indicators and switches on indicators of voice channel participants
 	 */
-	void onParticipantsChanged();
+	void onParticipantsChanged() override;
 	
 private:
 	typedef std::set<LLUUID> speaker_ids_t;
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index af89b4b53b2b2835639819b5d4c46275c6df1e5b..5c6f7254f22469d0691b9d42431e2222b622f2b4 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -859,12 +859,12 @@ LLTextureCache::~LLTextureCache()
 //////////////////////////////////////////////////////////////////////////////
 
 //virtual
-S32 LLTextureCache::update(F32 max_time_ms)
+size_t LLTextureCache::update(F32 max_time_ms)
 {
 	static LLFrameTimer timer ;
 	static const F32 MAX_TIME_INTERVAL = 300.f ; //seconds.
 
-	S32 res;
+	size_t res;
 	res = LLWorkerThread::update(max_time_ms);
 
 	mListMutex.lock();
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
index e1c752b58ed09a39e3c5e710d44bc6bcf03d0c0e..b6ace467c781c6d83d47caf2b527a56b047331f0 100644
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -113,7 +113,7 @@ class LLTextureCache : public LLWorkerThread
 	LLTextureCache(bool threaded);
 	~LLTextureCache();
 
-	/*virtual*/ S32 update(F32 max_time_ms);	
+	/*virtual*/ size_t update(F32 max_time_ms);
 	
 	void purgeCache(ELLPath location, bool remove_dir = true);
 	void setReadOnly(BOOL read_only) ;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index a7dcb1a9bb2db0f2c9cd607b14d4faaae101fd08..6f6ca2be9bac616e26c4d81da2870c1dd8b810a8 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -2879,9 +2879,9 @@ bool LLTextureFetch::updateRequestPriority(const LLUUID& id, F32 priority)
 // Threads:  T*
 
 //virtual
-S32 LLTextureFetch::getPending()
+size_t LLTextureFetch::getPending()
 {
-	S32 res;
+	size_t res;
 	lockData();															// +Ct
     {
         LLMutexLock lock(&mQueueMutex);									// +Mfq
@@ -2956,7 +2956,7 @@ void LLTextureFetch::commonUpdate()
 // Threads:  Tmain
 
 //virtual
-S32 LLTextureFetch::update(F32 max_time_ms)
+size_t LLTextureFetch::update(F32 max_time_ms)
 {
 	static LLCachedControl<F32> band_width(gSavedSettings,"ThrottleBandwidthKBPS", 3000.0);
 
@@ -2970,7 +2970,7 @@ S32 LLTextureFetch::update(F32 max_time_ms)
 		mNetworkQueueMutex.unlock();									// -Mfnq
 	}
 
-	S32 res = LLWorkerThread::update(max_time_ms);
+	size_t res = LLWorkerThread::update(max_time_ms);
 	
 	if (!mThreaded)
 	{
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index d087db275bb8f768ec7f52aa86ef318294b06e84..611a7d641966c88653e293b116697b41c395ae5b 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -65,7 +65,7 @@ class LLTextureFetch : public LLWorkerThread
 	class TFRequest;
 	
     // Threads:  Tmain
-	/*virtual*/ S32 update(F32 max_time_ms);
+	/*virtual*/ size_t update(F32 max_time_ms);
 	
 	// called in the main thread after the TextureCacheThread shuts down.
     // Threads:  Tmain
@@ -131,7 +131,7 @@ class LLTextureFetch : public LLWorkerThread
 	U32 getTotalNumHTTPRequests();
 	
     // Threads:  T*
-    S32 getPending();
+    size_t getPending();
 
     // Threads:  T*
 	void lockQueue() { mQueueMutex.lock(); }
diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h
index c108d8325681b0f54317f5d5899f05444bcb5ae7..6545ee36119909c2ff534a3ff1f892eb3f31affb 100644
--- a/indra/newview/lltoolbrush.h
+++ b/indra/newview/lltoolbrush.h
@@ -49,27 +49,27 @@ class LLToolBrushLand : public LLTool, public LLEditMenuHandler, public LLSingle
 public:
 	
 	// x,y in window coords, 0,0 = left,bot
-	virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
-	virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );		
-	virtual BOOL handleHover( S32 x, S32 y, MASK mask );
-	virtual void handleSelect();
-	virtual void handleDeselect();
+	virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ) override;
+	virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ) override;
+	virtual BOOL handleHover( S32 x, S32 y, MASK mask ) override;
+	virtual void handleSelect() override;
+	virtual void handleDeselect() override;
 
 	// isAlwaysRendered() - return true if this is a tool that should
 	// always be rendered regardless of selection.
-	virtual BOOL isAlwaysRendered() { return TRUE; }
+	virtual BOOL isAlwaysRendered()  override { return TRUE; }
 
 	// Draw the area that will be affected.
-	virtual void render();
+	virtual void render() override;
 
 	// on Idle is where the land modification actually occurs
 	static void onIdle(void* brush_tool);  
 
-	void			onMouseCaptureLost();
+	void onMouseCaptureLost() override;
 
 	void modifyLandInSelectionGlobal();
-	virtual void	undo();
-	virtual BOOL	canUndo() const	{ return TRUE; }
+	virtual void	undo() override;
+	virtual BOOL	canUndo() const	 override { return TRUE; }
 
 protected:
 	void brush( void );
diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h
index 86506f725ef4a93fa3563955759efa453589bd6c..f539a045b7681697bb9de707721674b62d795187 100644
--- a/indra/newview/lltoolcomp.h
+++ b/indra/newview/lltoolcomp.h
@@ -108,11 +108,11 @@ class LLToolCompInspect : public LLToolComposite, public LLSingleton<LLToolCompI
 public:
 
 	// Overridden from LLToolComposite
-    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
-    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleKey(KEY key, MASK mask);
-	virtual void		onMouseCaptureLost();
+    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;
+    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleKey(KEY key, MASK mask) override;
+	virtual void		onMouseCaptureLost() override;
 			void		keyUp(KEY key, MASK mask);
 
 	static void pickCallback(const LLPickInfo& pick_info);
@@ -133,13 +133,13 @@ class LLToolCompTranslate : public LLToolComposite, public LLSingleton<LLToolCom
 public:
 
 	// Overridden from LLToolComposite
-	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);			// Returns to the default tool
-	virtual void		render();
+	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;			// Returns to the default tool
+	virtual void		render() override;
 
-	virtual LLTool*		getOverrideTool(MASK mask);
+	virtual LLTool*		getOverrideTool(MASK mask) override;
 
 	static void pickCallback(const LLPickInfo& pick_info);
 };
@@ -154,13 +154,13 @@ class LLToolCompScale : public LLToolComposite, public LLSingleton<LLToolCompSca
 public:
 
 	// Overridden from LLToolComposite
-    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
-    virtual BOOL		handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);			// Returns to the default tool
-	virtual void		render();
+    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
+    virtual BOOL		handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;			// Returns to the default tool
+	virtual void		render() override;
 
-	virtual LLTool*		getOverrideTool(MASK mask);
+	virtual LLTool*		getOverrideTool(MASK mask) override;
 	
 	static void pickCallback(const LLPickInfo& pick_info);
 };
@@ -176,13 +176,13 @@ class LLToolCompRotate : public LLToolComposite, public LLSingleton<LLToolCompRo
 public:
 
 	// Overridden from LLToolComposite
-    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
-    virtual BOOL		handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual void		render();
+    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
+    virtual BOOL		handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual void		render() override;
 
-	virtual LLTool*		getOverrideTool(MASK mask);
+	virtual LLTool*		getOverrideTool(MASK mask) override;
 
 	static void pickCallback(const LLPickInfo& pick_info);
 
@@ -199,9 +199,9 @@ class LLToolCompCreate : public LLToolComposite, public LLSingleton<LLToolCompCr
 public:
 
 	// Overridden from LLToolComposite
-    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
+    virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+    virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;
 	
 	static void pickCallback(const LLPickInfo& pick_info);
 protected:
@@ -224,16 +224,16 @@ class LLToolCompGun : public LLToolComposite, public LLSingleton<LLToolCompGun>
 public:
 
 	// Overridden from LLToolComposite
-    virtual BOOL			handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL			handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL			handleDoubleClick(S32 x, S32 y, MASK mask);
-	virtual BOOL			handleRightMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL			handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL			handleScrollWheel(S32 x, S32 y, S32 clicks);
-	virtual void			onMouseCaptureLost();
-	virtual void			handleSelect();
-	virtual void			handleDeselect();
-	virtual LLTool*			getOverrideTool(MASK mask) { return NULL; }
+    virtual BOOL			handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL			handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL			handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	virtual BOOL			handleRightMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL			handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL			handleScrollWheel(S32 x, S32 y, S32 clicks) override;
+	virtual void			onMouseCaptureLost() override;
+	virtual void			handleSelect() override;
+	virtual void			handleDeselect() override;
+	virtual LLTool*			getOverrideTool(MASK mask) override { return NULL; }
 
 protected:
 	LLToolGun*			mGun;
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
index 4537d73332e346fff24d2e424f137b309b21f4db..8ec027cb0e4cc4c55d3fe499d1d8531439ebf003 100644
--- a/indra/newview/lltooldraganddrop.h
+++ b/indra/newview/lltooldraganddrop.h
@@ -48,12 +48,12 @@ class LLToolDragAndDrop : public LLTool, public LLSingleton<LLToolDragAndDrop>
 	typedef boost::signals2::signal<void ()> enddrag_signal_t;
 
 	// overridden from LLTool
-	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleKey(KEY key, MASK mask);
-	virtual BOOL	handleToolTip(S32 x, S32 y, MASK mask);
-	virtual void	onMouseCaptureLost();
-	virtual void	handleDeselect();
+	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleKey(KEY key, MASK mask) override;
+	virtual BOOL	handleToolTip(S32 x, S32 y, MASK mask) override;
+	virtual void	onMouseCaptureLost() override;
+	virtual void	handleDeselect() override;
 
 	void			setDragStart( S32 x, S32 y );			// In screen space
 	BOOL			isOverThreshold( S32 x, S32 y );		// In screen space
diff --git a/indra/newview/lltoolface.h b/indra/newview/lltoolface.h
index e4b8ae12b87d4a62e95e727feee1527acc97b149..7c8ff2048068e9da9eabb7f2d53358c8d0469ff2 100644
--- a/indra/newview/lltoolface.h
+++ b/indra/newview/lltoolface.h
@@ -39,11 +39,11 @@ class LLToolFace
 	virtual ~LLToolFace();
 public:
 
-	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleDoubleClick(S32 x, S32 y, MASK mask);
-	virtual void	handleSelect();
-	virtual void	handleDeselect();
-	virtual void	render();			// draw face highlights
+	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	virtual void	handleSelect() override;
+	virtual void	handleDeselect() override;
+	virtual void	render() override;			// draw face highlights
 
 	static void pickCallback(const LLPickInfo& pick_info);
 };
diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h
index cfc235b6c2a411fba999d95e0de805f7fb13b532..c9dd39ff4b7985ca5d9bec8f12a8baf5d82a5925 100644
--- a/indra/newview/lltoolfocus.h
+++ b/indra/newview/lltoolfocus.h
@@ -38,16 +38,16 @@ class LLToolCamera
 	virtual ~LLToolCamera();
 public:
 
-	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);
+	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleHover(S32 x, S32 y, MASK mask) override;
 
-	virtual void	onMouseCaptureLost();
+	virtual void	onMouseCaptureLost() override;
 
-	virtual void	handleSelect();
-	virtual void	handleDeselect();
+	virtual void	handleSelect() override;
+	virtual void	handleDeselect() override;
 
-	virtual LLTool*	getOverrideTool(MASK mask) { return NULL; }
+	virtual LLTool*	getOverrideTool(MASK mask) override { return NULL; }
 
 	static void pickCallback(const LLPickInfo& pick_info);
 	BOOL mouseSteerMode() { return mMouseSteering; }
diff --git a/indra/newview/lltoolindividual.h b/indra/newview/lltoolindividual.h
index e7c2060fba01909da6a84bc444dc7f03d9e256bf..89dd9d9796f43c6f934ffc9df8b856da1c5851a1 100644
--- a/indra/newview/lltoolindividual.h
+++ b/indra/newview/lltoolindividual.h
@@ -43,11 +43,9 @@ class LLToolIndividual : public LLTool, public LLSingleton<LLToolIndividual>
 	virtual ~LLToolIndividual();
 public:
 
-	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
-	virtual void handleSelect();
-	//virtual void handleDeselect();
-	//virtual void render();
+	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	virtual void handleSelect() override;
 
 	static void pickCallback(const LLPickInfo& pick_info);
 
diff --git a/indra/newview/lltoolobjpicker.h b/indra/newview/lltoolobjpicker.h
index 5ad9b67e217859e85709603b33b0ea29b775e53b..a55cd223de2718eda2791b18acc8469487125f1f 100644
--- a/indra/newview/lltoolobjpicker.h
+++ b/indra/newview/lltoolobjpicker.h
@@ -38,16 +38,16 @@ class LLToolObjPicker : public LLTool, public LLSingleton<LLToolObjPicker>
 	LLSINGLETON(LLToolObjPicker);
 public:
 
-	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleHover(S32 x, S32 y, MASK mask);
+	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleHover(S32 x, S32 y, MASK mask) override;
 
-	virtual void 		handleSelect();
-	virtual void 		handleDeselect();
+	virtual void 		handleSelect() override;
+	virtual void 		handleDeselect() override;
 
-	virtual void		onMouseCaptureLost();
+	virtual void		onMouseCaptureLost() override;
 
-	virtual void 		setExitCallback(void (*callback)(void *), void *callback_data);
+	void 		setExitCallback(void (*callback)(void *), void *callback_data);
 
 	LLUUID				getObjectID() const { return mHitObjectID; }
 
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
index 8f6100e4b44003ba900e67a653098b867b32c927..dca0d12cf6cf5e346b0c03dda94bdf40540487bf 100644
--- a/indra/newview/lltoolpie.h
+++ b/indra/newview/lltoolpie.h
@@ -42,26 +42,26 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
 public:
 
 	// Virtual functions inherited from LLMouseHandler
-	virtual BOOL		handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down);
-	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleRightMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleRightMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
+	virtual BOOL		handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down) override;
+	virtual BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleRightMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleRightMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
 	BOOL				handleScrollWheelAny(S32 x, S32 y, S32 clicks_x, S32 clicks_y);
-	virtual BOOL		handleScrollWheel(S32 x, S32 y, S32 clicks);
-	virtual BOOL		handleScrollHWheel(S32 x, S32 y, S32 clicks);
-	virtual BOOL		handleToolTip(S32 x, S32 y, MASK mask);
+	virtual BOOL		handleScrollWheel(S32 x, S32 y, S32 clicks) override;
+	virtual BOOL		handleScrollHWheel(S32 x, S32 y, S32 clicks) override;
+	virtual BOOL		handleToolTip(S32 x, S32 y, MASK mask) override;
 
-	virtual void		render();
+	virtual void		render() override;
 
-	virtual void		stopEditing();
+	virtual void		stopEditing() override;
 
-	virtual void		onMouseCaptureLost();
-	virtual void		handleSelect();
-	virtual void		handleDeselect();
-	virtual LLTool*		getOverrideTool(MASK mask);
+	virtual void		onMouseCaptureLost() override;
+	virtual void		handleSelect() override;
+	virtual void		handleDeselect() override;
+	virtual LLTool*		getOverrideTool(MASK mask) override;
 
 	LLPickInfo&			getPick() { return mPick; }
 	U8					getClickAction() { return mClickAction; }
diff --git a/indra/newview/lltoolpipette.h b/indra/newview/lltoolpipette.h
index 7575d8ad18454b60ad66451af839338b4efdc6d0..2636811c66d4513d8865eeec937858cf750e5ae2 100644
--- a/indra/newview/lltoolpipette.h
+++ b/indra/newview/lltoolpipette.h
@@ -47,10 +47,10 @@ class LLToolPipette
 	virtual ~LLToolPipette();
 
 public:
-	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleToolTip(S32 x, S32 y, MASK mask);
+	virtual BOOL	handleMouseDown(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleMouseUp(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleHover(S32 x, S32 y, MASK mask) override;
+	virtual BOOL	handleToolTip(S32 x, S32 y, MASK mask) override;
 
 	// Note: Don't return connection; use boost::bind + boost::signals2::trackable to disconnect slots
 	typedef boost::signals2::signal<void (const LLTextureEntry& te)> signal_t;
diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h
index b5ba72f16d5d0073e3bcb6127cf12c136b1352c4..88bc4e2e3d64f561e102430a434bac682abb3816 100644
--- a/indra/newview/lltoolselectland.h
+++ b/indra/newview/lltoolselectland.h
@@ -39,15 +39,15 @@ class LLToolSelectLand
 	virtual ~LLToolSelectLand();
 
 public:
-	/*virtual*/ BOOL		handleMouseDown(S32 x, S32 y, MASK mask);
-	/*virtual*/ BOOL		handleDoubleClick(S32 x, S32 y, MASK mask);
-	/*virtual*/ BOOL		handleMouseUp(S32 x, S32 y, MASK mask);
-	/*virtual*/ BOOL		handleHover(S32 x, S32 y, MASK mask);
-	/*virtual*/ void		render();				// draw the select rectangle
-	/*virtual*/ BOOL		isAlwaysRendered()		{ return TRUE; }
+	/*virtual*/ BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override;
+	/*virtual*/ BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override;
+	/*virtual*/ BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override;
+	/*virtual*/ BOOL		handleHover(S32 x, S32 y, MASK mask) override;
+	/*virtual*/ void		render() override;				// draw the select rectangle
+	/*virtual*/ BOOL		isAlwaysRendered() override	{ return TRUE; }
 
-	/*virtual*/ void		handleSelect();
-	/*virtual*/ void		handleDeselect();
+	/*virtual*/ void		handleSelect() override;
+	/*virtual*/ void		handleDeselect() override;
 
 protected:
 	BOOL			outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y);
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index 02ff0c094aaa96fab6d5d5e5aeeebb52ed9ec46d..37382243f6a6de64a27ca88afaa9a0d2f786e21c 100644
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -47,7 +47,7 @@ class LLStoreListener;
 class LLVersionInfo: public LLSingleton<LLVersionInfo>
 {
 	LLSINGLETON(LLVersionInfo);
-	void initSingleton();
+	void initSingleton() override;
 public:
 	~LLVersionInfo();
 
diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h
index da50e07a4362a092c2241e26929dbf6be5f52a87..bbd20bc07ebcb5612087a517cf53c5dbba94d753 100644
--- a/indra/newview/llviewerhelp.h
+++ b/indra/newview/llviewerhelp.h
@@ -43,21 +43,21 @@ class LLViewerHelp : public LLHelp, public LLSingleton<LLViewerHelp>
 
  public:
 	/// display the specified help topic in the help viewer
-	/*virtual*/ void showTopic(const std::string &topic);
+	/*virtual*/ void showTopic(const std::string &topic) override;
 
-	std::string getURL(const std::string& topic);
+	std::string getURL(const std::string& topic) override;
 
 	// return topic derived from viewer UI focus, else default topic
 	std::string getTopicFromFocus();
 
 	/// return default (fallback) topic name suitable for showTopic()
-	/*virtual*/ std::string defaultTopic();
+	/*virtual*/ std::string defaultTopic() override;
 
 	// return topic to use before the user logs in
-	/*virtual*/ std::string preLoginTopic();
+	/*virtual*/ std::string preLoginTopic() override;
 
 	// return topic to use for the top-level help, invoked by F1
-	/*virtual*/ std::string f1HelpTopic();
+	/*virtual*/ std::string f1HelpTopic() override;
 };
 
 #endif // header guard
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index f1f42afd81ac127be5f68b27b257f97d9acd8f1f..ad7c4bcefa34c028394744c24fab7c4888a706ee 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -74,7 +74,7 @@ class LLViewerMedia: public LLSingleton<LLViewerMedia>
 {
 	LLSINGLETON(LLViewerMedia);
 	~LLViewerMedia();
-	void initSingleton();
+	void initSingleton() override;
 	LOG_CLASS(LLViewerMedia);
 
 public:
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
index effd08a559b77858abff7acb90d5ac69b41f94e5..2310e4dbfcf53f3fd1e68a3288e4687479725d5d 100644
--- a/indra/newview/llviewermediafocus.h
+++ b/indra/newview/llviewermediafocus.h
@@ -54,10 +54,10 @@ class LLViewerMediaFocus :
 	void setHoverFace(LLPointer<LLViewerObject> objectp, S32 face, viewer_media_t media_impl, LLVector3 pick_normal = LLVector3::zero);
 	void clearHover();
 	
-	/*virtual*/ bool	getFocus();
-	/*virtual*/ BOOL	handleKey(KEY key, MASK mask, BOOL called_from_parent);
-	/*virtual*/ BOOL	handleKeyUp(KEY key, MASK mask, BOOL called_from_parent);
-	/*virtual*/ BOOL	handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
+	bool	getFocus();
+	/*virtual*/ BOOL	handleKey(KEY key, MASK mask, BOOL called_from_parent) override;
+	/*virtual*/ BOOL	handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override;
+	/*virtual*/ BOOL	handleUnicodeChar(llwchar uni_char, BOOL called_from_parent) override;
 	BOOL handleScrollWheel(const LLVector2& texture_coords, S32 clicks_x, S32 clicks_y);
 	BOOL handleScrollWheel(S32 x, S32 y, S32 clicks_x, S32 clicks_y);
 
@@ -92,12 +92,12 @@ class LLViewerMediaFocus :
 	LLUUID getControlsMediaID();
 
     // The MoaP object wants keyup and keydown events.  Overridden to return true.
-    virtual bool    wantsKeyUpKeyDown() const;
-    virtual bool    wantsReturnKey() const;
+    virtual bool    wantsKeyUpKeyDown() const override;
+    virtual bool    wantsReturnKey() const override;
 
 protected:
-	/*virtual*/ void	onFocusReceived();
-	/*virtual*/ void	onFocusLost();
+	/*virtual*/ void	onFocusReceived() override;
+	/*virtual*/ void	onFocusLost() override;
 
 private:
 	
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index d97ed61e115f323ca093576d0e5ffe026b9071b6..5266db5b3891bd2ca464bcb0db6291b40417f121 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6284,7 +6284,7 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response)
 		// More than OFFER_RECIPIENT_LIMIT targets will overload the message
 		// producing an llerror.
 		LLSD args;
-		args["OFFERS"] = notification["payload"]["ids"].size();
+		args["OFFERS"] = LLSD::Integer(notification["payload"]["ids"].size());
 		args["LIMIT"] = static_cast<int>(OFFER_RECIPIENT_LIMIT);
 		LLNotificationsUtil::add("TooManyTeleportOffers", args);
 		return false;
diff --git a/indra/newview/llviewerparcelaskplay.h b/indra/newview/llviewerparcelaskplay.h
index dc711917d29368f1e755d6ecd0594a6833782e31..56faddae663b56998a5886bde5309e1fe3182d11 100644
--- a/indra/newview/llviewerparcelaskplay.h
+++ b/indra/newview/llviewerparcelaskplay.h
@@ -34,8 +34,8 @@ class LLViewerParcelAskPlay : public LLSingleton<LLViewerParcelAskPlay>
 {
     LLSINGLETON(LLViewerParcelAskPlay);
     ~LLViewerParcelAskPlay();
-    void initSingleton();
-    void cleanupSingleton();
+    void initSingleton() override;
+    void cleanupSingleton() override;
 public:
     // functor expects functor(region_id, parcel_id, url, play/stop)
     typedef boost::function<void(const LLUUID&, const S32&, const std::string&, const bool&)> ask_callback;
diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h
index 779a65bdf83a5cb239b485e2379bc21ec2675658..790b2b71fc7a3ec8b581707ae845977f01d7af09 100644
--- a/indra/newview/llviewerparcelmedia.h
+++ b/indra/newview/llviewerparcelmedia.h
@@ -74,7 +74,7 @@ class LLViewerParcelMedia : public LLViewerMediaObserver, public LLSingleton<LLV
 	void sendMediaNavigateMessage(const std::string& url);
 
 	// inherited from LLViewerMediaObserver
-	virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+	virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override;
 
 private:
 	void processParcelMediaCommandMessage(LLMessageSystem *msg);
diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h
index d71fd4c07508a8d4c49a7e62e07009138d85d2e7..e83085dee0656907e3ca8af78ce164b7f413261e 100644
--- a/indra/newview/llviewerparcelmediaautoplay.h
+++ b/indra/newview/llviewerparcelmediaautoplay.h
@@ -35,7 +35,7 @@ class LLViewerParcelMediaAutoPlay : LLEventTimer, public LLSingleton<LLViewerPar
 {
 	LLSINGLETON(LLViewerParcelMediaAutoPlay);
 public:
-	virtual BOOL tick();
+	virtual BOOL tick() override;
 	static void playStarted();
 
  private:
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index 0018e78d4567ab53f9c307fa6eb9b6347441011e..f159682b6718b811d17dce8aa37069fc170d08a1 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -242,9 +242,9 @@ class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIIm
 	LLSINGLETON_EMPTY_CTOR(LLUIImageList);
 public:
 	// LLImageProviderInterface
-	/*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority);
-	/*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority);
-	void cleanUp();
+	/*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority) override;
+	/*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority) override;
+	void cleanUp() override;
 
 	bool initFromFile();
 
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 309c3eebddfea599b9decd08d3dc362fe096457b..e68bfbe1ffa9409594e0147bb85fa49fba04ad41 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -170,12 +170,12 @@ class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoice
 	LLSINGLETON(LLVoiceChannelProximal);
 public:
 
-	/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
-	/*virtual*/ void handleStatusChange(EStatusType status);
-	/*virtual*/ void handleError(EStatusType status);
-	/*virtual*/ BOOL isActive();
-	/*virtual*/ void activate();
-	/*virtual*/ void deactivate();
+	/*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal) override;
+	/*virtual*/ void handleStatusChange(EStatusType status) override;
+	/*virtual*/ void handleError(EStatusType status) override;
+	/*virtual*/ BOOL isActive() override;
+	/*virtual*/ void activate() override;
+	/*virtual*/ void deactivate() override;
 
 };
 
@@ -184,15 +184,15 @@ class LLVoiceChannelP2P : public LLVoiceChannelGroup
 public:
 	LLVoiceChannelP2P(const LLUUID& session_id, const std::string& session_name, const LLUUID& other_user_id);
 
-	/*virtual*/ void handleStatusChange(EStatusType status);
-	/*virtual*/ void handleError(EStatusType status);
-    /*virtual*/ void activate();
-	/*virtual*/ void getChannelInfo();
+	/*virtual*/ void handleStatusChange(EStatusType status) override;
+	/*virtual*/ void handleError(EStatusType status) override;
+    /*virtual*/ void activate() override;
+	/*virtual*/ void getChannelInfo() override;
 
 	void setSessionHandle(const std::string& handle, const std::string &inURI);
 
 protected:
-	virtual void setState(EState state);
+	virtual void setState(EState state) override;
 
 private:
 
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index ebc3a62c350428e666be6b25e01d82ba996cbea3..511b6ff719819b6951285c5e31e8f4a37043ec35 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -64,28 +64,28 @@ class LLVivoxVoiceClient :	public LLSingleton<LLVivoxVoiceClient>,
 	/// @name LLVoiceModuleInterface virtual implementations
 	///  @see LLVoiceModuleInterface
 	//@{
-	virtual void init(LLPumpIO *pump);	// Call this once at application startup (creates connector)
-	virtual void terminate();	// Call this to clean up during shutdown
+	virtual void init(LLPumpIO *pump) override;	// Call this once at application startup (creates connector)
+	virtual void terminate() override;	// Call this to clean up during shutdown
 	
-	virtual const LLVoiceVersionInfo& getVersion();
+	virtual const LLVoiceVersionInfo& getVersion() override;
 	
-	virtual void updateSettings(); // call after loading settings and whenever they change
+	virtual void updateSettings() override; // call after loading settings and whenever they change
 
 	// Returns true if vivox has successfully logged in and is not in error state	
-	virtual bool isVoiceWorking() const;
+	virtual bool isVoiceWorking() const override;
 	
-	virtual bool singletoneInstanceExists();
+	virtual bool singletoneInstanceExists() override;
 
 	/////////////////////
 	/// @name Tuning
 	//@{
-	virtual void tuningStart();
-	virtual void tuningStop();
-	virtual bool inTuningMode();
+	virtual void tuningStart() override;
+	virtual void tuningStop() override;
+	virtual bool inTuningMode() override;
 	
-	virtual void tuningSetMicVolume(float volume);
-	virtual void tuningSetSpeakerVolume(float volume);
-	virtual float tuningGetEnergy(void);
+	virtual void tuningSetMicVolume(float volume) override;
+	virtual void tuningSetSpeakerVolume(float volume) override;
+	virtual float tuningGetEnergy(void) override;
 	//@}
 	
 	/////////////////////
@@ -93,40 +93,40 @@ class LLVivoxVoiceClient :	public LLSingleton<LLVivoxVoiceClient>,
 	//@{
 	// This returns true when it's safe to bring up the "device settings" dialog in the prefs.
 	// i.e. when the daemon is running and connected, and the device lists are populated.
-	virtual bool deviceSettingsAvailable();
-	virtual bool deviceSettingsUpdated();  //return if the list has been updated and never fetched,  only to be called from the voicepanel.
+	virtual bool deviceSettingsAvailable() override;
+	virtual bool deviceSettingsUpdated() override;  //return if the list has been updated and never fetched,  only to be called from the voicepanel.
 	
 	// Requery the vivox daemon for the current list of input/output devices.
 	// If you pass true for clearCurrentList, deviceSettingsAvailable() will be false until the query has completed
 	// (use this if you want to know when it's done).
 	// If you pass false, you'll have no way to know when the query finishes, but the device lists will not appear empty in the interim.
-	virtual void refreshDeviceLists(bool clearCurrentList = true);
+	virtual void refreshDeviceLists(bool clearCurrentList = true) override;
 	
-	virtual void setCaptureDevice(const std::string& name);
-	virtual void setRenderDevice(const std::string& name);
+	virtual void setCaptureDevice(const std::string& name) override;
+	virtual void setRenderDevice(const std::string& name) override;
 	
-	virtual LLVoiceDeviceList& getCaptureDevices();
-	virtual LLVoiceDeviceList& getRenderDevices();
+	virtual LLVoiceDeviceList& getCaptureDevices() override;
+	virtual LLVoiceDeviceList& getRenderDevices() override;
 	//@}	
 	
-	virtual void getParticipantList(std::set<LLUUID> &participants);
-	virtual bool isParticipant(const LLUUID& speaker_id);
+	virtual void getParticipantList(std::set<LLUUID> &participants) override;
+	virtual bool isParticipant(const LLUUID& speaker_id) override;
 
 	// Send a text message to the specified user, initiating the session if necessary.
 	// virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message) const {return false;};
 	
 	// close any existing text IM session with the specified user
-	virtual void endUserIMSession(const LLUUID &uuid);
+	virtual void endUserIMSession(const LLUUID &uuid) override;
 
 	// Returns true if calling back the session URI after the session has closed is possible.
 	// Currently this will be false only for PSTN P2P calls.		
 	// NOTE: this will return true if the session can't be found. 
-	virtual BOOL isSessionCallBackPossible(const LLUUID &session_id);
+	virtual BOOL isSessionCallBackPossible(const LLUUID &session_id) override;
 	
 	// Returns true if the session can accepte text IM's.
 	// Currently this will be false only for PSTN P2P calls.
 	// NOTE: this will return true if the session can't be found. 
-	virtual BOOL isSessionTextIMPossible(const LLUUID &session_id);
+	virtual BOOL isSessionTextIMPossible(const LLUUID &session_id) override;
 	
 	
 	////////////////////////////
@@ -134,21 +134,21 @@ class LLVivoxVoiceClient :	public LLSingleton<LLVivoxVoiceClient>,
 	//@{
 	// returns true iff the user is currently in a proximal (local spatial) channel.
 	// Note that gestures should only fire if this returns true.
-	virtual bool inProximalChannel();
+	virtual bool inProximalChannel() override;
 	
 	virtual void setNonSpatialChannel(const std::string &uri,
-									  const std::string &credentials);
+									  const std::string &credentials) override;
 	
 	virtual bool setSpatialChannel(const std::string &uri,
-								   const std::string &credentials);
+								   const std::string &credentials) override;
 	
-	virtual void leaveNonSpatialChannel();
+	virtual void leaveNonSpatialChannel() override;
 	
-	virtual void leaveChannel(void);	
+	virtual void leaveChannel(void) override;
 	
 	// Returns the URI of the current channel, or an empty string if not currently in a channel.
 	// NOTE that it will return an empty string if it's in the process of joining a channel.
-	virtual std::string getCurrentChannel();
+	virtual std::string getCurrentChannel() override;
 	//@}
 	
 	
@@ -156,59 +156,59 @@ class LLVivoxVoiceClient :	public LLSingleton<LLVivoxVoiceClient>,
 	/// @name invitations
 	//@{
 	// start a voice channel with the specified user
-	virtual void callUser(const LLUUID &uuid);	
-	virtual bool isValidChannel(std::string &channelHandle);
-	virtual bool answerInvite(std::string &channelHandle);
-	virtual void declineInvite(std::string &channelHandle);
+	virtual void callUser(const LLUUID &uuid) override;
+	virtual bool isValidChannel(std::string &channelHandle) override;
+	virtual bool answerInvite(std::string &channelHandle) override;
+	virtual void declineInvite(std::string &channelHandle) override;
 	//@}
 	
 	/////////////////////////
 	/// @name Volume/gain
 	//@{
-	virtual void setVoiceVolume(F32 volume);
-	virtual void setMicGain(F32 volume);
+	virtual void setVoiceVolume(F32 volume) override;
+	virtual void setMicGain(F32 volume) override;
 	//@}
 	
 	/////////////////////////
 	/// @name enable disable voice and features
 	//@{
-	virtual bool voiceEnabled();
-	virtual void setVoiceEnabled(bool enabled);
-	virtual BOOL lipSyncEnabled();	
-	virtual void setLipSyncEnabled(BOOL enabled);
-	virtual void setMuteMic(bool muted);		// Set the mute state of the local mic.
+	virtual bool voiceEnabled() override;
+	virtual void setVoiceEnabled(bool enabled) override;
+	virtual BOOL lipSyncEnabled() override;
+	virtual void setLipSyncEnabled(BOOL enabled) override;
+	virtual void setMuteMic(bool muted) override;		// Set the mute state of the local mic.
 	//@}
 		
 	//////////////////////////
 	/// @name nearby speaker accessors
 	//@{
-	virtual BOOL getVoiceEnabled(const LLUUID& id);		// true if we've received data for this avatar
-	virtual std::string getDisplayName(const LLUUID& id);
-	virtual BOOL isParticipantAvatar(const LLUUID &id);
-	virtual BOOL getIsSpeaking(const LLUUID& id);
-	virtual BOOL getIsModeratorMuted(const LLUUID& id);
-	virtual F32 getCurrentPower(const LLUUID& id);		// "power" is related to "amplitude" in a defined way.  I'm just not sure what the formula is...
-	virtual BOOL getOnMuteList(const LLUUID& id);
-	virtual F32 getUserVolume(const LLUUID& id);
-	virtual void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)	
+	virtual BOOL getVoiceEnabled(const LLUUID& id) override;		// true if we've received data for this avatar
+	virtual std::string getDisplayName(const LLUUID& id) override;
+	virtual BOOL isParticipantAvatar(const LLUUID &id) override;
+	virtual BOOL getIsSpeaking(const LLUUID& id) override;
+	virtual BOOL getIsModeratorMuted(const LLUUID& id) override;
+	virtual F32 getCurrentPower(const LLUUID& id) override;		// "power" is related to "amplitude" in a defined way.  I'm just not sure what the formula is...
+	virtual BOOL getOnMuteList(const LLUUID& id) override;
+	virtual F32 getUserVolume(const LLUUID& id) override;
+	virtual void setUserVolume(const LLUUID& id, F32 volume) override; // set's volume for specified agent, from 0-1 (where .5 is nominal)
 	//@}
 	
 	// authorize the user
 	virtual void userAuthorized(const std::string& user_id,
-								const LLUUID &agentID);
+								const LLUUID &agentID) override;
 	
 	//////////////////////////////
 	/// @name Status notification
 	//@{
-	virtual void addObserver(LLVoiceClientStatusObserver* observer);
-	virtual void removeObserver(LLVoiceClientStatusObserver* observer);
-	virtual void addObserver(LLFriendObserver* observer);
-	virtual void removeObserver(LLFriendObserver* observer);		
-	virtual void addObserver(LLVoiceClientParticipantObserver* observer);
-	virtual void removeObserver(LLVoiceClientParticipantObserver* observer);
+	virtual void addObserver(LLVoiceClientStatusObserver* observer) override;
+	virtual void removeObserver(LLVoiceClientStatusObserver* observer) override;
+	virtual void addObserver(LLFriendObserver* observer) override;
+	virtual void removeObserver(LLFriendObserver* observer) override;
+	virtual void addObserver(LLVoiceClientParticipantObserver* observer) override;
+	virtual void removeObserver(LLVoiceClientParticipantObserver* observer) override;
 	//@}
 	
-	virtual std::string sipURIFromID(const LLUUID &id);
+	virtual std::string sipURIFromID(const LLUUID &id) override;
 	//@}
 
 	/// @name LLVoiceEffectInterface virtual implementations
@@ -218,32 +218,32 @@ class LLVivoxVoiceClient :	public LLSingleton<LLVivoxVoiceClient>,
 	//////////////////////////
 	/// @name Accessors
 	//@{
-	virtual bool setVoiceEffect(const LLUUID& id);
-	virtual const LLUUID getVoiceEffect();
-	virtual LLSD getVoiceEffectProperties(const LLUUID& id);
+	virtual bool setVoiceEffect(const LLUUID& id) override;
+	virtual const LLUUID getVoiceEffect() override;
+	virtual LLSD getVoiceEffectProperties(const LLUUID& id) override;
 
-	virtual void refreshVoiceEffectLists(bool clear_lists);
-	virtual const voice_effect_list_t& getVoiceEffectList() const;
-	virtual const voice_effect_list_t& getVoiceEffectTemplateList() const;
+	virtual void refreshVoiceEffectLists(bool clear_lists) override;
+	virtual const voice_effect_list_t& getVoiceEffectList() const override;
+	virtual const voice_effect_list_t& getVoiceEffectTemplateList() const override;
 	//@}
 
 	//////////////////////////////
 	/// @name Status notification
 	//@{
-	virtual void addObserver(LLVoiceEffectObserver* observer);
-	virtual void removeObserver(LLVoiceEffectObserver* observer);
+	virtual void addObserver(LLVoiceEffectObserver* observer) override;
+	virtual void removeObserver(LLVoiceEffectObserver* observer) override;
 	//@}
 
 	//////////////////////////////
 	/// @name Effect preview buffer
 	//@{
-	virtual void enablePreviewBuffer(bool enable);
-	virtual void recordPreviewBuffer();
-	virtual void playPreviewBuffer(const LLUUID& effect_id = LLUUID::null);
-	virtual void stopPreviewBuffer();
+	virtual void enablePreviewBuffer(bool enable) override;
+	virtual void recordPreviewBuffer() override;
+	virtual void playPreviewBuffer(const LLUUID& effect_id = LLUUID::null) override;
+	virtual void stopPreviewBuffer() override;
 
-	virtual bool isPreviewRecording();
-	virtual bool isPreviewPlaying();
+	virtual bool isPreviewRecording() override;
+	virtual bool isPreviewPlaying() override;
 	//@}
 
 	//@}
@@ -754,7 +754,7 @@ class LLVivoxVoiceClient :	public LLSingleton<LLVivoxVoiceClient>,
 	std::string getAudioSessionURI();
 	std::string getAudioSessionHandle();
 			
-    void setHidden(bool hidden); //virtual
+    void setHidden(bool hidden) override; //virtual
 	void sendPositionAndVolumeUpdate(void);
 	
     void sendCaptureAndRenderDevices();
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index ba8488b23785d62e0cde5cede09c0e30fde51c00..602e8f071151101540751dcf1900e4b26670737b 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -413,7 +413,7 @@ class LLWearableItemsList : public LLInventoryItemsList
 	{
 		LLSINGLETON(ContextMenu);
 	public:
-		/*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
+		/*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) override;
 
 		void show(LLView* spawning_view, LLWearableType::EType w_type, S32 x, S32 y);
 
@@ -426,7 +426,7 @@ class LLWearableItemsList : public LLInventoryItemsList
 			MASK_UNKNOWN		= 0x10,
 		};
 
-		/* virtual */ LLContextMenu* createMenu();
+		/* virtual */ LLContextMenu* createMenu() override;
 		void updateItemsVisibility(LLContextMenu* menu);
 		void updateItemsLabels(LLContextMenu* menu);
 		static void setMenuItemVisible(LLContextMenu* menu, const std::string& name, bool val);
@@ -456,7 +456,7 @@ class LLWearableItemsList : public LLInventoryItemsList
 
 	virtual ~LLWearableItemsList();
 
-	/*virtual*/ LLPanel* createNewItem(LLViewerInventoryItem* item);
+	/*virtual*/ LLPanel* createNewItem(LLViewerInventoryItem* item) override;
 
 	void updateList(const LLUUID& category_id);
 
diff --git a/indra/newview/llwindebug.h b/indra/newview/llwindebug.h
index 524adba652960c849583ae81b253f782cea679fe..31dbfb8ffd01082d2c96d86860598f1ec119b21f 100644
--- a/indra/newview/llwindebug.h
+++ b/indra/newview/llwindebug.h
@@ -40,9 +40,9 @@ class LLWinDebug:
 {
 	LLSINGLETON_EMPTY_CTOR(LLWinDebug);
 public:
-	void initSingleton();
+	void initSingleton() override;
 	static void generateMinidump(struct _EXCEPTION_POINTERS *pExceptionInfo = NULL);
-	void cleanupSingleton();
+	void cleanupSingleton() override;
 private:
 	static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const std::string& filename);
 };