diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index da5f594..f1ebaf39 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -587,14 +587,15 @@
   if (options.experimental_ns) {
     experimental_ns_ = options.experimental_ns;
   }
-  if (experimental_ns_) {
-    RTC_LOG(LS_INFO) << "Experimental ns is enabled? " << *experimental_ns_;
-    config.Set<webrtc::ExperimentalNs>(
-        new webrtc::ExperimentalNs(*experimental_ns_));
-  }
 
   webrtc::AudioProcessing::Config apm_config = ap->GetConfig();
 
+#if !(defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS))
+  if (experimental_ns_.has_value()) {
+    apm_config.transient_suppression.enabled = experimental_ns_.value();
+  }
+#endif
+
   if (options.echo_cancellation) {
     apm_config.echo_canceller.enabled = *options.echo_cancellation;
     apm_config.echo_canceller.mobile_mode = use_mobile_software_aec;
diff --git a/modules/audio_processing/aec_dump/aec_dump_integration_test.cc b/modules/audio_processing/aec_dump/aec_dump_integration_test.cc
index 6d5b987..1e96901 100644
--- a/modules/audio_processing/aec_dump/aec_dump_integration_test.cc
+++ b/modules/audio_processing/aec_dump/aec_dump_integration_test.cc
@@ -24,9 +24,8 @@
 
 namespace {
 rtc::scoped_refptr<webrtc::AudioProcessing> CreateAudioProcessing() {
-  webrtc::Config config;
   rtc::scoped_refptr<webrtc::AudioProcessing> apm(
-      webrtc::AudioProcessingBuilderForTesting().Create(config));
+      webrtc::AudioProcessingBuilderForTesting().Create());
   RTC_DCHECK(apm);
   return apm;
 }
diff --git a/modules/audio_processing/audio_processing_builder_impl.cc b/modules/audio_processing/audio_processing_builder_impl.cc
index a6b7d5f..40be2a5 100644
--- a/modules/audio_processing/audio_processing_builder_impl.cc
+++ b/modules/audio_processing/audio_processing_builder_impl.cc
@@ -21,25 +21,14 @@
 AudioProcessingBuilder::~AudioProcessingBuilder() = default;
 
 rtc::scoped_refptr<AudioProcessing> AudioProcessingBuilder::Create() {
-  webrtc::Config config;
-  return Create(config);
-}
-
-rtc::scoped_refptr<AudioProcessing> AudioProcessingBuilder::Create(
-    const webrtc::Config& config) {
 #ifdef WEBRTC_EXCLUDE_AUDIO_PROCESSING_MODULE
-
-  // Implementation returning a null pointer for using when the APM is excluded
-  // from the build..
+  // Return a null pointer when the APM is excluded from the build.
   return nullptr;
-
-#else
-
-  // Standard implementation.
+#else  // WEBRTC_EXCLUDE_AUDIO_PROCESSING_MODULE
   return rtc::make_ref_counted<AudioProcessingImpl>(
-      config, std::move(capture_post_processing_),
-      std::move(render_pre_processing_), std::move(echo_control_factory_),
-      std::move(echo_detector_), std::move(capture_analyzer_));
+      std::move(capture_post_processing_), std::move(render_pre_processing_),
+      std::move(echo_control_factory_), std::move(echo_detector_),
+      std::move(capture_analyzer_));
 #endif
 }
 
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index 9b149311..1668539 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -234,9 +234,8 @@
          noise_suppressor_enabled_;
 }
 
