diff --git a/api/jsep_session_description.h b/api/jsep_session_description.h
index 75ae0cd..2797c88 100644
--- a/api/jsep_session_description.h
+++ b/api/jsep_session_description.h
@@ -44,8 +44,10 @@
   virtual ~JsepSessionDescription();
 
   // Takes ownership of |description|.
-  // TODO(deadbeef): Make this use an std::unique_ptr<>, so ownership logic is
-  // more clear.
+  bool Initialize(std::unique_ptr<cricket::SessionDescription> description,
+                  const std::string& session_id,
+                  const std::string& session_version);
+  // Backwards compatible version. To be deprecated.
   bool Initialize(cricket::SessionDescription* description,
                   const std::string& session_id,
                   const std::string& session_version);
diff --git a/pc/jsep_session_description.cc b/pc/jsep_session_description.cc
index 88db174..90b12a4 100644
--- a/pc/jsep_session_description.cc
+++ b/pc/jsep_session_description.cc
@@ -150,7 +150,7 @@
     std::unique_ptr<cricket::SessionDescription> description) {
   auto jsep_description = absl::make_unique<JsepSessionDescription>(type);
   bool initialize_success = jsep_description->Initialize(
-      description.release(), session_id, session_version);
+      std::move(description), session_id, session_version);
   RTC_DCHECK(initialize_success);
   return std::move(jsep_description);
 }
@@ -185,7 +185,7 @@
 JsepSessionDescription::~JsepSessionDescription() {}
 
 bool JsepSessionDescription::Initialize(
-    cricket::SessionDescription* description,
+    std::unique_ptr<cricket::SessionDescription> description,
     const std::string& session_id,
     const std::string& session_version) {
   if (!description)
@@ -193,11 +193,18 @@
 
   session_id_ = session_id;
   session_version_ = session_version;
-  description_.reset(description);
+  description_ = std::move(description);
   candidate_collection_.resize(number_of_mediasections());
   return true;
 }
 
+bool JsepSessionDescription::Initialize(
+    cricket::SessionDescription* description,
+    const std::string& session_id,
+    const std::string& session_version) {
+  return Initialize(absl::WrapUnique(description), session_id, session_version);
+}
+
 bool JsepSessionDescription::AddCandidate(
     const IceCandidateInterface* candidate) {
   if (!candidate || candidate->sdp_mline_index() < 0)
diff --git a/pc/jsep_session_description_unittest.cc b/pc/jsep_session_description_unittest.cc
index 674b6e7..aca9dd8 100644
--- a/pc/jsep_session_description_unittest.cc
+++ b/pc/jsep_session_description_unittest.cc
@@ -53,15 +53,14 @@
 
 // This creates a session description with both audio and video media contents.
 // In SDP this is described by two m lines, one audio and one video.
-static cricket::SessionDescription* CreateCricketSessionDescription() {
-  cricket::SessionDescription* desc(new cricket::SessionDescription());
-  // AudioContentDescription
-  std::unique_ptr<cricket::AudioContentDescription> audio(
-      new cricket::AudioContentDescription());
+static std::unique_ptr<cricket::SessionDescription>
+CreateCricketSessionDescription() {
+  auto desc = absl::make_unique<cricket::SessionDescription>();
 
+  // AudioContentDescription
+  auto audio = absl::make_unique<cricket::AudioContentDescription>();
   // VideoContentDescription
-  std::unique_ptr<cricket::VideoContentDescription> video(
-      new cricket::VideoContentDescription());
+  auto video = absl::make_unique<cricket::VideoContentDescription>();
 
   audio->AddCodec(cricket::AudioCodec(103, "ISAC", 16000, 0, 0));
   desc->AddContent(cricket::CN_AUDIO, MediaProtocolType::kRtp, audio.release());
diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc
index b18f85a..e81b667 100644
--- a/pc/jsep_transport_controller_unittest.cc
+++ b/pc/jsep_transport_controller_unittest.cc
@@ -2089,13 +2089,13 @@
                   .ok());
 
   std::unique_ptr<cricket::SessionDescription> remote_answer(
-      local_offer->Copy());
+      local_offer->Clone());
   EXPECT_TRUE(transport_controller_
                   ->SetRemoteDescription(SdpType::kAnswer, remote_answer.get())
                   .ok());
 
   std::unique_ptr<cricket::SessionDescription> local_reoffer(
-      local_offer->Copy());
+      local_offer->Clone());
   local_reoffer->contents()[0].rejected = true;
   AddVideoSection(local_reoffer.get(), kVideoMid1, kIceUfrag1, kIcePwd1,
                   cricket::ICEMODE_FULL, cricket::CONNECTIONROLE_ACTPASS,
@@ -2110,7 +2110,7 @@
                   .ok());
 
   std::unique_ptr<cricket::SessionDescription> remote_reanswer(
-      local_reoffer->Copy());
+      local_reoffer->Clone());
   EXPECT_TRUE(
       transport_controller_
           ->SetRemoteDescription(SdpType::kAnswer, remote_reanswer.get())
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index efd2318..1136607 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -3191,7 +3191,7 @@
   vcd->AddLegacyStream(2);
   source.AddContent(cricket::CN_VIDEO, MediaProtocolType::kRtp, vcd);
 
-  std::unique_ptr<SessionDescription> copy(source.Copy());
+  std::unique_ptr<SessionDescription> copy = source.Clone();
   ASSERT_TRUE(copy.get() != NULL);
   EXPECT_TRUE(copy->HasGroup(cricket::CN_AUDIO));
   const ContentInfo* ac = copy->GetContentByName("audio");
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 21f6a05..e69fc96 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -3175,8 +3175,7 @@
   std::unique_ptr<SessionDescriptionInterface> modified_offer =
       webrtc::CreateSessionDescription(
           webrtc::SdpType::kOffer, offer->session_id(),
-          offer->session_version(),
-          absl::WrapUnique(offer->description()->Copy()));
+          offer->session_version(), offer->description()->Clone());
   EXPECT_TRUE(DoSetLocalDescription(std::move(offer)));
 
   auto senders = pc_->GetSenders();
