diff --git a/garnet/bin/setui/src/audio/stream_volume_control.rs b/garnet/bin/setui/src/audio/stream_volume_control.rs
index c346d7df7..3e81b19 100644
--- a/garnet/bin/setui/src/audio/stream_volume_control.rs
+++ b/garnet/bin/setui/src/audio/stream_volume_control.rs
@@ -4,12 +4,12 @@
 
 use {
     crate::switchboard::base::{AudioStream, AudioStreamType},
-    fidl::endpoints::create_proxy,
+    fidl::{self, endpoints::create_proxy},
     fidl_fuchsia_media::{AudioRenderUsage, Usage},
-    fidl_fuchsia_media_audio::{VolumeControlEvent, VolumeControlProxy},
+    fidl_fuchsia_media_audio::VolumeControlProxy,
     fuchsia_async as fasync,
     fuchsia_syslog::fx_log_err,
-    futures::TryStreamExt,
+    futures::{FutureExt, TryFutureExt, TryStreamExt},
 };
 
 // Stores an AudioStream and a VolumeControl proxy bound to the AudioCore
@@ -77,18 +77,17 @@
     // TODO(fxb/37777): Update |stored_stream| in StreamVolumeControl and send a notification
     // when we receive an update.
     let proxy_clone = vol_control_proxy.clone();
-    fasync::spawn(async move {
-        let mut stream = proxy_clone.take_event_stream();
-        while let Some(evt) = stream.try_next().await.unwrap() {
-            match evt {
-                VolumeControlEvent::OnVolumeMuteChanged { new_volume: _, new_muted: _ } => {
-                    proxy_clone.notify_volume_mute_changed_handled().unwrap_or_else(move |e| {
-                        fx_log_err!("failed to notify volume mute change handling, {}", e);
-                    });
-                }
-            }
-        }
-    });
+    let consume_volume_events = async move {
+        let mut volume_events = proxy_clone.take_event_stream();
+        while let Some(_) = volume_events.try_next().await? {}
+
+        Ok(())
+    };
+    fasync::spawn(
+        consume_volume_events
+            .map_err(|e: fidl::Error| fx_log_err!("Volume event stream failed: {}", e))
+            .map(|_| ()),
+    );
 
     Some(vol_control_proxy)
 }
diff --git a/garnet/bin/setui/src/tests/audio_tests.rs b/garnet/bin/setui/src/tests/audio_tests.rs
index d1eb83c..039394e 100644
--- a/garnet/bin/setui/src/tests/audio_tests.rs
+++ b/garnet/bin/setui/src/tests/audio_tests.rs
@@ -145,8 +145,6 @@
         (CHANGED_VOLUME_LEVEL, CHANGED_VOLUME_MUTED),
         audio_core_service_handle.read().get_level_and_mute(AudioRenderUsage::Media).unwrap()
     );
-
-    assert_eq!(2, audio_core_service_handle.read().get_ack_count(AudioRenderUsage::Media).unwrap());
 }
 
 // Test to ensure mic input change events are received.
@@ -247,12 +245,6 @@
         (CHANGED_VOLUME_LEVEL, CHANGED_VOLUME_MUTED),
         audio_core_service_handle.read().get_level_and_mute(AudioRenderUsage::SystemAgent).unwrap()
     );
-
-    assert_eq!(2, audio_core_service_handle.read().get_ack_count(AudioRenderUsage::Media).unwrap());
-    assert_eq!(
-        2,
-        audio_core_service_handle.read().get_ack_count(AudioRenderUsage::SystemAgent).unwrap()
-    );
 }
 
 // Test to ensure that when |pair_media_and_system_agent| is disabled, setting the media volume will
@@ -289,9 +281,6 @@
         None,
         audio_core_service_handle.read().get_level_and_mute(AudioRenderUsage::SystemAgent)
     );
-
-    assert_eq!(2, audio_core_service_handle.read().get_ack_count(AudioRenderUsage::Media).unwrap());
-    assert_eq!(None, audio_core_service_handle.read().get_ack_count(AudioRenderUsage::SystemAgent));
 }
 
 // Test to ensure that when |pair_media_and_system_agent| is enabled, setting the media volume
