diff --git a/media/base/mediaengine.cc b/media/base/mediaengine.cc
index 94ebcad..d5198fe 100644
--- a/media/base/mediaengine.cc
+++ b/media/base/mediaengine.cc
@@ -119,56 +119,6 @@
   return true;
 }
 
-rtc::scoped_refptr<webrtc::AudioState> CompositeMediaEngine::GetAudioState()
-    const {
-  return voice().GetAudioState();
-}
-
-VoiceMediaChannel* CompositeMediaEngine::CreateChannel(
-    webrtc::Call* call,
-    const MediaConfig& config,
-    const AudioOptions& options,
-    const webrtc::CryptoOptions& crypto_options) {
-  return voice().CreateMediaChannel(call, config, options, crypto_options);
-}
-
-VideoMediaChannel* CompositeMediaEngine::CreateVideoChannel(
-    webrtc::Call* call,
-    const MediaConfig& config,
-    const VideoOptions& options,
-    const webrtc::CryptoOptions& crypto_options) {
-  return video().CreateMediaChannel(call, config, options, crypto_options);
-}
-
-const std::vector<AudioCodec>& CompositeMediaEngine::audio_send_codecs() {
-  return voice().send_codecs();
-}
-
-const std::vector<AudioCodec>& CompositeMediaEngine::audio_recv_codecs() {
-  return voice().recv_codecs();
-}
-
-RtpCapabilities CompositeMediaEngine::GetAudioCapabilities() {
-  return voice().GetCapabilities();
-}
-
-std::vector<VideoCodec> CompositeMediaEngine::video_codecs() {
-  return video().codecs();
-}
-
-RtpCapabilities CompositeMediaEngine::GetVideoCapabilities() {
-  return video().GetCapabilities();
-}
-
-bool CompositeMediaEngine::StartAecDump(rtc::PlatformFile file,
-                                        int64_t max_size_bytes) {
-  return voice().StartAecDump(file, max_size_bytes);
-}
-
-void CompositeMediaEngine::StopAecDump() {
-  voice().StopAecDump();
-}
-
 VoiceEngineInterface& CompositeMediaEngine::voice() {
   return *voice_engine_.get();
 }
diff --git a/media/base/mediaengine.h b/media/base/mediaengine.h
index 1ddb36c..01300d4 100644
--- a/media/base/mediaengine.h
+++ b/media/base/mediaengine.h
@@ -111,37 +111,10 @@
   // Initialization
   // Starts the engine.
   virtual bool Init() = 0;
-  // TODO(solenberg): Remove once VoE API refactoring is done.
-  virtual rtc::scoped_refptr<webrtc::AudioState> GetAudioState() const = 0;
-
-  // MediaChannel creation
-  // Creates a voice media channel. Returns NULL on failure.
-  virtual VoiceMediaChannel* CreateChannel(
-      webrtc::Call* call,
-      const MediaConfig& config,
-      const AudioOptions& options,
-      const webrtc::CryptoOptions& crypto_options) = 0;
-  // Creates a video media channel, paired with the specified voice channel.
-  // Returns NULL on failure.
-  virtual VideoMediaChannel* CreateVideoChannel(
-      webrtc::Call* call,
-      const MediaConfig& config,
-      const VideoOptions& options,
-      const webrtc::CryptoOptions& crypto_options) = 0;
-
-  virtual const std::vector<AudioCodec>& audio_send_codecs() = 0;
-  virtual const std::vector<AudioCodec>& audio_recv_codecs() = 0;
-  virtual RtpCapabilities GetAudioCapabilities() = 0;
-  virtual std::vector<VideoCodec> video_codecs() = 0;
-  virtual RtpCapabilities GetVideoCapabilities() = 0;
-
-  // Starts AEC dump using existing file, a maximum file size in bytes can be
-  // specified. Logging is stopped just before the size limit is exceeded.
-  // If max_size_bytes is set to a value <= 0, no limit will be used.
-  virtual bool StartAecDump(rtc::PlatformFile file, int64_t max_size_bytes) = 0;
-
-  // Stops recording AEC dump.
-  virtual void StopAecDump() = 0;
+  virtual VoiceEngineInterface& voice() = 0;
+  virtual VideoEngineInterface& video() = 0;
+  virtual const VoiceEngineInterface& voice() const = 0;
+  virtual const VideoEngineInterface& video() const = 0;
 };
 
 // CompositeMediaEngine constructs a MediaEngine from separate
