diff --git a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc
index c1b1636..e9096ff 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc
+++ b/webrtc/modules/audio_coding/main/acm2/acm_receiver_unittest_oldapi.cc
@@ -96,17 +96,13 @@
     frame.num_channels_ = codec.channels;
     memset(frame.data_, 0, frame.samples_per_channel_ * frame.num_channels_ *
            sizeof(int16_t));
-    int num_bytes = 0;
     packet_sent_ = false;
     last_packet_send_timestamp_ = timestamp_;
-    while (num_bytes == 0) {
+    while (!packet_sent_) {
       frame.timestamp_ = timestamp_;
       timestamp_ += frame.samples_per_channel_;
-      ASSERT_EQ(0, acm_->Add10MsData(frame));
-      num_bytes = acm_->Process();
-      ASSERT_GE(num_bytes, 0);
+      ASSERT_GE(acm_->Add10MsData(frame), 0);
     }
-    ASSERT_TRUE(packet_sent_);  // Sanity check.
   }
 
   // Last element of id should be negative.
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc
index 6749e12..41e0feb 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc
+++ b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.cc
@@ -80,10 +80,10 @@
                                            input_frame_.num_channels_,
                                            input_frame_.data_);
     }
-    CHECK_EQ(0, acm_->Add10MsData(input_frame_));
+    data_to_send_ = false;
+    CHECK_GE(acm_->Add10MsData(input_frame_), 0);
     input_frame_.timestamp_ += input_block_size_samples_;
-    int32_t encoded_bytes = acm_->Process();
-    if (encoded_bytes > 0) {
+    if (data_to_send_) {
       // Encoded packet received.
       return CreatePacket();
     }
@@ -106,6 +106,7 @@
   timestamp_ = timestamp;
   last_payload_vec_.assign(payload_data, payload_data + payload_len_bytes);
   assert(last_payload_vec_.size() == payload_len_bytes);
+  data_to_send_ = true;
   return 0;
 }
 
diff --git a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h
index 80aaf36..05a29df 100644
--- a/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h
+++ b/webrtc/modules/audio_coding/main/acm2/acm_send_test_oldapi.h
@@ -79,6 +79,7 @@
   uint32_t timestamp_;
   uint16_t sequence_number_;
   std::vector<uint8_t> last_payload_vec_;
+  bool data_to_send_;
 
   DISALLOW_COPY_AND_ASSIGN(AcmSendTestOldApi);
 };
diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
index 542aaba..62287a4 100644
--- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
+++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc
@@ -145,7 +145,6 @@
       aux_rtp_header_(NULL),
       receiver_initialized_(false),
       first_10ms_data_(false),
-      last_encode_value_(0),
       callback_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()),
       packetization_callback_(NULL),
       vad_callback_(NULL) {
@@ -218,11 +217,6 @@
                "Destroyed");
 }
 