diff --git a/pc/sdp_utils.cc b/pc/sdp_utils.cc
index 6a899af..e6cd07f 100644
--- a/pc/sdp_utils.cc
+++ b/pc/sdp_utils.cc
@@ -29,7 +29,7 @@
     SdpType type) {
   RTC_DCHECK(sdesc);
   auto clone = absl::make_unique<JsepSessionDescription>(type);
-  clone->Initialize(sdesc->description()->Copy(), sdesc->session_id(),
+  clone->Initialize(sdesc->description()->Clone(), sdesc->session_id(),
                     sdesc->session_version());
   // As of writing, our version of GCC does not allow returning a unique_ptr of
   // a subclass as a unique_ptr of a base class. To get around this, we need to
diff --git a/pc/session_description.cc b/pc/session_description.cc
index a081f8a..d4ccb50 100644
--- a/pc/session_description.cc
+++ b/pc/session_description.cc
@@ -10,9 +10,11 @@
 
 #include "pc/session_description.h"
 
+#include <algorithm>
 #include <utility>
 
 #include "absl/algorithm/container.h"
+#include "absl/memory/memory.h"
 #include "rtc_base/checks.h"
 
 namespace cricket {
@@ -94,8 +96,9 @@
   }
 }
 
-SessionDescription* SessionDescription::Copy() const {
-  SessionDescription* copy = new SessionDescription(*this);
+std::unique_ptr<SessionDescription> SessionDescription::Clone() const {
+  // Copy the non-special portions using the private copy constructor.
+  auto copy = absl::WrapUnique(new SessionDescription(*this));
   // Copy all ContentDescriptions.
   for (ContentInfos::iterator content = copy->contents_.begin();
        content != copy->contents().end(); ++content) {
@@ -104,6 +107,10 @@
   return copy;
 }
 
+SessionDescription* SessionDescription::Copy() const {
+  return Clone().release();
+}
+
 const ContentInfo* SessionDescription::GetContentByName(
     const std::string& name) const {
   return FindContentInfoByName(contents_, name);
diff --git a/pc/session_description.h b/pc/session_description.h
index 4156683..7b70ddf 100644
--- a/pc/session_description.h
+++ b/pc/session_description.h
@@ -14,6 +14,7 @@
 #include <stddef.h>
 #include <stdint.h>
 #include <iosfwd>
+#include <memory>
 #include <string>
 #include <vector>
 
@@ -421,6 +422,8 @@
   SessionDescription();
   ~SessionDescription();
 
+  std::unique_ptr<SessionDescription> Clone() const;
+  // Older API - to be deprecated. Still expects caller to take ownership.
   SessionDescription* Copy() const;
 
   struct MediaTransportSetting;
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index a119503..b524a75 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -998,7 +998,7 @@
     return false;
   }
 
-  jdesc->Initialize(desc.release(), session_id, session_version);
+  jdesc->Initialize(std::move(desc), session_id, session_version);
 
   for (const auto& candidate : candidates) {
     jdesc->AddCandidate(candidate.get());
diff --git a/pc/webrtc_sdp_unittest.cc b/pc/webrtc_sdp_unittest.cc
index 1fa7ba4..3de2b60 100644
--- a/pc/webrtc_sdp_unittest.cc
+++ b/pc/webrtc_sdp_unittest.cc
@@ -10,6 +10,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <algorithm>
 #include <cstdint>
 #include <map>
 #include <memory>
@@ -1130,7 +1131,7 @@
         new JsepIceCandidate(std::string("audio_content_name"), 0, candidate1));
 
     // Set up JsepSessionDescription.
-    jdesc_.Initialize(desc_.Copy(), kSessionId, kSessionVersion);
+    jdesc_.Initialize(desc_.Clone(), kSessionId, kSessionVersion);
     std::string mline_id;
     int mline_index = 0;
     for (size_t i = 0; i < candidates_.size(); ++i) {
@@ -1178,7 +1179,7 @@
     group.AddContentName(kVideoContentName);
     desc_.AddGroup(group);
 
-    ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                   jdesc_.session_version()));
   }
 
@@ -1214,7 +1215,7 @@
     desc_.AddContent(kAudioContentName, MediaProtocolType::kRtp, audio_desc_);
     desc_.AddContent(kVideoContentName, MediaProtocolType::kRtp, video_desc_);
 
-    ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                   jdesc_.session_version()));
   }
 