@@ -339,12 +328,6 @@
         (CHANGED_SYSTEM_LEVEL, CHANGED_SYSTEM_MUTED),
         audio_core_service_handle.read().get_level_and_mute(AudioRenderUsage::SystemAgent).unwrap()
     );
-
-    assert_eq!(2, audio_core_service_handle.read().get_ack_count(AudioRenderUsage::Media).unwrap());
-    assert_eq!(
-        1,
-        audio_core_service_handle.read().get_ack_count(AudioRenderUsage::SystemAgent).unwrap()
-    );
 }
 
 #[fuchsia_async::run_singlethreaded(test)]
diff --git a/garnet/bin/setui/src/tests/fakes/audio_core_service.rs b/garnet/bin/setui/src/tests/fakes/audio_core_service.rs
index c7caaea..d4520d8 100644
--- a/garnet/bin/setui/src/tests/fakes/audio_core_service.rs
+++ b/garnet/bin/setui/src/tests/fakes/audio_core_service.rs
@@ -17,27 +17,16 @@
 /// usages.
 pub struct AudioCoreService {
     audio_streams: Arc<RwLock<HashMap<AudioRenderUsage, (f32, bool)>>>,
-    ack_count: Arc<RwLock<HashMap<AudioRenderUsage, u32>>>,
 }
 
 impl AudioCoreService {
     pub fn new() -> Self {
-        Self {
-            audio_streams: Arc::new(RwLock::new(HashMap::new())),
-            ack_count: Arc::new(RwLock::new(HashMap::new())),
-        }
+        Self { audio_streams: Arc::new(RwLock::new(HashMap::new())) }
     }
 
     pub fn get_level_and_mute(&self, usage: AudioRenderUsage) -> Option<(f32, bool)> {
         get_level_and_mute(usage, &self.audio_streams)
     }
-
-    pub fn get_ack_count(&self, usage: AudioRenderUsage) -> Option<u32> {
-        if let Some(count) = (*self.ack_count.read()).get(&usage) {
-            return Some(*count);
-        }
-        None
-    }
 }
 
 impl Service for AudioCoreService {
@@ -54,7 +43,6 @@
             ServerEnd::<fidl_fuchsia_media::AudioCoreMarker>::new(channel).into_stream()?;
 
         let streams_clone = self.audio_streams.clone();
-        let ack_count_clone = self.ack_count.clone();
         fasync::spawn(async move {
             while let Some(req) = manager_stream.try_next().await.unwrap() {
                 #[allow(unreachable_patterns)]
@@ -69,7 +57,6 @@
                                 volume_control,
                                 render_usage,
                                 streams_clone.clone(),
-                                ack_count_clone.clone(),
                             );
                         }
                     }
@@ -96,7 +83,6 @@
     volume_control: ServerEnd<fidl_fuchsia_media_audio::VolumeControlMarker>,
     render_usage: AudioRenderUsage,
     streams: Arc<RwLock<HashMap<AudioRenderUsage, (f32, bool)>>>,
-    ack_count: Arc<RwLock<HashMap<AudioRenderUsage, u32>>>,
 ) {
     let mut stream = volume_control.into_stream().expect("volume control stream error");
     fasync::spawn(async move {
@@ -114,7 +100,8 @@
                     } else {
                         (*streams.write()).insert(render_usage, (volume, DEFAULT_VOLUME_MUTED));
                     }
-                    control_handle.send_on_volume_mute_changed(volume, curr_mute)
+                    control_handle
+                        .send_on_volume_mute_changed(volume, curr_mute)
                         .expect("on volume mute changed");
                 }
                 fidl_fuchsia_media_audio::VolumeControlRequest::SetMute {
@@ -129,19 +116,10 @@
                         (*streams.write()).insert(render_usage, (DEFAULT_VOLUME_LEVEL, mute));
                     }
 
-                    control_handle.send_on_volume_mute_changed(curr_level, mute)
+                    control_handle
+                        .send_on_volume_mute_changed(curr_level, mute)
                         .expect("on volume mute changed");
                 }
