diff --git a/indra/newview/llcontrolavatar.cpp b/indra/newview/llcontrolavatar.cpp
index dc242757b63cebdff2750afc6fe085666dfb79bc..5d44b01a16f1ed73baef9bf9a07481ab6d0c4754 100644
--- a/indra/newview/llcontrolavatar.cpp
+++ b/indra/newview/llcontrolavatar.cpp
@@ -513,7 +513,7 @@ void LLControlAvatar::updateAnimations()
     getAnimatedVolumes(volumes);
     
     // Rebuild mSignaledAnimations from the associated volumes.
-	std::map<LLUUID, S32> anims;
+	absl::flat_hash_map<LLUUID, S32> anims;
     for (std::vector<LLVOVolume*>::iterator vol_it = volumes.begin(); vol_it != volumes.end(); ++vol_it)
     {
         LLVOVolume *volp = *vol_it;
@@ -523,7 +523,7 @@ void LLControlAvatar::updateAnimations()
              anim_it != signaled_animations.end();
              ++anim_it)
         {
-            std::map<LLUUID,S32>::iterator found_anim_it = anims.find(anim_it->first);
+            auto found_anim_it = anims.find(anim_it->first);
             if (found_anim_it != anims.end())
             {
                 // Animation already present, use the larger sequence id
@@ -547,7 +547,7 @@ void LLControlAvatar::updateAnimations()
         }
     }
 
-    mSignaledAnimations = anims;
+    mSignaledAnimations.swap(anims);
     processAnimationStateChanges();
 }
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index f8b1632d84789f5c87119581f93ad7a0bf902e4e..0bfafe2ac2c1c996f16bf397e77704d1f5071d56 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5621,8 +5621,7 @@ void LLVOAvatar::processAnimationStateChanges()
 	}
 	
 	// clear all current animations
-	std::map<LLUUID, S32>::iterator anim_it;
-	for (anim_it = mPlayingAnimations.begin(); anim_it != mPlayingAnimations.end();)
+	for (auto anim_it = mPlayingAnimations.begin(); anim_it != mPlayingAnimations.end();)
 	{
 		auto found_anim = mSignaledAnimations.find(anim_it->first);
 
@@ -5638,7 +5637,7 @@ void LLVOAvatar::processAnimationStateChanges()
 	}
 
 	// start up all new anims
-	for (anim_it = mSignaledAnimations.begin(); anim_it != mSignaledAnimations.end();)
+	for (auto anim_it = mSignaledAnimations.begin(); anim_it != mSignaledAnimations.end();)
 	{
 		auto found_anim = mPlayingAnimations.find(anim_it->first);
 
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 395c03da94534a8458b08f416a80157ef7f63e88..d5ba12c3d18bce789525e31a4d8f362603744eb7 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -49,6 +49,8 @@
 #include "llvovolume.h"
 #include "llavatarrendernotifier.h"
 
+#include "absl/container/flat_hash_map.h"
+
 extern const LLUUID ANIM_AGENT_BODY_NOISE;
 extern const LLUUID ANIM_AGENT_BREATHE_ROT;
 extern const LLUUID ANIM_AGENT_PHYSICS_MOTION;
@@ -840,8 +842,8 @@ private:
 	// Animation state data
 	//--------------------------------------------------------------------
 public:
-	std::map<LLUUID, S32> 					mSignaledAnimations; // requested state of Animation name/value
-	std::map<LLUUID, S32> 					mPlayingAnimations; // current state of Animation name/value
+	absl::flat_hash_map<LLUUID, S32> 					mSignaledAnimations; // requested state of Animation name/value
+	absl::flat_hash_map<LLUUID, S32> 					mPlayingAnimations; // current state of Animation name/value
 
 	typedef std::multimap<LLUUID, LLUUID> 	AnimationSourceMap;
 	typedef AnimationSourceMap::iterator 	AnimSourceIterator;