diff --git a/api/scoped_refptr.h b/api/scoped_refptr.h
index 5b3a085..164fefe 100644
--- a/api/scoped_refptr.h
+++ b/api/scoped_refptr.h
@@ -75,6 +75,8 @@
 
   scoped_refptr() : ptr_(nullptr) {}
 
+  // TODO(bugs.webrtc.org/13464): Implicit construction is deprecated. Mark
+  // explicit, and add a new implicit constructor accepting a nullptr_t.
   scoped_refptr(T* p) : ptr_(p) {  // NOLINT(runtime/explicit)
     if (ptr_)
       ptr_->AddRef();
diff --git a/api/video/i444_buffer.cc b/api/video/i444_buffer.cc
index 92f1662..8bf9f76 100644
--- a/api/video/i444_buffer.cc
+++ b/api/video/i444_buffer.cc
@@ -61,7 +61,7 @@
 
 // static
 rtc::scoped_refptr<I444Buffer> I444Buffer::Create(int width, int height) {
-  return new rtc::RefCountedObject<I444Buffer>(width, height);
+  return rtc::make_ref_counted<I444Buffer>(width, height);
 }
 
 // static
@@ -70,8 +70,8 @@
                                                   int stride_y,
                                                   int stride_u,
                                                   int stride_v) {
-  return new rtc::RefCountedObject<I444Buffer>(width, height, stride_y,
-                                               stride_u, stride_v);
+  return rtc::make_ref_counted<I444Buffer>(width, height, stride_y, stride_u,
+                                           stride_v);
 }
 
 // static
diff --git a/common_video/video_frame_buffer_pool.cc b/common_video/video_frame_buffer_pool.cc
index e95eac3..267cab1 100644
--- a/common_video/video_frame_buffer_pool.cc
+++ b/common_video/video_frame_buffer_pool.cc
@@ -143,7 +143,7 @@
     return nullptr;
   // Allocate new buffer.
   rtc::scoped_refptr<I444Buffer> buffer =
-      new rtc::RefCountedObject<I444Buffer>(width, height);
+      rtc::make_ref_counted<I444Buffer>(width, height);
 
   if (zero_initialize_)
     buffer->InitializeData();
diff --git a/examples/androidnativeapi/jni/android_call_client.cc b/examples/androidnativeapi/jni/android_call_client.cc
index 8178273..3c7c86d 100644
--- a/examples/androidnativeapi/jni/android_call_client.cc
+++ b/examples/androidnativeapi/jni/android_call_client.cc
@@ -265,7 +265,7 @@
       webrtc::CreateSessionDescription(webrtc::SdpType::kAnswer, sdp));
   pc_->SetRemoteDescription(
       std::move(answer),
-      new rtc::RefCountedObject<SetRemoteSessionDescriptionObserver>());
+      rtc::make_ref_counted<SetRemoteSessionDescriptionObserver>());
 }
 
 void CreateOfferObserver::OnFailure(webrtc::RTCError error) {
diff --git a/examples/objcnativeapi/objc/objc_call_client.mm b/examples/objcnativeapi/objc/objc_call_client.mm
index 09d3d4a..c1d84f7 100644
--- a/examples/objcnativeapi/objc/objc_call_client.mm
+++ b/examples/objcnativeapi/objc/objc_call_client.mm
@@ -220,7 +220,7 @@
   std::unique_ptr<webrtc::SessionDescriptionInterface> answer(
       webrtc::CreateSessionDescription(webrtc::SdpType::kAnswer, sdp));
   pc_->SetRemoteDescription(std::move(answer),
-                            new rtc::RefCountedObject<SetRemoteSessionDescriptionObserver>());
+                            rtc::make_ref_counted<SetRemoteSessionDescriptionObserver>());
 }
 
 void CreateOfferObserver::OnFailure(webrtc::RTCError error) {
diff --git a/examples/peerconnection/client/conductor.cc b/examples/peerconnection/client/conductor.cc
index d9adffb..65958a4 100644
--- a/examples/peerconnection/client/conductor.cc
+++ b/examples/peerconnection/client/conductor.cc
@@ -85,8 +85,7 @@
       capturer = absl::WrapUnique(
           webrtc::test::VcmCapturer::Create(kWidth, kHeight, kFps, i));
       if (capturer) {
-        return new rtc::RefCountedObject<CapturerTrackSource>(
-            std::move(capturer));
+        return rtc::make_ref_counted<CapturerTrackSource>(std::move(capturer));
       }
     }
 