-                fidl_fuchsia_media_audio::VolumeControlRequest::NotifyVolumeMuteChangedHandled {
-                    control_handle: _
-                } => {
-                    let mut ack_count_lock = ack_count.write();
-                    let mut new_count = 1;
-                    if let Some(count) = (*ack_count_lock).get(&render_usage) {
-                        new_count = *count + 1;
-                    }
-                    ack_count_lock.insert(render_usage, new_count);
-                }
                 _ => {}
             }
         }
diff --git a/sdk/fidl/fuchsia.media.audio/fuchsia.media.audio.api b/sdk/fidl/fuchsia.media.audio/fuchsia.media.audio.api
index 38f0d8ab..be760cb 100644
--- a/sdk/fidl/fuchsia.media.audio/fuchsia.media.audio.api
+++ b/sdk/fidl/fuchsia.media.audio/fuchsia.media.audio.api
@@ -1,4 +1,4 @@
 {
   "fidl/fuchsia.media.audio/gain_control.fidl": "0882351775e1b05cfbe0aabcae2d1c47",
-  "fidl/fuchsia.media.audio/volume_control.fidl": "ff622dae6eb90bbad52685446e2a4066"
+  "fidl/fuchsia.media.audio/volume_control.fidl": "f8f2c94e02a0ed42eca750d51ad89558"
 }
\ No newline at end of file
diff --git a/sdk/fidl/fuchsia.media.audio/volume_control.fidl b/sdk/fidl/fuchsia.media.audio/volume_control.fidl
index 6e43a8d..6c4936b 100644
--- a/sdk/fidl/fuchsia.media.audio/volume_control.fidl
+++ b/sdk/fidl/fuchsia.media.audio/volume_control.fidl
@@ -24,8 +24,4 @@
 
     /// Emitted when the volume or mute state of the audio element changes.
     -> OnVolumeMuteChanged(float32 new_volume, bool new_muted);
-    /// Acknowledges receipt of a volume or mute change event. Clients must
-    /// acknowledge receipt to continue receiving events.
-    // TODO(35429): Remove when FIDL gets event responses.
-    NotifyVolumeMuteChangedHandled();
 };
diff --git a/src/media/audio/audio_core/volume_control.cc b/src/media/audio/audio_core/volume_control.cc
index 06d7a93..2622268 100644
--- a/src/media/audio/audio_core/volume_control.cc
+++ b/src/media/audio/audio_core/volume_control.cc
@@ -10,11 +10,6 @@
 
 namespace {
 
-// TODO(turnage): Move to FIDL
-constexpr int64_t kBacklogFullEpitaph = 88;
-
-// This layer of indirection on VolumeControl just holds a per-client ack count.
-//
 // This exists because impls in a BindingSet cannot access their own binding to send events in a
 // safe way.
 class VolumeControlImpl : public fuchsia::media::audio::VolumeControl {
@@ -22,18 +17,12 @@
   VolumeControlImpl(::media::audio::VolumeControl* volume_control)
       : volume_control_(volume_control) {}
 
-  // Counts an event sent to this client among the pending acks.
-  // Returns the events already sent.
-  uint64_t CountEvent() { return events_sent_without_ack_++; }
-
  private:
   // |fuchsia::media::audio::VolumeControl|
   void SetVolume(float volume) override { volume_control_->SetVolume(volume); }
   void SetMute(bool mute) override { volume_control_->SetMute(mute); }
-  void NotifyVolumeMuteChangedHandled() override { events_sent_without_ack_ = 0; }
 
   ::media::audio::VolumeControl* volume_control_;
-  uint64_t events_sent_without_ack_ = 0;
 };
 
 }  // namespace
@@ -74,13 +63,7 @@
 
 void VolumeControl::NotifyClientsOfState() {
   for (auto& binding : bindings_.bindings()) {
-    auto impl = static_cast<VolumeControlImpl*>(binding->impl().get());
-    if (impl->CountEvent() < kMaxEventsSentWithoutAck) {
-      binding->events().OnVolumeMuteChanged(current_volume_, muted_);
-    } else {
-      binding->Close(kBacklogFullEpitaph);
-      AUD_LOG(WARNING) << "Disconnected volume control client because they did not ACK events";
-    }
+    binding->events().OnVolumeMuteChanged(current_volume_, muted_);
   }
 }
 
