diff --git a/api/rtp_parameters.cc b/api/rtp_parameters.cc
index c4fd112..6de14da 100644
--- a/api/rtp_parameters.cc
+++ b/api/rtp_parameters.cc
@@ -108,6 +108,8 @@
 
 const char RtpExtension::kTransportSequenceNumberUri[] =
     "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01";
+const char RtpExtension::kTransportSequenceNumberV2Uri[] =
+    "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-02";
 const int RtpExtension::kTransportSequenceNumberDefaultId = 5;
 
 // This extension allows applications to adaptively limit the playout delay
diff --git a/api/rtp_parameters.h b/api/rtp_parameters.h
index 25a21c1..90e4a4c 100644
--- a/api/rtp_parameters.h
+++ b/api/rtp_parameters.h
@@ -295,6 +295,7 @@
   // Header extension for transport sequence number, see url for details:
   // http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions
   static const char kTransportSequenceNumberUri[];
+  static const char kTransportSequenceNumberV2Uri[];
   static const int kTransportSequenceNumberDefaultId;
 
   static const char kPlayoutDelayUri[];
diff --git a/call/call.cc b/call/call.cc
index f3f6cd3..5baf425 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -68,13 +68,22 @@
 namespace webrtc {
 
 namespace {
+bool SendFeedbackOnRequestOnly(const std::vector<RtpExtension>& extensions) {
+  for (const auto& extension : extensions) {
+    if (extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
+      return true;
+  }
+  return false;
+}
+
 // TODO(nisse): This really begs for a shared context struct.
 bool UseSendSideBwe(const std::vector<RtpExtension>& extensions,
                     bool transport_cc) {
   if (!transport_cc)
     return false;
   for (const auto& extension : extensions) {
-    if (extension.uri == RtpExtension::kTransportSequenceNumberUri)
+    if (extension.uri == RtpExtension::kTransportSequenceNumberUri ||
+        extension.uri == RtpExtension::kTransportSequenceNumberV2Uri)
       return true;
   }
   return false;
@@ -862,6 +871,9 @@
   TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream");
   RTC_DCHECK_CALLED_SEQUENTIALLY(&configuration_sequence_checker_);
 
+  receive_side_cc_.SetSendFeedbackOnRequestOnly(
+      SendFeedbackOnRequestOnly(configuration.rtp.extensions));
+
   RegisterRateObserver();
 
   VideoReceiveStream* receive_stream = new VideoReceiveStream(
diff --git a/modules/congestion_controller/include/receive_side_congestion_controller.h b/modules/congestion_controller/include/receive_side_congestion_controller.h
index b021618..5532b3c 100644
--- a/modules/congestion_controller/include/receive_side_congestion_controller.h
+++ b/modules/congestion_controller/include/receive_side_congestion_controller.h
@@ -38,6 +38,7 @@
                                 size_t payload_size,
                                 const RTPHeader& header);
 
+  void SetSendFeedbackOnRequestOnly(bool send_feedback_on_request_only);
   // TODO(nisse): Delete these methods, design a more specific interface.
   virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator(bool send_side_bwe);
   virtual const RemoteBitrateEstimator* GetRemoteBitrateEstimator(
diff --git a/modules/congestion_controller/receive_side_congestion_controller.cc b/modules/congestion_controller/receive_side_congestion_controller.cc
index 224a49d..1a95f8c 100644
--- a/modules/congestion_controller/receive_side_congestion_controller.cc
+++ b/modules/congestion_controller/receive_side_congestion_controller.cc
@@ -139,6 +139,12 @@
   }
 }
 
+void ReceiveSideCongestionController::SetSendFeedbackOnRequestOnly(
+    bool send_feedback_on_request_only) {
+  remote_estimator_proxy_.SetSendFeedbackOnRequestOnly(
+      send_feedback_on_request_only);
+}
+
 RemoteBitrateEstimator*
 ReceiveSideCongestionController::GetRemoteBitrateEstimator(bool send_side_bwe) {
   if (send_side_bwe) {
diff --git a/modules/remote_bitrate_estimator/remote_estimator_proxy.cc b/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
index 9d9d27f..9323044 100644
--- a/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
+++ b/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
@@ -41,7 +41,8 @@
       media_ssrc_(0),
       feedback_sequence_(0),
       window_start_seq_(-1),
-      send_interval_ms_(kDefaultSendIntervalMs) {}
+      send_interval_ms_(kDefaultSendIntervalMs),
+      send_feedback_on_request_only_(false) {}
 
 RemoteEstimatorProxy::~RemoteEstimatorProxy() {}
 
@@ -110,6 +111,12 @@
                 rtc::SafeClamp(0.05 * bitrate_bps, kMinTwccRate, kMaxTwccRate));
 }
 
+void RemoteEstimatorProxy::SetSendFeedbackOnRequestOnly(
+    bool send_feedback_on_request_only) {
+  rtc::CritScope cs(&lock_);
+  send_feedback_on_request_only_ = send_feedback_on_request_only;
+}
+
 void RemoteEstimatorProxy::OnPacketArrival(uint16_t sequence_number,
                                            int64_t arrival_time) {
   if (arrival_time < 0 || arrival_time > kMaxTimeMs) {
diff --git a/modules/remote_bitrate_estimator/remote_estimator_proxy.h b/modules/remote_bitrate_estimator/remote_estimator_proxy.h
index db41a94..94b1716 100644
--- a/modules/remote_bitrate_estimator/remote_estimator_proxy.h
+++ b/modules/remote_bitrate_estimator/remote_estimator_proxy.h
@@ -47,6 +47,7 @@
   int64_t TimeUntilNextProcess() override;
   void Process() override;
   void OnBitrateChanged(int bitrate);
+  void SetSendFeedbackOnRequestOnly(bool send_feedback_on_request_only);
 
   static const int kMinSendIntervalMs;
   static const int kMaxSendIntervalMs;
@@ -71,6 +72,7 @@
   // Map unwrapped seq -> time.
   std::map<int64_t, int64_t> packet_arrival_times_ RTC_GUARDED_BY(&lock_);
   int64_t send_interval_ms_ RTC_GUARDED_BY(&lock_);
+  bool send_feedback_on_request_only_ RTC_GUARDED_BY(&lock_);
 };
 
 }  // namespace webrtc