diff --git a/examples/unityplugin/simple_peer_connection.cc b/examples/unityplugin/simple_peer_connection.cc
index 8a82718..34abbe2 100644
--- a/examples/unityplugin/simple_peer_connection.cc
+++ b/examples/unityplugin/simple_peer_connection.cc
@@ -61,7 +61,7 @@
     if (!capturer) {
       return nullptr;
     }
-    return new rtc::RefCountedObject<CapturerTrackSource>(std::move(capturer));
+    return rtc::make_ref_counted<CapturerTrackSource>(std::move(capturer));
   }
 
  protected:
diff --git a/modules/desktop_capture/desktop_capture_options.cc b/modules/desktop_capture/desktop_capture_options.cc
index c89896d..fc0340a 100644
--- a/modules/desktop_capture/desktop_capture_options.cc
+++ b/modules/desktop_capture/desktop_capture_options.cc
@@ -15,6 +15,8 @@
 #include "modules/desktop_capture/win/full_screen_win_application_handler.h"
 #endif
 
+#include "rtc_base/ref_counted_object.h"
+
 namespace webrtc {
 
 DesktopCaptureOptions::DesktopCaptureOptions() {}
@@ -36,12 +38,15 @@
   result.set_x_display(SharedXDisplay::CreateDefault());
 #endif
 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
-  result.set_configuration_monitor(new DesktopConfigurationMonitor());
+  result.set_configuration_monitor(
+      rtc::make_ref_counted<DesktopConfigurationMonitor>());
   result.set_full_screen_window_detector(
-      new FullScreenWindowDetector(CreateFullScreenMacApplicationHandler));
+      rtc::make_ref_counted<FullScreenWindowDetector>(
+          CreateFullScreenMacApplicationHandler));
 #elif defined(WEBRTC_WIN)
   result.set_full_screen_window_detector(
-      new FullScreenWindowDetector(CreateFullScreenWinApplicationHandler));
+      rtc::make_ref_counted<FullScreenWindowDetector>(
+          CreateFullScreenWinApplicationHandler));
 #endif
   return result;
 }
diff --git a/modules/desktop_capture/linux/x11/shared_x_display.cc b/modules/desktop_capture/linux/x11/shared_x_display.cc
index ca084d4..ad2e043 100644
--- a/modules/desktop_capture/linux/x11/shared_x_display.cc
+++ b/modules/desktop_capture/linux/x11/shared_x_display.cc
@@ -36,9 +36,9 @@
       XOpenDisplay(display_name.empty() ? NULL : display_name.c_str());
   if (!display) {
     RTC_LOG(LS_ERROR) << "Unable to open display";
-    return NULL;
+    return nullptr;
   }
-  return new SharedXDisplay(display);
+  return rtc::scoped_refptr<SharedXDisplay>(new SharedXDisplay(display));
 }
 
 // static
diff --git a/modules/desktop_capture/shared_desktop_frame.cc b/modules/desktop_capture/shared_desktop_frame.cc
index 2ded145..e374038 100644
--- a/modules/desktop_capture/shared_desktop_frame.cc
+++ b/modules/desktop_capture/shared_desktop_frame.cc
@@ -21,8 +21,8 @@
 // static
 std::unique_ptr<SharedDesktopFrame> SharedDesktopFrame::Wrap(
     std::unique_ptr<DesktopFrame> desktop_frame) {
-  return std::unique_ptr<SharedDesktopFrame>(
-      new SharedDesktopFrame(new Core(std::move(desktop_frame))));
+  return std::unique_ptr<SharedDesktopFrame>(new SharedDesktopFrame(
+      rtc::scoped_refptr<Core>(new Core(std::move(desktop_frame)))));
 }
 
 SharedDesktopFrame* SharedDesktopFrame::Wrap(DesktopFrame* desktop_frame) {
diff --git a/modules/video_capture/test/video_capture_unittest.cc b/modules/video_capture/test/video_capture_unittest.cc
index 098d60d..4cf3d59 100644
--- a/modules/video_capture/test/video_capture_unittest.cc
+++ b/modules/video_capture/test/video_capture_unittest.cc
@@ -168,7 +168,7 @@
     rtc::scoped_refptr<VideoCaptureModule> module(
         VideoCaptureFactory::Create(unique_name));
     if (module.get() == NULL)
-      return NULL;
+      return nullptr;
 
     EXPECT_FALSE(module->CaptureStarted());
 
diff --git a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
index 5d0f380..669dc55 100644
--- a/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
+++ b/modules/video_coding/codecs/vp9/libvpx_vp9_decoder.cc
@@ -275,8 +275,8 @@
   // This buffer contains all of `img`'s image data, a reference counted
   // Vp9FrameBuffer. (libvpx is done with the buffers after a few
   // vpx_codec_decode calls or vpx_codec_destroy).
-  rtc::scoped_refptr<Vp9FrameBufferPool::Vp9FrameBuffer> img_buffer =
-      static_cast<Vp9FrameBufferPool::Vp9FrameBuffer*>(img->fb_priv);
+  rtc::scoped_refptr<Vp9FrameBufferPool::Vp9FrameBuffer> img_buffer(
+      static_cast<Vp9FrameBufferPool::Vp9FrameBuffer*>(img->fb_priv));
 
   // The buffer can be used directly by the VideoFrame (without copy) by
   // using a Wrapped*Buffer.
diff --git a/pc/media_stream.cc b/pc/media_stream.cc
index 6cf84ac..6fe3088 100644
--- a/pc/media_stream.cc
+++ b/pc/media_stream.cc
@@ -59,7 +59,7 @@
     const std::string& track_id) {
   AudioTrackVector::iterator it = FindTrack(&audio_tracks_, track_id);
   if (it == audio_tracks_.end())
-    return NULL;
+    return nullptr;
   return *it;
 }
 
