diff --git a/assignment-client/src/audio/AudioMixerSlave.cpp b/assignment-client/src/audio/AudioMixerSlave.cpp
index bddadf6e26..573dab030e 100644
--- a/assignment-client/src/audio/AudioMixerSlave.cpp
+++ b/assignment-client/src/audio/AudioMixerSlave.cpp
@@ -730,6 +730,7 @@ float approximateGain(const AvatarAudioStream& listeningNodeStream, const Positi
 
     float d = (1.0f / ATTN_DISTANCE_REF) * std::max(distance, HRTF_NEARFIELD_MIN);
     gain = gain / d;
+    gain = std::min(gain, ATTN_GAIN_MAX);
 
     // avatar: skip master gain - it is constant for all streams
     return gain;
@@ -780,6 +781,7 @@ float computeGain(float masterListenerGain, const AvatarAudioStream& listeningNo
     // reference attenuation of 0dB at distance = ATTN_DISTANCE_REF
     float d = (1.0f / ATTN_DISTANCE_REF) * std::max(distance, HRTF_NEARFIELD_MIN);
     gain *= fastExp2f(fastLog2f(g) * fastLog2f(d));
+    gain = std::min(gain, ATTN_GAIN_MAX);
 
     return gain;
 }
diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp
index 82674ddc72..990834fcb8 100644
--- a/libraries/audio-client/src/AudioClient.cpp
+++ b/libraries/audio-client/src/AudioClient.cpp
@@ -1955,6 +1955,7 @@ float AudioClient::gainForSource(float distance, float volume) {
     // reference attenuation of 0dB at distance = ATTN_DISTANCE_REF
     float d = (1.0f / ATTN_DISTANCE_REF) * std::max(distance, HRTF_NEARFIELD_MIN);
     float gain = volume / d;
+    gain = std::min(gain, ATTN_GAIN_MAX);
 
     return gain;
 }
diff --git a/libraries/audio/src/AudioHRTF.h b/libraries/audio/src/AudioHRTF.h
index 952c4e4af6..de104db226 100644
--- a/libraries/audio/src/AudioHRTF.h
+++ b/libraries/audio/src/AudioHRTF.h
@@ -32,6 +32,7 @@ static const float HRTF_HEAD_RADIUS = 0.0875f;  // average human head in meters
 
 // Distance attenuation
 static const float ATTN_DISTANCE_REF = 1.0f;    // distance where attn is 0dB
+static const float ATTN_GAIN_MAX = 8.0f;        // max gain allowed by distance attn (+18dB)
 
 class AudioHRTF {