diff --git a/quiche/quic/moqt/moqt_bitrate_adjuster.cc b/quiche/quic/moqt/moqt_bitrate_adjuster.cc
index 59e10b1..58079c4 100644
--- a/quiche/quic/moqt/moqt_bitrate_adjuster.cc
+++ b/quiche/quic/moqt/moqt_bitrate_adjuster.cc
@@ -10,6 +10,7 @@
 
 #include "quiche/quic/core/quic_bandwidth.h"
 #include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/web_transport/web_transport.h"
@@ -34,8 +35,7 @@
 }
 
 void MoqtBitrateAdjuster::OnObjectAckReceived(
-    uint64_t /*group_id*/, uint64_t /*object_id*/,
-    QuicTimeDelta delta_from_deadline) {
+    Location /*location*/, QuicTimeDelta delta_from_deadline) {
   if (!start_time_.IsInitialized()) {
     return;
   }
diff --git a/quiche/quic/moqt/moqt_bitrate_adjuster.h b/quiche/quic/moqt/moqt_bitrate_adjuster.h
index b3667b6..050e696 100644
--- a/quiche/quic/moqt/moqt_bitrate_adjuster.h
+++ b/quiche/quic/moqt/moqt_bitrate_adjuster.h
@@ -11,6 +11,7 @@
 #include "quiche/quic/core/quic_bandwidth.h"
 #include "quiche/quic/core/quic_clock.h"
 #include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/moqt/moqt_session.h"
 #include "quiche/quic/moqt/moqt_trace_recorder.h"
 #include "quiche/web_transport/web_transport.h"
@@ -73,7 +74,7 @@
   // MoqtPublishingMonitorInterface implementation.
   void OnObjectAckSupportKnown(
       std::optional<quic::QuicTimeDelta> time_window) override;
-  void OnObjectAckReceived(uint64_t group_id, uint64_t object_id,
+  void OnObjectAckReceived(Location location,
                            quic::QuicTimeDelta delta_from_deadline) override;
 
   MoqtTraceRecorder& trace_recorder() { return trace_recorder_; }
diff --git a/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc b/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc
index 47ef36d..95be2b2 100644
--- a/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc
+++ b/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc
@@ -6,6 +6,7 @@
 
 #include "quiche/quic/core/quic_bandwidth.h"
 #include "quiche/quic/core/quic_time.h"
+#include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/test_tools/mock_clock.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/web_transport/test_tools/mock_web_transport.h"
@@ -75,7 +76,7 @@
   for (int i = 0; i < 250; ++i) {
     clock_.AdvanceTime(kDefaultRtt);
     for (int j = 0; j < 10; ++j) {
-      adjuster_.OnObjectAckReceived(i, j, kDefaultRtt * 2);
+      adjuster_.OnObjectAckReceived(Location(i, j), kDefaultRtt * 2);
     }
   }
 }
@@ -85,14 +86,16 @@
 
   // First time will be skipped, since we aren't far enough into connection.
   EXPECT_CALL(adjustable_, OnBitrateAdjusted(_)).Times(0);
-  adjuster_.OnObjectAckReceived(0, 0, QuicTimeDelta::FromMilliseconds(-1));
+  adjuster_.OnObjectAckReceived(Location(0, 0),
+                                QuicTimeDelta::FromMilliseconds(-1));
 
   clock_.AdvanceTime(100 * kDefaultRtt);
   EXPECT_CALL(adjustable_, OnBitrateAdjusted(_))
       .WillOnce([](QuicBandwidth new_bitrate) {
         EXPECT_LT(new_bitrate, kDefaultBitrate);
       });
-  adjuster_.OnObjectAckReceived(0, 1, QuicTimeDelta::FromMilliseconds(-1));
+  adjuster_.OnObjectAckReceived(Location(0, 1),
+                                QuicTimeDelta::FromMilliseconds(-1));
 }
 
 TEST_F(MoqtBitrateAdjusterTest, AdjustDownTwice) {
@@ -103,12 +106,14 @@
 
   clock_.AdvanceTime(100 * kDefaultRtt);
   stats_.estimated_send_rate_bps = (0.5 * kDefaultBitrate).ToBitsPerSecond();
-  adjuster_.OnObjectAckReceived(0, 0, QuicTimeDelta::FromMilliseconds(-1));
+  adjuster_.OnObjectAckReceived(Location(0, 0),
+                                QuicTimeDelta::FromMilliseconds(-1));
   EXPECT_EQ(adjusted_times, 1);
 
   clock_.AdvanceTime(100 * kDefaultRtt);
   stats_.estimated_send_rate_bps = (0.25 * kDefaultBitrate).ToBitsPerSecond();
-  adjuster_.OnObjectAckReceived(0, 1, QuicTimeDelta::FromMilliseconds(-1));
+  adjuster_.OnObjectAckReceived(Location(0, 1),
+                                QuicTimeDelta::FromMilliseconds(-1));
   EXPECT_EQ(adjusted_times, 2);
 }
 
diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc
index 8831652..2b2ac7f 100644
--- a/quiche/quic/moqt/moqt_integration_test.cc
+++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -746,13 +746,13 @@
   client_->session()->SubscribeCurrentObject(full_track_name,
                                              &subscribe_visitor_, parameters);
   EXPECT_CALL(monitoring, OnObjectAckSupportKnown(parameters.oack_window_size));
-  EXPECT_CALL(
-      monitoring,
-      OnObjectAckReceived(10, 20, quic::QuicTimeDelta::FromMicroseconds(-123)));
+  EXPECT_CALL(monitoring,
+              OnObjectAckReceived(Location(10, 20),
+                                  quic::QuicTimeDelta::FromMicroseconds(-123)));
   bool done = false;
-  EXPECT_CALL(
-      monitoring,
-      OnObjectAckReceived(100, 200, quic::QuicTimeDelta::FromMicroseconds(456)))
+  EXPECT_CALL(monitoring,
+              OnObjectAckReceived(Location(100, 200),
+                                  quic::QuicTimeDelta::FromMicroseconds(456)))
       .WillOnce([&] { done = true; });
   bool success = test_harness_.RunUntilWithDefaultTimeout([&] { return done; });
   EXPECT_TRUE(success);
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index 4727d5b..de36144 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -2665,7 +2665,8 @@
     return;
   }
   monitoring_interface_->OnObjectAckReceived(
-      message.group_id, message.object_id, message.delta_from_deadline);
+      Location(message.group_id, message.object_id),
+      message.delta_from_deadline);
 }
 
 }  // namespace moqt
diff --git a/quiche/quic/moqt/moqt_session.h b/quiche/quic/moqt/moqt_session.h
index 8b719ba..acebb82 100644
--- a/quiche/quic/moqt/moqt_session.h
+++ b/quiche/quic/moqt/moqt_session.h
@@ -66,7 +66,7 @@
 
   virtual void OnObjectAckSupportKnown(
       std::optional<quic::QuicTimeDelta> time_window) = 0;
-  virtual void OnObjectAckReceived(uint64_t group_id, uint64_t object_id,
+  virtual void OnObjectAckReceived(Location location,
                                    quic::QuicTimeDelta delta_from_deadline) = 0;
 };
 
diff --git a/quiche/quic/moqt/test_tools/moqt_mock_visitor.h b/quiche/quic/moqt/test_tools/moqt_mock_visitor.h
index 97bb809..27c65ad 100644
--- a/quiche/quic/moqt/test_tools/moqt_mock_visitor.h
+++ b/quiche/quic/moqt/test_tools/moqt_mock_visitor.h
@@ -212,8 +212,7 @@
   MOCK_METHOD(void, OnObjectAckSupportKnown,
               (std::optional<quic::QuicTimeDelta> time_window), (override));
   MOCK_METHOD(void, OnObjectAckReceived,
-              (uint64_t group_id, uint64_t object_id,
-               quic::QuicTimeDelta delta_from_deadline),
+              (Location location, quic::QuicTimeDelta delta_from_deadline),
               (override));
 };
 