-int32_t AudioCodingModuleImpl::Process() {
-  CriticalSectionScoped lock(acm_crit_sect_);
-  return last_encode_value_;
-}
-
 int32_t AudioCodingModuleImpl::Encode() {
   // Make room for 1 RED payload.
   uint8_t stream[2 * MAX_PAYLOAD_SIZE_BYTE];
@@ -752,15 +746,7 @@
 // Add 10MS of raw (PCM) audio data to the encoder.
 int AudioCodingModuleImpl::Add10MsData(const AudioFrame& audio_frame) {
   int r = Add10MsDataInternal(audio_frame);
-  if (r < 0) {
-    CriticalSectionScoped lock(acm_crit_sect_);
-    last_encode_value_ = -1;
-  } else {
-    int r_encode = Encode();
-    CriticalSectionScoped lock(acm_crit_sect_);
-    last_encode_value_ = r_encode;
-  }
-  return r;
+  return r < 0 ? r : Encode();
 }
 
 int AudioCodingModuleImpl::Add10MsDataInternal(const AudioFrame& audio_frame) {
@@ -1563,10 +1549,9 @@
 }
 
 int AudioCodingImpl::Add10MsAudio(const AudioFrame& audio_frame) {
-  if (acm_old_->Add10MsData(audio_frame) != 0) {
+  if (acm_old_->Add10MsDataInternal(audio_frame) != 0)
     return -1;
-  }
-  return acm_old_->Process();
+  return acm_old_->Encode();
 }
 
 const ReceiverInfo* AudioCodingImpl::GetReceiverInfo() const {
diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h
index 3450194..76d1e36 100644
--- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h
+++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h
@@ -24,6 +24,7 @@
 namespace webrtc {
 
 class CriticalSectionWrapper;
+class AudioCodingImpl;
 
 namespace acm2 {
 
@@ -32,12 +33,11 @@
 
 class AudioCodingModuleImpl : public AudioCodingModule {
  public:
+  friend webrtc::AudioCodingImpl;
+
   explicit AudioCodingModuleImpl(const AudioCodingModule::Config& config);
   ~AudioCodingModuleImpl();
 
-  // Process any pending tasks such as timeouts.
-  virtual int32_t Process() OVERRIDE;
-
   /////////////////////////////////////////
   //   Sender
   //
@@ -335,7 +335,6 @@
 
   AudioFrame preprocess_frame_ GUARDED_BY(acm_crit_sect_);
   bool first_10ms_data_ GUARDED_BY(acm_crit_sect_);
-  int last_encode_value_ GUARDED_BY(acm_crit_sect_);
 
   CriticalSectionWrapper* callback_crit_sect_;
   AudioPacketizationCallback* packetization_callback_
diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc
index a1ea179..122d027 100644
--- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc
+++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_unittest_oldapi.cc
@@ -193,15 +193,15 @@
   }
 
   virtual void InsertAudio() {
-    ASSERT_EQ(0, acm_->Add10MsData(input_frame_));
+    ASSERT_GE(acm_->Add10MsData(input_frame_), 0);
+    VerifyEncoding();
     input_frame_.timestamp_ += kNumSamples10ms;
   }
 
-  virtual void Encode() {
-    int32_t encoded_bytes = acm_->Process();
-    // Expect to get one packet with two bytes per sample, or no packet at all,
-    // depending on how many 10 ms blocks go into |codec_.pacsize|.
-    EXPECT_TRUE(encoded_bytes == 2 * codec_.pacsize || encoded_bytes == 0);
+  virtual void VerifyEncoding() {
+    int last_length = packet_cb_.last_payload_len_bytes();
+    EXPECT_TRUE(last_length == 2 * codec_.pacsize || last_length == 0)
+        << "Last encoded packet was " << last_length << " bytes.";
   }
 
   const int id_;
@@ -316,7 +316,6 @@
     if (packet_cb_.num_calls() > 0)
       EXPECT_EQ(kAudioFrameSpeech, packet_cb_.last_frame_type());
     InsertAudio();
-    Encode();
   }
   EXPECT_EQ(kLoops / k10MsBlocksPerPacket, packet_cb_.num_calls());
   EXPECT_EQ(kAudioFrameSpeech, packet_cb_.last_frame_type());
@@ -330,13 +329,6 @@
 class AudioCodingModuleTestWithComfortNoiseOldApi
     : public AudioCodingModuleTestOldApi {
  protected:
-  void Encode() override {
-    int32_t encoded_bytes = acm_->Process();
-    // Expect either one packet with 9 comfort noise parameters, or no packet
-    // at all.
-    EXPECT_TRUE(encoded_bytes == 9 || encoded_bytes == 0);
-  }
-
   void RegisterCngCodec(int rtp_payload_type) {
     CodecInst codec;
     AudioCodingModule::Codec("CN", &codec, kSampleRateHz, 1);
@@ -345,6 +337,12 @@
     ASSERT_EQ(0, acm_->RegisterSendCodec(codec));
   }
 
+  void VerifyEncoding() override {
+    int last_length = packet_cb_.last_payload_len_bytes();
+    EXPECT_TRUE(last_length == 9 || last_length == 0)
+        << "Last encoded packet was " << last_length << " bytes.";
+  }
+
   void DoTest(int blocks_per_packet, int cng_pt) {
     const int kLoops = 40;
     // This array defines the expected frame types, and when they should arrive.
@@ -371,7 +369,6 @@
       int num_calls_before = packet_cb_.num_calls();
       EXPECT_EQ(i / blocks_per_packet, num_calls_before);
       InsertAudio();
-      Encode();
       int num_calls = packet_cb_.num_calls();
       if (num_calls == num_calls_before + 1) {
         EXPECT_EQ(expectation[num_calls - 1].ix, i);
@@ -493,7 +490,6 @@
     }
     ++send_count_;
     InsertAudio();
-    Encode();
     if (TestDone()) {
       test_complete_->Set();
     }
@@ -586,7 +582,6 @@
     int loop_counter = 0;
     while (packet_cb_.last_payload_len_bytes() == 0) {
       InsertAudio();
-      Encode();
       ASSERT_LT(loop_counter++, 10);
     }
     // Set |last_packet_number_| to one less that |num_calls| so that the packet
@@ -632,7 +627,9 @@
     AudioCodingModuleTestOldApi::InsertAudio();
   }
 
-  void Encode() { ASSERT_GE(acm_->Process(), 0); }
+  // Override the verification function with no-op, since iSAC produces variable
+  // payload sizes.
+  void VerifyEncoding() override {}
 
   // This method is the same as AudioCodingModuleMtTestOldApi::TestDone(), but
   // here it is using the constants defined in this class (i.e., shorter test
diff --git a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
index f14ff80..72e00cd 100644
--- a/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
+++ b/webrtc/modules/audio_coding/main/interface/audio_coding_module.h
@@ -101,8 +101,6 @@
   static AudioCodingModule* Create(int id, Clock* clock);
   virtual ~AudioCodingModule() {};
 
-  virtual int32_t Process() = 0;
-
   ///////////////////////////////////////////////////////////////////////////
   //   Utility functions
   //
@@ -317,9 +315,12 @@
 
   ///////////////////////////////////////////////////////////////////////////
   // int32_t Add10MsData()
-  // Add 10MS of raw (PCM) audio data to the encoder. If the sampling
+  // Add 10MS of raw (PCM) audio data and encode it. If the sampling
   // frequency of the audio does not match the sampling frequency of the
-  // current encoder ACM will resample the audio.
+  // current encoder ACM will resample the audio. If an encoded packet was
+  // produced, it will be delivered via the callback object registered using
+  // RegisterTransportCallback, and the return value from this function will
+  // be the number of bytes encoded.
   //
   // Input:
   //   -audio_frame        : the input audio frame, containing raw audio
@@ -328,10 +329,8 @@
   //                         AudioFrame.
   //
   // Return value:
-  //      0   successfully added the frame.
-  //     -1   some error occurred and data is not added.
-  //   < -1   to add the frame to the buffer n samples had to be
-  //          overwritten, -n is the return value in this case.
+  //   >= 0   number of bytes encoded.
+  //     -1   some error occurred.
   //
   virtual int32_t Add10MsData(const AudioFrame& audio_frame) = 0;
 
diff --git a/webrtc/modules/audio_coding/main/test/APITest.cc b/webrtc/modules/audio_coding/main/test/APITest.cc
index 6893587..cf21343 100644
--- a/webrtc/modules/audio_coding/main/test/APITest.cc
+++ b/webrtc/modules/audio_coding/main/test/APITest.cc
@@ -411,33 +411,11 @@
 
 bool APITest::ProcessRunA() {
   _processEventA->Wait(100);
-  if (_acmA->Process() < 0) {
-    // do not print error message if there is no encoder
-    bool thereIsEncoder;
-    {
-      ReadLockScoped rl(_apiTestRWLock);
-      thereIsEncoder = _thereIsEncoderA;
-    }
-
-    if (thereIsEncoder) {
-      fprintf(stderr, "\n>>>>>      Process Failed at A     <<<<<\n");
-    }
-  }
   return true;
 }
 
 bool APITest::ProcessRunB() {
   _processEventB->Wait(100);
-  if (_acmB->Process() < 0) {
-    bool thereIsEncoder;
-    {
-      ReadLockScoped rl(_apiTestRWLock);
-      thereIsEncoder = _thereIsEncoderB;
-    }
-    if (thereIsEncoder) {
-      fprintf(stderr, "\n>>>>>      Process Failed at B     <<<<<\n");
-    }
-  }
   return true;
 }
 
diff --git a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
index eff458b..b785cc3 100644
--- a/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
+++ b/webrtc/modules/audio_coding/main/test/EncodeDecodeTest.cc
@@ -100,11 +100,8 @@
   if (!_pcmFile.EndOfFile()) {
     EXPECT_GT(_pcmFile.Read10MsData(_audioFrame), 0);
     int32_t ok = _acm->Add10MsData(_audioFrame);
-    EXPECT_EQ(0, ok);
-    if (ok != 0) {
-      return false;
-    }
-    return true;
+    EXPECT_GE(ok, 0);
+    return ok >= 0 ? true : false;
   }
   return false;
 }
@@ -114,7 +111,6 @@
     if (!Add10MsData()) {
       break;
     }
-    EXPECT_GT(_acm->Process(), -1);
   }
 }
 
diff --git a/webrtc/modules/audio_coding/main/test/SpatialAudio.cc b/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
index 7286fc1..b28c510 100644
--- a/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
+++ b/webrtc/modules/audio_coding/main/test/SpatialAudio.cc
@@ -171,9 +171,6 @@
     }
     CHECK_ERROR(_acmRight->Add10MsData(audioFrame));
 
-    CHECK_ERROR(_acmLeft->Process());
-    CHECK_ERROR(_acmRight->Process());
-
     CHECK_ERROR(_acmReceiver->PlayoutData10Ms(outFileSampFreq, &audioFrame));
     _outFile.Write10MsData(audioFrame);
   }
