diff --git a/webrtc/api/webrtcsdp.cc b/webrtc/api/webrtcsdp.cc
index 4df4ef8..28c8be0 100644
--- a/webrtc/api/webrtcsdp.cc
+++ b/webrtc/api/webrtcsdp.cc
@@ -1260,8 +1260,8 @@
       for (std::vector<cricket::DataCodec>::const_iterator it =
            data_desc->codecs().begin();
            it != data_desc->codecs().end(); ++it) {
-        if (it->id == cricket::kGoogleSctpDataCodecId &&
-            it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
+        if (cricket::CodecNamesEq(it->name, cricket::kGoogleSctpDataCodecName)
+            && it->GetParam(cricket::kCodecParamPort, &sctp_port)) {
           break;
         }
       }
@@ -1651,13 +1651,15 @@
 
 bool AddSctpDataCodec(DataContentDescription* media_desc,
                       int sctp_port) {
-  if (media_desc->HasCodec(cricket::kGoogleSctpDataCodecId)) {
-    return ParseFailed("",
-                       "Can't have multiple sctp port attributes.",
-                       NULL);
+  for (const auto& codec : media_desc->codecs()) {
+    if (cricket::CodecNamesEq(codec.name, cricket::kGoogleSctpDataCodecName)) {
+      return ParseFailed("",
+                         "Can't have multiple sctp port attributes.",
+                         NULL);
+    }
   }
   // Add the SCTP Port number as a pseudo-codec "port" parameter
-  cricket::DataCodec codec_port(cricket::kGoogleSctpDataCodecId,
+  cricket::DataCodec codec_port(cricket::kGoogleSctpDataCodecPlType,
                                 cricket::kGoogleSctpDataCodecName);
   codec_port.SetParam(cricket::kCodecParamPort, sctp_port);
   LOG(INFO) << "AddSctpDataCodec: Got SCTP Port Number "
@@ -2185,9 +2187,7 @@
     return;
   }
   RTC_DCHECK(media_desc->codecs().empty());
-  std::vector<int>::const_iterator it = fmts.begin();
-  for (; it != fmts.end(); ++it) {
-    int payload_type = *it;
+  for (int payload_type : fmts) {
     if (!media_desc->HasCodec(payload_type) &&
         payload_type >= 0 &&
         static_cast<uint32_t>(payload_type) <
diff --git a/webrtc/api/webrtcsdp_unittest.cc b/webrtc/api/webrtcsdp_unittest.cc
index 1672268..2faec7e 100644
--- a/webrtc/api/webrtcsdp_unittest.cc
+++ b/webrtc/api/webrtcsdp_unittest.cc
@@ -1395,7 +1395,7 @@
     std::unique_ptr<DataContentDescription> data(new DataContentDescription());
     data_desc_ = data.get();
     data_desc_->set_protocol(cricket::kMediaProtocolDtlsSctp);
-    DataCodec codec(cricket::kGoogleSctpDataCodecId,
+    DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
                     cricket::kGoogleSctpDataCodecName);
     codec.SetParam(cricket::kCodecParamPort, kDefaultSctpPort);
     data_desc_->AddCodec(codec);
@@ -1990,7 +1990,7 @@
       jsep_desc.description()->GetContentDescriptionByName(kDataContentName));
 
   const int kNewPort = 1234;
-  cricket::DataCodec codec(cricket::kGoogleSctpDataCodecId,
+  cricket::DataCodec codec(cricket::kGoogleSctpDataCodecPlType,
                            cricket::kGoogleSctpDataCodecName);
   codec.SetParam(cricket::kCodecParamPort, kNewPort);
   dcdesc->AddOrReplaceCodec(codec);
@@ -2605,7 +2605,7 @@
       mutant->GetContentDescriptionByName(kDataContentName));
   std::vector<cricket::DataCodec> codecs(dcdesc->codecs());
   EXPECT_EQ(1U, codecs.size());
-  EXPECT_EQ(cricket::kGoogleSctpDataCodecId, codecs[0].id);
+  EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, codecs[0].id);
   codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort);
   dcdesc->set_codecs(codecs);
 
diff --git a/webrtc/api/webrtcsession_unittest.cc b/webrtc/api/webrtcsession_unittest.cc
index ba9ea2b..800ad3c 100644
--- a/webrtc/api/webrtcsession_unittest.cc
+++ b/webrtc/api/webrtcsession_unittest.cc
@@ -3967,7 +3967,7 @@
   int portnum = -1;
   ASSERT_TRUE(ch != NULL);
   ASSERT_EQ(1UL, ch->send_codecs().size());
-  EXPECT_EQ(cricket::kGoogleSctpDataCodecId, ch->send_codecs()[0].id);
+  EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->send_codecs()[0].id);
   EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName,
                       ch->send_codecs()[0].name.c_str()));
   EXPECT_TRUE(ch->send_codecs()[0].GetParam(cricket::kCodecParamPort,
@@ -3975,7 +3975,7 @@
   EXPECT_EQ(new_send_port, portnum);
 
   ASSERT_EQ(1UL, ch->recv_codecs().size());
-  EXPECT_EQ(cricket::kGoogleSctpDataCodecId, ch->recv_codecs()[0].id);
+  EXPECT_EQ(cricket::kGoogleSctpDataCodecPlType, ch->recv_codecs()[0].id);
   EXPECT_EQ(0, strcmp(cricket::kGoogleSctpDataCodecName,
                       ch->recv_codecs()[0].name.c_str()));
   EXPECT_TRUE(ch->recv_codecs()[0].GetParam(cricket::kCodecParamPort,
diff --git a/webrtc/media/base/mediaconstants.cc b/webrtc/media/base/mediaconstants.cc
index 640c67e..557732e 100644
--- a/webrtc/media/base/mediaconstants.cc
+++ b/webrtc/media/base/mediaconstants.cc
@@ -83,10 +83,10 @@
 const char kCodecParamMaxQuantization[] = "x-google-max-quantization";
 const char kCodecParamPort[] = "x-google-port";
 
-const int kGoogleRtpDataCodecId = 101;
+const int kGoogleRtpDataCodecPlType = 109;
 const char kGoogleRtpDataCodecName[] = "google-data";
 
-const int kGoogleSctpDataCodecId = 108;
+const int kGoogleSctpDataCodecPlType = 108;
 const char kGoogleSctpDataCodecName[] = "google-sctp-data";
 
 const char kComfortNoiseCodecName[] = "CN";
diff --git a/webrtc/media/base/mediaconstants.h b/webrtc/media/base/mediaconstants.h
index 506308a..28fd5e0 100644
--- a/webrtc/media/base/mediaconstants.h
+++ b/webrtc/media/base/mediaconstants.h
@@ -106,13 +106,13 @@
 // We put the data codec names here so callers of
 // DataEngine::CreateChannel don't have to import rtpdataengine.h or
 // sctpdataengine.h to get the codec names they want to pass in.
-extern const int kGoogleRtpDataCodecId;
+extern const int kGoogleRtpDataCodecPlType;
 extern const char kGoogleRtpDataCodecName[];
 
 // TODO(pthatcher): Find an id that won't conflict with anything.  On
 // the other hand, it really shouldn't matter since the id won't be
 // used on the wire.
-extern const int kGoogleSctpDataCodecId;
+extern const int kGoogleSctpDataCodecPlType;
 extern const char kGoogleSctpDataCodecName[];
 
 extern const char kComfortNoiseCodecName[];
diff --git a/webrtc/media/base/rtpdataengine.cc b/webrtc/media/base/rtpdataengine.cc
index 99aa3b1..6c3837d 100644
--- a/webrtc/media/base/rtpdataengine.cc
+++ b/webrtc/media/base/rtpdataengine.cc
@@ -35,7 +35,7 @@
 
 RtpDataEngine::RtpDataEngine() {
   data_codecs_.push_back(
-      DataCodec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName));
+      DataCodec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName));
 }
 
 DataMediaChannel* RtpDataEngine::CreateChannel(
@@ -84,7 +84,7 @@
 }
 
 const DataCodec* FindUnknownCodec(const std::vector<DataCodec>& codecs) {
-  DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName);
+  DataCodec data_codec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName);
   std::vector<DataCodec>::const_iterator iter;
   for (iter = codecs.begin(); iter != codecs.end(); ++iter) {
     if (!iter->Matches(data_codec)) {
@@ -95,7 +95,7 @@
 }
 
 const DataCodec* FindKnownCodec(const std::vector<DataCodec>& codecs) {
-  DataCodec data_codec(kGoogleRtpDataCodecId, kGoogleRtpDataCodecName);
+  DataCodec data_codec(kGoogleRtpDataCodecPlType, kGoogleRtpDataCodecName);
   std::vector<DataCodec>::const_iterator iter;
   for (iter = codecs.begin(); iter != codecs.end(); ++iter) {
     if (iter->Matches(data_codec)) {
diff --git a/webrtc/media/sctp/sctpdataengine.cc b/webrtc/media/sctp/sctpdataengine.cc
index 0804fed..7975425 100644
--- a/webrtc/media/sctp/sctpdataengine.cc
+++ b/webrtc/media/sctp/sctpdataengine.cc
@@ -320,7 +320,7 @@
 }
 
 DataCodec GetSctpDataCodec() {
-  DataCodec codec(kGoogleSctpDataCodecId, kGoogleSctpDataCodecName);
+  DataCodec codec(kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName);
   codec.SetParam(kCodecParamPort, kSctpDefaultPort);
   return codec;
 }
@@ -985,14 +985,14 @@
 
 bool SctpDataMediaChannel::SetSendCodecs(const std::vector<DataCodec>& codecs) {
   return GetCodecIntParameter(
-      codecs, kGoogleSctpDataCodecId, kGoogleSctpDataCodecName, kCodecParamPort,
-      &remote_port_);
+      codecs, kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName,
+      kCodecParamPort, &remote_port_);
 }
 
 bool SctpDataMediaChannel::SetRecvCodecs(const std::vector<DataCodec>& codecs) {
   return GetCodecIntParameter(
-      codecs, kGoogleSctpDataCodecId, kGoogleSctpDataCodecName, kCodecParamPort,
-      &local_port_);
+      codecs, kGoogleSctpDataCodecPlType, kGoogleSctpDataCodecName,
+      kCodecParamPort, &local_port_);
 }
 
 void SctpDataMediaChannel::OnPacketFromSctpToNetwork(
diff --git a/webrtc/pc/mediasession.cc b/webrtc/pc/mediasession.cc
index bfb5692..ebba9ac 100644
--- a/webrtc/pc/mediasession.cc
+++ b/webrtc/pc/mediasession.cc
@@ -302,10 +302,11 @@
 // Filters the data codecs for the data channel type.
 void FilterDataCodecs(std::vector<DataCodec>* codecs, bool sctp) {
   // Filter RTP codec for SCTP and vice versa.
-  int codec_id = sctp ? kGoogleRtpDataCodecId : kGoogleSctpDataCodecId;
+  const char* codec_name =
+      sctp ? kGoogleRtpDataCodecName : kGoogleSctpDataCodecName;
   for (std::vector<DataCodec>::iterator iter = codecs->begin();
        iter != codecs->end();) {
-    if (iter->id == codec_id) {
+    if (CodecNamesEq(iter->name, codec_name)) {
       iter = codecs->erase(iter);
     } else {
       ++iter;