@@ -153,34 +126,10 @@
   ~CompositeMediaEngine() override;
   bool Init() override;
 
-  rtc::scoped_refptr<webrtc::AudioState> GetAudioState() const override;
-  VoiceMediaChannel* CreateChannel(
-      webrtc::Call* call,
-      const MediaConfig& config,
-      const AudioOptions& options,
-      const webrtc::CryptoOptions& crypto_options) override;
-
-  VideoMediaChannel* CreateVideoChannel(
-      webrtc::Call* call,
-      const MediaConfig& config,
-      const VideoOptions& options,
-      const webrtc::CryptoOptions& crypto_options) override;
-
-  const std::vector<AudioCodec>& audio_send_codecs() override;
-  const std::vector<AudioCodec>& audio_recv_codecs() override;
-  RtpCapabilities GetAudioCapabilities() override;
-
-  std::vector<VideoCodec> video_codecs() override;
-  RtpCapabilities GetVideoCapabilities() override;
-
-  bool StartAecDump(rtc::PlatformFile file, int64_t max_size_bytes) override;
-  void StopAecDump() override;
-
- protected:
-  VoiceEngineInterface& voice();
-  VideoEngineInterface& video();
-  const VoiceEngineInterface& voice() const;
-  const VideoEngineInterface& video() const;
+  VoiceEngineInterface& voice() override;
+  VideoEngineInterface& video() override;
+  const VoiceEngineInterface& voice() const override;
+  const VideoEngineInterface& video() const override;
 
  private:
   std::unique_ptr<VoiceEngineInterface> voice_engine_;
diff --git a/pc/channelmanager.cc b/pc/channelmanager.cc
index 31920d9..eda5a2d 100644
--- a/pc/channelmanager.cc
+++ b/pc/channelmanager.cc
@@ -66,7 +66,7 @@
   if (!media_engine_) {
     return;
   }
-  *codecs = media_engine_->audio_send_codecs();
+  *codecs = media_engine_->voice().send_codecs();
 }
 
 void ChannelManager::GetSupportedAudioReceiveCodecs(
@@ -74,7 +74,7 @@
   if (!media_engine_) {
     return;
   }
-  *codecs = media_engine_->audio_recv_codecs();
+  *codecs = media_engine_->voice().recv_codecs();
 }
 
 void ChannelManager::GetSupportedAudioRtpHeaderExtensions(
@@ -82,7 +82,7 @@
   if (!media_engine_) {
     return;
   }
-  *ext = media_engine_->GetAudioCapabilities().header_extensions;
+  *ext = media_engine_->voice().GetCapabilities().header_extensions;
 }
 
 void ChannelManager::GetSupportedVideoCodecs(
@@ -92,7 +92,7 @@
   }
   codecs->clear();
 
-  std::vector<VideoCodec> video_codecs = media_engine_->video_codecs();
+  std::vector<VideoCodec> video_codecs = media_engine_->video().codecs();
   for (const auto& video_codec : video_codecs) {
     if (!enable_rtx_ &&
         absl::EqualsIgnoreCase(kRtxCodecName, video_codec.name)) {
@@ -107,7 +107,7 @@
   if (!media_engine_) {
     return;
   }
-  *ext = media_engine_->GetVideoCapabilities().header_extensions;
+  *ext = media_engine_->video().GetCapabilities().header_extensions;
 }
 
 void ChannelManager::GetSupportedDataCodecs(
@@ -177,8 +177,8 @@
     return nullptr;
   }
 
-  VoiceMediaChannel* media_channel =
-      media_engine_->CreateChannel(call, media_config, options, crypto_options);
+  VoiceMediaChannel* media_channel = media_engine_->voice().CreateMediaChannel(
+      call, media_config, options, crypto_options);
   if (!media_channel) {
     return nullptr;
   }
@@ -244,7 +244,7 @@
     return nullptr;
   }
 