@@ -190,8 +187,6 @@
     _inFile.Read10MsData(audioFrame);
     CHECK_ERROR(_acmLeft->Add10MsData(audioFrame));
 
-    CHECK_ERROR(_acmLeft->Process());
-
     CHECK_ERROR(_acmReceiver->PlayoutData10Ms(outFileSampFreq, &audioFrame));
     _outFile.Write10MsData(audioFrame);
   }
diff --git a/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc b/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
index 17186b36..b1badb6 100644
--- a/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
+++ b/webrtc/modules/audio_coding/main/test/TestAllCodecs.cc
@@ -434,9 +434,6 @@
     infile_a_.Read10MsData(audio_frame);
     CHECK_ERROR(acm_a_->Add10MsData(audio_frame));
 
-    // Run sender side of ACM.
-    CHECK_ERROR(acm_a_->Process());
-
     // Verify that the received packet size matches the settings.
     receive_size = channel->payload_size();
     if (receive_size) {
diff --git a/webrtc/modules/audio_coding/main/test/TestRedFec.cc b/webrtc/modules/audio_coding/main/test/TestRedFec.cc
index b69a1ed..8f6ef9d 100644
--- a/webrtc/modules/audio_coding/main/test/TestRedFec.cc
+++ b/webrtc/modules/audio_coding/main/test/TestRedFec.cc
@@ -311,8 +311,7 @@
 
   while (!_inFileA.EndOfFile()) {
     EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
-    EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-    EXPECT_GT(_acmA->Process(), -1);
+    EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
     EXPECT_EQ(0, _acmB->PlayoutData10Ms(outFreqHzB, &audioFrame));
     _outFileB.Write10MsData(audioFrame.data_, audioFrame.samples_per_channel_);
     msecPassed += 10;
diff --git a/webrtc/modules/audio_coding/main/test/TestStereo.cc b/webrtc/modules/audio_coding/main/test/TestStereo.cc
index 5e7bc51..72ae25e 100644
--- a/webrtc/modules/audio_coding/main/test/TestStereo.cc
+++ b/webrtc/modules/audio_coding/main/test/TestStereo.cc
@@ -779,10 +779,7 @@
       }
       in_file_stereo_->Read10MsData(audio_frame);
     }
