diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp
index e906d81ce15229ae99aad55dd06c4bcecee4d5c6..1b8e8a1acda33ba5f7976326971ba360694e6849 100644
--- a/indra/llcharacter/llbvhloader.cpp
+++ b/indra/llcharacter/llbvhloader.cpp
@@ -508,12 +508,10 @@ ELoadStatus LLBVHLoader::loadAliases(const char * filename)
     {
         if ( LLSDSerialize::fromXML(aliases_sd, input_stream) )
         {
-            for(LLSD::map_iterator alias_iter = aliases_sd.beginMap();
-                alias_iter != aliases_sd.endMap();
-                ++alias_iter)
+            for(const auto& alias_pair : aliases_sd.map())
             {
-                LLSD::String alias_name = alias_iter->first;
-                LLSD::String joint_name = alias_iter->second;
+                LLSD::String alias_name = alias_pair.first;
+                LLSD::String joint_name = alias_pair.second;
                 makeTranslation(alias_name, joint_name);
                 
             }
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 51abb6dc009ec4af13a1fac55013a42ea6fecd6b..3ffb05f858ac463ce0abeaad0b864cb185dd79a6 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -901,7 +901,7 @@ namespace LLError
             for (a = sets.beginArray(), end = sets.endArray(); a != end; ++a)
             {
                 const LLSD& entry = *a;
-                if (entry.isMap() && !entry.emptyMap())
+                if (entry.isMap() && entry.size() != 0)
                 {
                     ELevel level = decodeLevel(entry["level"]);
 
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
index 7044360a0e4ec271ec559866b7296e3f1610d384..9f175b1bac323fc8050b7cb4f6c0e81389a186a7 100644
--- a/indra/llcommon/llprocessor.cpp
+++ b/indra/llcommon/llprocessor.cpp
@@ -305,9 +305,9 @@ class LLProcessorInfoImpl
 		out << "// CPU Extensions" << std::endl;
 		out << "//////////////////////////" << std::endl;
 		
-		for(LLSD::map_const_iterator itr = mProcessorInfo["extension"].beginMap(); itr != mProcessorInfo["extension"].endMap(); ++itr)
+		for(const auto& llsd_pair : mProcessorInfo["extension"].map())
 		{
-			out << "  " << itr->first << std::endl;			
+			out << "  " << llsd_pair.first << std::endl;
 		}
 		return out.str(); 
 	}
diff --git a/indra/llcommon/llsdjson.cpp b/indra/llcommon/llsdjson.cpp
index 8caaaee53460adc7fe214e29982ba607eaaaabe7..57cd7dcbf1221c2587f33c6a5b73310a3af3a09b 100644
--- a/indra/llcommon/llsdjson.cpp
+++ b/indra/llcommon/llsdjson.cpp
@@ -104,16 +104,16 @@ Json::Value LlsdToJson(const LLSD &val)
         break;
     case LLSD::TypeMap:
         result = Json::Value(Json::objectValue);
-        for (LLSD::map_const_iterator it = val.beginMap(); it != val.endMap(); ++it)
+        for (const auto& llsd_pair : val.map())
         {
-            result[it->first] = LlsdToJson(it->second);
+            result[llsd_pair.first] = LlsdToJson(llsd_pair.second);
         }
         break;
     case LLSD::TypeArray:
         result = Json::Value(Json::arrayValue);
-        for (LLSD::array_const_iterator it = val.beginArray(); it != val.endArray(); ++it)
+        for (const auto& llsd_val : val.array())
         {
-            result.append(LlsdToJson(*it));
+            result.append(LlsdToJson(llsd_val));
         }
         break;
     case LLSD::TypeBinary:
diff --git a/indra/llcommon/llsdparam.cpp b/indra/llcommon/llsdparam.cpp
index 2e7b46f8858694867d6e3ca0ba142a23b9b32d03..6a824e2faf2d9c163dee9e2637da4d8dce0c97a8 100644
--- a/indra/llcommon/llsdparam.cpp
+++ b/indra/llcommon/llsdparam.cpp
@@ -258,23 +258,19 @@ void LLParamSDParserUtilities::readSDValues(read_sd_cb_t cb, const LLSD& sd, LLI
 {
 	if (sd.isMap())
 	{
-		for (LLSD::map_const_iterator it = sd.beginMap();
-			it != sd.endMap();
-			++it)
+		for (const auto& llsd_pair : sd.map())
 		{
-			stack.push_back(make_pair(it->first, true));
-			readSDValues(cb, it->second, stack);
+			stack.push_back(make_pair(llsd_pair.first, true));
+			readSDValues(cb, llsd_pair.second, stack);
 			stack.pop_back();
 		}
 	}
 	else if (sd.isArray())
 	{
-		for (LLSD::array_const_iterator it = sd.beginArray();
-			it != sd.endArray();
-			++it)
+		for (const auto& llsd_val : sd.array())
 		{
 			stack.push_back(make_pair(std::string(), true));
-			readSDValues(cb, *it, stack);
+			readSDValues(cb, llsd_val, stack);
 			stack.pop_back();
 		}
 	}
diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp
index d44387cc55c892d25bd674536dd39da6d02e1048..b70529ced7dda614801a84a3d5bb4a95cb05ede3 100644
--- a/indra/llcommon/llsdutil.cpp
+++ b/indra/llcommon/llsdutil.cpp
@@ -279,20 +279,16 @@ BOOL compare_llsd_with_template(
 		//any excess is taken from the template
 		//excess is ignored in the test
 		LLSD value;
-		LLSD::map_const_iterator template_iter;
 
 		resultant_llsd = LLSD::emptyMap();
-		for (
-			template_iter = template_llsd.beginMap();
-			template_iter != template_llsd.endMap();
-			++template_iter)
+		for (const auto& template_pair : template_llsd.map())
 		{
-			if ( llsd_to_test.has(template_iter->first) )
+			if ( llsd_to_test.has(template_pair.first) )
 			{
 				//the test LLSD has the same key
 				if ( !compare_llsd_with_template(
-						 llsd_to_test[template_iter->first],
-						 template_iter->second,
+						 llsd_to_test[template_pair.first],
+						 template_pair.second,
 						 value) )
 				{
 					resultant_llsd = LLSD();
@@ -300,15 +296,15 @@ BOOL compare_llsd_with_template(
 				}
 				else
 				{
-					resultant_llsd[template_iter->first] = value;
+					resultant_llsd[template_pair.first] = value;
 				}
 			}
 			else
 			{
 				//test llsd doesn't have it...take the
 				//template as default value
-				resultant_llsd[template_iter->first] =
-					template_iter->second;
+				resultant_llsd[template_pair.first] =
+					template_pair.second;
 			}
 		}
 	}
@@ -669,11 +665,11 @@ std::string llsd_matches(const LLSD& prototype, const LLSD& data, const std::str
         out << colon(pfx);
         const char* init = "Map missing keys: ";
         const char* sep = init;
-        for (LLSD::map_const_iterator mi = prototype.beginMap(); mi != prototype.endMap(); ++mi)
+        for (const auto& prototype_pair : prototype.map())
         {
-            if (! data.has(mi->first))
+            if (! data.has(prototype_pair.first))
             {
-                out << sep << mi->first;
+                out << sep << prototype_pair.first;
                 sep = ", ";
             }
         }
@@ -684,10 +680,10 @@ std::string llsd_matches(const LLSD& prototype, const LLSD& data, const std::str
         }
         // Good, the data block contains all the keys required by the
         // prototype. Now match the prototype entries.
-        for (LLSD::map_const_iterator mi2 = prototype.beginMap(); mi2 != prototype.endMap(); ++mi2)
+        for (const auto& prototype_pair : prototype.map())
         {
-            std::string match(llsd_matches(mi2->second, data[mi2->first],
-                                           STRINGIZE("['" << mi2->first << "']")));
+            std::string match(llsd_matches(prototype_pair.second, data[prototype_pair.first],
+                                           STRINGIZE("['" << prototype_pair.first << "']")));
             if (! match.empty())
             {
                 return match;
@@ -936,13 +932,13 @@ LLSD llsd_clone(LLSD value, LLSD filter)
     {
     case LLSD::TypeMap:
         clone = LLSD::emptyMap();
-        for (LLSD::map_const_iterator itm = value.beginMap(); itm != value.endMap(); ++itm)
+        for (const auto& value_pair : value.map())
         {
             if (has_filter)
             {
-                if (filter.has((*itm).first))
+                if (filter.has(value_pair.first))
                 {
-                    if (!filter[(*itm).first].asBoolean())
+                    if (!filter[value_pair.first].asBoolean())
                         continue;
                 }
                 else if (filter.has("*"))
@@ -955,14 +951,14 @@ LLSD llsd_clone(LLSD value, LLSD filter)
                     continue;
                 }
             }
-            clone[(*itm).first] = llsd_clone((*itm).second, filter);
+            clone[value_pair.first] = llsd_clone(value_pair.second, filter);
         }
         break;
     case LLSD::TypeArray:
         clone = LLSD::emptyArray();
-        for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
+        for (const auto& llsd_val : value.array())
         {
-            clone.append(llsd_clone(*ita, filter));
+            clone.append(llsd_clone(llsd_val, filter));
         }
         break;
 
@@ -987,13 +983,13 @@ LLSD llsd_shallow(LLSD value, LLSD filter)
     if (value.isMap())
     {
         shallow = LLSD::emptyMap();
-        for (LLSD::map_const_iterator itm = value.beginMap(); itm != value.endMap(); ++itm)
+        for (const auto& value_pair : value.map())
         {
             if (has_filter)
             {
-                if (filter.has((*itm).first))
+                if (filter.has(value_pair.first))
                 {
-                    if (!filter[(*itm).first].asBoolean())
+                    if (!filter[value_pair.first].asBoolean())
                         continue;
                 }
                 else if (filter.has("*"))
@@ -1006,15 +1002,15 @@ LLSD llsd_shallow(LLSD value, LLSD filter)
                     continue;
                 }
             }
-            shallow[(*itm).first] = (*itm).second;
+            shallow[value_pair.first] = value_pair.second;
         }
     }
     else if (value.isArray())
     {
         shallow = LLSD::emptyArray();
-        for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
+        for (const auto& llsd_val : value.array())
         {
-            shallow.append(*ita);
+            shallow.append(llsd_val);
         }
     }
     else
diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp
index a83abfc6bec79a696f5f3f9af33abfbc6aebc91e..e9a60d9ced4b028e2fcf2ccc44011652960202f5 100644
--- a/indra/llcommon/lluri.cpp
+++ b/indra/llcommon/lluri.cpp
@@ -453,12 +453,11 @@ LLURI LLURI::buildHTTP(const std::string& prefix,
 	if (path.isArray())
 	{
 		// break out and escape each path component
-		for (LLSD::array_const_iterator it = path.beginArray();
-			 it != path.endArray();
-			 ++it)
+		for (const auto& llsd_val : path.array())
 		{
-			LL_DEBUGS() << "PATH: inserting " << it->asString() << LL_ENDL;
-			result.mEscapedPath += "/" + escapePathComponent(it->asString());
+			const std::string& str = llsd_val.asStringRef();
+			LL_DEBUGS() << "PATH: inserting " << str << LL_ENDL;
+			result.mEscapedPath += "/" + escapePathComponent(str);
 		}
 	}
 	else if (path.isString())
diff --git a/indra/llinventory/llsettingsbase.cpp b/indra/llinventory/llsettingsbase.cpp
index 61b59e35aacd523ea90f693108896098f5b4f557..ed224b9534badddb72e9509abbba106377b4364c 100644
--- a/indra/llinventory/llsettingsbase.cpp
+++ b/indra/llinventory/llsettingsbase.cpp
@@ -90,10 +90,10 @@ LLSD LLSettingsBase::combineSDMaps(const LLSD &settings, const LLSD &other) cons
 {
     LLSD newSettings;
 
-    for (LLSD::map_const_iterator it = settings.beginMap(); it != settings.endMap(); ++it)
+    for (const auto& llsd_pair : settings.map())
     {
-        std::string key_name = (*it).first;
-        LLSD value = (*it).second;
+        const std::string& key_name = llsd_pair.first;
+        const LLSD& value = llsd_pair.second;
 
         LLSD::Type setting_type = value.type();
         switch (setting_type)
@@ -103,9 +103,9 @@ LLSD LLSettingsBase::combineSDMaps(const LLSD &settings, const LLSD &other) cons
             break;
         case LLSD::TypeArray:
             newSettings[key_name] = LLSD::emptyArray();
-            for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
+            for (const auto& llsd_val : value.array())
             {
-                newSettings[key_name].append(*ita);
+                newSettings[key_name].append(llsd_val);
             }
             break;
         //case LLSD::TypeInteger:
@@ -124,10 +124,10 @@ LLSD LLSettingsBase::combineSDMaps(const LLSD &settings, const LLSD &other) cons
 
     if (!other.isUndefined())
     {
-        for (LLSD::map_const_iterator it = other.beginMap(); it != other.endMap(); ++it)
+        for (const auto& llsd_pair : other.map())
         {
-            std::string key_name = (*it).first;
-            LLSD value = (*it).second;
+            const std::string& key_name = llsd_pair.first;
+            const LLSD& value = llsd_pair.second;
 
             LLSD::Type setting_type = value.type();
             switch (setting_type)
@@ -137,9 +137,9 @@ LLSD LLSettingsBase::combineSDMaps(const LLSD &settings, const LLSD &other) cons
                 break;
             case LLSD::TypeArray:
                 newSettings[key_name] = LLSD::emptyArray();
-                for (LLSD::array_const_iterator ita = value.beginArray(); ita != value.endArray(); ++ita)
+                for (const auto& llsd_val : value.array())
                 {
-                    newSettings[key_name].append(*ita);
+                    newSettings[key_name].append(llsd_val);
                 }
                 break;
             //case LLSD::TypeInteger:
@@ -169,10 +169,10 @@ LLSD LLSettingsBase::interpolateSDMap(const LLSD &settings, const LLSD &other, c
 
     llassert(mix >= 0.0f && mix <= 1.0f);
 
-    for (LLSD::map_const_iterator it = settings.beginMap(); it != settings.endMap(); ++it)
+    for (const auto& llsd_pair : settings.map())
     {
-        std::string key_name = (*it).first;
-        LLSD value = (*it).second;
+        const std::string& key_name = llsd_pair.first;
+        const LLSD& value = llsd_pair.second;
 
         if (skip.find(key_name) != skip.end())
             continue;
@@ -218,9 +218,9 @@ LLSD LLSettingsBase::interpolateSDMap(const LLSD &settings, const LLSD &other, c
     }
 
     // Now add anything that is in other but not in the settings
-    for (LLSD::map_const_iterator it = other.beginMap(); it != other.endMap(); ++it)
+    for (const auto& llsd_pair : other.map())
     {
-        std::string key_name = (*it).first;
+        const std::string& key_name = llsd_pair.first;
 
         if (skip.find(key_name) != skip.end())
             continue;
@@ -232,28 +232,28 @@ LLSD LLSettingsBase::interpolateSDMap(const LLSD &settings, const LLSD &other, c
         if (def_iter != defaults.end())
         {
             // Blend against default value
-            newSettings[key_name] = interpolateSDValue(key_name, def_iter->second.getDefaultValue(), (*it).second, defaults, mix, slerps);
+            newSettings[key_name] = interpolateSDValue(key_name, def_iter->second.getDefaultValue(), llsd_pair.second, defaults, mix, slerps);
         }
-        else if ((*it).second.type() == LLSD::TypeMap)
+        else if (llsd_pair.second.type() == LLSD::TypeMap)
         {
             // interpolate in case there are defaults inside (part of legacy)
-            newSettings[key_name] = interpolateSDValue(key_name, LLSDMap(), (*it).second, defaults, mix, slerps);
+            newSettings[key_name] = interpolateSDValue(key_name, LLSDMap(), llsd_pair.second, defaults, mix, slerps);
         }
         // else do nothing when no known defaults
         // TODO: Should I blend this out instead?
     }
 
     // Note: writes variables from skip list, bug?
-    for (LLSD::map_const_iterator it = other.beginMap(); it != other.endMap(); ++it)
+    for (const auto& llsd_pair : other.map())
     {
         // TODO: Should I blend this in instead?
-        if (skip.find((*it).first) == skip.end())
+        if (skip.find(llsd_pair.first) == skip.end())
             continue;
 
-        if (!settings.has((*it).first))
+        if (!settings.has(llsd_pair.first))
             continue;
     
-        newSettings[(*it).first] = (*it).second;
+        newSettings[llsd_pair.first] = llsd_pair.second;
     }
 
     return newSettings;
@@ -455,53 +455,53 @@ LLSD LLSettingsBase::settingValidation(LLSD &settings, validation_list_t &valida
     validated.insert(validateFlags.getName());
 
     // Fields for specific settings.
-    for (validation_list_t::iterator itv = validations.begin(); itv != validations.end(); ++itv)
+    for (auto& validator : validations)
     {
 #ifdef VALIDATION_DEBUG
         LLSD oldvalue;
-        if (settings.has((*itv).getName()))
+        if (settings.has(validator.getName()))
         {
-            oldvalue = llsd_clone(mSettings[(*itv).getName()]);
+            oldvalue = llsd_clone(mSettings[validator.getName()]);
         }
 #endif
 
-        if (!(*itv).verify(settings, flags))
+        if (!validator.verify(settings, flags))
         {
             std::stringstream errtext;
 
-            errtext << "Settings LLSD fails validation and could not be corrected for '" << (*itv).getName() << "'!\n";
+            errtext << "Settings LLSD fails validation and could not be corrected for '" << validator.getName() << "'!\n";
             errors.append( errtext.str() );
             isValid = false;
         }
-        validated.insert((*itv).getName());
+        validated.insert(validator.getName());
 
 #ifdef VALIDATION_DEBUG
         if (!oldvalue.isUndefined())
         {
-            if (!compare_llsd(settings[(*itv).getName()], oldvalue))
+            if (!compare_llsd(settings[validator.getName()], oldvalue))
             {
-                LL_WARNS("SETTINGS") << "Setting '" << (*itv).getName() << "' was changed: " << oldvalue << " -> " << settings[(*itv).getName()] << LL_ENDL;
+                LL_WARNS("SETTINGS") << "Setting '" << validator.getName() << "' was changed: " << oldvalue << " -> " << settings[validator.getName()] << LL_ENDL;
             }
         }
 #endif
     }
 
     // strip extra entries
-    for (LLSD::map_const_iterator itm = settings.beginMap(); itm != settings.endMap(); ++itm)
+    for (const auto& setting_pair : settings.map())
     {
-        if (validated.find((*itm).first) == validated.end())
+        if (validated.find(setting_pair.first) == validated.end())
         {
             std::stringstream warntext;
 
-            warntext << "Stripping setting '" << (*itm).first << "'";
+            warntext << "Stripping setting '" << setting_pair.first << "'";
             warnings.append( warntext.str() );
-            strip.insert((*itm).first);
+            strip.insert(setting_pair.first);
         }
     }
 
-    for (stringset_t::iterator its = strip.begin(); its != strip.end(); ++its)
+    for (const auto& string : strip)
     {
-        settings.erase(*its);
+        settings.erase(string);
     }
 
     return LLSDMap("success", LLSD::Boolean(isValid))
diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp
index a687fd840d022f9c340c6c76587e80f291270087..a644bbb7e0925b18aeaa91144d77d9ba089d9ab0 100644
--- a/indra/llinventory/llsettingsdaycycle.cpp
+++ b/indra/llinventory/llsettingsdaycycle.cpp
@@ -207,10 +207,10 @@ bool LLSettingsDay::initialize(bool validate_frames)
 
     std::map<std::string, LLSettingsBase::ptr_t> used;
 
-    for (LLSD::map_const_iterator itFrame = frames.beginMap(); itFrame != frames.endMap(); ++itFrame)
+    for (const auto& llsd_pair : frames.map())
     {
-        std::string name = (*itFrame).first;
-        LLSD data = (*itFrame).second;
+        const std::string& name = llsd_pair.first;
+        const LLSD& data = llsd_pair.second;
         LLSettingsBase::ptr_t keyframe;
 
         if (data[SETTING_TYPE].asString() == "sky")
@@ -241,16 +241,16 @@ bool LLSettingsDay::initialize(bool validate_frames)
     {
         mDayTracks[i].clear();
         LLSD curtrack = tracks[i];
-        for (LLSD::array_const_iterator it = curtrack.beginArray(); it != curtrack.endArray(); ++it)
+        for (const auto& llsd_val : curtrack.array())
         {
-            LLSettingsBase::TrackPosition keyframe = LLSettingsBase::TrackPosition((*it)[SETTING_KEYKFRAME].asReal());
+            LLSettingsBase::TrackPosition keyframe = LLSettingsBase::TrackPosition(llsd_val[SETTING_KEYKFRAME].asReal());
             keyframe = llclamp(keyframe, 0.0f, 1.0f);
             LLSettingsBase::ptr_t setting;
 
             
-            if ((*it).has(SETTING_KEYNAME))
+            if (llsd_val.has(SETTING_KEYNAME))
             {
-                std::string key_name = (*it)[SETTING_KEYNAME];
+                std::string key_name = llsd_val[SETTING_KEYNAME];
                 if (i == TRACK_WATER)
                 {
                     setting = used[key_name];
@@ -470,36 +470,36 @@ namespace
 
         S32 framecount(0);
 
-        for (LLSD::array_iterator track = value.beginArray(); track != value.endArray(); ++track)
+        for (auto& llsd_val : value.array())
         {
             S32 index = 0;
-            while (index < (*track).size())
+            while (index < llsd_val.size())
             {
-                LLSD& elem = (*track)[index];
+                LLSD& elem = llsd_val[index];
 
                 ++framecount;
                 if (index >= LLSettingsDay::FRAME_MAX)
                 {
-                    (*track).erase(index);
+                    llsd_val.erase(index);
                     continue;
                 }
 
                 if (!elem.has(LLSettingsDay::SETTING_KEYKFRAME))
                 {
-                    (*track).erase(index);
+                    llsd_val.erase(index);
                     continue;
                 }
 
                 if (!elem[LLSettingsDay::SETTING_KEYKFRAME].isReal())
                 {
-                    (*track).erase(index);
+                    llsd_val.erase(index);
                     continue;
                 }
 
                 if (!elem.has(LLSettingsDay::SETTING_KEYNAME) &&
                     !elem.has(LLSettingsDay::SETTING_KEYID))
                 {
-                    (*track).erase(index);
+                    llsd_val.erase(index);
                     continue;
                 }
 
@@ -536,9 +536,9 @@ namespace
         bool hasSky(false);
         bool hasWater(false);
 
-        for (LLSD::map_iterator itf = value.beginMap(); itf != value.endMap(); ++itf)
+        for (const auto& llsd_pair : value.map())
         {
-            LLSD frame = (*itf).second;
+            LLSD frame = llsd_pair.second;
 
             std::string ftype = frame[LLSettingsBase::SETTING_TYPE];
             if (ftype == "sky")
@@ -548,7 +548,7 @@ namespace
                 
                 if (res_sky["success"].asInteger() == 0)
                 {
-                    LL_WARNS("SETTINGS") << "Sky setting named '" << (*itf).first << "' validation failed!: " << res_sky << LL_ENDL;
+                    LL_WARNS("SETTINGS") << "Sky setting named '" << llsd_pair.first << "' validation failed!: " << res_sky << LL_ENDL;
                     LL_WARNS("SETTINGS") << "Sky: " << frame << LL_ENDL;
                     continue;
                 }
@@ -560,7 +560,7 @@ namespace
                 LLSD res_h2o = LLSettingsBase::settingValidation(frame, valid_h2o);
                 if (res_h2o["success"].asInteger() == 0)
                 {
-                    LL_WARNS("SETTINGS") << "Water setting named '" << (*itf).first << "' validation failed!: " << res_h2o << LL_ENDL;
+                    LL_WARNS("SETTINGS") << "Water setting named '" << llsd_pair.first << "' validation failed!: " << res_h2o << LL_ENDL;
                     LL_WARNS("SETTINGS") << "Water: " << frame << LL_ENDL;
                     continue;
                 }
@@ -568,7 +568,7 @@ namespace
             }
             else
             {
-                LL_WARNS("SETTINGS") << "Unknown settings block of type '" << ftype << "' named '" << (*itf).first << "'" << LL_ENDL;
+                LL_WARNS("SETTINGS") << "Unknown settings block of type '" << ftype << "' named '" << llsd_pair.first << "'" << LL_ENDL;
                 return false;
             }
         }
diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp
index 02dcd47a47c95de49ea6e3099d1059e513891828..297fdcbe72d49a9946cf520b1ff526e6abadaf01 100644
--- a/indra/llinventory/llsettingssky.cpp
+++ b/indra/llinventory/llsettingssky.cpp
@@ -275,9 +275,8 @@ bool validateRayleighLayers(LLSD &value)
     if (value.isArray())
     {
         bool allGood = true;
-        for (LLSD::array_iterator itf = value.beginArray(); itf != value.endArray(); ++itf)
+        for (LLSD& layerConfig : value.array())
         {
-            LLSD& layerConfig = (*itf);
             if (layerConfig.type() == LLSD::TypeMap)
             {
                 if (!validateRayleighLayers(layerConfig))
@@ -317,9 +316,8 @@ bool validateAbsorptionLayers(LLSD &value)
     if (value.isArray())
     {
         bool allGood = true;   
-        for (LLSD::array_iterator itf = value.beginArray(); itf != value.endArray(); ++itf)
+        for (LLSD& layerConfig : value.array())
         {
-            LLSD& layerConfig = (*itf);
             if (layerConfig.type() == LLSD::TypeMap)
             {
                 if (!validateAbsorptionLayers(layerConfig))
@@ -359,9 +357,8 @@ bool validateMieLayers(LLSD &value)
     if (value.isArray())
     {
         bool allGood = true;
-        for (LLSD::array_iterator itf = value.beginArray(); itf != value.endArray(); ++itf)
+        for (LLSD& layerConfig : value.array())
         {
-            LLSD& layerConfig = (*itf);
             if (layerConfig.type() == LLSD::TypeMap)
             {
                 if (!validateMieLayers(layerConfig))
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index 7eeb3982c7f3a96824633f7476603c3a9de7c227..c7931befecfd90e47ac56b182a53a685c3e2134a 100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -204,10 +204,8 @@ void LLAvatarNameCache::handleAvNameCacheSuccess(const LLSD &data, const LLSD &h
     F64 now = LLFrameTimer::getTotalSeconds();
 
     const LLSD& agents = data["agents"];
-    LLSD::array_const_iterator it = agents.beginArray();
-    for (; it != agents.endArray(); ++it)
+    for (const LLSD& row : agents.array())
     {
-        const LLSD& row = *it;
         LLUUID agent_id = row["id"].asUUID();
 
         LLAvatarName av_name;
@@ -231,10 +229,9 @@ void LLAvatarNameCache::handleAvNameCacheSuccess(const LLSD &data, const LLSD &h
         LL_WARNS("AvNameCache") << "LLAvatarNameResponder::result " << num_unresolved << " unresolved ids; "
             << "expires in " << expires - now << " seconds"
             << LL_ENDL;
-        it = unresolved_agents.beginArray();
-        for (; it != unresolved_agents.endArray(); ++it)
+        for (const LLSD& llsd_val : unresolved_agents.array())
         {
-            const LLUUID& agent_id = *it;
+            const LLUUID& agent_id = llsd_val.asUUID();
 
             LL_WARNS("AvNameCache") << "LLAvatarNameResponder::result "
                 << "failed id " << agent_id
@@ -439,11 +436,10 @@ bool LLAvatarNameCache::importFile(std::istream& istr)
 
 	LLUUID agent_id;
 	LLAvatarName av_name;
-	LLSD::map_const_iterator it = agents.beginMap();
-	for ( ; it != agents.endMap(); ++it)
+	for (const auto& llsd_pair : agents.map())
 	{
-		agent_id.set(it->first);
-		av_name.fromLLSD( it->second );
+		agent_id.set(llsd_pair.first);
+		av_name.fromLLSD(llsd_pair.second );
 		mCache[agent_id] = av_name;
 	}
     LL_INFOS("AvNameCache") << "LLAvatarNameCache loaded " << mCache.size() << LL_ENDL;
diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp
index 69e338ddb9709b60be5151c9e29f4fec5d162c26..04cb683622b573cbf94bd3079de998aad6ac01ad 100644
--- a/indra/llui/llkeywords.cpp
+++ b/indra/llui/llkeywords.cpp
@@ -135,16 +135,13 @@ std::string LLKeywords::getArguments(LLSD& arguments)
 	if (arguments.isArray())
 	{
 		U32 argsCount = arguments.size();
-		LLSD::array_iterator arrayIt = arguments.beginArray();
-		for ( ; arrayIt != arguments.endArray(); ++arrayIt)
+		for (const LLSD& args : arguments.array())
 		{
-			LLSD& args = (*arrayIt);
 			if (args.isMap())
 			{
-				LLSD::map_iterator argsIt = args.beginMap();
-				for ( ; argsIt != args.endMap(); ++argsIt)
+				for (const auto& llsd_pair : args.map())
 				{
-					argString += argsIt->second.get("type").asString() + " " + argsIt->first;
+					argString += llsd_pair.second.get("type").asString() + " " + llsd_pair.first;
 					if (argsCount-- > 1)
 					{
 						argString += ", ";
@@ -239,22 +236,21 @@ void LLKeywords::processTokens()
 	addToken(LLKeywordToken::TT_TWO_SIDED_DELIMITER, "/*", LLUIColorTable::instance().getColor("SyntaxLslComment"), "Comment (multi-line)\nNon-functional commentary or disabled code", "*/" );
 	addToken(LLKeywordToken::TT_DOUBLE_QUOTATION_MARKS, "\"", LLUIColorTable::instance().getColor("SyntaxLslStringLiteral"), "String literal", "\"" );
 
-	LLSD::map_iterator itr = mSyntax.beginMap();
-	for ( ; itr != mSyntax.endMap(); ++itr)
+	for (const auto& llsd_pair : mSyntax.map())
 	{
-		if (itr->first == "llsd-lsl-syntax-version")
+		if (llsd_pair.first == "llsd-lsl-syntax-version")
 		{
 			// Skip over version key.
 		}
 		else
 		{
-			if (itr->second.isMap())
+			if (llsd_pair.second.isMap())
 			{
-				processTokensGroup(itr->second, itr->first);
+				processTokensGroup(llsd_pair.second, llsd_pair.first);
 			}
 			else
 			{
-				LL_WARNS("LSL-Tokens-Processing") << "Map for " + itr->first + " entries is missing! Ignoring." << LL_ENDL;
+				LL_WARNS("LSL-Tokens-Processing") << "Map for " + llsd_pair.first + " entries is missing! Ignoring." << LL_ENDL;
 			}
 		}
 	}
@@ -300,30 +296,28 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
 
 	if (tokens.isMap())
 	{
-		LLSD::map_const_iterator outer_itr = tokens.beginMap();
-		for ( ; outer_itr != tokens.endMap(); ++outer_itr )
+		for (const auto& token_pair : tokens.map())
 		{
-			if (outer_itr->second.isMap())
+			if (token_pair.second.isMap())
 			{
 				mAttributes.clear();
 				LLSD arguments = LLSD();
-				LLSD::map_const_iterator inner_itr = outer_itr->second.beginMap();
-				for ( ; inner_itr != outer_itr->second.endMap(); ++inner_itr )
+				for (const auto& token_inner_pair : token_pair.second.map())
 				{
-					if (inner_itr->first == "arguments")
+					if (token_inner_pair.first == "arguments")
 					{ 
-						if (inner_itr->second.isArray())
+						if (token_inner_pair.second.isArray())
 						{
-							arguments = inner_itr->second;
+							arguments = token_inner_pair.second;
 						}
 					}
-					else if (!inner_itr->second.isMap() && !inner_itr->second.isArray())
+					else if (!token_inner_pair.second.isMap() && !token_inner_pair.second.isArray())
 					{
-						mAttributes[inner_itr->first] = inner_itr->second.asString();
+						mAttributes[token_inner_pair.first] = token_inner_pair.second.asString();
 					}
 					else
 					{
-						LL_WARNS("SyntaxLSL") << "Not a valid attribute: " << inner_itr->first << LL_ENDL;
+						LL_WARNS("SyntaxLSL") << "Not a valid attribute: " << token_inner_pair.first << LL_ENDL;
 					}
 				}
 
@@ -342,10 +336,10 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
 						tooltip = "Type: " + getAttribute("type") + ", Value: " + getAttribute("value");
 						break;
 					case LLKeywordToken::TT_EVENT:
-						tooltip = outer_itr->first + "(" + getArguments(arguments) + ")";
+						tooltip = token_pair.first + "(" + getArguments(arguments) + ")";
 						break;
 					case LLKeywordToken::TT_FUNCTION:
-						tooltip = getAttribute("return") + " " + outer_itr->first + "(" + getArguments(arguments) + ");";
+						tooltip = getAttribute("return") + " " + token_pair.first + "(" + getArguments(arguments) + ");";
 						tooltip.append("\nEnergy: ");
 						tooltip.append(getAttribute("energy").empty() ? "0.0" : getAttribute("energy"));
 						if (!getAttribute("sleep").empty())
@@ -372,7 +366,7 @@ void LLKeywords::processTokensGroup(const LLSD& tokens, const std::string& group
 					color = color_god_mode;
 				}
 
-				addToken(token_type, outer_itr->first, color, tooltip);
+				addToken(token_type, token_pair.first, color, tooltip);
 			}
 		}
 	}
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index acfe4a0cba7a287db76fb1d4e7cb0f5e5ae7b93b..3cc121aa6a7530466406a02ebdc47e3e9166a65e 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -92,7 +92,7 @@ LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p)
 	mMouseDownSignal(NULL),
 	mMouseUpSignal(NULL)
 {
-	mValue.emptyMap();
+	mValue = LLSD::emptyMap();
 	mCurSlider = LLStringUtil::null;
 
 	if (mOrientation == HORIZONTAL)
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index 18fbdca5c12e67227b69098fc43d0e8a92efc98c..d49c5259223dbe7696e9a674621295484cf17e95 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -266,11 +266,9 @@ LLSD LLNotificationForm::asLLSD() const
 
 LLSD LLNotificationForm::getElement(const std::string& element_name)
 {
-	for (LLSD::array_const_iterator it = mFormData.beginArray();
-		it != mFormData.endArray();
-		++it)
+	for (const LLSD& llsd_val : mFormData.array())
 	{
-		if ((*it)["name"].asString() == element_name) return (*it);
+		if (llsd_val["name"].asString() == element_name) return llsd_val;
 	}
 	return LLSD();
 }
@@ -278,11 +276,9 @@ LLSD LLNotificationForm::getElement(const std::string& element_name)
 
 bool LLNotificationForm::hasElement(const std::string& element_name) const
 {
-	for (LLSD::array_const_iterator it = mFormData.beginArray();
-		it != mFormData.endArray();
-		++it)
+	for (const LLSD& llsd_val : mFormData.array())
 	{
-		if ((*it)["name"].asString() == element_name) return true;
+		if (llsd_val["name"].asString() == element_name) return true;
 	}
 	return false;
 }
@@ -291,9 +287,10 @@ void LLNotificationForm::getElements(LLSD& elements, S32 offset)
 {
     //Finds elements that the template did not add
     LLSD::array_const_iterator it = mFormData.beginArray() + offset;
+	LLSD::array_const_iterator end = mFormData.endArray();
 
     //Keeps track of only the dynamic elements
-    for(; it != mFormData.endArray(); ++it)
+    for(; it != end; ++it)
     {
         elements.append(*it);
     }
@@ -301,13 +298,11 @@ void LLNotificationForm::getElements(LLSD& elements, S32 offset)
 
 bool LLNotificationForm::getElementEnabled(const std::string& element_name) const
 {
-	for (LLSD::array_const_iterator it = mFormData.beginArray();
-		it != mFormData.endArray();
-		++it)
+	for (const LLSD& llsd_val : mFormData.array())
 	{
-		if ((*it)["name"].asString() == element_name)
+		if (llsd_val["name"].asString() == element_name)
 		{
-			return (*it)["enabled"].asBoolean();
+			return llsd_val["enabled"].asBoolean();
 		}
 	}
 
@@ -316,13 +311,11 @@ bool LLNotificationForm::getElementEnabled(const std::string& element_name) cons
 
 void LLNotificationForm::setElementEnabled(const std::string& element_name, bool enabled)
 {
-	for (LLSD::array_iterator it = mFormData.beginArray();
-		it != mFormData.endArray();
-		++it)
+	for (LLSD& llsd_val : mFormData.array())
 	{
-		if ((*it)["name"].asString() == element_name)
+		if (llsd_val["name"].asString() == element_name)
 		{
-			(*it)["enabled"] = enabled;
+			llsd_val["enabled"] = enabled;
 		}
 	}
 }
@@ -344,44 +337,38 @@ void LLNotificationForm::append(const LLSD& sub_form)
 {
 	if (sub_form.isArray())
 	{
-		for (LLSD::array_const_iterator it = sub_form.beginArray();
-			it != sub_form.endArray();
-			++it)
+		for (const auto& llsd_val : sub_form.array())
 		{
-			mFormData.append(*it);
+			mFormData.append(llsd_val);
 		}
 	}
 }
 
 void LLNotificationForm::formatElements(const LLSD& substitutions)
 {
-	for (LLSD::array_iterator it = mFormData.beginArray();
-		it != mFormData.endArray();
-		++it)
+	for (LLSD& llsd_val : mFormData.array())
 	{
 		// format "text" component of each form element
-		if ((*it).has("text"))
+		if (llsd_val.has("text"))
 		{
-			std::string text = (*it)["text"].asString();
+			std::string text = llsd_val["text"].asString();
 			LLStringUtil::format(text, substitutions);
-			(*it)["text"] = text;
+			llsd_val["text"] = text;
 		}
-		if ((*it)["type"].asString() == "text" && (*it).has("value"))
+		if (llsd_val["type"].asString() == "text" && llsd_val.has("value"))
 		{
-			std::string value = (*it)["value"].asString();
+			std::string value = llsd_val["value"].asString();
 			LLStringUtil::format(value, substitutions);
-			(*it)["value"] = value;
+			llsd_val["value"] = value;
 		}
 	}
 }
 
 std::string LLNotificationForm::getDefaultOption()
 {
-	for (LLSD::array_const_iterator it = mFormData.beginArray();
-		it != mFormData.endArray();
-		++it)
+	for (const LLSD& llsd_val : mFormData.array())
 	{
-		if ((*it)["default"]) return (*it)["name"].asString();
+		if (llsd_val["default"]) return llsd_val["name"].asString();
 	}
 	return "";
 }
@@ -656,13 +643,11 @@ S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& resp
 //static
 std::string LLNotification::getSelectedOptionName(const LLSD& response)
 {
-	for (LLSD::map_const_iterator response_it = response.beginMap();
-		response_it != response.endMap();
-		++response_it)
+	for (const auto& llsd_pair : response.map())
 	{
-		if (response_it->second.isBoolean() && response_it->second.asBoolean())
+		if (llsd_pair.second.isBoolean() && llsd_pair.second.asBoolean())
 		{
-			return response_it->first;
+			return llsd_pair.first;
 		}
 	}
 	return "";
diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
index 98d0c215e6bb07d74886b1fe9945088263c15288..089a4b9595d35460f497d11f333b75c9c9f4c63d 100644
--- a/indra/llui/lluistring.cpp
+++ b/indra/llui/lluistring.cpp
@@ -59,11 +59,9 @@ void LLUIString::setArgs(const LLSD& sd)
 	LL_RECORD_BLOCK_TIME(FTM_UI_STRING);
 	
 	if (!sd.isMap()) return;
-	for(LLSD::map_const_iterator sd_it = sd.beginMap();
-		sd_it != sd.endMap();
-		++sd_it)
+	for(const auto& llsd_pair : sd.map())
 	{
-		setArg(sd_it->first, sd_it->second.asString());
+		setArg(llsd_pair.first, llsd_pair.second.asString());
 	}
 	dirty();
 }
diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp
index 116a470e9b2af96ba0f94520e1a14c7716594a2f..66725a7e857698c34376c7406bf1fef9288e793e 100644
--- a/indra/llwindow/lldxhardware.cpp
+++ b/indra/llwindow/lldxhardware.cpp
@@ -589,7 +589,7 @@ LLSD LLDXHardware::getDisplayInfo()
     }
 
 LCleanup:
-    if (ret.emptyMap())
+    if (ret.size() == 0)
     {
         LL_INFOS() << "Failed to get data, cleaning up" << LL_ENDL;
     }
diff --git a/indra/newview/llenvironment.cpp b/indra/newview/llenvironment.cpp
index 555836ed34a790d08143379b9bd0d0f903718571..a0af107689bfad5acb9b4c2a9b34968fa4cf3c15 100644
--- a/indra/newview/llenvironment.cpp
+++ b/indra/newview/llenvironment.cpp
@@ -2872,7 +2872,7 @@ bool LLEnvironment::loadFromSettings()
         LL_INFOS("ENVIRONMENT") << "Unable to open previous session environment file " << user_filepath << LL_ENDL;
     }
 
-    if (!env_data.isMap() || env_data.emptyMap())
+    if (!env_data.isMap() || env_data.size() == 0)
     {
         LL_DEBUGS("ENVIRONMENT") << "Empty map loaded from: " << user_filepath << LL_ENDL;
         return false;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 7dc4578417057a68b40a15b28b9ae029003ee374..7082343e3ca6be5bbd3545f6b25d35e0d518fc91 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -4472,7 +4472,7 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible)
 		childSetTextArg("download_weight", "[ST]", tbd);
 		childSetTextArg("server_weight", "[SIM]", tbd);
 		childSetTextArg("physics_weight", "[PH]", tbd);
-		if (!mModelPhysicsFee.isMap() || mModelPhysicsFee.emptyMap())
+		if (!mModelPhysicsFee.isMap() || mModelPhysicsFee.size() == 0)
 		{
 			childSetTextArg("upload_fee", "[FEE]", tbd);
 		}
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index ec1909d02aefdb18edaa134717e0cf61ac23e83e..d8b8b6baf1e1bb91c56776683a8648ba077ca004 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -3532,9 +3532,9 @@ void LLPanelEstateAccess::requestEstateGetAccessCoro(std::string url)
 
 		allowed_agent_name_list->clearSortOrder();
 		allowed_agent_name_list->deleteAllItems();
-		for (LLSD::array_const_iterator it = result["AllowedAgents"].beginArray(); it != result["AllowedAgents"].endArray(); ++it)
+		for (const auto& llsd_val : result["AllowedAgents"].array())
 		{ 
-			LLUUID id = (*it)["id"].asUUID(); 
+			LLUUID id = llsd_val["id"].asUUID();
 			allowed_agent_name_list->addNameItem(id);
 		}
 		allowed_agent_name_list->sortByName(TRUE);
@@ -3551,23 +3551,23 @@ void LLPanelEstateAccess::requestEstateGetAccessCoro(std::string url)
 
 		banned_agent_name_list->clearSortOrder();
 		banned_agent_name_list->deleteAllItems();
-		for (LLSD::array_const_iterator it = result["BannedAgents"].beginArray(); it != result["BannedAgents"].endArray(); ++it)
+		for (const auto& llsd_val : result["BannedAgents"].array())
 		{
 			LLSD item;
-			item["id"] = (*it)["id"].asUUID();
+			item["id"] = llsd_val["id"].asUUID();
 			LLSD& columns = item["columns"];
 
 			columns[0]["column"] = "name"; // to be populated later
 
 			columns[1]["column"] = "last_login_date";
-			columns[1]["value"] = (*it)["last_login_date"].asString().substr(0, 16); // cut the seconds
+			columns[1]["value"] = llsd_val["last_login_date"].asString().substr(0, 16); // cut the seconds
 
-			std::string ban_date = (*it)["ban_date"].asString();
+			std::string ban_date = llsd_val["ban_date"].asString();
 			columns[2]["column"] = "ban_date";
 			columns[2]["value"] = ban_date[0] != '0' ? ban_date.substr(0, 16) : LLTrans::getString("na"); // server returns the "0000-00-00 00:00:00" date in case it doesn't know it
 
 			columns[3]["column"] = "bannedby";
-			LLUUID banning_id = (*it)["banning_id"].asUUID();
+			LLUUID banning_id = llsd_val["banning_id"].asUUID();
 			LLAvatarName av_name;
 			if (banning_id.isNull())
 			{
@@ -3594,9 +3594,9 @@ void LLPanelEstateAccess::requestEstateGetAccessCoro(std::string url)
 
 		allowed_group_name_list->clearSortOrder();
 		allowed_group_name_list->deleteAllItems();
-		for (LLSD::array_const_iterator it = result["AllowedGroups"].beginArray(); it != result["AllowedGroups"].endArray(); ++it)
+		for (const auto& llsd_val : result["AllowedGroups"].array())
 		{
-			LLUUID id = (*it)["id"].asUUID();
+			LLUUID id = llsd_val["id"].asUUID();
 			allowed_group_name_list->addGroupNameItem(id);
 		}
 		allowed_group_name_list->sortByName(TRUE);
@@ -3613,9 +3613,9 @@ void LLPanelEstateAccess::requestEstateGetAccessCoro(std::string url)
 
 		estate_manager_name_list->clearSortOrder();
 		estate_manager_name_list->deleteAllItems();
-		for (LLSD::array_const_iterator it = result["Managers"].beginArray(); it != result["Managers"].endArray(); ++it)
+		for (const auto& llsd_val : result["Managers"].array())
 		{
-			LLUUID id = (*it)["agent_id"].asUUID();
+			LLUUID id = llsd_val["agent_id"].asUUID();
 			estate_manager_name_list->addNameItem(id);
 		}
 		estate_manager_name_list->sortByName(TRUE);
diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp
index a84c891a56f5bdf0fe25d9eabcb938262c9175f5..e09e82400e2d1021d9908413c22de0fa5d6bdb3a 100644
--- a/indra/newview/llimprocessing.cpp
+++ b/indra/newview/llimprocessing.cpp
@@ -1729,7 +1729,7 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)
         return;
     }
 
-    if (messages.emptyArray())
+    if (messages.size() == 0)
     {
         // Nothing to process
         return;
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
index aa0c7fb73bcbe46d739a249d0fe020fedbf1c28a..18fb3cdbfcc39f3e964c2fee2823bea17b255245 100644
--- a/indra/newview/llmarketplacefunctions.cpp
+++ b/indra/newview/llmarketplacefunctions.cpp
@@ -880,11 +880,8 @@ void LLMarketplaceData::getSLMListingsCoro(LLUUID folderId)
     log_SLM_infos("Get /listings", static_cast<U32>(status.getType()), result);
 
     // Extract the info from the results
-    for (LLSD::array_iterator it = result["listings"].beginArray();
-            it != result["listings"].endArray(); ++it)
+    for (const LLSD& listing : result["listings"].array())
     { 
-        LLSD listing = *it;
-
         int listingId = listing["id"].asInteger();
         bool isListed = listing["is_listed"].asBoolean();
         std::string editUrl = listing["edit_url"].asString();
@@ -954,11 +951,8 @@ void LLMarketplaceData::getSingleListingCoro(S32 listingId, LLUUID folderId)
 
 
     // Extract the info from the results
-    for (LLSD::array_iterator it = result["listings"].beginArray();
-        it != result["listings"].endArray(); ++it)
+    for (const LLSD& listing : result["listings"].array())
     {
-        LLSD listing = *it;
-
         int resListingId = listing["id"].asInteger();
         bool isListed = listing["is_listed"].asBoolean();
         std::string editUrl = listing["edit_url"].asString();
@@ -1026,11 +1020,8 @@ void LLMarketplaceData::createSLMListingCoro(LLUUID folderId, LLUUID versionId,
     log_SLM_infos("Post /listings", status.getType(), result);
 
     // Extract the info from the results
-    for (LLSD::array_iterator it = result["listings"].beginArray();
-        it != result["listings"].endArray(); ++it)
+    for (const LLSD& listing : result["listings"].array())
     {
-        LLSD listing = *it;
-
         int listingId = listing["id"].asInteger();
         bool isListed = listing["is_listed"].asBoolean();
         std::string editUrl = listing["edit_url"].asString();
@@ -1093,11 +1084,8 @@ void LLMarketplaceData::updateSLMListingCoro(LLUUID folderId, S32 listingId, LLU
     log_SLM_infos("Put /listing", status.getType(), result);
 
     // Extract the info from the Json string
-    for (LLSD::array_iterator it = result["listings"].beginArray();
-        it != result["listings"].endArray(); ++it)
+    for (const LLSD& listing : result["listings"].array())
     {
-        LLSD listing = *it;
-
         int listing_id = listing["id"].asInteger();
         bool is_listed = listing["is_listed"].asBoolean();
         std::string edit_url = listing["edit_url"].asString();
@@ -1176,11 +1164,8 @@ void LLMarketplaceData::associateSLMListingCoro(LLUUID folderId, S32 listingId,
 
     log_SLM_infos("Put /associate_inventory", status.getType(), result);
 
-    for (LLSD::array_iterator it = result["listings"].beginArray();
-            it != result["listings"].endArray(); ++it)
+    for (const LLSD& listing : result["listings"].array())
     {
-        LLSD listing = *it;
-
         int listing_id = listing["id"].asInteger();
         bool is_listed = listing["is_listed"].asBoolean();
         std::string edit_url = listing["edit_url"].asString();
@@ -1248,11 +1233,8 @@ void LLMarketplaceData::deleteSLMListingCoro(S32 listingId)
 
     log_SLM_infos("Delete /listing", status.getType(), result);
 
-    for (LLSD::array_iterator it = result["listings"].beginArray(); 
-            it != result["listings"].endArray(); ++it)
+    for (const LLSD& listing : result["listings"].array())
     {
-        LLSD listing = *it;
-
         int listing_id = listing["id"].asInteger();
         LLUUID folder_id = LLMarketplaceData::instance().getListingFolder(listing_id);
         deleteListing(folder_id);
diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp
index 44b4728df779925cda2c905b31f513231c211290..0f2d1705a0966261bf76ccbc76a8df96b12d28f4 100644
--- a/indra/newview/llpanelexperiencelog.cpp
+++ b/indra/newview/llpanelexperiencelog.cpp
@@ -112,7 +112,7 @@ void LLPanelExperienceLog::refresh()
 	int items = 0;
 	bool moreItems = false;
 	LLSD events_to_save = events;
-	if (!events.emptyMap())
+	if (events.size() != 0)
 	{
 		LLSD::map_const_iterator day = events.endMap();
 		do
diff --git a/indra/newview/llpipelinelistener.cpp b/indra/newview/llpipelinelistener.cpp
index f11cdcf876ece18721770012806c1979d860ee5d..4f67984b027b0abc2a18162fab170f47b27c1dc0 100644
--- a/indra/newview/llpipelinelistener.cpp
+++ b/indra/newview/llpipelinelistener.cpp
@@ -41,11 +41,9 @@ namespace {
 	// Render Types
 	void toggle_render_types_wrapper(LLSD const& request)
 	{
-		for (LLSD::array_const_iterator iter = request["types"].beginArray();
-			iter != request["types"].endArray();
-			++iter)
+		for (const LLSD& llsd_val : request["types"].array())
 		{
-			U32 render_type = render_type_from_string( iter->asString() );
+			U32 render_type = render_type_from_string( llsd_val.asString() );
 			if ( render_type != 0 )
 			{
 				LLPipeline::toggleRenderTypeControl( render_type );
@@ -80,11 +78,9 @@ namespace {
 	// Render Features
 	void toggle_render_features_wrapper(LLSD const& request)
 	{
-		for (LLSD::array_const_iterator iter = request["features"].beginArray();
-			iter != request["features"].endArray();
-			++iter)
+		for (const LLSD& llsd_val : request["features"].array())
 		{
-			U32 render_feature = feature_from_string( iter->asString() );
+			U32 render_feature = feature_from_string( llsd_val.asString() );
 			if ( render_feature != 0 )
 			{
 				LLPipeline::toggleRenderDebugFeatureControl( render_feature );
@@ -119,11 +115,9 @@ namespace {
 	// Render Info Displays
 	void toggle_info_displays_wrapper(LLSD const& request)
 	{
-		for (LLSD::array_const_iterator iter = request["displays"].beginArray();
-			iter != request["displays"].endArray();
-			++iter)
+		for (const LLSD& llsd_val : request["displays"].array())
 		{
-			U64 info_display = info_display_from_string( iter->asString() );
+			U64 info_display = info_display_from_string( llsd_val.asString() );
 			if ( info_display != 0 )
 			{
 				LLPipeline::toggleRenderDebug( info_display );
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index abb936c3e5bea91f7440d61964483a3cd4ed55ea..e1a02209da68155aca0e9a5d8681b2fb48c93fed 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -678,24 +678,21 @@ void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers)
 
 	if ( speakers.has("agent_info") && speakers["agent_info"].isMap() )
 	{
-		LLSD::map_const_iterator speaker_it;
-		for(speaker_it = speakers["agent_info"].beginMap();
-			speaker_it != speakers["agent_info"].endMap();
-			++speaker_it)
+		for(const auto& llsd_pair : speakers["agent_info"].map())
 		{
-			LLUUID agent_id(speaker_it->first);
+			const LLUUID agent_id(llsd_pair.first);
 
 			LLPointer<LLSpeaker> speakerp = setSpeaker(
 				agent_id,
 				LLStringUtil::null,
 				LLSpeaker::STATUS_TEXT_ONLY);
 
-			if ( speaker_it->second.isMap() )
+			if (llsd_pair.second.isMap() )
 			{
 				BOOL is_moderator = speakerp->mIsModerator;
-				speakerp->mIsModerator = speaker_it->second["is_moderator"];
+				speakerp->mIsModerator = llsd_pair.second["is_moderator"];
 				speakerp->mModeratorMutedText =
-					speaker_it->second["mutes"]["text"];
+					llsd_pair.second["mutes"]["text"];
 				// Fire event only if moderator changed
 				if ( is_moderator != speakerp->mIsModerator )
 				{
@@ -709,12 +706,9 @@ void LLIMSpeakerMgr::setSpeakers(const LLSD& speakers)
 	{
 		//older, more decprecated way.  Need here for
 		//using older version of servers
-		LLSD::array_const_iterator speaker_it;
-		for(speaker_it = speakers["agents"].beginArray();
-			speaker_it != speakers["agents"].endArray();
-			++speaker_it)
+		for(const auto& llsd_val : speakers["agents"].array())
 		{
-			const LLUUID agent_id = (*speaker_it).asUUID();
+			const LLUUID agent_id = llsd_val.asUUID();
 
 			LLPointer<LLSpeaker> speakerp = setSpeaker(
 				agent_id,
@@ -730,16 +724,12 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
 
 	if ( update.has("agent_updates") && update["agent_updates"].isMap() )
 	{
-		LLSD::map_const_iterator update_it;
-		for(
-			update_it = update["agent_updates"].beginMap();
-			update_it != update["agent_updates"].endMap();
-			++update_it)
+		for(const auto& llsd_pair : update["agent_updates"].map())
 		{
-			LLUUID agent_id(update_it->first);
+			LLUUID agent_id(llsd_pair.first);
 			LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id);
 
-			LLSD agent_data = update_it->second;
+			LLSD agent_data = llsd_pair.second;
 
 			if (agent_data.isMap() && agent_data.has("transition"))
 			{
@@ -786,16 +776,12 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
 	}
 	else if ( update.has("updates") && update["updates"].isMap() )
 	{
-		LLSD::map_const_iterator update_it;
-		for (
-			update_it = update["updates"].beginMap();
-			update_it != update["updates"].endMap();
-			++update_it)
+		for (const auto& llsd_pair : update["updates"].map())
 		{
-			LLUUID agent_id(update_it->first);
+			LLUUID agent_id(llsd_pair.first);
 			LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id);
 
-			std::string agent_transition = update_it->second.asString();
+			std::string agent_transition = llsd_pair.second.asString();
 			if (agent_transition == "LEAVE")
 			{
 				setSpeakerNotInChannel(speakerp);
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 706ae0808a2f33dbd6a02e4faa7f4ac767e4894b..6670e28106f28e647d9f187821b43b71ee9fa237 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -6559,11 +6559,9 @@ void send_lures(const LLSD& notification, const LLSD& response)
 	msg->nextBlockFast(_PREHASH_Info);
 	msg->addU8Fast(_PREHASH_LureType, (U8)0); // sim will fill this in.
 	msg->addStringFast(_PREHASH_Message, text);
-	for(LLSD::array_const_iterator it = notification["payload"]["ids"].beginArray();
-		it != notification["payload"]["ids"].endArray();
-		++it)
+	for(const auto& llsd_val : notification["payload"]["ids"].array())
 	{
-		LLUUID target_id = it->asUUID();
+		LLUUID target_id = llsd_val.asUUID();
 
 		msg->nextBlockFast(_PREHASH_TargetData);
 		msg->addUUIDFast(_PREHASH_TargetID, target_id);
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index 4b60f77eb960004130db2d984807a1799b6d24da..9e579478e3b3904f1f7b432e168eb7c8f74dcda0 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -308,11 +308,9 @@ bool LLGridManager::addGrid(LLSD& grid_data)
 										 <<"  helper page: "<<grid_data[GRID_HELPER_URI_VALUE].asString()<<"\n"
 										 <<"  web profile: "<<grid_data[GRID_WEB_PROFILE_VALUE].asString()<<"\n";
 				/* still in LL_DEBUGS */ 
-				for (LLSD::array_const_iterator login_uris = grid_data[GRID_LOGIN_URI_VALUE].beginArray();
-					 login_uris != grid_data[GRID_LOGIN_URI_VALUE].endArray();
-					 login_uris++)
+				for (const LLSD& login_uris : grid_data[GRID_LOGIN_URI_VALUE].array())
 				{
-					LL_CONT << "  login uri:   "<<login_uris->asString()<<"\n";
+					LL_CONT << "  login uri:   "<<login_uris.asString()<<"\n";
 				}
 				LL_CONT << LL_ENDL;
 				mGridList[grid] = grid_data;
@@ -486,11 +484,9 @@ void LLGridManager::getLoginURIs(const std::string& grid, std::vector<std::strin
 	{
         if (mGridList[grid_name][GRID_LOGIN_URI_VALUE].isArray())
         {
-		    for (LLSD::array_iterator llsd_uri = mGridList[grid_name][GRID_LOGIN_URI_VALUE].beginArray();
-			     llsd_uri != mGridList[grid_name][GRID_LOGIN_URI_VALUE].endArray();
-			     llsd_uri++)
+		    for (const LLSD& llsd_uri : mGridList[grid_name][GRID_LOGIN_URI_VALUE].array())
 		    {
-			    uris.push_back(llsd_uri->asString());
+			    uris.push_back(llsd_uri.asString());
 		    }
         }
         else
diff --git a/indra/newview/tests/llviewerassetstats_test.cpp b/indra/newview/tests/llviewerassetstats_test.cpp
index e2e7f09c3b4279b633e438400e6b82beec5c7a62..183f649f72486db788a090e5106e9046d0341dad 100644
--- a/indra/newview/tests/llviewerassetstats_test.cpp
+++ b/indra/newview/tests/llviewerassetstats_test.cpp
@@ -217,16 +217,14 @@ get_region(const LLSD & sd, U64 region_handle1)
 	U32 grid_x(0), grid_y(0);
 	grid_from_region_handle(region_handle1, &grid_x, &grid_y);
 
-	for (LLSD::array_const_iterator it(sd["regions"].beginArray());
-		 sd["regions"].endArray() != it;
-		 ++it)
+	for (const LLSD& llsd_val : sd["regions"].array())
 	{
-		if ((*it).has("grid_x") &&
-			(*it).has("grid_y") &&
-			(*it)["grid_x"].isInteger() &&
-			(*it)["grid_y"].isInteger() &&
-			(*it)["grid_x"].asInteger() == grid_x &&
-			(*it)["grid_y"].asInteger() == grid_y)
+		if (llsd_val.has("grid_x") &&
+			llsd_val.has("grid_y") &&
+			llsd_val["grid_x"].isInteger() &&
+			llsd_val["grid_y"].isInteger() &&
+			llsd_val["grid_x"].asInteger() == grid_x &&
+			llsd_val["grid_y"].asInteger() == grid_y)
 		{
 			return *it;
 		}