@@ -1263,7 +1264,7 @@
         kVideoContentName3, TransportDescription(kUfragVideo3, kPwdVideo3)));
     desc_.set_msid_signaling(cricket::kMsidSignalingMediaSection);
 
-    ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                   jdesc_.session_version()));
   }
 
@@ -1318,7 +1319,7 @@
     desc_.AddTransportInfo(TransportInfo(
         kAudioContentName3, TransportDescription(kUfragVoice3, kPwdVoice3)));
     desc_.set_msid_signaling(msid_signaling);
-    ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                   jdesc_.session_version()));
   }
 
@@ -1340,7 +1341,7 @@
 
     // Enable signaling a=msid lines.
     desc_.set_msid_signaling(cricket::kMsidSignalingMediaSection);
-    ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                   jdesc_.session_version()));
   }
 
@@ -1724,7 +1725,7 @@
     std::string new_sdp = kSdpFullString;
     ReplaceDirection(direction, &new_sdp);
 
-    if (!jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    if (!jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                            jdesc_.session_version())) {
       return false;
     }
@@ -1802,7 +1803,7 @@
 
     audio_desc_->set_direction(direction);
     video_desc_->set_direction(direction);
-    if (!jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+    if (!jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                            jdesc_.session_version())) {
       return false;
     }
@@ -1829,7 +1830,7 @@
     SetIceUfragPwd(kVideoContentName, video_rejected ? "" : kUfragVideo,
                    video_rejected ? "" : kPwdVideo);
     JsepSessionDescription jdesc_no_candidates(kDummyType);