-AudioProcessingImpl::AudioProcessingImpl(const webrtc::Config& config)
-    : AudioProcessingImpl(config,
-                          /*capture_post_processor=*/nullptr,
+AudioProcessingImpl::AudioProcessingImpl()
+    : AudioProcessingImpl(/*capture_post_processor=*/nullptr,
                           /*render_pre_processor=*/nullptr,
                           /*echo_control_factory=*/nullptr,
                           /*echo_detector=*/nullptr,
@@ -245,7 +244,6 @@
 int AudioProcessingImpl::instance_count_ = 0;
 
 AudioProcessingImpl::AudioProcessingImpl(
-    const webrtc::Config& config,
     std::unique_ptr<CustomProcessing> capture_post_processor,
     std::unique_ptr<CustomProcessing> render_pre_processor,
     std::unique_ptr<EchoControlFactory> echo_control_factory,
@@ -300,12 +298,6 @@
     submodules_.echo_detector = rtc::make_ref_counted<ResidualEchoDetector>();
   }
 
-#if !(defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS))
-  // TODO(webrtc:5298): Remove once the use of ExperimentalNs has been
-  // deprecated.
-  config_.transient_suppression.enabled = config.Get<ExperimentalNs>().enabled;
-#endif
-
   Initialize();
 }
 
diff --git a/modules/audio_processing/audio_processing_impl.h b/modules/audio_processing/audio_processing_impl.h
index 27abbd4..7c54173 100644
--- a/modules/audio_processing/audio_processing_impl.h
+++ b/modules/audio_processing/audio_processing_impl.h
@@ -55,10 +55,9 @@
  public:
   // Methods forcing APM to run in a single-threaded manner.
   // Acquires both the render and capture locks.
-  explicit AudioProcessingImpl(const webrtc::Config& config);
+  AudioProcessingImpl();
   // AudioProcessingImpl takes ownership of capture post processor.
-  AudioProcessingImpl(const webrtc::Config& config,
-                      std::unique_ptr<CustomProcessing> capture_post_processor,
+  AudioProcessingImpl(std::unique_ptr<CustomProcessing> capture_post_processor,
                       std::unique_ptr<CustomProcessing> render_pre_processor,
                       std::unique_ptr<EchoControlFactory> echo_control_factory,
                       rtc::scoped_refptr<EchoDetector> echo_detector,
diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc
index c68ce41..5354f54 100644
--- a/modules/audio_processing/audio_processing_impl_unittest.cc
+++ b/modules/audio_processing/audio_processing_impl_unittest.cc
@@ -35,8 +35,7 @@
 
 class MockInitialize : public AudioProcessingImpl {
  public:
-  explicit MockInitialize(const webrtc::Config& config)
-      : AudioProcessingImpl(config) {}
+  MockInitialize() : AudioProcessingImpl() {}
 
   MOCK_METHOD(void, InitializeLocked, (), (override));
   void RealInitializeLocked() {
@@ -132,12 +131,11 @@
 }  // namespace
 
 TEST(AudioProcessingImplTest, AudioParameterChangeTriggersInit) {
-  webrtc::Config webrtc_config;
-  MockInitialize mock(webrtc_config);
-  ON_CALL(mock, InitializeLocked())
+  MockInitialize mock;
+  ON_CALL(mock, InitializeLocked)
       .WillByDefault(Invoke(&mock, &MockInitialize::RealInitializeLocked));
 
-  EXPECT_CALL(mock, InitializeLocked()).Times(1);
+  EXPECT_CALL(mock, InitializeLocked).Times(1);
   mock.Initialize();
 
   constexpr size_t kMaxSampleRateHz = 32000;
@@ -146,20 +144,20 @@
   frame.fill(0);
   StreamConfig config(16000, 1, /*has_keyboard=*/false);
   // Call with the default parameters; there should be an init.
-  EXPECT_CALL(mock, InitializeLocked()).Times(0);
+  EXPECT_CALL(mock, InitializeLocked).Times(0);
   EXPECT_NOERR(mock.ProcessStream(frame.data(), config, config, frame.data()));
   EXPECT_NOERR(
       mock.ProcessReverseStream(frame.data(), config, config, frame.data()));
 
   // New sample rate. (Only impacts ProcessStream).
   config = StreamConfig(32000, 1, /*has_keyboard=*/false);
-  EXPECT_CALL(mock, InitializeLocked()).Times(1);
+  EXPECT_CALL(mock, InitializeLocked).Times(1);
   EXPECT_NOERR(mock.ProcessStream(frame.data(), config, config, frame.data()));
 
   // New number of channels.
   // TODO(peah): Investigate why this causes 2 inits.
   config = StreamConfig(32000, 2, /*has_keyboard=*/false);
-  EXPECT_CALL(mock, InitializeLocked()).Times(2);
+  EXPECT_CALL(mock, InitializeLocked).Times(2);
   EXPECT_NOERR(mock.ProcessStream(frame.data(), config, config, frame.data()));
   // ProcessStream sets num_channels_ == num_output_channels.
   EXPECT_NOERR(
@@ -167,7 +165,7 @@
 
   // A new sample rate passed to ProcessReverseStream should cause an init.
   config = StreamConfig(16000, 2, /*has_keyboard=*/false);
-  EXPECT_CALL(mock, InitializeLocked()).Times(1);
+  EXPECT_CALL(mock, InitializeLocked).Times(1);
   EXPECT_NOERR(
       mock.ProcessReverseStream(frame.data(), config, config, frame.data()));
 }
@@ -605,7 +603,7 @@
 // config should be bit-exact with running APM with said submodules disabled.
 // This mainly tests that SetCreateOptionalSubmodulesForTesting has an effect.
 TEST(ApmWithSubmodulesExcludedTest, BitexactWithDisabledModules) {
-  auto apm = rtc::make_ref_counted<AudioProcessingImpl>(webrtc::Config());
+  auto apm = rtc::make_ref_counted<AudioProcessingImpl>();
   ASSERT_EQ(apm->Initialize(), AudioProcessing::kNoError);
 
   ApmSubmoduleCreationOverrides overrides;
@@ -653,7 +651,7 @@
 // Disable transient suppressor creation and run APM in ways that should trigger
 // calls to the transient suppressor API.
 TEST(ApmWithSubmodulesExcludedTest, ReinitializeTransientSuppressor) {
-  auto apm = rtc::make_ref_counted<AudioProcessingImpl>(webrtc::Config());
+  auto apm = rtc::make_ref_counted<AudioProcessingImpl>();
   ASSERT_EQ(apm->Initialize(), kNoErr);
 
   ApmSubmoduleCreationOverrides overrides;
@@ -714,7 +712,7 @@
 // Disable transient suppressor creation and run APM in ways that should trigger
 // calls to the transient suppressor API.
 TEST(ApmWithSubmodulesExcludedTest, ToggleTransientSuppressor) {
-  auto apm = rtc::make_ref_counted<AudioProcessingImpl>(webrtc::Config());
+  auto apm = rtc::make_ref_counted<AudioProcessingImpl>();
   ASSERT_EQ(apm->Initialize(), AudioProcessing::kNoError);
 
   ApmSubmoduleCreationOverrides overrides;
diff --git a/modules/audio_processing/audio_processing_performance_unittest.cc b/modules/audio_processing/audio_processing_performance_unittest.cc
index b79acc7..ed6a238 100644
--- a/modules/audio_processing/audio_processing_performance_unittest.cc
+++ b/modules/audio_processing/audio_processing_performance_unittest.cc
@@ -482,8 +482,7 @@
         break;
       }
       case SettingsType::kDefaultApmDesktop: {
-        Config config;
-        apm_ = AudioProcessingBuilderForTesting().Create(config);
+        apm_ = AudioProcessingBuilderForTesting().Create();
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         break;
@@ -495,15 +494,13 @@
         break;
       }
       case SettingsType::kDefaultApmDesktopWithoutDelayAgnostic: {
-        Config config;
-        apm_ = AudioProcessingBuilderForTesting().Create(config);
+        apm_ = AudioProcessingBuilderForTesting().Create();
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         break;
       }
       case SettingsType::kDefaultApmDesktopWithoutExtendedFilter: {
-        Config config;
-        apm_ = AudioProcessingBuilderForTesting().Create(config);
+        apm_ = AudioProcessingBuilderForTesting().Create();
         ASSERT_TRUE(!!apm_);
         set_default_desktop_apm_runtime_settings(apm_.get());
         break;
diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc
index 5af8aa9..e763b78 100644
--- a/modules/audio_processing/audio_processing_unittest.cc
+++ b/modules/audio_processing/audio_processing_unittest.cc
@@ -2673,14 +2673,13 @@
 
 TEST(ApmConfiguration, EchoControlInjection) {
   // Verify that apm uses an injected echo controller if one is provided.
-  webrtc::Config webrtc_config;
   std::unique_ptr<EchoControlFactory> echo_control_factory(
       new MyEchoControlFactory());
 
   rtc::scoped_refptr<AudioProcessing> apm =
       AudioProcessingBuilderForTesting()
           .SetEchoControlFactory(std::move(echo_control_factory))
-          .Create(webrtc_config);
+          .Create();
 
   Int16FrameData audio;
   audio.num_channels = 1;
@@ -2700,9 +2699,8 @@
 }
 
 rtc::scoped_refptr<AudioProcessing> CreateApm(bool mobile_aec) {
-  Config old_config;
   rtc::scoped_refptr<AudioProcessing> apm =
-      AudioProcessingBuilderForTesting().Create(old_config);
+      AudioProcessingBuilderForTesting().Create();
   if (!apm) {
     return apm;
   }
diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h
index a752e91..54ca996 100644
--- a/modules/audio_processing/include/audio_processing.h
+++ b/modules/audio_processing/include/audio_processing.h
@@ -65,19 +65,6 @@
 #endif  // defined(WEBRTC_CHROMIUM_BUILD)
 static constexpr int kClippedLevelMin = 70;
 
-// To be deprecated: Please instead use the flag in the
-// AudioProcessing::Config::TransientSuppression.
-//
-// Use to enable experimental noise suppression. It can be set in the
-// constructor.
-// TODO(webrtc:5298): Remove.
-struct ExperimentalNs {
-  ExperimentalNs() : enabled(false) {}
-  explicit ExperimentalNs(bool enabled) : enabled(enabled) {}
-  static const ConfigOptionID identifier = ConfigOptionID::kExperimentalNs;
-  bool enabled;
-};
-
 // The Audio Processing Module (APM) provides a collection of voice processing
 // components designed for real-time communications software.
 //
@@ -800,7 +787,6 @@
   // This creates an APM instance using the previously set components. Calling
   // the Create function resets the AudioProcessingBuilder to its initial state.
   rtc::scoped_refptr<AudioProcessing> Create();
-  rtc::scoped_refptr<AudioProcessing> Create(const webrtc::Config& config);
 
  private:
   std::unique_ptr<EchoControlFactory> echo_control_factory_;
diff --git a/modules/audio_processing/test/audio_processing_builder_for_testing.cc b/modules/audio_processing/test/audio_processing_builder_for_testing.cc
index 05c3d3e..adf0c5d 100644
--- a/modules/audio_processing/test/audio_processing_builder_for_testing.cc
+++ b/modules/audio_processing/test/audio_processing_builder_for_testing.cc
@@ -24,16 +24,10 @@
 #ifdef WEBRTC_EXCLUDE_AUDIO_PROCESSING_MODULE
 
 rtc::scoped_refptr<AudioProcessing> AudioProcessingBuilderForTesting::Create() {
-  webrtc::Config config;
-  return Create(config);
-}
-
-rtc::scoped_refptr<AudioProcessing> AudioProcessingBuilderForTesting::Create(
-    const webrtc::Config& config) {
   return rtc::make_ref_counted<AudioProcessingImpl>(
-      config, std::move(capture_post_processing_),
-      std::move(render_pre_processing_), std::move(echo_control_factory_),
-      std::move(echo_detector_), std::move(capture_analyzer_));
+      std::move(capture_post_processing_), std::move(render_pre_processing_),
+      std::move(echo_control_factory_), std::move(echo_detector_),
+      std::move(capture_analyzer_));
 }
 
 #else
@@ -44,13 +38,6 @@
   return builder.Create();
 }
 
-rtc::scoped_refptr<AudioProcessing> AudioProcessingBuilderForTesting::Create(
-    const webrtc::Config& config) {
-  AudioProcessingBuilder builder;
-  TransferOwnershipsToBuilder(&builder);
-  return builder.Create(config);
-}
-
 #endif
 
 void AudioProcessingBuilderForTesting::TransferOwnershipsToBuilder(
diff --git a/modules/audio_processing/test/audio_processing_builder_for_testing.h b/modules/audio_processing/test/audio_processing_builder_for_testing.h
index ba0f7b1..2d21248 100644
--- a/modules/audio_processing/test/audio_processing_builder_for_testing.h
+++ b/modules/audio_processing/test/audio_processing_builder_for_testing.h
@@ -63,7 +63,6 @@
   // the Create function resets the AudioProcessingBuilderForTesting to its
   // initial state.
   rtc::scoped_refptr<AudioProcessing> Create();
-  rtc::scoped_refptr<AudioProcessing> Create(const webrtc::Config& config);
 
  private:
   // Transfers the ownership to a non-testing builder.
diff --git a/modules/audio_processing/test/debug_dump_replayer.cc b/modules/audio_processing/test/debug_dump_replayer.cc
index b202469..cab6966 100644
--- a/modules/audio_processing/test/debug_dump_replayer.cc
+++ b/modules/audio_processing/test/debug_dump_replayer.cc
@@ -178,14 +178,13 @@
 
 void DebugDumpReplayer::MaybeRecreateApm(const audioproc::Config& msg) {
   // These configurations cannot be changed on the fly.
-  Config config;
   RTC_CHECK(msg.has_aec_delay_agnostic_enabled());
   RTC_CHECK(msg.has_aec_extended_filter_enabled());
 
   // We only create APM once, since changes on these fields should not
   // happen in current implementation.
   if (!apm_.get()) {
-    apm_ = AudioProcessingBuilderForTesting().Create(config);
+    apm_ = AudioProcessingBuilderForTesting().Create();
   }
 }
 
diff --git a/modules/audio_processing/test/debug_dump_test.cc b/modules/audio_processing/test/debug_dump_test.cc
index 6c02571..b735160 100644
--- a/modules/audio_processing/test/debug_dump_test.cc
+++ b/modules/audio_processing/test/debug_dump_test.cc
@@ -47,13 +47,11 @@
                      const std::string& reverse_file_name,
                      int reverse_rate_hz,
                      int reverse_channels,
-                     const Config& config,
                      const std::string& dump_file_name,
                      bool enable_pre_amplifier);
 
   // Constructor that uses default input files.
-  explicit DebugDumpGenerator(const Config& config,
-                              const AudioProcessing::Config& apm_config);
+  explicit DebugDumpGenerator(const AudioProcessing::Config& apm_config);
 
   ~DebugDumpGenerator();
 
@@ -123,7 +121,6 @@
                                        const std::string& reverse_file_name,
                                        int reverse_rate_hz,
                                        int reverse_channels,
-                                       const Config& config,
                                        const std::string& dump_file_name,
                                        bool enable_pre_amplifier)
     : input_config_(input_rate_hz, input_channels),
@@ -143,11 +140,10 @@
       worker_queue_("debug_dump_generator_worker_queue"),
       dump_file_name_(dump_file_name) {
   AudioProcessingBuilderForTesting apm_builder;
-  apm_ = apm_builder.Create(config);
+  apm_ = apm_builder.Create();
 }
 
 DebugDumpGenerator::DebugDumpGenerator(
-    const Config& config,
     const AudioProcessing::Config& apm_config)
     : DebugDumpGenerator(ResourcePath("near32_stereo", "pcm"),
                          32000,
@@ -155,7 +151,6 @@
                          ResourcePath("far32_stereo", "pcm"),
                          32000,
                          2,
-                         config,
                          TempFilename(OutputPath(), "debug_aec"),
                          apm_config.pre_amplifier.enabled) {
   apm_->ApplyConfig(apm_config);
@@ -290,8 +285,7 @@
 }
 
 TEST_F(DebugDumpTest, SimpleCase) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
@@ -299,8 +293,7 @@
 }
 
 TEST_F(DebugDumpTest, ChangeInputFormat) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
 
   generator.StartRecording();
   generator.Process(100);
@@ -317,8 +310,7 @@
 }
 
 TEST_F(DebugDumpTest, ChangeReverseFormat) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
   generator.StartRecording();
   generator.Process(100);
   generator.SetReverseRate(48000);
@@ -329,8 +321,7 @@
 }
 
 TEST_F(DebugDumpTest, ChangeOutputFormat) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
   generator.StartRecording();
   generator.Process(100);
   generator.SetOutputRate(48000);
@@ -341,10 +332,9 @@
 }
 
 TEST_F(DebugDumpTest, ToggleAec) {
-  Config config;
   AudioProcessing::Config apm_config;
   apm_config.echo_canceller.enabled = true;
-  DebugDumpGenerator generator(config, apm_config);
+  DebugDumpGenerator generator(apm_config);
   generator.StartRecording();
   generator.Process(100);
 
@@ -357,14 +347,13 @@
 }
 
 TEST_F(DebugDumpTest, VerifyCombinedExperimentalStringInclusive) {
-  Config config;
   AudioProcessing::Config apm_config;
   apm_config.echo_canceller.enabled = true;
   apm_config.gain_controller1.analog_gain_controller.enabled = true;
   apm_config.gain_controller1.analog_gain_controller.startup_min_volume = 0;
   // Arbitrarily set clipping gain to 17, which will never be the default.
   apm_config.gain_controller1.analog_gain_controller.clipped_level_min = 17;
-  DebugDumpGenerator generator(config, apm_config);
+  DebugDumpGenerator generator(apm_config);
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
@@ -388,10 +377,9 @@
 }
 
 TEST_F(DebugDumpTest, VerifyCombinedExperimentalStringExclusive) {
-  Config config;
   AudioProcessing::Config apm_config;
   apm_config.echo_canceller.enabled = true;
-  DebugDumpGenerator generator(config, apm_config);
+  DebugDumpGenerator generator(apm_config);
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
@@ -414,10 +402,9 @@
 }
 
 TEST_F(DebugDumpTest, VerifyAec3ExperimentalString) {
-  Config config;
   AudioProcessing::Config apm_config;
   apm_config.echo_canceller.enabled = true;
-  DebugDumpGenerator generator(config, apm_config);
+  DebugDumpGenerator generator(apm_config);
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
@@ -439,13 +426,12 @@
 }
 
 TEST_F(DebugDumpTest, VerifyAgcClippingLevelExperimentalString) {
-  Config config;
   AudioProcessing::Config apm_config;
   apm_config.gain_controller1.analog_gain_controller.enabled = true;
   apm_config.gain_controller1.analog_gain_controller.startup_min_volume = 0;
   // Arbitrarily set clipping gain to 17, which will never be the default.
   apm_config.gain_controller1.analog_gain_controller.clipped_level_min = 17;
-  DebugDumpGenerator generator(config, apm_config);
+  DebugDumpGenerator generator(apm_config);
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
@@ -467,8 +453,7 @@
 }
 
 TEST_F(DebugDumpTest, VerifyEmptyExperimentalString) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
@@ -495,8 +480,7 @@
 #define MAYBE_ToggleAgc ToggleAgc
 #endif
 TEST_F(DebugDumpTest, MAYBE_ToggleAgc) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
   generator.StartRecording();
   generator.Process(100);
 
@@ -510,8 +494,7 @@
 }
 
 TEST_F(DebugDumpTest, ToggleNs) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
   generator.StartRecording();
   generator.Process(100);
 
@@ -525,8 +508,7 @@
 }
 
 TEST_F(DebugDumpTest, TransientSuppressionOn) {
-  Config config;
-  DebugDumpGenerator generator(config, AudioProcessing::Config());
+  DebugDumpGenerator generator(/*apm_config=*/{});
 
   AudioProcessing::Config apm_config = generator.apm()->GetConfig();
   apm_config.transient_suppression.enabled = true;
@@ -539,10 +521,9 @@
 }
 
 TEST_F(DebugDumpTest, PreAmplifierIsOn) {
-  Config config;
   AudioProcessing::Config apm_config;
   apm_config.pre_amplifier.enabled = true;
-  DebugDumpGenerator generator(config, apm_config);
+  DebugDumpGenerator generator(apm_config);
   generator.StartRecording();
   generator.Process(100);
   generator.StopRecording();
diff --git a/test/fuzzers/audio_processing_configs_fuzzer.cc b/test/fuzzers/audio_processing_configs_fuzzer.cc
index fb7bde8..cb2f7a8 100644
--- a/test/fuzzers/audio_processing_configs_fuzzer.cc
+++ b/test/fuzzers/audio_processing_configs_fuzzer.cc
@@ -40,7 +40,7 @@
   // Parse boolean values for optionally enabling different
   // configurable public components of APM.
   static_cast<void>(fuzz_data->ReadOrDefaultValue(true));
-  bool exp_ns = fuzz_data->ReadOrDefaultValue(true);
+  bool use_ts = fuzz_data->ReadOrDefaultValue(true);
   static_cast<void>(fuzz_data->ReadOrDefaultValue(true));
   static_cast<void>(fuzz_data->ReadOrDefaultValue(true));
   static_cast<void>(fuzz_data->ReadOrDefaultValue(true));
@@ -96,21 +96,15 @@
     return nullptr;
   }
 
-  // Components can be enabled through webrtc::Config and
-  // webrtc::AudioProcessingConfig.
-  Config config;
-
   std::unique_ptr<EchoControlFactory> echo_control_factory;
   if (aec3) {
     echo_control_factory.reset(new EchoCanceller3Factory());
   }
 
-  config.Set<ExperimentalNs>(new ExperimentalNs(exp_ns));
-
   rtc::scoped_refptr<AudioProcessing> apm =
       AudioProcessingBuilderForTesting()
           .SetEchoControlFactory(std::move(echo_control_factory))
-          .Create(config);
+          .Create();
 
 #ifdef WEBRTC_LINUX
   apm->AttachAecDump(AecDumpFactory::Create("/dev/null", -1, worker_queue));
@@ -138,6 +132,7 @@
   apm_config.gain_controller2.adaptive_digital.use_saturation_protector =
       use_agc2_adaptive_digital_saturation_protector;
   apm_config.noise_suppression.enabled = use_ns;
+  apm_config.transient_suppression.enabled = use_ts;
   apm_config.voice_detection.enabled = use_vad;
   apm_config.level_estimation.enabled = use_le;
   apm->ApplyConfig(apm_config);
