diff --git a/api/BUILD.gn b/api/BUILD.gn
index 813a35e..f3038db 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -87,6 +87,7 @@
     "cryptoparams.h",
     "datachannelinterface.cc",
     "datachannelinterface.h",
+    "dtlstransportinterface.h",
     "dtmfsenderinterface.h",
     "jsep.cc",
     "jsep.h",
diff --git a/api/DEPS b/api/DEPS
index 9756f44..c4be2a3 100644
--- a/api/DEPS
+++ b/api/DEPS
@@ -75,6 +75,10 @@
     "+rtc_base/refcount.h",
   ],
 
+  "dtlstransportinterface\.h": [
+    "+rtc_base/refcount.h",
+  ],
+
   "dtmfsenderinterface\.h": [
     "+rtc_base/refcount.h",
   ],
diff --git a/api/dtlstransportinterface.h b/api/dtlstransportinterface.h
new file mode 100644
index 0000000..dff4f5e
--- /dev/null
+++ b/api/dtlstransportinterface.h
@@ -0,0 +1,30 @@
+/*
+ *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef API_DTLSTRANSPORTINTERFACE_H_
+#define API_DTLSTRANSPORTINTERFACE_H_
+
+#include "rtc_base/refcount.h"
+
+namespace webrtc {
+
+// A DTLS transport, as represented to the outside world.
+// Its role is to report state changes and errors, and make sure information
+// about remote certificates is available.
+class DtlsTransportInterface : public rtc::RefCountInterface {
+ public:
+  // TODO(hta): Need a notifier interface to transmit state changes and
+  // error events. The generic NotifierInterface of mediasteraminterface.h
+  // may be suitable, or may be copyable.
+};
+
+}  // namespace webrtc
+
+#endif  // API_DTLSTRANSPORTINTERFACE_H_
diff --git a/api/peerconnectioninterface.cc b/api/peerconnectioninterface.cc
index f2953b5..a861801 100644
--- a/api/peerconnectioninterface.cc
+++ b/api/peerconnectioninterface.cc
@@ -9,6 +9,7 @@
  */
 
 #include "api/peerconnectioninterface.h"
+#include "api/dtlstransportinterface.h"
 
 namespace webrtc {
 
@@ -175,6 +176,11 @@
   return false;
 }
 
+rtc::scoped_refptr<DtlsTransportInterface>
+PeerConnectionInterface::LookupDtlsTransportByMid(const std::string& mid) {
+  return nullptr;
+}
+
 PeerConnectionInterface::BitrateParameters::BitrateParameters() = default;
 
 PeerConnectionInterface::BitrateParameters::~BitrateParameters() = default;
diff --git a/api/peerconnectioninterface.h b/api/peerconnectioninterface.h
index 54161b8..02b925d 100644
--- a/api/peerconnectioninterface.h
+++ b/api/peerconnectioninterface.h
@@ -129,6 +129,7 @@
 class AudioDeviceModule;
 class AudioMixer;
 class AudioProcessing;
+class DtlsTransportInterface;
 class MediaConstraintsInterface;
 class VideoDecoderFactory;
 class VideoEncoderFactory;
@@ -1029,6 +1030,14 @@
   // TODO(henrika): deprecate and remove this.
   virtual void SetAudioRecording(bool recording) {}
 
+  // Looks up the DtlsTransport associated with a MID value.
+  // In the Javascript API, DtlsTransport is a property of a sender, but
+  // because the PeerConnection owns the DtlsTransport in this implementation,
+  // it is better to look them up on the PeerConnection.
+  virtual rtc::scoped_refptr<DtlsTransportInterface> LookupDtlsTransportByMid(
+      const std::string& mid);
+  // TODO(hta): Remove default implementation.
+
   // Returns the current SignalingState.
   virtual SignalingState signaling_state() = 0;
 
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index b759b6b..6999ddd 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -36,6 +36,8 @@
     "channelmanager.h",
     "dtlssrtptransport.cc",
     "dtlssrtptransport.h",
+    "dtlstransport.cc",
+    "dtlstransport.h",
     "externalhmac.cc",
     "externalhmac.h",
     "jseptransport.cc",