-  VideoMediaChannel* media_channel = media_engine_->CreateVideoChannel(
+  VideoMediaChannel* media_channel = media_engine_->video().CreateMediaChannel(
       call, media_config, options, crypto_options);
   if (!media_channel) {
     return nullptr;
@@ -349,13 +349,13 @@
 bool ChannelManager::StartAecDump(rtc::PlatformFile file,
                                   int64_t max_size_bytes) {
   return worker_thread_->Invoke<bool>(RTC_FROM_HERE, [&] {
-    return media_engine_->StartAecDump(file, max_size_bytes);
+    return media_engine_->voice().StartAecDump(file, max_size_bytes);
   });
 }
 
 void ChannelManager::StopAecDump() {
   worker_thread_->Invoke<void>(RTC_FROM_HERE,
-                               [&] { media_engine_->StopAecDump(); });
+                               [&] { media_engine_->voice().StopAecDump(); });
 }
 
 }  // namespace cricket
diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index 982e522..3b9b9c8 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -1717,7 +1717,7 @@
         break;
     }
   }
-  // If there is no |internal_sender| then |selector| is either null or does not
+  // If there is no |internal_sender| then |selector| is either null or does not
   // belong to the PeerConnection (in Plan B, senders can be removed from the
   // PeerConnection). This means that "all the stats objects representing the
   // selector" is an empty set. Invoking GetStatsReport() with a null selector
@@ -1745,7 +1745,7 @@
         break;
     }
   }
-  // If there is no |internal_receiver| then |selector| is either null or does
+  // If there is no |internal_receiver| then |selector| is either null or does
   // not belong to the PeerConnection (in Plan B, receivers can be removed from
   // the PeerConnection). This means that "all the stats objects representing
   // the selector" is an empty set. Invoking GetStatsReport() with a null
@@ -3254,7 +3254,7 @@
     return;
   }
   auto audio_state =
-      factory_->channel_manager()->media_engine()->GetAudioState();
+      factory_->channel_manager()->media_engine()->voice().GetAudioState();
   audio_state->SetPlayout(playout);
 }
 
@@ -3266,7 +3266,7 @@
     return;
   }
   auto audio_state =
-      factory_->channel_manager()->media_engine()->GetAudioState();
+      factory_->channel_manager()->media_engine()->voice().GetAudioState();
   audio_state->SetRecording(recording);
 }
 
diff --git a/pc/peerconnection_media_unittest.cc b/pc/peerconnection_media_unittest.cc
index dd39141..6af0c98 100644
--- a/pc/peerconnection_media_unittest.cc
+++ b/pc/peerconnection_media_unittest.cc
@@ -704,7 +704,7 @@
   const cricket::AudioCodec kComfortNoiseCodec8k(102, "CN", 8000, 0, 1);
   const cricket::AudioCodec kComfortNoiseCodec16k(103, "CN", 16000, 0, 1);
 
-  auto codecs = media_engine->audio_send_codecs();
+  auto codecs = media_engine->voice().send_codecs();
   codecs.push_back(kComfortNoiseCodec8k);
   codecs.push_back(kComfortNoiseCodec16k);
   media_engine->SetAudioCodecs(codecs);
diff --git a/pc/peerconnectionfactory.cc b/pc/peerconnectionfactory.cc
index e039d4c..37c6a0b 100644
--- a/pc/peerconnectionfactory.cc
+++ b/pc/peerconnectionfactory.cc
@@ -470,7 +470,8 @@
   if (!channel_manager_->media_engine() || !call_factory_) {
     return nullptr;
   }
-  call_config.audio_state = channel_manager_->media_engine()->GetAudioState();
+  call_config.audio_state =
+      channel_manager_->media_engine()->voice().GetAudioState();
   call_config.bitrate_config.min_bitrate_bps = kMinBandwidthBps;
   call_config.bitrate_config.start_bitrate_bps = kStartBandwidthBps;
   call_config.bitrate_config.max_bitrate_bps = kMaxBandwidthBps;
