diff --git a/api/jsepsessiondescription.h b/api/jsepsessiondescription.h
index cb234b0..69945b4 100644
--- a/api/jsepsessiondescription.h
+++ b/api/jsepsessiondescription.h
@@ -35,9 +35,6 @@
   explicit JsepSessionDescription(const std::string& type);
   virtual ~JsepSessionDescription();
 
-  // |error| may be null.
-  bool Initialize(const std::string& sdp, SdpParseError* error);
-
   // Takes ownership of |description|.
   // TODO(deadbeef): Make this use an std::unique_ptr<>, so ownership logic is
   // more clear.
diff --git a/pc/jsepsessiondescription.cc b/pc/jsepsessiondescription.cc
index 2e972ea..bdb3695 100644
--- a/pc/jsepsessiondescription.cc
+++ b/pc/jsepsessiondescription.cc
@@ -121,7 +121,7 @@
   }
 
   JsepSessionDescription* jsep_desc = new JsepSessionDescription(type);
-  if (!jsep_desc->Initialize(sdp, error)) {
+  if (!SdpDeserialize(sdp, jsep_desc, error)) {
     delete jsep_desc;
     return NULL;
   }
@@ -148,11 +148,6 @@
   return true;
 }
 
-bool JsepSessionDescription::Initialize(const std::string& sdp,
-                                        SdpParseError* error) {
-  return SdpDeserialize(sdp, this, error);
-}
-
 bool JsepSessionDescription::AddCandidate(
     const IceCandidateInterface* candidate) {
   if (!candidate || candidate->sdp_mline_index() < 0)
diff --git a/pc/jsepsessiondescription_unittest.cc b/pc/jsepsessiondescription_unittest.cc
index 4d8218a..62052af 100644
--- a/pc/jsepsessiondescription_unittest.cc
+++ b/pc/jsepsessiondescription_unittest.cc
@@ -13,6 +13,7 @@
 
 #include "webrtc/api/jsepicecandidate.h"
 #include "webrtc/api/jsepsessiondescription.h"
+#include "webrtc/api/webrtcsdp.h"
 #include "webrtc/p2p/base/candidate.h"
 #include "webrtc/p2p/base/p2pconstants.h"
 #include "webrtc/p2p/base/sessiondescription.h"
@@ -97,7 +98,7 @@
 
   SessionDescriptionInterface* DeSerialize(const std::string& sdp) {
     JsepSessionDescription* desc(new JsepSessionDescription("dummy"));
-    EXPECT_TRUE(desc->Initialize(sdp, NULL));
+    EXPECT_TRUE(webrtc::SdpDeserialize(sdp, desc, nullptr));
     return desc;
   }
 
diff --git a/pc/webrtcsession_unittest.cc b/pc/webrtcsession_unittest.cc
index 2088327..8621965 100644
--- a/pc/webrtcsession_unittest.cc
+++ b/pc/webrtcsession_unittest.cc
@@ -1218,8 +1218,9 @@
                                         kSessionVersion, current_desc);
   }
 
-  JsepSessionDescription* CreateRemoteOfferWithSctpPort(
-      const char* sctp_stream_name, int new_port,
+  SessionDescriptionInterface* CreateRemoteOfferWithSctpPort(
+      const char* sctp_stream_name,
+      int new_port,
       cricket::MediaSessionOptions options) {
     options.data_channel_type = cricket::DCT_SCTP;
     GetOptionsForRemoteOffer(&options);
@@ -1227,8 +1228,9 @@
   }
 
   // Takes ownership of offer_basis (and deletes it).
-  JsepSessionDescription* ChangeSDPSctpPort(
-      int new_port, webrtc::SessionDescriptionInterface *offer_basis) {
+  SessionDescriptionInterface* ChangeSDPSctpPort(
+      int new_port,
+      webrtc::SessionDescriptionInterface* offer_basis) {
     // Stringify the input SDP, swap the 5000 for 'new_port' and create a new
     // SessionDescription from the mutated string.
     const char* default_port_str = "5000";
@@ -1239,10 +1241,9 @@
     rtc::replace_substrs(default_port_str, strlen(default_port_str),
                                new_port_str, strlen(new_port_str),
                                &offer_str);
-    JsepSessionDescription* offer = new JsepSessionDescription(
-        offer_basis->type());
+    SessionDescriptionInterface* offer =
+        CreateSessionDescription(offer_basis->type(), offer_str, nullptr);
     delete offer_basis;
-    offer->Initialize(offer_str, NULL);
     return offer;
   }
 
@@ -3683,14 +3684,16 @@
   rtc::replace_substrs(rtcp_mux.c_str(), rtcp_mux.length(),
                              xrtcp_mux.c_str(), xrtcp_mux.length(),
                              &offer_str);
-  JsepSessionDescription* local_offer =
-      new JsepSessionDescription(JsepSessionDescription::kOffer);
-  EXPECT_TRUE((local_offer)->Initialize(offer_str, NULL));
+  SessionDescriptionInterface* local_offer = CreateSessionDescription(
+      SessionDescriptionInterface::kOffer, offer_str, nullptr);
+  ASSERT_TRUE(local_offer);
   SetLocalDescriptionOfferExpectError(kBundleWithoutRtcpMux, local_offer);
-  JsepSessionDescription* remote_offer =
-      new JsepSessionDescription(JsepSessionDescription::kOffer);
-  EXPECT_TRUE((remote_offer)->Initialize(offer_str, NULL));
+
+  SessionDescriptionInterface* remote_offer = CreateSessionDescription(
+      SessionDescriptionInterface::kOffer, offer_str, nullptr);
+  ASSERT_TRUE(remote_offer);
   SetRemoteDescriptionOfferExpectError(kBundleWithoutRtcpMux, remote_offer);
+
   // Trying unmodified SDP.
   SetLocalDescriptionWithoutError(offer);
 }
@@ -4189,8 +4192,8 @@
   // let the session description get parsed.  That'll get the proper codecs
   // into the stream.
   cricket::MediaSessionOptions options;
-  JsepSessionDescription* offer = CreateRemoteOfferWithSctpPort(
-      "stream1", new_send_port, options);
+  SessionDescriptionInterface* offer =
+      CreateRemoteOfferWithSctpPort("stream1", new_send_port, options);
 
   // SetRemoteDescription will take the ownership of the offer.
   SetRemoteDescriptionWithoutError(offer);