diff --git a/src/media/audio/audio_core/volume_control_unittest.cc b/src/media/audio/audio_core/volume_control_unittest.cc
index b5e7070..1dfe2c7 100644
--- a/src/media/audio/audio_core/volume_control_unittest.cc
+++ b/src/media/audio/audio_core/volume_control_unittest.cc
@@ -12,9 +12,6 @@
 namespace media::audio {
 namespace {
 
-// TODO(turnage): Move to FIDL
-constexpr zx_status_t kBacklogFullEpitaph = 88;
-
 class MockVolumeSetting : public VolumeSetting {
  public:
   void SetVolume(float volume) override { volume_ = volume; }
@@ -101,9 +98,7 @@
   float volume;
   bool muted;
   auto client = BindVolumeControl();
-  client.events().OnVolumeMuteChanged = [&client, &volume, &muted](float new_volume,
-                                                                   bool new_muted) {
-    client->NotifyVolumeMuteChangedHandled();
+  client.events().OnVolumeMuteChanged = [&volume, &muted](float new_volume, bool new_muted) {
     volume = new_volume;
     muted = new_muted;
   };
@@ -134,9 +129,8 @@
   bool muted;
   size_t event_count = 0;
   auto client = BindVolumeControl();
-  client.events().OnVolumeMuteChanged = [&client, &event_count, &volume, &muted](float new_volume,
-                                                                                 bool new_muted) {
-    client->NotifyVolumeMuteChangedHandled();
+  client.events().OnVolumeMuteChanged = [&event_count, &volume, &muted](float new_volume,
+                                                                        bool new_muted) {
     volume = new_volume;
     muted = new_muted;
     ++event_count;
@@ -161,9 +155,7 @@
   float volume1;
   bool muted1;
   auto client1 = BindVolumeControl();
-  client1.events().OnVolumeMuteChanged = [&client1, &volume1, &muted1](float new_volume,
-                                                                       bool new_muted) {
-    client1->NotifyVolumeMuteChangedHandled();
+  client1.events().OnVolumeMuteChanged = [&volume1, &muted1](float new_volume, bool new_muted) {
     volume1 = new_volume;
     muted1 = new_muted;
   };
@@ -171,9 +163,7 @@
   float volume2;
   bool muted2;
   auto client2 = BindVolumeControl();
-  client2.events().OnVolumeMuteChanged = [&client2, &volume2, &muted2](float new_volume,
-                                                                       bool new_muted) {
-    client2->NotifyVolumeMuteChangedHandled();
+  client2.events().OnVolumeMuteChanged = [&volume2, &muted2](float new_volume, bool new_muted) {
     volume2 = new_volume;
     muted2 = new_muted;
   };
@@ -186,27 +176,5 @@
   EXPECT_FALSE(muted2);
 }
 
-TEST_F(VolumeControlTest, ClientDisconnectsIfAckLimitExceeded) {
-  size_t client1_event_count = 0;
-  auto client1 = BindVolumeControl();
-  client1.events().OnVolumeMuteChanged = [&client1, &client1_event_count](float _volume,
-                                                                          bool _muted) {
-    client1->NotifyVolumeMuteChangedHandled();
-    client1_event_count += 1;
-  };
-
-  auto client2 = BindVolumeControl();
-  zx_status_t client2_error = ZX_OK;
-  client2.set_error_handler([&client2_error](zx_status_t error) { client2_error = error; });
-
-  for (size_t i = 0; i < VolumeControl::kMaxEventsSentWithoutAck + 1; ++i) {
-    client1->SetVolume(static_cast<float>(i) / 100.0);
-    RunLoopUntilIdle();
-  }
-
-  EXPECT_EQ(client1_event_count, VolumeControl::kMaxEventsSentWithoutAck + 1);
-  EXPECT_EQ(client2_error, kBacklogFullEpitaph);
-}
-
 }  // namespace
 }  // namespace media::audio
