diff --git a/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h b/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h
index 34ab74e..d09d993 100644
--- a/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h
+++ b/webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h
@@ -457,21 +457,6 @@
         std::vector<RTCPReportBlock>* receiveBlocks) const = 0;
 
     /*
-    *   Set received RTCP report block
-    *
-    *   return -1 on failure else 0
-    */
-    virtual int32_t AddRTCPReportBlock(uint32_t SSRC,
-                                       const RTCPReportBlock* receiveBlock) = 0;
-
-    /*
-    *   RemoveRTCPReportBlock
-    *
-    *   return -1 on failure else 0
-    */
-    virtual int32_t RemoveRTCPReportBlock(uint32_t SSRC) = 0;
-
-    /*
     *   (APP) Application specific data
     *
     *   return -1 on failure else 0
diff --git a/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h b/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
index 0a4ceef..f5c2281 100644
--- a/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
+++ b/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
@@ -173,10 +173,6 @@
       int32_t(RTCPSenderInfo* senderInfo));
   MOCK_CONST_METHOD1(RemoteRTCPStat,
       int32_t(std::vector<RTCPReportBlock>* receiveBlocks));
-  MOCK_METHOD2(AddRTCPReportBlock,
-      int32_t(const uint32_t SSRC, const RTCPReportBlock* receiveBlock));
-  MOCK_METHOD1(RemoveRTCPReportBlock,
-      int32_t(const uint32_t SSRC));
   MOCK_METHOD4(SetRTCPApplicationSpecificData,
       int32_t(const uint8_t subType, const uint32_t name, const uint8_t* data, const uint16_t length));
   MOCK_METHOD1(SetRTCPVoIPMetrics,
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
index e2ad3f0..d0feed5 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
@@ -184,9 +184,6 @@
   for (auto it : internal_report_blocks_)
     delete it.second;
 
-  for (auto it : external_report_blocks_)
-    delete it.second;
-
   for (auto it : csrc_cnames_)
     delete it.second;
 }
@@ -467,13 +464,6 @@
   return true;
 }
 
-int32_t RTCPSender::AddExternalReportBlock(
-    uint32_t SSRC,
-    const RTCPReportBlock* reportBlock) {
-  CriticalSectionScoped lock(critical_section_rtcp_sender_.get());
-  return AddReportBlock(SSRC, &external_report_blocks_, reportBlock);
-}
-
 int32_t RTCPSender::AddReportBlock(
     uint32_t SSRC,
     std::map<uint32_t, RTCPReportBlock*>* report_blocks,
@@ -496,20 +486,6 @@
   return 0;
 }
 
-int32_t RTCPSender::RemoveExternalReportBlock(uint32_t SSRC) {
-  CriticalSectionScoped lock(critical_section_rtcp_sender_.get());
-
-  std::map<uint32_t, RTCPReportBlock*>::iterator it =
-      external_report_blocks_.find(SSRC);
-
-  if (it == external_report_blocks_.end()) {
-    return -1;
-  }
-  delete it->second;
-  external_report_blocks_.erase(it);
-  return 0;
-}
-
 RTCPSender::BuildResult RTCPSender::BuildSR(RtcpContext* ctx) {
   // sanity
   if (ctx->position + 52 >= IP_PACKET_SIZE) {
@@ -716,13 +692,6 @@
 
 RTCPSender::BuildResult RTCPSender::BuildExtendedJitterReport(
     RtcpContext* ctx) {
-  if (external_report_blocks_.size() > 0) {
-    // TODO(andresp): Remove external report blocks since they are not
-    // supported.
-    LOG(LS_ERROR) << "Handling of external report blocks not implemented.";
-    return BuildResult::kError;
-  }
-
   // sanity
   if (ctx->position + 8 >= IP_PACKET_SIZE)
     return BuildResult::kTruncated;
@@ -1661,8 +1630,7 @@
 RTCPSender::BuildResult RTCPSender::WriteAllReportBlocksToBuffer(
     RtcpContext* ctx,
     uint8_t* numberOfReportBlocks) {
-  *numberOfReportBlocks = external_report_blocks_.size();
-  *numberOfReportBlocks += internal_report_blocks_.size();
+  *numberOfReportBlocks = internal_report_blocks_.size();
   if ((ctx->position + *numberOfReportBlocks * 24) >= IP_PACKET_SIZE) {
     LOG(LS_WARNING) << "Can't fit all report blocks.";
     return BuildResult::kError;
@@ -1672,7 +1640,6 @@
     delete internal_report_blocks_.begin()->second;
     internal_report_blocks_.erase(internal_report_blocks_.begin());
   }
-  WriteReportBlocksToBuffer(ctx, external_report_blocks_);
   return BuildResult::kSuccess;
 }
 
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.h b/webrtc/modules/rtp_rtcp/source/rtcp_sender.h
index 57fbe2b..673aaf0 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.h
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.h
@@ -121,11 +121,6 @@
                           bool repeat = false,
                           uint64_t pictureID = 0);
 
- int32_t AddExternalReportBlock(uint32_t SSRC,
-                                const RTCPReportBlock* receiveBlock);
-
- int32_t RemoveExternalReportBlock(uint32_t SSRC);
-
  bool REMB() const;
 
  void SetREMBStatus(bool enable);
@@ -273,8 +268,6 @@
      GUARDED_BY(critical_section_rtcp_sender_);
  std::map<uint32_t, RTCPReportBlock*> internal_report_blocks_
      GUARDED_BY(critical_section_rtcp_sender_);
- std::map<uint32_t, RTCPReportBlock*> external_report_blocks_
-     GUARDED_BY(critical_section_rtcp_sender_);
  std::map<uint32_t, RTCPUtility::RTCPCnameInformation*> csrc_cnames_
      GUARDED_BY(critical_section_rtcp_sender_);
 
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 9359295..7e95370 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -628,17 +628,6 @@
   return rtcp_receiver_.StatisticsReceived(receive_blocks);
 }
 
-int32_t ModuleRtpRtcpImpl::AddRTCPReportBlock(
-    const uint32_t ssrc,
-    const RTCPReportBlock* report_block) {
-  return rtcp_sender_.AddExternalReportBlock(ssrc, report_block);
-}
-
-int32_t ModuleRtpRtcpImpl::RemoveRTCPReportBlock(
-  const uint32_t ssrc) {
-  return rtcp_sender_.RemoveExternalReportBlock(ssrc);
-}
-
 // (REMB) Receiver Estimated Max Bitrate.
 bool ModuleRtpRtcpImpl::REMB() const {
   return rtcp_sender_.REMB();
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index e8c9a21..a541730 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -183,12 +183,6 @@
   int32_t RemoteRTCPStat(
       std::vector<RTCPReportBlock>* receive_blocks) const override;
 
-  // Set received RTCP report block.
-  int32_t AddRTCPReportBlock(uint32_t ssrc,
-                             const RTCPReportBlock* receive_block) override;
-
-  int32_t RemoveRTCPReportBlock(uint32_t ssrc) override;
-
   // (REMB) Receiver Estimated Max Bitrate.
   bool REMB() const override;
 
diff --git a/webrtc/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc b/webrtc/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
index 10b561d..741b7ac 100644
--- a/webrtc/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
+++ b/webrtc/modules/rtp_rtcp/test/testAPI/test_api_rtcp.cc
@@ -246,103 +246,6 @@
   EXPECT_EQ(-1, module2->RemoteCNAME(rtp_receiver2_->SSRC(), cName));
 }
 
-TEST_F(RtpRtcpRtcpTest, RTCP) {
-  RTCPReportBlock reportBlock;
-  reportBlock.remoteSSRC = 1;
-  reportBlock.sourceSSRC = 2;
-  reportBlock.cumulativeLost = 1;
-  reportBlock.delaySinceLastSR = 2;
-  reportBlock.extendedHighSeqNum = 3;
-  reportBlock.fractionLost= 4;
-  reportBlock.jitter = 5;
-  reportBlock.lastSR = 6;
-
-  // Set report blocks.
-  EXPECT_EQ(0, module1->AddRTCPReportBlock(test_csrcs[0], &reportBlock));
-
-  reportBlock.lastSR= 7;
-  EXPECT_EQ(0, module1->AddRTCPReportBlock(test_csrcs[1], &reportBlock));
-
-  uint32_t name = 't' << 24;
-  name += 'e' << 16;
-  name += 's' << 8;
-  name += 't';
-  EXPECT_EQ(0, module1->SetRTCPApplicationSpecificData(
-      3,
-      name,
-      (const uint8_t *)"test test test test test test test test test"\
-          " test test test test test test test test test test test test test"\
-          " test test test test test test test test test test test test test"\
-          " test test test test test test test test test test test test test"\
-          " test test test test test test test test test test test test ",
-          300));
-
-  // send RTCP packet, triggered by timer
-  fake_clock.AdvanceTimeMilliseconds(7500);
-  module1->Process();
-  fake_clock.AdvanceTimeMilliseconds(100);
-  module2->Process();
-
-  uint32_t receivedNTPsecs = 0;
-  uint32_t receivedNTPfrac = 0;
-  uint32_t RTCPArrivalTimeSecs = 0;
-  uint32_t RTCPArrivalTimeFrac = 0;
-  EXPECT_EQ(0, module2->RemoteNTP(&receivedNTPsecs,
-                                  &receivedNTPfrac,
-                                  &RTCPArrivalTimeSecs,
-                                  &RTCPArrivalTimeFrac,
-                                  NULL));
-
-
-  // get all report blocks
-  std::vector<RTCPReportBlock> report_blocks;
-  EXPECT_EQ(0, module1->RemoteRTCPStat(&report_blocks));
-  ASSERT_EQ(1u, report_blocks.size());
-  const RTCPReportBlock& reportBlockReceived = report_blocks[0];
-
-  float secSinceLastReport =
-      static_cast<float>(reportBlockReceived.delaySinceLastSR) / 65536.0f;
-  EXPECT_GE(0.101f, secSinceLastReport);
-  EXPECT_LE(0.100f, secSinceLastReport);
-  EXPECT_EQ(test_sequence_number, reportBlockReceived.extendedHighSeqNum);
-  EXPECT_EQ(0, reportBlockReceived.fractionLost);
-
-  EXPECT_EQ(static_cast<uint32_t>(0),
-            reportBlockReceived.cumulativeLost);
-
-  StreamStatistician *statistician =
-      receive_statistics2_->GetStatistician(reportBlockReceived.sourceSSRC);
-  RtcpStatistics stats;
-  EXPECT_TRUE(statistician->GetStatistics(&stats, true));
-  EXPECT_EQ(0, stats.fraction_lost);
-  EXPECT_EQ((uint32_t)0, stats.cumulative_lost);
-  EXPECT_EQ(test_sequence_number, stats.extended_max_sequence_number);
-  EXPECT_EQ(reportBlockReceived.jitter, stats.jitter);
-
-  int64_t RTT;
-  int64_t avgRTT;
-  int64_t minRTT;
-  int64_t maxRTT;
-
-  // Get RoundTripTime.
-  EXPECT_EQ(0, module1->RTT(test_ssrc + 1, &RTT, &avgRTT, &minRTT, &maxRTT));
-  EXPECT_GE(10, RTT);
-  EXPECT_GE(10, avgRTT);
-  EXPECT_GE(10, minRTT);
-  EXPECT_GE(10, maxRTT);
-
-  // Set report blocks.
-  EXPECT_EQ(0, module1->AddRTCPReportBlock(test_csrcs[0], &reportBlock));
-
-  // Test receive report.
-  EXPECT_EQ(0, module1->SetSendingStatus(false));
-
-  // Send RTCP packet, triggered by timer.
-  fake_clock.AdvanceTimeMilliseconds(5000);
-  module1->Process();
-  module2->Process();
-}
-
 TEST_F(RtpRtcpRtcpTest, RemoteRTCPStatRemote) {
   std::vector<RTCPReportBlock> report_blocks;
 
