diff --git a/api/transport/network_control.h b/api/transport/network_control.h
index 9c60ccb..11cda46 100644
--- a/api/transport/network_control.h
+++ b/api/transport/network_control.h
@@ -84,6 +84,8 @@
   // Called with per packet feedback regarding receive time.
   virtual NetworkControlUpdate OnTransportPacketsFeedback(
       TransportPacketsFeedback) = 0;
+  // Called with network state estimate updates.
+  virtual NetworkControlUpdate OnNetworkStateEstimate(NetworkStateEstimate) = 0;
 };
 
 // NetworkControllerFactoryInterface is an interface for creating a network
diff --git a/modules/congestion_controller/bbr/bbr_network_controller.cc b/modules/congestion_controller/bbr/bbr_network_controller.cc
index 2e395e9..c64152c 100644
--- a/modules/congestion_controller/bbr/bbr_network_controller.cc
+++ b/modules/congestion_controller/bbr/bbr_network_controller.cc
@@ -503,6 +503,11 @@
   return NetworkControlUpdate();
 }
 
+NetworkControlUpdate BbrNetworkController::OnNetworkStateEstimate(
+    NetworkStateEstimate msg) {
+  return NetworkControlUpdate();
+}
+
 TimeDelta BbrNetworkController::GetMinRtt() const {
   return !min_rtt_.IsZero() ? min_rtt_
                             : TimeDelta::us(rtt_stats_.initial_rtt_us());
diff --git a/modules/congestion_controller/bbr/bbr_network_controller.h b/modules/congestion_controller/bbr/bbr_network_controller.h
index 8598cad..e99452a 100644
--- a/modules/congestion_controller/bbr/bbr_network_controller.h
+++ b/modules/congestion_controller/bbr/bbr_network_controller.h
@@ -165,6 +165,8 @@
   NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate msg) override;
   NetworkControlUpdate OnTransportLossReport(TransportLossReport msg) override;
   NetworkControlUpdate OnReceivedPacket(ReceivedPacket msg) override;
+  NetworkControlUpdate OnNetworkStateEstimate(
+      NetworkStateEstimate msg) override;
 
   NetworkControlUpdate CreateRateUpdate(Timestamp at_time) const;
 
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
index 8bd3cfb..ddc5ca3 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
@@ -253,10 +253,9 @@
   }
   bandwidth_estimation_->OnSentPacket(sent_packet);
   bool network_changed = false;
