diff --git a/modules/rtp_rtcp/include/rtp_rtcp.h b/modules/rtp_rtcp/include/rtp_rtcp.h
index 25d9046..4fb50d1 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp.h
@@ -107,8 +107,8 @@
   // Receiver functions
   // **************************************************************************
 
-  virtual int32_t IncomingRtcpPacket(const uint8_t* incoming_packet,
-                                     size_t incoming_packet_length) = 0;
+  virtual void IncomingRtcpPacket(const uint8_t* incoming_packet,
+                                  size_t incoming_packet_length) = 0;
 
   virtual void SetRemoteSSRC(uint32_t ssrc) = 0;
 
diff --git a/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h b/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
index 1d45463..fb0db62 100644
--- a/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
+++ b/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
@@ -42,7 +42,7 @@
   MOCK_METHOD1(RegisterSyncModule, int32_t(RtpRtcp* module));
   MOCK_METHOD0(DeRegisterSyncModule, int32_t());
   MOCK_METHOD2(IncomingRtcpPacket,
-               int32_t(const uint8_t* incoming_packet, size_t packet_length));
+               void(const uint8_t* incoming_packet, size_t packet_length));
   MOCK_METHOD1(SetRemoteSSRC, void(uint32_t ssrc));
   MOCK_METHOD4(IncomingAudioNTP,
                int32_t(uint32_t audio_received_ntp_secs,
diff --git a/modules/rtp_rtcp/source/nack_rtx_unittest.cc b/modules/rtp_rtcp/source/nack_rtx_unittest.cc
index 1a68726..89d68e1 100644
--- a/modules/rtp_rtcp/source/nack_rtx_unittest.cc
+++ b/modules/rtp_rtcp/source/nack_rtx_unittest.cc
@@ -101,7 +101,8 @@
   }
 
   bool SendRtcp(const uint8_t* data, size_t len) override {
-    return module_->IncomingRtcpPacket((const uint8_t*)data, len) == 0;
+    module_->IncomingRtcpPacket((const uint8_t*)data, len);
+    return true;
   }
   int count_;
   int packet_loss_;
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.cc b/modules/rtp_rtcp/source/rtcp_receiver.cc
index 666e1e2..8f498ac 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.cc
+++ b/modules/rtp_rtcp/source/rtcp_receiver.cc
@@ -134,17 +134,16 @@
 
 RTCPReceiver::~RTCPReceiver() {}
 
-bool RTCPReceiver::IncomingPacket(const uint8_t* packet, size_t packet_size) {
+void RTCPReceiver::IncomingPacket(const uint8_t* packet, size_t packet_size) {
   if (packet_size == 0) {
     LOG(LS_WARNING) << "Incoming empty RTCP packet";
-    return false;
+    return;
   }
 
   PacketInformation packet_information;
   if (!ParseCompoundPacket(packet, packet + packet_size, &packet_information))
-    return false;
+    return;
   TriggerCallbacksFromRtcpPacket(packet_information);
-  return true;
 }
 
 int64_t RTCPReceiver::LastReceivedReceiverReport() const {
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.h b/modules/rtp_rtcp/source/rtcp_receiver.h
index 28d8927..c0e486a 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.h
+++ b/modules/rtp_rtcp/source/rtcp_receiver.h
@@ -59,7 +59,7 @@
                ModuleRtpRtcp* owner);
   virtual ~RTCPReceiver();
 
-  bool IncomingPacket(const uint8_t* packet, size_t packet_size);
+  void IncomingPacket(const uint8_t* packet, size_t packet_size);
 
   int64_t LastReceivedReceiverReport() const;
 
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 6167b44..7318ff4 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -270,10 +270,9 @@
   return rtc::Optional<uint32_t>();
 }
 
-int32_t ModuleRtpRtcpImpl::IncomingRtcpPacket(
-    const uint8_t* rtcp_packet,
-    const size_t length) {
-  return rtcp_receiver_.IncomingPacket(rtcp_packet, length) ? 0 : -1;
+void ModuleRtpRtcpImpl::IncomingRtcpPacket(const uint8_t* rtcp_packet,
+                                           const size_t length) {
+  rtcp_receiver_.IncomingPacket(rtcp_packet, length);
 }
 
 int32_t ModuleRtpRtcpImpl::RegisterSendPayload(
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index aa95550..70edc9d 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -42,8 +42,8 @@
   // Receiver part.
 
   // Called when we receive an RTCP packet.
-  int32_t IncomingRtcpPacket(const uint8_t* incoming_packet,
-                             size_t incoming_packet_length) override;
+  void IncomingRtcpPacket(const uint8_t* incoming_packet,
+                          size_t incoming_packet_length) override;
 
   void SetRemoteSSRC(uint32_t ssrc) override;
 
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
index b417591..aa9db2a 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
@@ -88,7 +88,7 @@
       clock_->AdvanceTimeMilliseconds(delay_ms_);
     }
     EXPECT_TRUE(receiver_);
-    EXPECT_EQ(0, receiver_->IncomingRtcpPacket(data, len));
+    receiver_->IncomingRtcpPacket(data, len);
     return true;
   }
   int32_t OnReceivedPayloadData(const uint8_t* payload_data,
@@ -255,8 +255,7 @@
     nack.SetMediaSsrc(sender ? kSenderSsrc : kReceiverSsrc);
     nack.SetPacketIds(list, kListLength);
     rtc::Buffer packet = nack.Build();
-    EXPECT_EQ(0, module->impl_->IncomingRtcpPacket(packet.data(),
-                                                   packet.size()));
+    module->impl_->IncomingRtcpPacket(packet.data(), packet.size());
   }
 };
 