@@ -67,7 +67,7 @@
     const std::string& track_id) {
   VideoTrackVector::iterator it = FindTrack(&video_tracks_, track_id);
   if (it == video_tracks_.end())
-    return NULL;
+    return nullptr;
   return *it;
 }
 
diff --git a/pc/media_stream_unittest.cc b/pc/media_stream_unittest.cc
index 5522699..6ce8de9 100644
--- a/pc/media_stream_unittest.cc
+++ b/pc/media_stream_unittest.cc
@@ -63,7 +63,7 @@
     ASSERT_TRUE(video_track_.get() != NULL);
     EXPECT_EQ(MediaStreamTrackInterface::kLive, video_track_->state());
 
-    audio_track_ = AudioTrack::Create(kAudioTrackId, NULL);
+    audio_track_ = AudioTrack::Create(kAudioTrackId, nullptr);
 
     ASSERT_TRUE(audio_track_.get() != NULL);
     EXPECT_EQ(MediaStreamTrackInterface::kLive, audio_track_->state());
diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc
index 6bcaef4..12de839 100644
--- a/sdk/android/src/jni/pc/peer_connection.cc
+++ b/sdk/android/src/jni/pc/peer_connection.cc
@@ -764,7 +764,8 @@
     const JavaParamRef<jobject>& j_stream_labels) {
   RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> result =
       ExtractNativePC(jni, j_pc)->AddTrack(
-          reinterpret_cast<MediaStreamTrackInterface*>(native_track),
+          rtc::scoped_refptr<MediaStreamTrackInterface>(
+              reinterpret_cast<MediaStreamTrackInterface*>(native_track)),
           JavaListToNativeVector<std::string, jstring>(jni, j_stream_labels,
                                                        &JavaToNativeString));
   if (!result.ok()) {
@@ -792,7 +793,8 @@
     const JavaParamRef<jobject>& j_init) {
   RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> result =
       ExtractNativePC(jni, j_pc)->AddTransceiver(
-          reinterpret_cast<MediaStreamTrackInterface*>(native_track),
+          rtc::scoped_refptr<MediaStreamTrackInterface>(
+              reinterpret_cast<MediaStreamTrackInterface*>(native_track)),
           JavaToNativeRtpTransceiverInit(jni, j_init));
   if (!result.ok()) {
     RTC_LOG(LS_ERROR) << "Failed to add transceiver: "
diff --git a/sdk/android/src/jni/pc/peer_connection_factory.cc b/sdk/android/src/jni/pc/peer_connection_factory.cc
index 5330cbd..08af07a 100644
--- a/sdk/android/src/jni/pc/peer_connection_factory.cc
+++ b/sdk/android/src/jni/pc/peer_connection_factory.cc
@@ -351,11 +351,12 @@
     jlong native_network_controller_factory,
     jlong native_network_state_predictor_factory,
     jlong native_neteq_factory) {
-  rtc::scoped_refptr<AudioProcessing> audio_processor =
-      reinterpret_cast<AudioProcessing*>(native_audio_processor);
+  rtc::scoped_refptr<AudioProcessing> audio_processor(
+      reinterpret_cast<AudioProcessing*>(native_audio_processor));
   return CreatePeerConnectionFactoryForJava(
       jni, jcontext, joptions,
-      reinterpret_cast<AudioDeviceModule*>(native_audio_device_module),
+      rtc::scoped_refptr<AudioDeviceModule>(
+          reinterpret_cast<AudioDeviceModule*>(native_audio_device_module)),
       TakeOwnershipOfRefPtr<AudioEncoderFactory>(native_audio_encoder_factory),
       TakeOwnershipOfRefPtr<AudioDecoderFactory>(native_audio_decoder_factory),
       jencoder_factory, jdecoder_factory,
diff --git a/sdk/android/src/jni/pc/rtp_receiver.cc b/sdk/android/src/jni/pc/rtp_receiver.cc
index 4d7e954..7a3600b 100644
--- a/sdk/android/src/jni/pc/rtp_receiver.cc
+++ b/sdk/android/src/jni/pc/rtp_receiver.cc
@@ -118,8 +118,9 @@
                                               jlong j_rtp_sender_pointer,
                                               jlong j_frame_decryptor_pointer) {
   reinterpret_cast<RtpReceiverInterface*>(j_rtp_sender_pointer)
-      ->SetFrameDecryptor(reinterpret_cast<FrameDecryptorInterface*>(
-          j_frame_decryptor_pointer));
+      ->SetFrameDecryptor(rtc::scoped_refptr<FrameDecryptorInterface>(
+          reinterpret_cast<FrameDecryptorInterface*>(
+              j_frame_decryptor_pointer)));
 }
 
 }  // namespace jni
diff --git a/sdk/android/src/jni/pc/rtp_sender.cc b/sdk/android/src/jni/pc/rtp_sender.cc
index 411e5dc..233a353 100644
--- a/sdk/android/src/jni/pc/rtp_sender.cc
+++ b/sdk/android/src/jni/pc/rtp_sender.cc
@@ -105,8 +105,9 @@
                                             jlong j_rtp_sender_pointer,
                                             jlong j_frame_encryptor_pointer) {
   reinterpret_cast<RtpSenderInterface*>(j_rtp_sender_pointer)
-      ->SetFrameEncryptor(reinterpret_cast<FrameEncryptorInterface*>(
-          j_frame_encryptor_pointer));
+      ->SetFrameEncryptor(rtc::scoped_refptr<FrameEncryptorInterface>(
+          reinterpret_cast<FrameEncryptorInterface*>(
+              j_frame_encryptor_pointer)));
 }
 
 }  // namespace jni