diff --git a/pc/dtlstransport.cc b/pc/dtlstransport.cc
new file mode 100644
index 0000000..dd95bae
--- /dev/null
+++ b/pc/dtlstransport.cc
@@ -0,0 +1,23 @@
+/*
+ *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "pc/dtlstransport.h"
+
+#include <utility>
+
+namespace webrtc {
+
+DtlsTransport::DtlsTransport(
+    std::unique_ptr<cricket::DtlsTransportInternal> internal)
+    : internal_dtls_transport_(std::move(internal)) {
+  RTC_DCHECK(internal_dtls_transport_.get());
+}
+
+}  // namespace webrtc
diff --git a/pc/dtlstransport.h b/pc/dtlstransport.h
new file mode 100644
index 0000000..dacdba2
--- /dev/null
+++ b/pc/dtlstransport.h
@@ -0,0 +1,36 @@
+/*
+ *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef PC_DTLSTRANSPORT_H_
+#define PC_DTLSTRANSPORT_H_
+
+#include <memory>
+
+#include "api/dtlstransportinterface.h"
+#include "p2p/base/dtlstransport.h"
+
+namespace webrtc {
+
+// This implementation wraps a cricket::DtlsTransport, and takes
+// ownership of it.
+class DtlsTransport : public DtlsTransportInterface {
+ public:
+  explicit DtlsTransport(
+      std::unique_ptr<cricket::DtlsTransportInternal> internal);
+  cricket::DtlsTransportInternal* internal() {
+    return internal_dtls_transport_.get();
+  }
+
+ private:
+  std::unique_ptr<cricket::DtlsTransportInternal> internal_dtls_transport_;
+};
+
+}  // namespace webrtc
+#endif  // PC_DTLSTRANSPORT_H_
diff --git a/pc/jseptransport.cc b/pc/jseptransport.cc
index 7a95c48..c60c28d 100644
--- a/pc/jseptransport.cc
+++ b/pc/jseptransport.cc
@@ -101,8 +101,15 @@
     std::unique_ptr<webrtc::MediaTransportInterface> media_transport)
     : mid_(mid),
       local_certificate_(local_certificate),
-      rtp_dtls_transport_(std::move(rtp_dtls_transport)),
-      rtcp_dtls_transport_(std::move(rtcp_dtls_transport)),
+      rtp_dtls_transport_(
+          rtp_dtls_transport ? new rtc::RefCountedObject<webrtc::DtlsTransport>(
+                                   std::move(rtp_dtls_transport))
+                             : nullptr),
+      rtcp_dtls_transport_(
+          rtcp_dtls_transport
+              ? new rtc::RefCountedObject<webrtc::DtlsTransport>(
+                    std::move(rtcp_dtls_transport))
+              : nullptr),
       media_transport_(std::move(media_transport)) {
   RTC_DCHECK(rtp_dtls_transport_);
   if (unencrypted_rtp_transport) {
@@ -185,10 +192,10 @@
     }
   }
 
-  SetLocalIceParameters(rtp_dtls_transport_->ice_transport());
+  SetLocalIceParameters(rtp_dtls_transport_->internal()->ice_transport());
 
   if (rtcp_dtls_transport_) {
-    SetLocalIceParameters(rtcp_dtls_transport_->ice_transport());
+    SetLocalIceParameters(rtcp_dtls_transport_->internal()->ice_transport());
   }
 
   // If PRANSWER/ANSWER is set, we should decide transport protocol type.
@@ -248,10 +255,10 @@
   }
 
   remote_description_.reset(new JsepTransportDescription(jsep_description));
-  SetRemoteIceParameters(rtp_dtls_transport_->ice_transport());
+  SetRemoteIceParameters(rtp_dtls_transport_->internal()->ice_transport());
 
   if (rtcp_dtls_transport_) {
-    SetRemoteIceParameters(rtcp_dtls_transport_->ice_transport());
+    SetRemoteIceParameters(rtcp_dtls_transport_->internal()->ice_transport());
   }
 
   // If PRANSWER/ANSWER is set, we should decide transport protocol type.
@@ -278,14 +285,14 @@
   for (const cricket::Candidate& candidate : candidates) {
     auto transport =
         candidate.component() == cricket::ICE_CANDIDATE_COMPONENT_RTP
-            ? rtp_dtls_transport_.get()
-            : rtcp_dtls_transport_.get();
+            ? rtp_dtls_transport_
+            : rtcp_dtls_transport_;
     if (!transport) {
       return webrtc::RTCError(webrtc::RTCErrorType::INVALID_PARAMETER,
                               "Candidate has an unknown component: " +
                                   candidate.ToString() + " for mid " + mid());
     }
-    transport->ice_transport()->AddRemoteCandidate(candidate);
+    transport->internal()->ice_transport()->AddRemoteCandidate(candidate);
   }
   return webrtc::RTCError::OK();
 }
@@ -300,7 +307,7 @@
 absl::optional<rtc::SSLRole> JsepTransport::GetDtlsRole() const {
   RTC_DCHECK(rtp_dtls_transport_);
   rtc::SSLRole dtls_role;
-  if (!rtp_dtls_transport_->GetDtlsRole(&dtls_role)) {
+  if (!rtp_dtls_transport_->internal()->GetDtlsRole(&dtls_role)) {
     return absl::optional<rtc::SSLRole>();
   }
 
@@ -310,9 +317,9 @@
 bool JsepTransport::GetStats(TransportStats* stats) {
   stats->transport_name = mid();
   stats->channel_stats.clear();
-  bool ret = GetTransportStats(rtp_dtls_transport_.get(), stats);
+  bool ret = GetTransportStats(rtp_dtls_transport_->internal(), stats);
   if (rtcp_dtls_transport_) {
-    ret &= GetTransportStats(rtcp_dtls_transport_.get(), stats);
+    ret &= GetTransportStats(rtcp_dtls_transport_->internal(), stats);
   }
   return ret;
 }
@@ -440,7 +447,7 @@
     dtls_srtp_transport_->SetDtlsTransports(rtp_dtls_transport(),
                                             /*rtcp_dtls_transport=*/nullptr);
   }
