diff --git a/webrtc/modules/video_coding/main/interface/video_coding.h b/webrtc/modules/video_coding/main/interface/video_coding.h
index 5a206e9..9fb98c3 100644
--- a/webrtc/modules/video_coding/main/interface/video_coding.h
+++ b/webrtc/modules/video_coding/main/interface/video_coding.h
@@ -592,17 +592,14 @@
     // Disables recording of debugging information.
     virtual int StopDebugRecording() = 0;
 
-    // Enables AutoMuter to turn off video when the rate drops below
+    // Lets the sender suspend video when the rate drops below
     // |threshold_bps|, and turns back on when the rate goes back up above
     // |threshold_bps| + |window_bps|.
-    virtual void EnableAutoMuting() = 0;
+    virtual void SuspendBelowMinBitrate() = 0;
 
-    // Disables AutoMuter.
-    virtual void DisableAutoMuting() = 0;
-
-    // Returns true if AutoMuter is engaged and the video has been muted due to
-    // bandwidth limitations; otherwise false.
-    virtual bool VideoMuted() const = 0;
+    // Returns true if SuspendBelowMinBitrate is engaged and the video has been
+    // suspended due to bandwidth limitations; otherwise false.
+    virtual bool VideoSuspended() const = 0;
 };
 
 }  // namespace webrtc
diff --git a/webrtc/modules/video_coding/main/source/media_optimization.cc b/webrtc/modules/video_coding/main/source/media_optimization.cc
index 815be36..37dff6c 100644
--- a/webrtc/modules/video_coding/main/source/media_optimization.cc
+++ b/webrtc/modules/video_coding/main/source/media_optimization.cc
@@ -47,10 +47,10 @@
       last_qm_update_time_(0),
       last_change_time_(0),
       num_layers_(0),
-      muting_enabled_(false),
-      video_muted_(false),
-      muter_threshold_bps_(0),
-      muter_window_bps_(0) {
+      suspension_enabled_(false),
+      video_suspended_(false),
+      suspension_threshold_bps_(0),
+      suspension_window_bps_(0) {
   memset(send_statistics_, 0, sizeof(send_statistics_));
   memset(incoming_frame_times_, -1, sizeof(incoming_frame_times_));
 }
@@ -193,7 +193,7 @@
     content_->ResetShortTermAvgData();
   }
 
-  CheckAutoMuteConditions();
+  CheckSuspendConditions();
 
   return target_bit_rate_;
 }
@@ -351,7 +351,7 @@
 bool MediaOptimization::DropFrame() {
   // Leak appropriate number of bytes.
   frame_dropper_->Leak((uint32_t)(InputFrameRate() + 0.5f));
-  if (video_muted_) {
+  if (video_suspended_) {
     return true;  // Drop all frames when muted.
   }
   return frame_dropper_->DropFrame();
@@ -418,17 +418,13 @@
   return VCM_OK;
 }
 
-void MediaOptimization::EnableAutoMuting(int threshold_bps, int window_bps) {
+void MediaOptimization::SuspendBelowMinBitrate(int threshold_bps,
+                                               int window_bps) {
   assert(threshold_bps > 0 && window_bps >= 0);
-  muter_threshold_bps_ = threshold_bps;
-  muter_window_bps_ = window_bps;
-  muting_enabled_ = true;
-  video_muted_ = false;
-}
-
-void MediaOptimization::DisableAutoMuting() {
-  muting_enabled_ = false;
-  video_muted_ = false;
+  suspension_threshold_bps_ = threshold_bps;
+  suspension_window_bps_ = window_bps;
+  suspension_enabled_ = true;
+  video_suspended_ = false;
 }
 
 // Private methods below this line.
@@ -605,19 +601,20 @@
   }
 }
 