diff --git a/modules/rtp_rtcp/test/testAPI/test_api.cc b/modules/rtp_rtcp/test/testAPI/test_api.cc
index 28be222..fadf8f4 100644
--- a/modules/rtp_rtcp/test/testAPI/test_api.cc
+++ b/modules/rtp_rtcp/test/testAPI/test_api.cc
@@ -62,9 +62,7 @@
 }
 
 bool LoopBackTransport::SendRtcp(const uint8_t* data, size_t len) {
-  if (rtp_rtcp_module_->IncomingRtcpPacket((const uint8_t*)data, len) < 0) {
-    return false;
-  }
+  rtp_rtcp_module_->IncomingRtcpPacket((const uint8_t*)data, len);
   return true;
 }
 
diff --git a/voice_engine/channel.cc b/voice_engine/channel.cc
index 746db81..d1c3a4b 100644
--- a/voice_engine/channel.cc
+++ b/voice_engine/channel.cc
@@ -1784,11 +1784,7 @@
   UpdatePlayoutTimestamp(true);
 
   // Deliver RTCP packet to RTP/RTCP module for parsing
-  if (_rtpRtcpModule->IncomingRtcpPacket(data, length) == -1) {
-    _engineStatisticsPtr->SetLastError(
-        VE_SOCKET_TRANSPORT_MODULE_ERROR, kTraceWarning,
-        "Channel::IncomingRTPPacket() RTCP packet is invalid");
-  }
+  _rtpRtcpModule->IncomingRtcpPacket(data, length);
 
   int64_t rtt = GetRTT(true);
   if (rtt == 0) {
diff --git a/voice_engine/voe_network_unittest.cc b/voice_engine/voe_network_unittest.cc
index d3d1f80..1124c3b 100644
--- a/voice_engine/voe_network_unittest.cc
+++ b/voice_engine/voe_network_unittest.cc
@@ -97,13 +97,6 @@
                     channelID, kPacket, kMaxValidSizeOfRtpPacketInBytes + 1));
 }
 
-TEST_F(VoENetworkTest, ReceivedRTCPPacketWithJunkDataShouldFail) {
-  int channelID = CreateChannelAndRegisterExternalTransport();
-  EXPECT_EQ(0, network_->ReceivedRTCPPacket(channelID, kPacketJunk,
-                                            sizeof(kPacketJunk)));
-  EXPECT_EQ(VE_SOCKET_TRANSPORT_MODULE_ERROR, base_->LastError());
-}
-
 TEST_F(VoENetworkTest, ReceivedRTCPPacketOnNonExistingChannelShouldFail) {
   EXPECT_EQ(0, base_->Init(&adm_, apm_.get(), nullptr));
   EXPECT_EQ(-1, network_->ReceivedRTCPPacket(kNonExistingChannel, kPacket,