-  rtcp_dtls_transport_.reset();
+  rtcp_dtls_transport_ = nullptr;  // Destroy this reference.
   // Notify the JsepTransportController to update the aggregate states.
   SignalRtcpMuxActive();
 }
@@ -528,14 +535,14 @@
   // creation, we have the negotiation state saved until a new
   // negotiation happens.
   webrtc::RTCError error = SetNegotiatedDtlsParameters(
-      rtp_dtls_transport_.get(), negotiated_dtls_role,
+      rtp_dtls_transport_->internal(), negotiated_dtls_role,
       remote_fingerprint.get());
   if (!error.ok()) {
     return error;
   }
 
   if (rtcp_dtls_transport_) {
-    error = SetNegotiatedDtlsParameters(rtcp_dtls_transport_.get(),
+    error = SetNegotiatedDtlsParameters(rtcp_dtls_transport_->internal(),
                                         negotiated_dtls_role,
                                         remote_fingerprint.get());
   }
@@ -634,9 +641,13 @@
                                       TransportStats* stats) {
   RTC_DCHECK(dtls_transport);
   TransportChannelStats substats;
-  substats.component = dtls_transport == rtcp_dtls_transport_.get()
-                           ? ICE_CANDIDATE_COMPONENT_RTCP
-                           : ICE_CANDIDATE_COMPONENT_RTP;
+  if (rtcp_dtls_transport_) {
+    substats.component = dtls_transport == rtcp_dtls_transport_->internal()
+                             ? ICE_CANDIDATE_COMPONENT_RTCP
+                             : ICE_CANDIDATE_COMPONENT_RTP;
+  } else {
+    substats.component = ICE_CANDIDATE_COMPONENT_RTP;
+  }
   dtls_transport->GetSrtpCryptoSuite(&substats.srtp_crypto_suite);
   dtls_transport->GetSslCipherSuite(&substats.ssl_cipher_suite);
   substats.dtls_state = dtls_transport->dtls_state();
diff --git a/pc/jseptransport.h b/pc/jseptransport.h
index 952f2cc..dee5500 100644
--- a/pc/jseptransport.h
+++ b/pc/jseptransport.h
@@ -24,6 +24,7 @@
 #include "p2p/base/p2pconstants.h"
 #include "p2p/base/transportinfo.h"
 #include "pc/dtlssrtptransport.h"
+#include "pc/dtlstransport.h"
 #include "pc/rtcpmuxfilter.h"
 #include "pc/rtptransport.h"
 #include "pc/sessiondescription.h"
@@ -117,7 +118,6 @@
   webrtc::RTCError SetRemoteJsepTransportDescription(
       const JsepTransportDescription& jsep_description,
       webrtc::SdpType type);
-
   webrtc::RTCError AddRemoteCandidates(const Candidates& candidates);
 
   // Set the "needs-ice-restart" flag as described in JSEP. After the flag is
@@ -157,12 +157,40 @@
     }
   }
 