-    if (!jdesc_no_candidates.Initialize(desc_.Copy(), jdesc_.session_id(),
+    if (!jdesc_no_candidates.Initialize(desc_.Clone(), jdesc_.session_id(),
                                         jdesc_.session_version())) {
       return false;
     }
@@ -1842,7 +1843,7 @@
                              bool encrypted) {
     AddExtmap(encrypted);
     JsepSessionDescription new_jdesc(SdpType::kOffer);
-    ASSERT_TRUE(new_jdesc.Initialize(desc_.Copy(), jdesc_.session_id(),
+    ASSERT_TRUE(new_jdesc.Initialize(desc_.Clone(), jdesc_.session_id(),
                                      jdesc_.session_version()));
     JsepSessionDescription jdesc_with_extmap(SdpType::kOffer);
     std::string sdp_with_extmap = kSdpString;
@@ -2035,7 +2036,7 @@
     rtc::SocketAddress video_addr("0.0.0.0", 9);
     audio_desc_->set_connection_address(audio_addr);
     video_desc_->set_connection_address(video_addr);
-    ASSERT_TRUE(jdesc->Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+    ASSERT_TRUE(jdesc->Initialize(desc_.Clone(), kSessionId, kSessionVersion));
   }
 
  protected:
@@ -2119,7 +2120,7 @@
   group.AddContentName(kAudioContentName);
   group.AddContentName(kVideoContentName);
   desc_.AddGroup(group);
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_bundle = kSdpFullString;
@@ -2134,7 +2135,7 @@
   vcd->set_bandwidth(100 * 1000);
   AudioContentDescription* acd = GetFirstAudioContentDescription(&desc_);
   acd->set_bandwidth(50 * 1000);
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_bandwidth = kSdpFullString;
@@ -2154,7 +2155,7 @@
   transport_options.push_back(kIceOption2);
   transport_options.push_back(kIceOption3);
   AddIceOptions(kVideoContentName, transport_options);
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_ice_options = kSdpFullString;
@@ -2295,7 +2296,7 @@
   AddExtmap(encrypted);
   JsepSessionDescription desc_with_extmap(kDummyType);
   ASSERT_TRUE(
-      desc_with_extmap.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+      desc_with_extmap.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
   TestSerialize(desc_with_extmap);
 }
 
@@ -2356,7 +2357,7 @@
   h264_codec.SetParam("packetization-mode", "1");
   video_desc_->AddCodec(h264_codec);
 
-  jdesc_.Initialize(desc_.Copy(), kSessionId, kSessionVersion);
+  jdesc_.Initialize(desc_.Clone(), kSessionId, kSessionVersion);
 
   std::string message = webrtc::SdpSerialize(jdesc_);
   size_t after_pt = message.find(" H264/90000");
@@ -2414,7 +2415,7 @@
 TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutCandidates) {
   // SessionDescription with desc but without candidates.
   JsepSessionDescription jdesc_no_candidates(kDummyType);
-  ASSERT_TRUE(jdesc_no_candidates.Initialize(desc_.Copy(), kSessionId,
+  ASSERT_TRUE(jdesc_no_candidates.Initialize(desc_.Clone(), kSessionId,
                                              kSessionVersion));
   JsepSessionDescription new_jdesc(kDummyType);
   EXPECT_TRUE(SdpDeserialize(kSdpString, &new_jdesc));
@@ -2481,7 +2482,7 @@
   // Add a DTLS a=fingerprint attribute to our session description.
   AddFingerprint();
   JsepSessionDescription new_jdesc(kDummyType);
-  ASSERT_TRUE(new_jdesc.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(new_jdesc.Initialize(desc_.Clone(), jdesc_.session_id(),
                                    jdesc_.session_version()));
 
   JsepSessionDescription jdesc_with_fingerprint(kDummyType);
@@ -2503,7 +2504,7 @@
   group.AddContentName(kAudioContentName);
   group.AddContentName(kVideoContentName);
   desc_.AddGroup(group);
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc_with_bundle));
 }
@@ -2520,7 +2521,7 @@
   vcd->set_bandwidth(100 * 1000);
   AudioContentDescription* acd = GetFirstAudioContentDescription(&desc_);
   acd->set_bandwidth(50 * 1000);
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc_with_bandwidth));
 }
@@ -2543,7 +2544,7 @@
   transport_options.push_back(kIceOption3);
   transport_options.push_back(kIceOption2);
   AddIceOptions(kVideoContentName, transport_options);
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc_with_ice_options));
 }
