diff --git a/webrtc/call/bitrate_allocator.h b/webrtc/call/bitrate_allocator.h
index 3bafcd7..bf26a6a 100644
--- a/webrtc/call/bitrate_allocator.h
+++ b/webrtc/call/bitrate_allocator.h
@@ -112,7 +112,7 @@
 
   rtc::CriticalSection crit_sect_;
   // Stored in a list to keep track of the insertion order.
-  ObserverConfigList bitrate_observer_configs_;
+  ObserverConfigList bitrate_observer_configs_ GUARDED_BY(crit_sect_);
   bool enforce_min_bitrate_ GUARDED_BY(crit_sect_);
   uint32_t last_bitrate_bps_ GUARDED_BY(crit_sect_);
   uint32_t last_non_zero_bitrate_bps_ GUARDED_BY(crit_sect_);
diff --git a/webrtc/video/encoder_state_feedback_unittest.cc b/webrtc/video/encoder_state_feedback_unittest.cc
index 7e6ec71..5351e15 100644
--- a/webrtc/video/encoder_state_feedback_unittest.cc
+++ b/webrtc/video/encoder_state_feedback_unittest.cc
@@ -22,7 +22,7 @@
 class MockVieEncoder : public ViEEncoder {
  public:
   explicit MockVieEncoder(ProcessThread* process_thread)
-      : ViEEncoder(1, process_thread, nullptr, nullptr) {}
+      : ViEEncoder(1, process_thread, nullptr, nullptr, nullptr) {}
   ~MockVieEncoder() {}
 
   MOCK_METHOD1(OnReceivedIntraFrameRequest, void(size_t));
diff --git a/webrtc/video/video_send_stream.cc b/webrtc/video/video_send_stream.cc
index 9555270..31ba5ee 100644
--- a/webrtc/video/video_send_stream.cc
+++ b/webrtc/video/video_send_stream.cc
@@ -379,7 +379,8 @@
       vie_encoder_(num_cpu_cores,
                    module_process_thread_,
                    &stats_proxy_,
-                   &overuse_detector_),
+                   &overuse_detector_,
+                   this),
       encoder_feedback_(Clock::GetRealTimeClock(),
                         config.rtp.ssrcs,
                         &vie_encoder_),
@@ -554,7 +555,7 @@
       payload_router_.SetSendStreams(encoder_settings->streams);
       vie_encoder_.SetEncoder(encoder_settings->video_codec,
                               encoder_settings->min_transmit_bitrate_bps,
-                              payload_router_.MaxPayloadLength(), this);
+                              payload_router_.MaxPayloadLength());
 
       // vie_encoder_.SetEncoder must be called before this.
       if (config_.suspend_below_min_bitrate)
diff --git a/webrtc/video/vie_encoder.cc b/webrtc/video/vie_encoder.cc
index 2871c40..d10e8fc 100644
--- a/webrtc/video/vie_encoder.cc
+++ b/webrtc/video/vie_encoder.cc
@@ -33,8 +33,10 @@
 ViEEncoder::ViEEncoder(uint32_t number_of_cores,
                        ProcessThread* module_process_thread,
                        SendStatisticsProxy* stats_proxy,
-                       OveruseFrameDetector* overuse_detector)
+                       OveruseFrameDetector* overuse_detector,
+                       EncodedImageCallback* sink)
     : number_of_cores_(number_of_cores),
+      sink_(sink),
       vp_(VideoProcessing::Create()),
       video_sender_(Clock::GetRealTimeClock(), this, this, this),
       stats_proxy_(stats_proxy),
@@ -84,10 +86,10 @@
   video_sender_.RegisterExternalEncoder(nullptr, pl_type, false);
   return 0;
 }
+
 void ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec,
                             int min_transmit_bitrate_bps,
-                            size_t max_data_payload_length,
-                            EncodedImageCallback* sink) {
+                            size_t max_data_payload_length) {
   // Setting target width and height for VPM.
   RTC_CHECK_EQ(VPM_OK,
                vp_->SetTargetResolution(video_codec.width, video_codec.height,
@@ -100,10 +102,6 @@
     encoder_config_ = video_codec;
     min_transmit_bitrate_bps_ = min_transmit_bitrate_bps;
   }
-  {
-    rtc::CritScope lock(&sink_cs_);
-    sink_ = sink;
-  }
 
   bool success = video_sender_.RegisterSendCodec(
                      &video_codec, number_of_cores_,
@@ -294,11 +292,8 @@
     stats_proxy_->OnSendEncodedImage(encoded_image, codec_specific_info);
   }
 
-  int success = 0;
-  {
-    rtc::CritScope lock(&sink_cs_);
-    success = sink_->Encoded(encoded_image, codec_specific_info, fragmentation);
-  }
+  int success =
+      sink_->Encoded(encoded_image, codec_specific_info, fragmentation);
 
   overuse_detector_->FrameSent(encoded_image._timeStamp);
   return success;
diff --git a/webrtc/video/vie_encoder.h b/webrtc/video/vie_encoder.h
index 556ed44..2129623 100644
--- a/webrtc/video/vie_encoder.h
+++ b/webrtc/video/vie_encoder.h
@@ -58,7 +58,9 @@
   ViEEncoder(uint32_t number_of_cores,
              ProcessThread* module_process_thread,
              SendStatisticsProxy* stats_proxy,
-             OveruseFrameDetector* overuse_detector);
+             OveruseFrameDetector* overuse_detector,
+             EncodedImageCallback* sink);
+
   ~ViEEncoder();
 
   vcm::VideoSender* video_sender();
@@ -77,8 +79,7 @@
   int32_t DeRegisterExternalEncoder(uint8_t pl_type);
   void SetEncoder(const VideoCodec& video_codec,
                   int min_transmit_bitrate_bps,
-                  size_t max_data_payload_length,
-                  EncodedImageCallback* sink);
+                  size_t max_data_payload_length);
 
   void EncodeVideoFrame(const VideoFrame& video_frame);
   void SendKeyFrame();
@@ -119,6 +120,7 @@
   void TraceFrameDropEnd() EXCLUSIVE_LOCKS_REQUIRED(data_cs_);
 
   const uint32_t number_of_cores_;
+  EncodedImageCallback* const sink_;
 
   const std::unique_ptr<VideoProcessing> vp_;
   vcm::VideoSender video_sender_;
@@ -138,9 +140,6 @@
   bool encoder_paused_ GUARDED_BY(data_cs_);
   bool encoder_paused_and_dropped_frame_ GUARDED_BY(data_cs_);
 
-  rtc::CriticalSection sink_cs_;
-  EncodedImageCallback* sink_ GUARDED_BY(sink_cs_);
-
   ProcessThread* module_process_thread_;
 
   bool has_received_sli_ GUARDED_BY(data_cs_);