-  DtlsTransportInternal* rtp_dtls_transport() const {
-    return rtp_dtls_transport_.get();
+  const DtlsTransportInternal* rtp_dtls_transport() const {
+    if (rtp_dtls_transport_) {
+      return rtp_dtls_transport_->internal();
+    } else {
+      return nullptr;
+    }
   }
 
-  DtlsTransportInternal* rtcp_dtls_transport() const {
-    return rtcp_dtls_transport_.get();
+  DtlsTransportInternal* rtp_dtls_transport() {
+    if (rtp_dtls_transport_) {
+      return rtp_dtls_transport_->internal();
+    } else {
+      return nullptr;
+    }
+  }
+
+  const DtlsTransportInternal* rtcp_dtls_transport() const {
+    if (rtcp_dtls_transport_) {
+      return rtcp_dtls_transport_->internal();
+    } else {
+      return nullptr;
+    }
+  }
+
+  DtlsTransportInternal* rtcp_dtls_transport() {
+    if (rtcp_dtls_transport_) {
+      return rtcp_dtls_transport_->internal();
+    } else {
+      return nullptr;
+    }
+  }
+
+  rtc::scoped_refptr<webrtc::DtlsTransportInterface> RtpDtlsTransport() {
+    return rtp_dtls_transport_;
   }
 
   // Returns media transport, if available.
@@ -256,8 +284,8 @@
   std::unique_ptr<webrtc::SrtpTransport> sdes_transport_;
   std::unique_ptr<webrtc::DtlsSrtpTransport> dtls_srtp_transport_;
 
-  std::unique_ptr<DtlsTransportInternal> rtp_dtls_transport_;
-  std::unique_ptr<DtlsTransportInternal> rtcp_dtls_transport_;
+  rtc::scoped_refptr<webrtc::DtlsTransport> rtp_dtls_transport_;
+  rtc::scoped_refptr<webrtc::DtlsTransport> rtcp_dtls_transport_;
 
   SrtpFilter sdes_negotiator_;
   RtcpMuxFilter rtcp_mux_negotiator_;
diff --git a/pc/jseptransport_unittest.cc b/pc/jseptransport_unittest.cc
index e518301..ab9101b 100644
--- a/pc/jseptransport_unittest.cc
+++ b/pc/jseptransport_unittest.cc
@@ -870,7 +870,7 @@
       CreateJsepTransport2(/*rtcp_mux_enabled=*/false, SrtpMode::kDtlsSrtp);
   JsepTransportDescription local_desc;
   local_desc.rtcp_mux_enabled = true;
-  EXPECT_NE(nullptr, jsep_transport_->rtcp_dtls_transport());
+  ASSERT_NE(nullptr, jsep_transport_->rtcp_dtls_transport());
   EXPECT_FALSE(signal_rtcp_mux_active_received_);
 
   // The remote side supports RTCP-mux.
diff --git a/pc/jseptransportcontroller.cc b/pc/jseptransportcontroller.cc
index 78ecaf3..a7a18b4 100644
--- a/pc/jseptransportcontroller.cc
+++ b/pc/jseptransportcontroller.cc
@@ -153,7 +153,7 @@
 }
 
 cricket::DtlsTransportInternal* JsepTransportController::GetDtlsTransport(
-    const std::string& mid) const {
+    const std::string& mid) {
   auto jsep_transport = GetJsepTransportForMid(mid);
   if (!jsep_transport) {
     return nullptr;
@@ -161,8 +161,8 @@
   return jsep_transport->rtp_dtls_transport();
 }
 
-cricket::DtlsTransportInternal* JsepTransportController::GetRtcpDtlsTransport(
-    const std::string& mid) const {
+const cricket::DtlsTransportInternal*
+JsepTransportController::GetRtcpDtlsTransport(const std::string& mid) const {
   auto jsep_transport = GetJsepTransportForMid(mid);
   if (!jsep_transport) {
     return nullptr;
@@ -170,6 +170,15 @@
   return jsep_transport->rtcp_dtls_transport();
 }
 
+rtc::scoped_refptr<webrtc::DtlsTransportInterface>
+JsepTransportController::LookupDtlsTransportByMid(const std::string& mid) {
+  auto jsep_transport = GetJsepTransportForMid(mid);
+  if (!jsep_transport) {
+    return nullptr;
+  }
+  return jsep_transport->RtpDtlsTransport();
+}
+
 void JsepTransportController::SetIceConfig(const cricket::IceConfig& config) {
   if (!network_thread_->IsCurrent()) {
     network_thread_->Invoke<void>(RTC_FROM_HERE, [&] { SetIceConfig(config); });
@@ -346,9 +355,10 @@
       continue;
     }
     for (const cricket::Candidate& candidate : candidates) {
-      auto dtls = candidate.component() == cricket::ICE_CANDIDATE_COMPONENT_RTP
-                      ? jsep_transport->rtp_dtls_transport()
-                      : jsep_transport->rtcp_dtls_transport();
+      cricket::DtlsTransportInternal* dtls =
+          candidate.component() == cricket::ICE_CANDIDATE_COMPONENT_RTP
+              ? jsep_transport->rtp_dtls_transport()
+              : jsep_transport->rtcp_dtls_transport();
       if (dtls) {
         dtls->ice_transport()->RemoveRemoteCandidate(candidate);
       }
diff --git a/pc/jseptransportcontroller.h b/pc/jseptransportcontroller.h
index 3ed7f5f..653c4c9 100644
--- a/pc/jseptransportcontroller.h
+++ b/pc/jseptransportcontroller.h
@@ -28,6 +28,7 @@
 #include "p2p/base/transportfactoryinterface.h"
 #include "pc/channel.h"
 #include "pc/dtlssrtptransport.h"
+#include "pc/dtlstransport.h"
 #include "pc/jseptransport.h"
 #include "pc/rtptransport.h"
 #include "pc/srtptransport.h"
@@ -112,10 +113,12 @@
   // Get transports to be used for the provided |mid|. If bundling is enabled,
   // calling GetRtpTransport for multiple MIDs may yield the same object.
   RtpTransportInternal* GetRtpTransport(const std::string& mid) const;
-  cricket::DtlsTransportInternal* GetDtlsTransport(
+  cricket::DtlsTransportInternal* GetDtlsTransport(const std::string& mid);
+  const cricket::DtlsTransportInternal* GetRtcpDtlsTransport(
       const std::string& mid) const;
-  cricket::DtlsTransportInternal* GetRtcpDtlsTransport(
-      const std::string& mid) const;
+  // Gets the externally sharable version of the DtlsTransport.
+  rtc::scoped_refptr<webrtc::DtlsTransportInterface> LookupDtlsTransportByMid(
+      const std::string& mid);
 
   MediaTransportInterface* GetMediaTransport(const std::string& mid) const;
   MediaTransportState GetMediaTransportState(const std::string& mid) const;
diff --git a/pc/jseptransportcontroller_unittest.cc b/pc/jseptransportcontroller_unittest.cc
index 129d22a..03ef2ea 100644
--- a/pc/jseptransportcontroller_unittest.cc
+++ b/pc/jseptransportcontroller_unittest.cc
@@ -371,11 +371,20 @@
                   .ok());
   EXPECT_NE(nullptr, transport_controller_->GetDtlsTransport(kAudioMid1));
   EXPECT_NE(nullptr, transport_controller_->GetRtcpDtlsTransport(kAudioMid1));
+  EXPECT_NE(nullptr,
+            transport_controller_->LookupDtlsTransportByMid(kAudioMid1));
   EXPECT_NE(nullptr, transport_controller_->GetDtlsTransport(kVideoMid1));
   EXPECT_NE(nullptr, transport_controller_->GetRtcpDtlsTransport(kVideoMid1));
+  EXPECT_NE(nullptr,
+            transport_controller_->LookupDtlsTransportByMid(kVideoMid1));
+  // Lookup for all MIDs should return different transports (no bundle)
+  EXPECT_NE(transport_controller_->LookupDtlsTransportByMid(kAudioMid1),
+            transport_controller_->LookupDtlsTransportByMid(kVideoMid1));
   // Return nullptr for non-existing ones.
   EXPECT_EQ(nullptr, transport_controller_->GetDtlsTransport(kVideoMid2));
   EXPECT_EQ(nullptr, transport_controller_->GetRtcpDtlsTransport(kVideoMid2));
+  EXPECT_EQ(nullptr,
+            transport_controller_->LookupDtlsTransportByMid(kVideoMid2));
 }
 
 TEST_F(JsepTransportControllerTest, GetDtlsTransportWithRtcpMux) {
@@ -1275,6 +1284,9 @@
   EXPECT_EQ(transport1, transport3);
   EXPECT_EQ(transport1, transport4);
 
+  EXPECT_EQ(transport_controller_->LookupDtlsTransportByMid(kAudioMid1),
+            transport_controller_->LookupDtlsTransportByMid(kVideoMid1));
+
   // Verify the OnRtpTransport/DtlsTransportChanged signals are fired correctly.
   auto it = changed_rtp_transport_by_mid_.find(kAudioMid2);
   ASSERT_TRUE(it != changed_rtp_transport_by_mid_.end());
diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index a6b47c1..9c04c31 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -3346,6 +3346,11 @@
       RTC_FROM_HERE, rtc::Bind(&PeerConnection::StopRtcEventLog_w, this));
 }
 
+rtc::scoped_refptr<DtlsTransportInterface>
+PeerConnection::LookupDtlsTransportByMid(const std::string& mid) {
+  return transport_controller_->LookupDtlsTransportByMid(mid);
+}
+
 const SessionDescriptionInterface* PeerConnection::local_description() const {
   return pending_local_description_ ? pending_local_description_.get()
                                     : current_local_description_.get();
diff --git a/pc/peerconnection.h b/pc/peerconnection.h
index 7e97afa..3bdd37e 100644
--- a/pc/peerconnection.h
+++ b/pc/peerconnection.h
@@ -194,6 +194,9 @@
   void SetAudioPlayout(bool playout) override;
   void SetAudioRecording(bool recording) override;
 
+  rtc::scoped_refptr<DtlsTransportInterface> LookupDtlsTransportByMid(
+      const std::string& mid) override;
+
   RTC_DEPRECATED bool StartRtcEventLog(rtc::PlatformFile file,
                                        int64_t max_size_bytes) override;
   bool StartRtcEventLog(std::unique_ptr<RtcEventLogOutput> output,
diff --git a/pc/peerconnection_bundle_unittest.cc b/pc/peerconnection_bundle_unittest.cc
index 6c372b4..fca9914 100644
--- a/pc/peerconnection_bundle_unittest.cc
+++ b/pc/peerconnection_bundle_unittest.cc
@@ -51,6 +51,18 @@
 // will use: https://www.w3.org/TR/webrtc/#dom-rtcrtpsender-transport
 // Should also be able to remove GetTransceiversForTesting at that point.
 
+class FakeNetworkManagerWithNoAnyNetwork : public rtc::FakeNetworkManager {
+ public:
+  void GetAnyAddressNetworks(NetworkList* networks) override {
+    // This function allocates networks that are owned by the
+    // NetworkManager. But some tests assume that they can release
+    // all networks independent of the network manager.
+    // In order to prevent use-after-free issues, don't allow this
+    // function to have any effect when run in tests.
+    RTC_LOG(LS_INFO) << "FakeNetworkManager::GetAnyAddressNetworks ignored";
+  }
+};
+
 class PeerConnectionWrapperForBundleTest : public PeerConnectionWrapper {
  public:
   using PeerConnectionWrapper::PeerConnectionWrapper;
@@ -235,7 +247,7 @@
     // base class members). Therefore, the test fixture will own all the fake
     // networks even though tests should access the fake network through the
     // PeerConnectionWrapper.
-    auto* fake_network = new rtc::FakeNetworkManager();
+    auto* fake_network = new FakeNetworkManagerWithNoAnyNetwork();
     fake_networks_.emplace_back(fake_network);
     return fake_network;
   }
diff --git a/rtc_base/fakenetwork.h b/rtc_base/fakenetwork.h
index cb890ec..fc690d9 100644
--- a/rtc_base/fakenetwork.h
+++ b/rtc_base/fakenetwork.h
@@ -129,9 +129,6 @@
   int start_count_ = 0;
   bool sent_first_update_ = false;
 
-  IPAddress default_local_ipv4_address_;
-  IPAddress default_local_ipv6_address_;
-
   std::unique_ptr<webrtc::FakeMdnsResponder> mdns_responder_;
 };
 