-    EXPECT_EQ(0, acm_a_->Add10MsData(audio_frame));
-
-    // Run sender side of ACM
-    EXPECT_GT(acm_a_->Process(), -1);
+    EXPECT_GE(acm_a_->Add10MsData(audio_frame), 0);
 
     // Verify that the received packet size matches the settings.
     rec_size = channel->payload_size();
diff --git a/webrtc/modules/audio_coding/main/test/TestVADDTX.cc b/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
index 1e05be2..20ccde6 100644
--- a/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
+++ b/webrtc/modules/audio_coding/main/test/TestVADDTX.cc
@@ -242,8 +242,7 @@
     _inFileA.Read10MsData(audioFrame);
     audioFrame.timestamp_ = timestampA;
     timestampA += SamplesIn10MsecA;
-    EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-    EXPECT_GT(_acmA->Process(), -1);
+    EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
     EXPECT_EQ(0, _acmB->PlayoutData10Ms(outFreqHzB, &audioFrame));
     _outFileB.Write10MsData(audioFrame.data_, audioFrame.samples_per_channel_);
   }
diff --git a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
index cc0fc20..f4db1db 100644
--- a/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
+++ b/webrtc/modules/audio_coding/main/test/TwoWayCommunication.cc
@@ -282,32 +282,21 @@
   // and B, APIs will be called, like ResetEncoder(), and the code should
   // continue to run, and be able to recover.
   bool expect_error_add = false;