-  if (network_estimator_ && overuse_predictor_.Enabled()) {
+  if (overuse_predictor_.Enabled()) {
     overuse_predictor_.OnSentPacket(sent_packet);
-    auto estimate = network_estimator_->GetCurrentEstimate();
-    if (estimate && overuse_predictor_.PredictOveruse(*estimate)) {
+    if (estimate_ && overuse_predictor_.PredictOveruse(*estimate_)) {
       DataRate new_target = delay_based_bwe_->TriggerOveruse(
           sent_packet.send_time, acknowledged_bitrate_estimator_->bitrate());
       bandwidth_estimation_->UpdateDelayBasedEstimate(sent_packet.send_time,
@@ -510,19 +509,18 @@
                                              report.feedback_time);
   bandwidth_estimation_->IncomingPacketFeedbackVector(report);
 
-  if (network_estimator_)
+  if (network_estimator_) {
     network_estimator_->OnTransportPacketsFeedback(report);
+    estimate_ = network_estimator_->GetCurrentEstimate();
+  }
 
   NetworkControlUpdate update;
   bool recovered_from_overuse = false;
   bool backoff_in_alr = false;
 
   DelayBasedBwe::Result result;
-  absl::optional<NetworkStateEstimate> network_estimate =
-      network_estimator_ ? network_estimator_->GetCurrentEstimate()
-                         : absl::nullopt;
   result = delay_based_bwe_->IncomingPacketFeedbackVector(
-      report, acknowledged_bitrate, probe_bitrate, network_estimate,
+      report, acknowledged_bitrate, probe_bitrate, estimate_,
       alr_start_time.has_value());
 
   if (result.updated) {
@@ -568,6 +566,12 @@
   return update;
 }
 
+NetworkControlUpdate GoogCcNetworkController::OnNetworkStateEstimate(
+    NetworkStateEstimate msg) {
+  estimate_ = msg;
+  return NetworkControlUpdate();
+}
+
 NetworkControlUpdate GoogCcNetworkController::GetNetworkState(
     Timestamp at_time) const {
   DataRate bandwidth = use_stable_bandwidth_estimate_
diff --git a/modules/congestion_controller/goog_cc/goog_cc_network_control.h b/modules/congestion_controller/goog_cc/goog_cc_network_control.h
index ef75d7a..5b24d14 100644
--- a/modules/congestion_controller/goog_cc/goog_cc_network_control.h
+++ b/modules/congestion_controller/goog_cc/goog_cc_network_control.h
@@ -64,6 +64,8 @@
   NetworkControlUpdate OnTransportLossReport(TransportLossReport msg) override;
   NetworkControlUpdate OnTransportPacketsFeedback(
       TransportPacketsFeedback msg) override;
+  NetworkControlUpdate OnNetworkStateEstimate(
+      NetworkStateEstimate msg) override;
 
   NetworkControlUpdate GetNetworkState(Timestamp at_time) const;
 
@@ -110,6 +112,8 @@
 
   bool first_packet_sent_ = false;
 
+  absl::optional<NetworkStateEstimate> estimate_;
+
   Timestamp next_loss_update_ = Timestamp::MinusInfinity();
   int lost_packets_since_last_loss_update_ = 0;
   int expected_packets_since_last_loss_update_ = 0;
diff --git a/modules/congestion_controller/pcc/pcc_network_controller.cc b/modules/congestion_controller/pcc/pcc_network_controller.cc
index a284710..c6fac49 100644
--- a/modules/congestion_controller/pcc/pcc_network_controller.cc
+++ b/modules/congestion_controller/pcc/pcc_network_controller.cc
@@ -381,5 +381,10 @@
   return NetworkControlUpdate();
 }
 
+NetworkControlUpdate PccNetworkController::OnNetworkStateEstimate(
+    NetworkStateEstimate msg) {
+  return NetworkControlUpdate();
+}
+
 }  // namespace pcc
 }  // namespace webrtc
diff --git a/modules/congestion_controller/pcc/pcc_network_controller.h b/modules/congestion_controller/pcc/pcc_network_controller.h
index befabbf..c70684a 100644
--- a/modules/congestion_controller/pcc/pcc_network_controller.h
+++ b/modules/congestion_controller/pcc/pcc_network_controller.h
@@ -78,6 +78,8 @@
   NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate msg) override;
   NetworkControlUpdate OnTransportLossReport(TransportLossReport msg) override;
   NetworkControlUpdate OnReceivedPacket(ReceivedPacket msg) override;
+  NetworkControlUpdate OnNetworkStateEstimate(
+      NetworkStateEstimate msg) override;
 
  private:
   void UpdateSendingRateAndMode();
diff --git a/test/scenario/call_client.cc b/test/scenario/call_client.cc
index fe77e7a..f366997 100644
--- a/test/scenario/call_client.cc
+++ b/test/scenario/call_client.cc
@@ -132,6 +132,11 @@
     TransportPacketsFeedback msg) {
   return Update(controller_->OnTransportPacketsFeedback(msg));
 }
+NetworkControlUpdate NetworkControleUpdateCache::OnNetworkStateEstimate(
+    NetworkStateEstimate msg) {
+  return Update(controller_->OnNetworkStateEstimate(msg));
+}
+
 NetworkControlUpdate NetworkControleUpdateCache::update_state() const {
   return update_state_;
 }
diff --git a/test/scenario/call_client.h b/test/scenario/call_client.h
index 37efad6..e863e60 100644
--- a/test/scenario/call_client.h
+++ b/test/scenario/call_client.h
@@ -52,6 +52,8 @@
   NetworkControlUpdate OnTransportLossReport(TransportLossReport msg) override;
   NetworkControlUpdate OnTransportPacketsFeedback(
       TransportPacketsFeedback msg) override;
+  NetworkControlUpdate OnNetworkStateEstimate(
+      NetworkStateEstimate msg) override;
 
   NetworkControlUpdate update_state() const;
 