diff --git a/sdk/objc/api/peerconnection/RTCAudioTrack.mm b/sdk/objc/api/peerconnection/RTCAudioTrack.mm
index 6a97f46..73ec98f 100644
--- a/sdk/objc/api/peerconnection/RTCAudioTrack.mm
+++ b/sdk/objc/api/peerconnection/RTCAudioTrack.mm
@@ -48,11 +48,10 @@
 
 - (RTC_OBJC_TYPE(RTCAudioSource) *)source {
   if (!_source) {
-    rtc::scoped_refptr<webrtc::AudioSourceInterface> source =
-        self.nativeAudioTrack->GetSource();
+    rtc::scoped_refptr<webrtc::AudioSourceInterface> source(self.nativeAudioTrack->GetSource());
     if (source) {
       _source = [[RTC_OBJC_TYPE(RTCAudioSource) alloc] initWithFactory:self.factory
-                                                     nativeAudioSource:source.get()];
+                                                     nativeAudioSource:source];
     }
   }
   return _source;
@@ -61,7 +60,8 @@
 #pragma mark - Private
 
 - (rtc::scoped_refptr<webrtc::AudioTrackInterface>)nativeAudioTrack {
-  return static_cast<webrtc::AudioTrackInterface *>(self.nativeTrack.get());
+  return rtc::scoped_refptr<webrtc::AudioTrackInterface>(
+      static_cast<webrtc::AudioTrackInterface *>(self.nativeTrack.get()));
 }
 
 @end
diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
index b3e0a7b..56177b4 100644
--- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
+++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
@@ -20,7 +20,7 @@
 class ObjCEncodedImageBuffer : public webrtc::EncodedImageBufferInterface {
  public:
   static rtc::scoped_refptr<ObjCEncodedImageBuffer> Create(NSData *data) {
-    return new rtc::RefCountedObject<ObjCEncodedImageBuffer>(data);
+    return rtc::make_ref_counted<ObjCEncodedImageBuffer>(data);
   }
   const uint8_t *data() const override { return static_cast<const uint8_t *>(data_.bytes); }
   // TODO(bugs.webrtc.org/9378): delete this non-const data method.
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm b/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm
index 8ded552..7f8b123 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection+Stats.mm
@@ -69,21 +69,21 @@
 
     - (void)statisticsForSender : (RTC_OBJC_TYPE(RTCRtpSender) *)sender completionHandler
     : (RTCStatisticsCompletionHandler)completionHandler {
-  rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector(
-      new rtc::RefCountedObject<webrtc::StatsCollectorCallbackAdapter>(completionHandler));
+  rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector =
+      rtc::make_ref_counted<webrtc::StatsCollectorCallbackAdapter>(completionHandler);
   self.nativePeerConnection->GetStats(sender.nativeRtpSender, collector);
 }
 
 - (void)statisticsForReceiver:(RTC_OBJC_TYPE(RTCRtpReceiver) *)receiver
             completionHandler:(RTCStatisticsCompletionHandler)completionHandler {
-  rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector(
-      new rtc::RefCountedObject<webrtc::StatsCollectorCallbackAdapter>(completionHandler));
+  rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector =
+      rtc::make_ref_counted<webrtc::StatsCollectorCallbackAdapter>(completionHandler);
   self.nativePeerConnection->GetStats(receiver.nativeRtpReceiver, collector);
 }
 
 - (void)statisticsWithCompletionHandler:(RTCStatisticsCompletionHandler)completionHandler {
-  rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector(
-      new rtc::RefCountedObject<webrtc::StatsCollectorCallbackAdapter>(completionHandler));
+  rtc::scoped_refptr<webrtc::StatsCollectorCallbackAdapter> collector =
+      rtc::make_ref_counted<webrtc::StatsCollectorCallbackAdapter>(completionHandler);
   self.nativePeerConnection->GetStats(collector);
 }
 
@@ -91,9 +91,8 @@
      statsOutputLevel:(RTCStatsOutputLevel)statsOutputLevel
     completionHandler:
         (void (^)(NSArray<RTC_OBJC_TYPE(RTCLegacyStatsReport) *> *stats))completionHandler {
-  rtc::scoped_refptr<webrtc::StatsObserverAdapter> observer(
-      new rtc::RefCountedObject<webrtc::StatsObserverAdapter>
-          (completionHandler));
+  rtc::scoped_refptr<webrtc::StatsObserverAdapter> observer =
+      rtc::make_ref_counted<webrtc::StatsObserverAdapter>(completionHandler);
   webrtc::PeerConnectionInterface::StatsOutputLevel nativeOutputLevel =
       [[self class] nativeStatsOutputLevelForLevel:statsOutputLevel];
   self.nativePeerConnection->GetStats(
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection.mm b/sdk/objc/api/peerconnection/RTCPeerConnection.mm
index 4a31a54..7db986c 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection.mm
@@ -572,9 +572,8 @@
 - (void)offerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
           completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler {
   RTC_DCHECK(completionHandler != nil);
-  rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter>
-      observer(new rtc::RefCountedObject
-          <webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler));
+  rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter> observer =
+      rtc::make_ref_counted<webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler);
   webrtc::PeerConnectionInterface::RTCOfferAnswerOptions options;
   CopyConstraintsIntoOfferAnswerOptions(constraints.nativeConstraints.get(), &options);
 
@@ -584,9 +583,8 @@
 - (void)answerForConstraints:(RTC_OBJC_TYPE(RTCMediaConstraints) *)constraints
            completionHandler:(RTCCreateSessionDescriptionCompletionHandler)completionHandler {
   RTC_DCHECK(completionHandler != nil);
-  rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter>
-      observer(new rtc::RefCountedObject
-          <webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler));
+  rtc::scoped_refptr<webrtc::CreateSessionDescriptionObserverAdapter> observer =
+      rtc::make_ref_counted<webrtc::CreateSessionDescriptionObserverAdapter>(completionHandler);
   webrtc::PeerConnectionInterface::RTCOfferAnswerOptions options;
   CopyConstraintsIntoOfferAnswerOptions(constraints.nativeConstraints.get(), &options);
 
@@ -596,24 +594,24 @@
 - (void)setLocalDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
           completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler {
   RTC_DCHECK(completionHandler != nil);
-  rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer(
-      new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
+  rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer =
+      rtc::make_ref_counted<::SetSessionDescriptionObserver>(completionHandler);
   _peerConnection->SetLocalDescription(sdp.nativeDescription, observer);
 }
 
 - (void)setLocalDescriptionWithCompletionHandler:
     (RTCSetSessionDescriptionCompletionHandler)completionHandler {
   RTC_DCHECK(completionHandler != nil);
-  rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer(
-      new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
+  rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer =
+      rtc::make_ref_counted<::SetSessionDescriptionObserver>(completionHandler);
   _peerConnection->SetLocalDescription(observer);
 }
 
 - (void)setRemoteDescription:(RTC_OBJC_TYPE(RTCSessionDescription) *)sdp
            completionHandler:(RTCSetSessionDescriptionCompletionHandler)completionHandler {
   RTC_DCHECK(completionHandler != nil);
-  rtc::scoped_refptr<webrtc::SetRemoteDescriptionObserverInterface> observer(
-      new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
+  rtc::scoped_refptr<webrtc::SetRemoteDescriptionObserverInterface> observer =
+      rtc::make_ref_counted<::SetSessionDescriptionObserver>(completionHandler);
   _peerConnection->SetRemoteDescription(sdp.nativeDescription, observer);
 }
 
diff --git a/sdk/objc/api/peerconnection/RTCVideoSource.mm b/sdk/objc/api/peerconnection/RTCVideoSource.mm
index 3211f18..486ca93 100644
--- a/sdk/objc/api/peerconnection/RTCVideoSource.mm
+++ b/sdk/objc/api/peerconnection/RTCVideoSource.mm
@@ -61,8 +61,8 @@
                 signalingThread:(rtc::Thread *)signalingThread
                    workerThread:(rtc::Thread *)workerThread
                    isScreenCast:(BOOL)isScreenCast {
-  rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objCVideoTrackSource(
-      new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>(isScreenCast));
+  rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objCVideoTrackSource =
+      rtc::make_ref_counted<webrtc::ObjCVideoTrackSource>(isScreenCast);
 
   return [self initWithFactory:factory
              nativeVideoSource:webrtc::VideoTrackSourceProxy::Create(
diff --git a/sdk/objc/api/peerconnection/RTCVideoTrack.mm b/sdk/objc/api/peerconnection/RTCVideoTrack.mm
index 3f38dd5..d9eddde 100644
--- a/sdk/objc/api/peerconnection/RTCVideoTrack.mm
+++ b/sdk/objc/api/peerconnection/RTCVideoTrack.mm
@@ -59,11 +59,11 @@
 
 - (RTC_OBJC_TYPE(RTCVideoSource) *)source {
   if (!_source) {
-    rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> source =
-        self.nativeVideoTrack->GetSource();
+    rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> source(
+        self.nativeVideoTrack->GetSource());
     if (source) {
       _source = [[RTC_OBJC_TYPE(RTCVideoSource) alloc] initWithFactory:self.factory
-                                                     nativeVideoSource:source.get()];
+                                                     nativeVideoSource:source];
     }
   }
   return _source;
@@ -107,7 +107,8 @@
 #pragma mark - Private
 
 - (rtc::scoped_refptr<webrtc::VideoTrackInterface>)nativeVideoTrack {
-  return static_cast<webrtc::VideoTrackInterface *>(self.nativeTrack.get());
+  return rtc::scoped_refptr<webrtc::VideoTrackInterface>(
+      static_cast<webrtc::VideoTrackInterface *>(self.nativeTrack.get()));
 }
 
 @end
diff --git a/sdk/objc/native/api/audio_device_module.mm b/sdk/objc/native/api/audio_device_module.mm
index 3c2790e..55ea7e3 100644
--- a/sdk/objc/native/api/audio_device_module.mm
+++ b/sdk/objc/native/api/audio_device_module.mm
@@ -20,7 +20,7 @@
 rtc::scoped_refptr<AudioDeviceModule> CreateAudioDeviceModule(bool bypass_voice_processing) {
   RTC_DLOG(LS_INFO) << __FUNCTION__;
 #if defined(WEBRTC_IOS)
-  return new rtc::RefCountedObject<ios_adm::AudioDeviceModuleIOS>(bypass_voice_processing);
+  return rtc::make_ref_counted<ios_adm::AudioDeviceModuleIOS>(bypass_voice_processing);
 #else
   RTC_LOG(LS_ERROR) << "current platform is not supported => this module will self destruct!";
   return nullptr;
diff --git a/sdk/objc/native/api/video_capturer.mm b/sdk/objc/native/api/video_capturer.mm
index cae7a50..0101c79 100644
--- a/sdk/objc/native/api/video_capturer.mm
+++ b/sdk/objc/native/api/video_capturer.mm
@@ -22,8 +22,8 @@
     rtc::Thread *signaling_thread,
     rtc::Thread *worker_thread) {
   RTCObjCVideoSourceAdapter *adapter = [[RTCObjCVideoSourceAdapter alloc] init];
-  rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objc_video_track_source(
-      new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>(adapter));
+  rtc::scoped_refptr<webrtc::ObjCVideoTrackSource> objc_video_track_source =
+      rtc::make_ref_counted<webrtc::ObjCVideoTrackSource>(adapter);
   rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> video_source =
       webrtc::CreateVideoTrackSourceProxy(signaling_thread, worker_thread, objc_video_track_source);
 
diff --git a/sdk/objc/native/api/video_frame_buffer.mm b/sdk/objc/native/api/video_frame_buffer.mm
index 6dc9975..e1d8aad 100644
--- a/sdk/objc/native/api/video_frame_buffer.mm
+++ b/sdk/objc/native/api/video_frame_buffer.mm
@@ -16,7 +16,7 @@
 
 rtc::scoped_refptr<VideoFrameBuffer> ObjCToNativeVideoFrameBuffer(
     id<RTC_OBJC_TYPE(RTCVideoFrameBuffer)> objc_video_frame_buffer) {
-  return new rtc::RefCountedObject<ObjCFrameBuffer>(objc_video_frame_buffer);
+  return rtc::make_ref_counted<ObjCFrameBuffer>(objc_video_frame_buffer);
 }
 
 id<RTC_OBJC_TYPE(RTCVideoFrameBuffer)> NativeToObjCVideoFrameBuffer(
diff --git a/sdk/objc/native/src/objc_frame_buffer.mm b/sdk/objc/native/src/objc_frame_buffer.mm
index deb38a7..34d5d4e 100644
--- a/sdk/objc/native/src/objc_frame_buffer.mm
+++ b/sdk/objc/native/src/objc_frame_buffer.mm
@@ -67,7 +67,7 @@
 
 rtc::scoped_refptr<I420BufferInterface> ObjCFrameBuffer::ToI420() {
   rtc::scoped_refptr<I420BufferInterface> buffer =
-      new rtc::RefCountedObject<ObjCI420FrameBuffer>([frame_buffer_ toI420]);
+      rtc::make_ref_counted<ObjCI420FrameBuffer>([frame_buffer_ toI420]);
 
   return buffer;
 }
diff --git a/sdk/objc/native/src/objc_video_decoder_factory.mm b/sdk/objc/native/src/objc_video_decoder_factory.mm
index d005d0e..e144fda 100644
--- a/sdk/objc/native/src/objc_video_decoder_factory.mm
+++ b/sdk/objc/native/src/objc_video_decoder_factory.mm
@@ -57,7 +57,7 @@
   int32_t RegisterDecodeCompleteCallback(DecodedImageCallback *callback) override {
     [decoder_ setCallback:^(RTC_OBJC_TYPE(RTCVideoFrame) * frame) {
       const rtc::scoped_refptr<VideoFrameBuffer> buffer =
-          new rtc::RefCountedObject<ObjCFrameBuffer>(frame.buffer);
+          rtc::make_ref_counted<ObjCFrameBuffer>(frame.buffer);
       VideoFrame videoFrame =
           VideoFrame::Builder()
               .set_video_frame_buffer(buffer)
diff --git a/sdk/objc/native/src/objc_video_track_source.mm b/sdk/objc/native/src/objc_video_track_source.mm
index a973237..7937e90 100644
--- a/sdk/objc/native/src/objc_video_track_source.mm
+++ b/sdk/objc/native/src/objc_video_track_source.mm
@@ -91,12 +91,12 @@
   rtc::scoped_refptr<VideoFrameBuffer> buffer;
   if (adapted_width == frame.width && adapted_height == frame.height) {
     // No adaption - optimized path.
-    buffer = new rtc::RefCountedObject<ObjCFrameBuffer>(frame.buffer);
+    buffer = rtc::make_ref_counted<ObjCFrameBuffer>(frame.buffer);
   } else if ([frame.buffer isKindOfClass:[RTC_OBJC_TYPE(RTCCVPixelBuffer) class]]) {
     // Adapted CVPixelBuffer frame.
     RTC_OBJC_TYPE(RTCCVPixelBuffer) *rtcPixelBuffer =
         (RTC_OBJC_TYPE(RTCCVPixelBuffer) *)frame.buffer;
-    buffer = new rtc::RefCountedObject<ObjCFrameBuffer>([[RTC_OBJC_TYPE(RTCCVPixelBuffer) alloc]
+    buffer = rtc::make_ref_counted<ObjCFrameBuffer>([[RTC_OBJC_TYPE(RTCCVPixelBuffer) alloc]
         initWithPixelBuffer:rtcPixelBuffer.pixelBuffer
                adaptedWidth:adapted_width
               adaptedHeight:adapted_height
@@ -108,7 +108,7 @@
     // Adapted I420 frame.
     // TODO(magjed): Optimize this I420 path.
     rtc::scoped_refptr<I420Buffer> i420_buffer = I420Buffer::Create(adapted_width, adapted_height);
-    buffer = new rtc::RefCountedObject<ObjCFrameBuffer>(frame.buffer);
+    buffer = rtc::make_ref_counted<ObjCFrameBuffer>(frame.buffer);
     i420_buffer->CropAndScaleFrom(*buffer->ToI420(), crop_x, crop_y, crop_width, crop_height);
     buffer = i420_buffer;
   }
diff --git a/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm b/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm
index ca3d672..8bd1f1a 100644
--- a/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm
+++ b/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm
@@ -51,7 +51,7 @@
 }
 
 - (void)setUp {
-  _video_source = new rtc::RefCountedObject<webrtc::ObjCVideoTrackSource>();
+  _video_source = rtc::make_ref_counted<webrtc::ObjCVideoTrackSource>();
 }
 
 - (void)tearDown {
diff --git a/sdk/objc/unittests/objc_video_encoder_factory_tests.mm b/sdk/objc/unittests/objc_video_encoder_factory_tests.mm
index 7c1594a..cd97c81 100644
--- a/sdk/objc/unittests/objc_video_encoder_factory_tests.mm
+++ b/sdk/objc/unittests/objc_video_encoder_factory_tests.mm
@@ -83,7 +83,7 @@
   CVPixelBufferRef pixel_buffer;
   CVPixelBufferCreate(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_32ARGB, nil, &pixel_buffer);
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer =
-      new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(
+      rtc::make_ref_counted<webrtc::ObjCFrameBuffer>(
           [[RTC_OBJC_TYPE(RTCCVPixelBuffer) alloc] initWithPixelBuffer:pixel_buffer]);
   webrtc::VideoFrame frame = webrtc::VideoFrame::Builder()
                                  .set_video_frame_buffer(buffer)
@@ -101,7 +101,7 @@
   CVPixelBufferRef pixel_buffer;
   CVPixelBufferCreate(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_32ARGB, nil, &pixel_buffer);
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer =
-      new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(
+      rtc::make_ref_counted<webrtc::ObjCFrameBuffer>(
           [[RTC_OBJC_TYPE(RTCCVPixelBuffer) alloc] initWithPixelBuffer:pixel_buffer]);
   webrtc::VideoFrame frame = webrtc::VideoFrame::Builder()
                                  .set_video_frame_buffer(buffer)
diff --git a/test/mac_capturer.mm b/test/mac_capturer.mm
index 1f84c1b..da8e9b7 100644
--- a/test/mac_capturer.mm
+++ b/test/mac_capturer.mm
@@ -26,7 +26,7 @@
     didCaptureVideoFrame:(RTC_OBJC_TYPE(RTCVideoFrame) *)frame {
   const int64_t timestamp_us = frame.timeStampNs / rtc::kNumNanosecsPerMicrosec;
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer =
-      new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(frame.buffer);
+      rtc::make_ref_counted<webrtc::ObjCFrameBuffer>(frame.buffer);
   _capturer->OnFrame(webrtc::VideoFrame::Builder()
                          .set_video_frame_buffer(buffer)
                          .set_rotation(webrtc::kVideoRotation_0)