@@ -2771,7 +2772,7 @@
 TEST_F(WebRtcSdpTest, DeserializeSdpWithRtpDataChannels) {
   AddRtpDataChannel();
   JsepSessionDescription jdesc(kDummyType);
-  ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+  ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
 
   std::string sdp_with_data = kSdpString;
   sdp_with_data.append(kSdpRtpDataChannelString);
@@ -2787,7 +2788,7 @@
   bool use_sctpmap = true;
   AddSctpDataChannel(use_sctpmap);
   JsepSessionDescription jdesc(kDummyType);
-  ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+  ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
 
   std::string sdp_with_data = kSdpString;
   sdp_with_data.append(kSdpSctpDataChannelString);
@@ -2814,7 +2815,7 @@
   bool use_sctpmap = false;
   AddSctpDataChannel(use_sctpmap);
   JsepSessionDescription jdesc(kDummyType);
-  ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+  ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
 
   std::string sdp_with_data = kSdpString;
   sdp_with_data.append(kSdpSctpDataChannelStringWithSctpPort);
@@ -2841,7 +2842,7 @@
   bool use_sctpmap = false;
   AddSctpDataChannel(use_sctpmap);
   JsepSessionDescription jdesc(kDummyType);
-  ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+  ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
 
   std::string sdp_with_data = kSdpString;
   sdp_with_data.append(kSdpSctpDataChannelStringWithSctpColonPort);
@@ -2912,7 +2913,7 @@
   bool use_sctpmap = true;
   AddSctpDataChannel(use_sctpmap);
   JsepSessionDescription jdesc(kDummyType);
-  ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+  ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
 
   std::string sdp_with_data = kSdpString;
   // Append m= attributes
@@ -2939,7 +2940,7 @@
 void MutateJsepSctpPort(JsepSessionDescription* jdesc,
                         const SessionDescription& desc) {
   // take our pre-built session description and change the SCTP port.
-  cricket::SessionDescription* mutant = desc.Copy();
+  std::unique_ptr<cricket::SessionDescription> mutant = desc.Clone();
   DataContentDescription* dcdesc =
       mutant->GetContentDescriptionByName(kDataContentName)->as_data();
   std::vector<cricket::DataCodec> codecs(dcdesc->codecs());
@@ -2948,9 +2949,8 @@
   codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort);
   dcdesc->set_codecs(codecs);
 
-  // note: mutant's owned by jdesc now.
-  ASSERT_TRUE(jdesc->Initialize(mutant, kSessionId, kSessionVersion));
-  mutant = NULL;
+  ASSERT_TRUE(
+      jdesc->Initialize(std::move(mutant), kSessionId, kSessionVersion));
 }
 
 TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelAndUnusualPort) {
@@ -3017,7 +3017,7 @@
   JsepSessionDescription jdesc(kDummyType);
   DataContentDescription* dcd = GetFirstDataContentDescription(&desc_);
   dcd->set_bandwidth(100 * 1000);
-  ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+  ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
 
   std::string sdp_with_bandwidth = kSdpString;
   sdp_with_bandwidth.append(kSdpSctpDataChannelString);
@@ -3374,7 +3374,7 @@
   codecs[0].params["unknown-future-parameter"] = "SomeFutureValue";
   acd->set_codecs(codecs);
 
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_fmtp = kSdpFullString;
@@ -3391,7 +3391,7 @@
   codecs[0].params["stereo"] = "1";
   acd->set_codecs(codecs);
 
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_fmtp = kSdpFullString;
@@ -3408,7 +3408,7 @@
   codecs[0].params["maxptime"] = "120";
   acd->set_codecs(codecs);
 
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_fmtp = kSdpFullString;
@@ -3426,7 +3426,7 @@
   codecs[0].params["x-google-min-bitrate"] = "10";
   vcd->set_codecs(codecs);
 
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_fmtp = kSdpFullString;
@@ -3497,7 +3497,7 @@
   desc_.AddTransportInfo(audio_transport_info);
   desc_.AddTransportInfo(video_transport_info);
 
-  ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(),
+  ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(),
                                 jdesc_.session_version()));
   std::string message = webrtc::SdpSerialize(jdesc_);
   std::string sdp_with_dtlssetup = kSdpFullString;
@@ -4098,7 +4098,7 @@
   audio_desc_->set_connection_address(hostname_addr);
   video_desc_->set_connection_address(hostname_addr);
   ASSERT_TRUE(
-      expected_jsep.Initialize(desc_.Copy(), kSessionId, kSessionVersion));
+      expected_jsep.Initialize(desc_.Clone(), kSessionId, kSessionVersion));
   // Serialization.
   std::string message = webrtc::SdpSerialize(expected_jsep);
   // Deserialization.
@@ -4464,11 +4464,11 @@
 }
 
 TEST_F(WebRtcSdpTest, SerializeMediaTransportSettings) {
-  cricket::SessionDescription* description = new cricket::SessionDescription();
+  auto description = absl::make_unique<cricket::SessionDescription>();
 
   JsepSessionDescription output(SdpType::kOffer);
   // JsepSessionDescription takes ownership of the description.
-  output.Initialize(description, "session_id", "session_version");
+  output.Initialize(std::move(description), "session_id", "session_version");
   output.description()->AddMediaTransportSetting("foo", "bar");
   std::string serialized_out;
   output.ToString(&serialized_out);
@@ -4478,8 +4478,7 @@
 TEST_F(WebRtcSdpTest, SerializeMediaTransportSettingsTestCopy) {
   cricket::SessionDescription description;
   description.AddMediaTransportSetting("name", "setting");
-  std::unique_ptr<cricket::SessionDescription> copy =
-      absl::WrapUnique(description.Copy());
+  std::unique_ptr<cricket::SessionDescription> copy = description.Clone();
   ASSERT_EQ(1u, copy->MediaTransportSettings().size());
   EXPECT_EQ("name", copy->MediaTransportSettings()[0].transport_name);
   EXPECT_EQ("setting", copy->MediaTransportSettings()[0].transport_setting);