-void MediaOptimization::CheckAutoMuteConditions() {
-  // Check conditions for AutoMute. |target_bit_rate_| is in bps.
-  if (muting_enabled_) {
-    if (!video_muted_) {
+void MediaOptimization::CheckSuspendConditions() {
+  // Check conditions for SuspendBelowMinBitrate. |target_bit_rate_| is in bps.
+  if (suspension_enabled_) {
+    if (!video_suspended_) {
       // Check if we just went below the threshold.
-      if (target_bit_rate_ < muter_threshold_bps_) {
-        video_muted_ = true;
+      if (target_bit_rate_ < suspension_threshold_bps_) {
+        video_suspended_ = true;
       }
     } else {
-      // Video is already muted. Check if we just went over the threshold
+      // Video is already suspended. Check if we just went over the threshold
       // with a margin.
-      if (target_bit_rate_ > muter_threshold_bps_ + muter_window_bps_) {
-        video_muted_ = false;
+      if (target_bit_rate_ >
+          suspension_threshold_bps_ + suspension_window_bps_) {
+        video_suspended_ = false;
       }
     }
   }
diff --git a/webrtc/modules/video_coding/main/source/media_optimization.h b/webrtc/modules/video_coding/main/source/media_optimization.h
index ca383bf..cde28d2 100644
--- a/webrtc/modules/video_coding/main/source/media_optimization.h
+++ b/webrtc/modules/video_coding/main/source/media_optimization.h
@@ -120,18 +120,15 @@
   // Computes new Quality Mode.
   int32_t SelectQuality();
 
-  // Enables AutoMuter to turn off video when the rate drops below
+  // Lets the sender suspend video when the rate drops below
   // |threshold_bps|, and turns back on when the rate goes back up above
   // |threshold_bps| + |window_bps|.
-  void EnableAutoMuting(int threshold_bps, int window_bps);
-
-  // Disables AutoMuter.
-  void DisableAutoMuting();
+  void SuspendBelowMinBitrate(int threshold_bps, int window_bps);
 
   // Accessors and mutators.
   int32_t max_bit_rate() const { return max_bit_rate_; }
   void set_max_payload_size(int32_t mtu) { max_payload_size_ = mtu; }
-  bool video_muted() const { return video_muted_; }
+  bool video_suspended() const { return video_suspended_; }
 
  private:
   typedef std::list<EncodedFrameSample> FrameSampleList;
@@ -161,10 +158,10 @@
 
   void ProcessIncomingFrameRate(int64_t now);
 
-  // Checks conditions for AutoMute. The method compares |target_bit_rate_|
-  // with the threshold values for AutoMute, and changes the state of
-  // |video_muted_| accordingly.
-  void CheckAutoMuteConditions();
+  // Checks conditions for suspending the video. The method compares
+  // |target_bit_rate_| with the threshold values for suspension, and changes
+  // the state of |video_suspended_| accordingly.
+  void CheckSuspendConditions();
 
   int32_t id_;
   Clock* clock_;
@@ -195,10 +192,10 @@
   int64_t last_qm_update_time_;
   int64_t last_change_time_;  // Content/user triggered.
   int num_layers_;
-  bool muting_enabled_;
-  bool video_muted_;
-  int muter_threshold_bps_;
-  int muter_window_bps_;
+  bool suspension_enabled_;
+  bool video_suspended_;
+  int suspension_threshold_bps_;
+  int suspension_window_bps_;
 };  // End of MediaOptimization class declaration.
 
 }  // namespace media_optimization
diff --git a/webrtc/modules/video_coding/main/source/media_optimization_unittest.cc b/webrtc/modules/video_coding/main/source/media_optimization_unittest.cc
index fc4fd75..1425dad 100644
--- a/webrtc/modules/video_coding/main/source/media_optimization_unittest.cc
+++ b/webrtc/modules/video_coding/main/source/media_optimization_unittest.cc
@@ -55,15 +55,15 @@
 
 
 TEST_F(TestMediaOptimization, VerifyMuting) {
-  // Enable video muter with these limits.
-  // Mute the video when the rate is below 50 kbps and unmute when it gets above
-  // 50 + 10 kbps again.
+  // Enable video suspension with these limits.
+  // Suspend the video when the rate is below 50 kbps and resume when it gets
+  // above 50 + 10 kbps again.
   const int kThresholdBps = 50000;
   const int kWindowBps = 10000;
-  media_opt_.EnableAutoMuting(kThresholdBps, kWindowBps);
+  media_opt_.SuspendBelowMinBitrate(kThresholdBps, kWindowBps);
 
-  // The video should not be muted from the start.
-  EXPECT_FALSE(media_opt_.video_muted());
+  // The video should not be suspended from the start.
+  EXPECT_FALSE(media_opt_.video_suspended());
 
   int target_bitrate_kbps = 100;
   media_opt_.SetTargetRates(target_bitrate_kbps * 1000,
@@ -81,7 +81,7 @@
   // Expect the muter to engage immediately and stay muted.
   // Test during 2 seconds.
   for (int time = 0; time < 2000; time += frame_time_ms_) {
-    EXPECT_TRUE(media_opt_.video_muted());
+    EXPECT_TRUE(media_opt_.video_suspended());
     ASSERT_NO_FATAL_FAILURE(AddFrameAndAdvanceTime(target_bitrate_kbps, true));
   }
 
@@ -93,7 +93,7 @@
   // Expect the muter to stay muted.
   // Test during 2 seconds.
   for (int time = 0; time < 2000; time += frame_time_ms_) {
-    EXPECT_TRUE(media_opt_.video_muted());
+    EXPECT_TRUE(media_opt_.video_suspended());
     ASSERT_NO_FATAL_FAILURE(AddFrameAndAdvanceTime(target_bitrate_kbps, true));
   }
 
@@ -104,7 +104,7 @@
   // Expect the muter to disengage immediately.
   // Test during 2 seconds.
   for (int time = 0; time < 2000; time += frame_time_ms_) {
-    EXPECT_FALSE(media_opt_.video_muted());
+    EXPECT_FALSE(media_opt_.video_suspended());
     ASSERT_NO_FATAL_FAILURE(
         AddFrameAndAdvanceTime((kThresholdBps + kWindowBps) / 1000, false));
   }
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl.cc b/webrtc/modules/video_coding/main/source/video_coding_impl.cc
index 9524984..8282edc 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl.cc
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl.cc
@@ -197,16 +197,12 @@
     return sender_->StopDebugRecording();
   }
 
-  virtual void EnableAutoMuting() {
-    return sender_->EnableAutoMuting();
+  virtual void SuspendBelowMinBitrate() {
+    return sender_->SuspendBelowMinBitrate();
   }
 
-  virtual void DisableAutoMuting() {
-    return sender_->DisableAutoMuting();
-  }
-
-  virtual bool VideoMuted() const {
-    return sender_->VideoMuted();
+  virtual bool VideoSuspended() const {
+    return sender_->VideoSuspended();
   }
 
   virtual int32_t InitializeReceiver() OVERRIDE {
diff --git a/webrtc/modules/video_coding/main/source/video_coding_impl.h b/webrtc/modules/video_coding/main/source/video_coding_impl.h
index f9a7973..c1d02d9 100644
--- a/webrtc/modules/video_coding/main/source/video_coding_impl.h
+++ b/webrtc/modules/video_coding/main/source/video_coding_impl.h
@@ -95,9 +95,8 @@
   int StartDebugRecording(const char* file_name_utf8);
   int StopDebugRecording();
 
-  void EnableAutoMuting();
-  void DisableAutoMuting();
-  bool VideoMuted() const;
+  void SuspendBelowMinBitrate();
+  bool VideoSuspended() const;
 
   int32_t TimeUntilNextProcess();
   int32_t Process();
diff --git a/webrtc/modules/video_coding/main/source/video_sender.cc b/webrtc/modules/video_coding/main/source/video_sender.cc
index 4cbcc89..5a9a563 100644
--- a/webrtc/modules/video_coding/main/source/video_sender.cc
+++ b/webrtc/modules/video_coding/main/source/video_sender.cc
@@ -422,11 +422,11 @@
   return VCM_OK;
 }
 
-void VideoSender::EnableAutoMuting() {
+void VideoSender::SuspendBelowMinBitrate() {
   CriticalSectionScoped cs(_sendCritSect);
   VideoCodec current_send_codec;
   if (SendCodec(&current_send_codec) != 0) {
-    assert(false);  // Must set a send codec before enabling auto-mute.
+    assert(false);  // Must set a send codec before SuspendBelowMinBitrate.
     return;
   }
   int threshold_bps;
@@ -438,17 +438,12 @@
   // Set the hysteresis window to be at 10% of the threshold, but at least
   // 10 kbps.
   int window_bps = std::max(threshold_bps / 10, 10000);
-  _mediaOpt.EnableAutoMuting(threshold_bps, window_bps);
+  _mediaOpt.SuspendBelowMinBitrate(threshold_bps, window_bps);
 }
 
-void VideoSender::DisableAutoMuting() {
+bool VideoSender::VideoSuspended() const {
   CriticalSectionScoped cs(_sendCritSect);
-  _mediaOpt.DisableAutoMuting();
-}
-
-bool VideoSender::VideoMuted() const {
-  CriticalSectionScoped cs(_sendCritSect);
-  return _mediaOpt.video_muted();
+  return _mediaOpt.video_suspended();
 }
 
 }  // namespace vcm
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index 5ae1e94..e1a60ed 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -198,8 +198,8 @@
   image_process_->RegisterPreEncodeCallback(channel_,
                                             config_.pre_encode_callback);
 
-  if (config.auto_mute) {
-    codec_->EnableAutoMuting(channel_);
+  if (config.suspend_below_min_bitrate) {
+    codec_->SuspendBelowMinBitrate(channel_);
   }
 }
 
diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc
index 2cb94ab..7e12713 100644
--- a/webrtc/video/video_send_stream_tests.cc
+++ b/webrtc/video/video_send_stream_tests.cc
@@ -550,13 +550,13 @@
 // The test will go through a number of phases.
 // 1. Start sending packets.
 // 2. As soon as the RTP stream has been detected, signal a low REMB value to
-//    activate the auto muter.
-// 3. Wait until |kMuteTimeFrames| have been captured without seeing any RTP
+//    suspend the stream.
+// 3. Wait until |kSuspendTimeFrames| have been captured without seeing any RTP
 //    packets.
-// 4. Signal a high REMB and the wait for the RTP stream to start again.
+// 4. Signal a high REMB and then wait for the RTP stream to start again.
 //    When the stream is detected again, the test ends.
-TEST_F(VideoSendStreamTest, AutoMute) {
-  static const int kMuteTimeFrames = 60;  // Mute for 2 seconds @ 30 fps.
+TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) {
+  static const int kSuspendTimeFrames = 60;  // Suspend for 2 seconds @ 30 fps.
 
   class RembObserver : public test::RtpRtcpObserver, public I420FrameCallback {
    public:
@@ -564,10 +564,10 @@
         : RtpRtcpObserver(30 * 1000),  // Timeout after 30 seconds.
           transport_adapter_(&transport_),
           clock_(Clock::GetRealTimeClock()),
-          test_state_(kBeforeMute),
+          test_state_(kBeforeSuspend),
           rtp_count_(0),
           last_sequence_number_(0),
-          mute_frame_count_(0),
+          suspended_frame_count_(0),
           low_remb_bps_(0),
           high_remb_bps_(0),
           crit_sect_(CriticalSectionWrapper::CreateCriticalSection()) {}
@@ -591,12 +591,12 @@
       EXPECT_TRUE(parser_->Parse(packet, static_cast<int>(length), &header));
       last_sequence_number_ = header.sequenceNumber;
 
-      if (test_state_ == kBeforeMute) {
-        // The stream has started. Try to mute it.
+      if (test_state_ == kBeforeSuspend) {
+        // The stream has started. Try to suspend it.
         SendRtcpFeedback(low_remb_bps_);
-        test_state_ = kDuringMute;
-      } else if (test_state_ == kDuringMute) {
-        mute_frame_count_ = 0;
+        test_state_ = kDuringSuspend;
+      } else if (test_state_ == kDuringSuspend) {
+        suspended_frame_count_ = 0;
       } else if (test_state_ == kWaitingForPacket) {
         observation_complete_->Set();
       }
@@ -607,7 +607,8 @@
     // This method implements the I420FrameCallback.
     void FrameCallback(I420VideoFrame* video_frame) OVERRIDE {
       CriticalSectionScoped lock(crit_sect_.get());
-      if (test_state_ == kDuringMute && ++mute_frame_count_ > kMuteTimeFrames) {
+      if (test_state_ == kDuringSuspend &&
+          ++suspended_frame_count_ > kSuspendTimeFrames) {
         SendRtcpFeedback(high_remb_bps_);
         test_state_ = kWaitingForPacket;
       }
@@ -621,10 +622,10 @@
 
    private:
     enum TestState {
-      kBeforeMute,
-      kDuringMute,
+      kBeforeSuspend,
+      kDuringSuspend,
       kWaitingForPacket,
-      kAfterMute
+      kAfterSuspend
     };
 
     virtual void SendRtcpFeedback(int remb_value) {
@@ -649,7 +650,7 @@
     TestState test_state_;
     int rtp_count_;
     int last_sequence_number_;
-    int mute_frame_count_;
+    int suspended_frame_count_;
     int low_remb_bps_;
     int high_remb_bps_;
     scoped_ptr<CriticalSectionWrapper> crit_sect_;
@@ -662,7 +663,7 @@
   VideoSendStream::Config send_config = GetSendTestConfig(call.get());
   send_config.rtp.nack.rtp_history_ms = 1000;
   send_config.pre_encode_callback = &observer;
-  send_config.auto_mute = true;
+  send_config.suspend_below_min_bitrate = true;
   unsigned int min_bitrate_bps =
       send_config.codec.simulcastStream[0].minBitrate * 1000;
   observer.set_low_remb_bps(min_bitrate_bps - 10000);
diff --git a/webrtc/video_engine/include/vie_codec.h b/webrtc/video_engine/include/vie_codec.h
index f470438..d5b5602 100644
--- a/webrtc/video_engine/include/vie_codec.h
+++ b/webrtc/video_engine/include/vie_codec.h
@@ -36,10 +36,10 @@
                             const unsigned int framerate,
                             const unsigned int bitrate) = 0;
 
-  // This method is called whenever the state of the AutoMuter changes, i.e.,
-  // when |is_muted| toggles.
+  // This method is called whenever the state of the SuspendBelowMinBitrate
+  // changes, i.e., when |is_suspended| toggles.
   // TODO(hlundin): Remove the default implementation when possible.
-  virtual void VideoAutoMuted(int video_channel, bool is_muted) {}
+  virtual void VideoSuspended(int video_channel, bool is_suspended) {}
 
  protected:
   virtual ~ViEEncoderObserver() {}
@@ -193,12 +193,12 @@
   // Disables recording of debugging information.
   virtual int StopDebugRecording(int video_channel) = 0;
 
-  // Enables AutoMuter to turn off video when the rate drops below
+  // Lets the sender suspend video when the rate drops below
   // |threshold_bps|, and turns back on when the rate goes back up above
   // |threshold_bps| + |window_bps|.
   // This is under development; not tested.
   // TODO(hlundin): Remove the default implementation when possible.
-  virtual void EnableAutoMuting(int video_channel) {}
+  virtual void SuspendBelowMinBitrate(int video_channel) {}
 
  protected:
   ViECodec() {}
diff --git a/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc b/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc
index 3fa2bc4..b3ca926 100644
--- a/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc
+++ b/webrtc/video_engine/test/auto_test/source/vie_autotest_codec.cc
@@ -44,7 +44,7 @@
   unsigned int last_outgoing_bitrate_;
   unsigned int last_incoming_framerate_;
   unsigned int last_incoming_bitrate_;
-  unsigned int video_auto_muted_called_;
+  unsigned int video_suspended_called_;
 
   webrtc::VideoCodec incoming_codec_;
 
@@ -60,7 +60,7 @@
         last_outgoing_bitrate_(0),
         last_incoming_framerate_(0),
         last_incoming_bitrate_(0),
-        video_auto_muted_called_(0) {
+        video_suspended_called_(0) {
     memset(&incoming_codec_, 0, sizeof(incoming_codec_));
   }
   virtual void IncomingCodecChanged(const int video_channel,
@@ -100,8 +100,8 @@
     last_outgoing_bitrate_ += bitrate;
   }
 
-  virtual void VideoAutoMuted(int video_channel, bool is_muted) {
-    video_auto_muted_called_++;
+  virtual void VideoSuspended(int video_channel, bool is_suspended) OVERRIDE {
+    video_suspended_called_++;
   }
 
   virtual void RequestNewKeyFrame(const int video_channel) {
diff --git a/webrtc/video_engine/test/auto_test/source/vie_autotest_custom_call.cc b/webrtc/video_engine/test/auto_test/source/vie_autotest_custom_call.cc
index 8d7613d..5d3fdc4 100644
--- a/webrtc/video_engine/test/auto_test/source/vie_autotest_custom_call.cc
+++ b/webrtc/video_engine/test/auto_test/source/vie_autotest_custom_call.cc
@@ -73,8 +73,8 @@
               << " BR: " << bitrate << std::endl;
   }
 
-  virtual void VideoAutoMuted(int video_channel, bool is_muted) {
-    std::cout << "VideoAutoMuted: " << is_muted << std::endl;
+  virtual void VideoSuspended(int video_channel, bool is_suspended) OVERRIDE {
+    std::cout << "VideoSuspended: " << is_suspended << std::endl;
   }
 };
 
diff --git a/webrtc/video_engine/vie_codec_impl.cc b/webrtc/video_engine/vie_codec_impl.cc
index 4d927b5..94e4d7c 100644
--- a/webrtc/video_engine/vie_codec_impl.cc
+++ b/webrtc/video_engine/vie_codec_impl.cc
@@ -715,7 +715,7 @@
   return vie_encoder->StopDebugRecording();
 }
 
-void ViECodecImpl::EnableAutoMuting(int video_channel) {
+void ViECodecImpl::SuspendBelowMinBitrate(int video_channel) {
   ViEChannelManagerScoped cs(*(shared_data_->channel_manager()));
   ViEEncoder* vie_encoder = cs.Encoder(video_channel);
   if (!vie_encoder) {
@@ -724,7 +724,7 @@
                  "%s: No encoder %d", __FUNCTION__, video_channel);
     return;
   }
-  return vie_encoder->EnableAutoMuting();
+  return vie_encoder->SuspendBelowMinBitrate();
 }
 
 bool ViECodecImpl::CodecValid(const VideoCodec& video_codec) {
diff --git a/webrtc/video_engine/vie_codec_impl.h b/webrtc/video_engine/vie_codec_impl.h
index 8bcac41..372ffc9 100644
--- a/webrtc/video_engine/vie_codec_impl.h
+++ b/webrtc/video_engine/vie_codec_impl.h
@@ -70,7 +70,7 @@
   virtual int StartDebugRecording(int video_channel,
                                   const char* file_name_utf8);
   virtual int StopDebugRecording(int video_channel);
-  virtual void EnableAutoMuting(int video_channel);
+  virtual void SuspendBelowMinBitrate(int video_channel);
 
  protected:
   explicit ViECodecImpl(ViESharedData* shared_data);
diff --git a/webrtc/video_engine/vie_encoder.cc b/webrtc/video_engine/vie_encoder.cc
index 889842e..65a9e8b 100644
--- a/webrtc/video_engine/vie_encoder.cc
+++ b/webrtc/video_engine/vie_encoder.cc
@@ -163,7 +163,7 @@
     has_received_rpsi_(false),
     picture_id_rpsi_(0),
     qm_callback_(NULL),
-    video_auto_muted_(false),
+    video_suspended_(false),
     pre_encode_callback_(NULL) {
   WEBRTC_TRACE(webrtc::kTraceMemory, webrtc::kTraceVideo,
                ViEId(engine_id, channel_id),
@@ -1050,7 +1050,7 @@
                __FUNCTION__, bitrate_bps, fraction_lost, round_trip_time_ms);
 
   vcm_.SetChannelParameters(bitrate_bps, fraction_lost, round_trip_time_ms);
-  bool video_is_muted = vcm_.VideoMuted();
+  bool video_is_suspended = vcm_.VideoSuspended();
   int bitrate_kbps = bitrate_bps / 1000;
   VideoCodec send_codec;
   if (vcm_.SendCodec(&send_codec) != 0) {
@@ -1087,10 +1087,10 @@
       pad_up_to_bitrate_kbps += stream_configs[i].targetBitrate;
     }
   }
-  if (video_is_muted || send_codec.numberOfSimulcastStreams > 1) {
+  if (video_is_suspended || send_codec.numberOfSimulcastStreams > 1) {
     pad_up_to_bitrate_kbps = std::min(bitrate_kbps, pad_up_to_bitrate_kbps);
   } else {
-    // Disable padding if only sending one stream and video isn't muted.
+    // Disable padding if only sending one stream and video isn't suspended.
     pad_up_to_bitrate_kbps = 0;
   }
 
@@ -1107,15 +1107,15 @@
                                max_padding_bitrate_kbps,
                                pad_up_to_bitrate_kbps);
   default_rtp_rtcp_->SetTargetSendBitrate(stream_bitrates);
-  if (video_is_muted != video_auto_muted_) {
+  if (video_is_suspended != video_suspended_) {
     // State changed now. Send callback to inform about that.
-    video_auto_muted_ = video_is_muted;
+    video_suspended_ = video_is_suspended;
     if (codec_observer_) {
       WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideo,
                    ViEId(engine_id_, channel_id_),
-                   "%s: video_auto_muted_ changed to %i",
-                   __FUNCTION__, video_auto_muted_);
-      codec_observer_->VideoAutoMuted(channel_id_, video_auto_muted_);
+                   "%s: video_suspended_ changed to %i",
+                   __FUNCTION__, video_suspended_);
+      codec_observer_->VideoSuspended(channel_id_, video_suspended_);
     }
   }
 }
@@ -1159,8 +1159,8 @@
   return vcm_.StopDebugRecording();
 }
 
-void ViEEncoder::EnableAutoMuting() {
-  vcm_.EnableAutoMuting();
+void ViEEncoder::SuspendBelowMinBitrate() {
+  vcm_.SuspendBelowMinBitrate();
   bitrate_controller_->EnforceMinBitrate(false);
 }
 
diff --git a/webrtc/video_engine/vie_encoder.h b/webrtc/video_engine/vie_encoder.h
index f80699c..73f84af 100644
--- a/webrtc/video_engine/vie_encoder.h
+++ b/webrtc/video_engine/vie_encoder.h
@@ -163,10 +163,10 @@
   // Disables recording of debugging information.
   virtual int StopDebugRecording();
 
-  // Enables AutoMuter to turn off video when the rate drops below
+  // Lets the sender suspend video when the rate drops below
   // |threshold_bps|, and turns back on when the rate goes back up above
   // |threshold_bps| + |window_bps|.
-  virtual void EnableAutoMuting();
+  virtual void SuspendBelowMinBitrate();
 
   // New-style callback, used by VideoSendStream.
   void RegisterPreEncodeCallback(I420FrameCallback* pre_encode_callback);
@@ -226,7 +226,7 @@
 
   // Quality modes callback
   QMVideoSettingsCallback* qm_callback_;
-  bool video_auto_muted_;
+  bool video_suspended_;
   I420FrameCallback* pre_encode_callback_;
 };
 
diff --git a/webrtc/video_send_stream.h b/webrtc/video_send_stream.h
index 2df282b..ee5826d 100644
--- a/webrtc/video_send_stream.h
+++ b/webrtc/video_send_stream.h
@@ -79,7 +79,7 @@
           target_delay_ms(0),
           pacing(false),
           stats_callback(NULL),
-          auto_mute(false) {}
+          suspend_below_min_bitrate(false) {}
     VideoCodec codec;
 
     static const size_t kDefaultMaxPacketSize = 1500 - 40;  // TCP over IPv4.
@@ -142,10 +142,10 @@
     // Callback for periodically receiving send stats.
     StatsCallback* stats_callback;
 
-    // True if video should be muted when video goes under the minimum video
-    // bitrate. Unless muted, video will be sent at a bitrate higher than
-    // estimated available.
-    bool auto_mute;
+    // True if the stream should be suspended when the available bitrate fall
+    // below the minimum configured bitrate. If this variable is false, the
+    // stream may send at a rate higher than the estimated available bitrate.
+    bool suspend_below_min_bitrate;
   };
 
   // Gets interface used to insert captured frames. Valid as long as the