-  bool expect_error_process = false;
   while (!_inFileA.EndOfFile() && !_inFileB.EndOfFile()) {
     msecPassed += 10;
     EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
-    EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-    EXPECT_EQ(0, _acmRefA->Add10MsData(audioFrame));
+    EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
+    EXPECT_GE(_acmRefA->Add10MsData(audioFrame), 0);
 
     EXPECT_GT(_inFileB.Read10MsData(audioFrame), 0);
 
     // Expect call to pass except for the time when no send codec is registered.
     if (!expect_error_add) {
-      EXPECT_EQ(0, _acmB->Add10MsData(audioFrame));
+      EXPECT_GE(_acmB->Add10MsData(audioFrame), 0);
     } else {
       EXPECT_EQ(-1, _acmB->Add10MsData(audioFrame));
     }
-    // Expect to pass except for the time when there either is no send codec
-    // registered, or no receive codec.
-    if (!expect_error_process) {
-      EXPECT_GT(_acmB->Process(), -1);
-    } else {
-      EXPECT_EQ(_acmB->Process(), -1);
-    }
-    EXPECT_EQ(0, _acmRefB->Add10MsData(audioFrame));
-    EXPECT_GT(_acmA->Process(), -1);
-    EXPECT_GT(_acmRefA->Process(), -1);
-    EXPECT_GT(_acmRefB->Process(), -1);
+    EXPECT_GE(_acmRefB->Add10MsData(audioFrame), 0);
     EXPECT_EQ(0, _acmA->PlayoutData10Ms(outFreqHzA, &audioFrame));
     _outFileA.Write10MsData(audioFrame);
     EXPECT_EQ(0, _acmRefA->PlayoutData10Ms(outFreqHzA, &audioFrame));
@@ -328,14 +317,12 @@
       EXPECT_EQ(0, _acmA->ResetEncoder());
       EXPECT_EQ(0, _acmB->InitializeSender());
       expect_error_add = true;
-      expect_error_process = true;
     }
     // Re-register send codec on side B.
     if (((secPassed % 5) == 4) && (msecPassed >= 990)) {
       EXPECT_EQ(0, _acmB->RegisterSendCodec(codecInst_B));
       EXPECT_EQ(0, _acmB->SendCodec(&dummy));
       expect_error_add = false;
-      expect_error_process = false;
     }
     // Reset decoder on side B, and initialize receiver on side A.
     if (((secPassed % 7) == 6) && (msecPassed == 0)) {
diff --git a/webrtc/modules/audio_coding/main/test/delay_test.cc b/webrtc/modules/audio_coding/main/test/delay_test.cc
index 55dfd93..0f9e8b0 100644
--- a/webrtc/modules/audio_coding/main/test/delay_test.cc
+++ b/webrtc/modules/audio_coding/main/test/delay_test.cc
@@ -209,8 +209,7 @@
       }
 
       in_file_a_.Read10MsData(audio_frame);
