diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 491f7bd1b357fba829550121411fcc8b2c477b3b..a9eee47e0500879cb2646ce21c37123067a8b873 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -348,8 +348,7 @@ LLViewerObject::~LLViewerObject()
 	}
 
 	// Delete memory associated with extra parameters.
-	std::map<U16, ExtraParameter*>::iterator iter;
-	for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+	for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 	{
 		if(iter->second != NULL)
 		{
@@ -1544,8 +1543,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 				unpackParticleSource(block_num, owner_id);
 
 				// Mark all extra parameters not used
-				std::map<U16, ExtraParameter*>::iterator iter;
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					iter->second->in_use = FALSE;
 				}
@@ -1574,7 +1572,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 					delete[] buffer;
 				}
 
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					if (!iter->second->in_use)
 					{
@@ -1943,7 +1941,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 				
 				// Mark all extra parameters not used
 				std::map<U16, ExtraParameter*>::iterator iter;
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					iter->second->in_use = FALSE;
 				}
@@ -1963,7 +1961,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 					unpackParameterEntry(param_type, &dp2);
 				}
 
-				for (iter = mExtraParameterList.begin(); iter != mExtraParameterList.end(); ++iter)
+				for (auto iter = mExtraParameterList.begin(), end_it = mExtraParameterList.end(); iter != end_it; ++iter)
 				{
 					if (!iter->second->in_use)
 					{
@@ -6073,7 +6071,7 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para
 		ExtraParameter* new_entry = new ExtraParameter;
 		new_entry->data = new_block;
 		new_entry->in_use = false; // not in use yet
-		mExtraParameterList[param_type] = new_entry;
+		mExtraParameterList.insert_or_assign(param_type, new_entry);
 		return new_entry;
 	}
 	return NULL;
@@ -6081,7 +6079,7 @@ LLViewerObject::ExtraParameter* LLViewerObject::createNewParameterEntry(U16 para
 
 LLViewerObject::ExtraParameter* LLViewerObject::getExtraParameterEntry(U16 param_type) const
 {
-	std::map<U16, ExtraParameter*>::const_iterator itor = mExtraParameterList.find(param_type);
+	auto itor = mExtraParameterList.find(param_type);
 	if (itor != mExtraParameterList.end())
 	{
 		return itor->second;
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
index d5b91708c2ba2d0384fa2e20137a8c22acf3b8e3..f224851e6bd87ca9f35c8f4a303553b95a1df956 100644
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -123,7 +123,7 @@ class LLViewerObject
 		BOOL in_use;
 		LLNetworkData *data;
 	};
-	std::map<U16, ExtraParameter*> mExtraParameterList;
+	absl::flat_hash_map<U16, ExtraParameter*> mExtraParameterList;
 
 public:
 	typedef std::list<LLPointer<LLViewerObject> > child_list_t;