-      ASSERT_EQ(0, acm_a_->Add10MsData(audio_frame));
-      ASSERT_LE(0, acm_a_->Process());
+      ASSERT_GE(acm_a_->Add10MsData(audio_frame), 0);
       ASSERT_EQ(0, acm_b_->PlayoutData10Ms(out_freq_hz_b, &audio_frame));
       out_file_b_.Write10MsData(
           audio_frame.data_,
diff --git a/webrtc/modules/audio_coding/main/test/iSACTest.cc b/webrtc/modules/audio_coding/main/test/iSACTest.cc
index c5da92e..26236f2 100644
--- a/webrtc/modules/audio_coding/main/test/iSACTest.cc
+++ b/webrtc/modules/audio_coding/main/test/iSACTest.cc
@@ -246,10 +246,8 @@
 void ISACTest::Run10ms() {
   AudioFrame audioFrame;
   EXPECT_GT(_inFileA.Read10MsData(audioFrame), 0);
-  EXPECT_EQ(0, _acmA->Add10MsData(audioFrame));
-  EXPECT_EQ(0, _acmB->Add10MsData(audioFrame));
-  EXPECT_GT(_acmA->Process(), -1);
-  EXPECT_GT(_acmB->Process(), -1);
+  EXPECT_GE(_acmA->Add10MsData(audioFrame), 0);
+  EXPECT_GE(_acmB->Add10MsData(audioFrame), 0);
   EXPECT_EQ(0, _acmA->PlayoutData10Ms(32000, &audioFrame));
   _outFileA.Write10MsData(audioFrame);
   EXPECT_EQ(0, _acmB->PlayoutData10Ms(32000, &audioFrame));
diff --git a/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc b/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
index de87b51..3d0d312 100644
--- a/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
+++ b/webrtc/modules/audio_coding/main/test/initial_delay_unittest.cc
@@ -145,8 +145,7 @@
     while (rms < kAmp / 2) {
       in_audio_frame.timestamp_ = timestamp;
       timestamp += in_audio_frame.samples_per_channel_;
-      ASSERT_EQ(0, acm_a_->Add10MsData(in_audio_frame));
-      ASSERT_LE(0, acm_a_->Process());
+      ASSERT_GE(acm_a_->Add10MsData(in_audio_frame), 0);
       ASSERT_EQ(0, acm_b_->PlayoutData10Ms(codec.plfreq, &out_audio_frame));
       rms = FrameRms(out_audio_frame);
       ++num_frames;
diff --git a/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc b/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc
index 94b093d..7331696 100644
--- a/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc
+++ b/webrtc/modules/audio_coding/main/test/insert_packet_with_timing.cc
@@ -164,7 +164,7 @@
       // Push in just enough audio.
       for (int n = 0; n < num_10ms_in_codec_frame_; n++) {
         pcm_in_fid_.Read10MsData(frame_);
-        EXPECT_EQ(0, send_acm_->Add10MsData(frame_));
+        EXPECT_GE(send_acm_->Add10MsData(frame_), 0);
       }
 
       // Set the parameters for the packet to be pushed in receiver ACM right
@@ -179,10 +179,6 @@
         lost = true;
       }
 
-      // Process audio in send ACM, this should result in generation of a
-      // packet.
-      EXPECT_GT(send_acm_->Process(), 0);
-
       if (FLAGS_verbose) {
         if (!lost) {
           std::cout << "\nInserting packet number " << seq_num
diff --git a/webrtc/modules/utility/source/coder.cc b/webrtc/modules/utility/source/coder.cc
index 5a39748..b106c75 100644
--- a/webrtc/modules/utility/source/coder.cc
+++ b/webrtc/modules/utility/source/coder.cc
@@ -96,10 +96,6 @@
         return -1;
     }
     _encodedData = encodedData;
-    if(_acm->Process() == -1)
-    {
-        return -1;
-    }
     encodedLengthInBytes = _encodedLengthInBytes;
     return 0;
 }
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index 927440a..0a5d8e6 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -3560,7 +3560,10 @@
 
     // The ACM resamples internally.
     _audioFrame.timestamp_ = _timeStamp;
-    if (audio_coding_->Add10MsData((AudioFrame&)_audioFrame) != 0)
+    // This call will trigger AudioPacketizationCallback::SendData if encoding
+    // is done and payload is ready for packetization and transmission.
+    // Otherwise, it will return without invoking the callback.
+    if (audio_coding_->Add10MsData((AudioFrame&)_audioFrame) < 0)
     {
         WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId,_channelId),
                      "Channel::EncodeAndSend() ACM encoding failed");
@@ -3568,12 +3571,7 @@
     }
 
     _timeStamp += _audioFrame.samples_per_channel_;
-
-    // --- Encode if complete frame is ready
-
-    // This call will trigger AudioPacketizationCallback::SendData if encoding
-    // is done and payload is ready for packetization and transmission.
-    return audio_coding_->Process();
+    return 0;
 }
 
 int Channel::RegisterExternalMediaProcessing(
