diff --git a/modules/audio_coding/main/interface/audio_coding_module.h b/modules/audio_coding/main/interface/audio_coding_module.h
index bcf86c1..b705b4d 100644
--- a/modules/audio_coding/main/interface/audio_coding_module.h
+++ b/modules/audio_coding/main/interface/audio_coding_module.h
@@ -76,7 +76,6 @@
 class AudioCodingModule: public Module {
  protected:
   AudioCodingModule() {}
-  virtual ~AudioCodingModule() {}
 
  public:
   ///////////////////////////////////////////////////////////////////////////
@@ -88,7 +87,9 @@
   //
   static AudioCodingModule* Create(const int32_t id);
   static AudioCodingModule* Create(const int32_t id, Clock* clock);
+  virtual ~AudioCodingModule() {};
 
+  // TODO(ajm): Deprecated. Remove all calls to this unneeded method.
   static void Destroy(AudioCodingModule* module);
 
   ///////////////////////////////////////////////////////////////////////////
diff --git a/modules/audio_coding/main/test/APITest.cc b/modules/audio_coding/main/test/APITest.cc
index 90f88e3..cb7115e 100644
--- a/modules/audio_coding/main/test/APITest.cc
+++ b/modules/audio_coding/main/test/APITest.cc
@@ -55,8 +55,8 @@
 }
 
 APITest::APITest()
-    : _acmA(NULL),
-      _acmB(NULL),
+    : _acmA(AudioCodingModule::Create(1)),
+      _acmB(AudioCodingModule::Create(2)),
       _channel_A2B(NULL),
       _channel_B2A(NULL),
       _writeToFile(true),
@@ -111,9 +111,6 @@
 }
 
 APITest::~APITest() {
-  DESTROY_ACM(_acmA);
-  DESTROY_ACM(_acmB);
-
   DELETE_POINTER(_channel_A2B);
   DELETE_POINTER(_channel_B2A);
 
@@ -141,9 +138,6 @@
 }
 
 int16_t APITest::SetUp() {
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
   CodecInst dummyCodec;
   int lastPayloadType = 0;
 
diff --git a/modules/audio_coding/main/test/EncodeDecodeTest.cc b/modules/audio_coding/main/test/EncodeDecodeTest.cc
index 6ba6186..bab207c 100644
--- a/modules/audio_coding/main/test/EncodeDecodeTest.cc
+++ b/modules/audio_coding/main/test/EncodeDecodeTest.cc
@@ -22,6 +22,7 @@
 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/modules/audio_coding/main/source/acm_common_defs.h"
 #include "webrtc/modules/audio_coding/main/test/utility.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/system_wrappers/interface/trace.h"
 #include "webrtc/test/testsupport/fileutils.h"
 
@@ -269,7 +270,7 @@
   codePars[1] = 0;
   codePars[2] = 0;
 
-  AudioCodingModule* acm = AudioCodingModule::Create(0);
+  scoped_ptr<AudioCodingModule> acm(AudioCodingModule::Create(0));
   struct CodecInst sendCodecTmp;
   numCodecs = acm->NumberOfCodecs();
 
@@ -309,15 +310,13 @@
       _receiver.codeId = codeId;
 
       rtpFile.ReadHeader();
-      _receiver.Setup(acm, &rtpFile);
+      _receiver.Setup(acm.get(), &rtpFile);
       _receiver.Run();
       _receiver.Teardown();
       rtpFile.Close();
     }
   }
 
-  AudioCodingModule::Destroy(acm);
-
   // End tracing.
   if (_testMode == 1) {
     Trace::ReturnTrace();
@@ -326,7 +325,7 @@
 
 void EncodeDecodeTest::EncodeToFile(int fileType, int codeId, int* codePars,
                                     int testMode) {
-  AudioCodingModule* acm = AudioCodingModule::Create(1);
+  scoped_ptr<AudioCodingModule> acm(AudioCodingModule::Create(1));
   RTPFile rtpFile;
   std::string fileName = webrtc::test::OutputPath() + "outFile.rtp";
   rtpFile.Open(fileName.c_str(), "wb+");
@@ -336,14 +335,13 @@
   _sender.testMode = testMode;
   _sender.codeId = codeId;
 
-  _sender.Setup(acm, &rtpFile);
+  _sender.Setup(acm.get(), &rtpFile);
   struct CodecInst sendCodecInst;
   if (acm->SendCodec(&sendCodecInst) >= 0) {
     _sender.Run();
   }
   _sender.Teardown();
   rtpFile.Close();
-  AudioCodingModule::Destroy(acm);
 }
 
 }  // namespace webrtc
diff --git a/modules/audio_coding/main/test/SpatialAudio.cc b/modules/audio_coding/main/test/SpatialAudio.cc
index 57417e3..b82378b 100644
--- a/modules/audio_coding/main/test/SpatialAudio.cc
+++ b/modules/audio_coding/main/test/SpatialAudio.cc
@@ -23,31 +23,27 @@
 
 #define NUM_PANN_COEFFS 10
 
-SpatialAudio::SpatialAudio(int testMode) {
-  _testMode = testMode;
+SpatialAudio::SpatialAudio(int testMode)
+    : _acmLeft(AudioCodingModule::Create(1)),
+      _acmRight(AudioCodingModule::Create(2)),
+      _acmReceiver(AudioCodingModule::Create(3)),
+      _testMode(testMode) {
 }
 
 SpatialAudio::~SpatialAudio() {
-  AudioCodingModule::Destroy(_acmLeft);
-  AudioCodingModule::Destroy(_acmRight);
-  AudioCodingModule::Destroy(_acmReceiver);
   delete _channel;
   _inFile.Close();
   _outFile.Close();
 }
 
 int16_t SpatialAudio::Setup() {
-  // Create ACMs and the Channel;
-  _acmLeft = AudioCodingModule::Create(1);
-  _acmRight = AudioCodingModule::Create(2);
-  _acmReceiver = AudioCodingModule::Create(3);
   _channel = new Channel;
 
   // Register callback for the sender side.
   CHECK_ERROR(_acmLeft->RegisterTransportCallback(_channel));
   CHECK_ERROR(_acmRight->RegisterTransportCallback(_channel));
   // Register the receiver ACM in channel
-  _channel->RegisterReceiverACM(_acmReceiver);
+  _channel->RegisterReceiverACM(_acmReceiver.get());
 
   uint16_t sampFreqHz = 32000;
 
diff --git a/modules/audio_coding/main/test/SpatialAudio.h b/modules/audio_coding/main/test/SpatialAudio.h
index 6cb113d..fd9c0e7 100644
--- a/modules/audio_coding/main/test/SpatialAudio.h
+++ b/modules/audio_coding/main/test/SpatialAudio.h
@@ -11,6 +11,7 @@
 #ifndef ACM_TEST_SPATIAL_AUDIO_H
 #define ACM_TEST_SPATIAL_AUDIO_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -32,9 +33,9 @@
   void EncodeDecode(double leftPanning, double rightPanning);
   void EncodeDecode();
 
-  AudioCodingModule* _acmLeft;
-  AudioCodingModule* _acmRight;
-  AudioCodingModule* _acmReceiver;
+  scoped_ptr<AudioCodingModule> _acmLeft;
+  scoped_ptr<AudioCodingModule> _acmRight;
+  scoped_ptr<AudioCodingModule> _acmReceiver;
   Channel* _channel;
   PCMFile _inFile;
   PCMFile _outFile;
diff --git a/modules/audio_coding/main/test/TestAllCodecs.cc b/modules/audio_coding/main/test/TestAllCodecs.cc
index c47a582..d6c6dc4 100644
--- a/modules/audio_coding/main/test/TestAllCodecs.cc
+++ b/modules/audio_coding/main/test/TestAllCodecs.cc
@@ -100,8 +100,8 @@
 }
 
 TestAllCodecs::TestAllCodecs(int test_mode)
-    : acm_a_(NULL),
-      acm_b_(NULL),
+    : acm_a_(AudioCodingModule::Create(0)),
+      acm_b_(AudioCodingModule::Create(1)),
       channel_a_to_b_(NULL),
       test_count_(0),
       packet_size_samples_(0),
@@ -111,14 +111,6 @@
 }
 
 TestAllCodecs::~TestAllCodecs() {
-  if (acm_a_ != NULL) {
-    AudioCodingModule::Destroy(acm_a_);
-    acm_a_ = NULL;
-  }
-  if (acm_b_ != NULL) {
-    AudioCodingModule::Destroy(acm_b_);
-    acm_b_ = NULL;
-  }
   if (channel_a_to_b_ != NULL) {
     delete channel_a_to_b_;
     channel_a_to_b_ = NULL;
@@ -135,9 +127,6 @@
                  "---------- TestAllCodecs ----------");
   }
 
-  acm_a_ = AudioCodingModule::Create(0);
-  acm_b_ = AudioCodingModule::Create(1);
-
   acm_a_->InitializeReceiver();
   acm_b_->InitializeReceiver();
 
@@ -154,7 +143,7 @@
   // Create and connect the channel
   channel_a_to_b_ = new TestPack;
   acm_a_->RegisterTransportCallback(channel_a_to_b_);
-  channel_a_to_b_->RegisterReceiverACM(acm_b_);
+  channel_a_to_b_->RegisterReceiverACM(acm_b_.get());
 
   // All codecs are tested for all allowed sampling frequencies, rates and
   // packet sizes.
@@ -736,11 +725,11 @@
   AudioCodingModule* my_acm = NULL;
   switch (side) {
     case 'A': {
-      my_acm = acm_a_;
+      my_acm = acm_a_.get();
       break;
     }
     case 'B': {
-      my_acm = acm_b_;
+      my_acm = acm_b_.get();
       break;
     }
     default: {
diff --git a/modules/audio_coding/main/test/TestAllCodecs.h b/modules/audio_coding/main/test/TestAllCodecs.h
index 8cde8cf..5aabcf7 100644
--- a/modules/audio_coding/main/test/TestAllCodecs.h
+++ b/modules/audio_coding/main/test/TestAllCodecs.h
@@ -11,6 +11,7 @@
 #ifndef WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_TEST_ALL_CODECS_H_
 #define WEBRTC_MODULES_AUDIO_CODING_MAIN_TEST_TEST_ALL_CODECS_H_
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -64,8 +65,8 @@
   void DisplaySendReceiveCodec();
 
   int test_mode_;
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
   TestPack* channel_a_to_b_;
   PCMFile infile_a_;
   PCMFile outfile_b_;
diff --git a/modules/audio_coding/main/test/TestFEC.cc b/modules/audio_coding/main/test/TestFEC.cc
index c9a63a2..cbb3647 100644
--- a/modules/audio_coding/main/test/TestFEC.cc
+++ b/modules/audio_coding/main/test/TestFEC.cc
@@ -24,21 +24,13 @@
 namespace webrtc {
 
 TestFEC::TestFEC()
-    : _acmA(NULL),
-      _acmB(NULL),
+    : _acmA(AudioCodingModule::Create(0)),
+      _acmB(AudioCodingModule::Create(1)),
       _channelA2B(NULL),
       _testCntr(0) {
 }
 
 TestFEC::~TestFEC() {
-  if (_acmA != NULL) {
-    AudioCodingModule::Destroy(_acmA);
-    _acmA = NULL;
-  }
-  if (_acmB != NULL) {
-    AudioCodingModule::Destroy(_acmB);
-    _acmB = NULL;
-  }
   if (_channelA2B != NULL) {
     delete _channelA2B;
     _channelA2B = NULL;
@@ -50,9 +42,6 @@
       "audio_coding/testfile32kHz", "pcm");
   _inFileA.Open(file_name, 32000, "rb");
 
-  _acmA = AudioCodingModule::Create(0);
-  _acmB = AudioCodingModule::Create(1);
-
   ASSERT_EQ(0, _acmA->InitializeReceiver());
   ASSERT_EQ(0, _acmB->InitializeReceiver());
 
@@ -66,7 +55,7 @@
   // Create and connect the channel
   _channelA2B = new Channel;
   _acmA->RegisterTransportCallback(_channelA2B);
-  _channelA2B->RegisterReceiverACM(_acmB);
+  _channelA2B->RegisterReceiverACM(_acmB.get());
 
 #ifndef WEBRTC_CODEC_G722
   EXPECT_TRUE(false);
@@ -217,11 +206,11 @@
   AudioCodingModule* myACM;
   switch (side) {
     case 'A': {
-      myACM = _acmA;
+      myACM = _acmA.get();
       break;
     }
     case 'B': {
-      myACM = _acmB;
+      myACM = _acmB.get();
       break;
     }
     default:
diff --git a/modules/audio_coding/main/test/TestFEC.h b/modules/audio_coding/main/test/TestFEC.h
index dff1087..9439112 100644
--- a/modules/audio_coding/main/test/TestFEC.h
+++ b/modules/audio_coding/main/test/TestFEC.h
@@ -11,6 +11,7 @@
 #ifndef TEST_FEC_H
 #define TEST_FEC_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -32,8 +33,8 @@
   void Run();
   void OpenOutFile(int16_t testNumber);
   int32_t SetVAD(bool enableDTX, bool enableVAD, ACMVADMode vadMode);
-  AudioCodingModule* _acmA;
-  AudioCodingModule* _acmB;
+  scoped_ptr<AudioCodingModule> _acmA;
+  scoped_ptr<AudioCodingModule> _acmB;
 
   Channel* _channelA2B;
 
diff --git a/modules/audio_coding/main/test/TestStereo.cc b/modules/audio_coding/main/test/TestStereo.cc
index 9a0bf9e..65c9983 100644
--- a/modules/audio_coding/main/test/TestStereo.cc
+++ b/modules/audio_coding/main/test/TestStereo.cc
@@ -109,8 +109,8 @@
 }
 
 TestStereo::TestStereo(int test_mode)
-    : acm_a_(NULL),
-      acm_b_(NULL),
+    : acm_a_(AudioCodingModule::Create(0)),
+      acm_b_(AudioCodingModule::Create(1)),
       channel_a2b_(NULL),
       test_cntr_(0),
       pack_size_samp_(0),
@@ -132,14 +132,6 @@
 }
 
 TestStereo::~TestStereo() {
-  if (acm_a_ != NULL) {
-    AudioCodingModule::Destroy(acm_a_);
-    acm_a_ = NULL;
-  }
-  if (acm_b_ != NULL) {
-    AudioCodingModule::Destroy(acm_b_);
-    acm_b_ = NULL;
-  }
   if (channel_a2b_ != NULL) {
     delete channel_a2b_;
     channel_a2b_ = NULL;
@@ -168,9 +160,7 @@
   in_file_mono_->ReadStereo(false);
 
   // Create and initialize two ACMs, one for each side of a one-to-one call.
-  acm_a_ = AudioCodingModule::Create(0);
-  acm_b_ = AudioCodingModule::Create(1);
-  ASSERT_TRUE((acm_a_ != NULL) && (acm_b_ != NULL));
+  ASSERT_TRUE((acm_a_.get() != NULL) && (acm_b_.get() != NULL));
   EXPECT_EQ(0, acm_a_->InitializeReceiver());
   EXPECT_EQ(0, acm_b_->InitializeReceiver());
 
@@ -197,7 +187,7 @@
   // Create and connect the channel.
   channel_a2b_ = new TestPackStereo;
   EXPECT_EQ(0, acm_a_->RegisterTransportCallback(channel_a2b_));
-  channel_a2b_->RegisterReceiverACM(acm_b_);
+  channel_a2b_->RegisterReceiverACM(acm_b_.get());
 
   // Start with setting VAD/DTX, before we know we will send stereo.
   // Continue with setting a stereo codec as send codec and verify that
@@ -786,11 +776,11 @@
   AudioCodingModule* my_acm = NULL;
   switch (side) {
     case 'A': {
-      my_acm = acm_a_;
+      my_acm = acm_a_.get();
       break;
     }
     case 'B': {
-      my_acm = acm_b_;
+      my_acm = acm_b_.get();
       break;
     }
     default:
diff --git a/modules/audio_coding/main/test/TestStereo.h b/modules/audio_coding/main/test/TestStereo.h
index 38a9793..53e4f28 100644
--- a/modules/audio_coding/main/test/TestStereo.h
+++ b/modules/audio_coding/main/test/TestStereo.h
@@ -13,6 +13,7 @@
 
 #include <math.h>
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -83,8 +84,8 @@
 
   int test_mode_;
 
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
 
   TestPackStereo* channel_a2b_;
 
diff --git a/modules/audio_coding/main/test/TestVADDTX.cc b/modules/audio_coding/main/test/TestVADDTX.cc
index 35f5059..620329b 100644
--- a/modules/audio_coding/main/test/TestVADDTX.cc
+++ b/modules/audio_coding/main/test/TestVADDTX.cc
@@ -23,20 +23,12 @@
 namespace webrtc {
 
 TestVADDTX::TestVADDTX()
-    : _acmA(NULL),
-      _acmB(NULL),
+    : _acmA(AudioCodingModule::Create(0)),
+      _acmB(AudioCodingModule::Create(1)),
       _channelA2B(NULL) {
 }
 
 TestVADDTX::~TestVADDTX() {
-  if (_acmA != NULL) {
-    AudioCodingModule::Destroy(_acmA);
-    _acmA = NULL;
-  }
-  if (_acmB != NULL) {
-    AudioCodingModule::Destroy(_acmB);
-    _acmB = NULL;
-  }
   if (_channelA2B != NULL) {
     delete _channelA2B;
     _channelA2B = NULL;
@@ -48,9 +40,6 @@
       "audio_coding/testfile32kHz", "pcm");
   _inFileA.Open(file_name, 32000, "rb");
 
-  _acmA = AudioCodingModule::Create(0);
-  _acmB = AudioCodingModule::Create(1);
-
   EXPECT_EQ(0, _acmA->InitializeReceiver());
   EXPECT_EQ(0, _acmB->InitializeReceiver());
 
@@ -68,7 +57,7 @@
   // Create and connect the channel
   _channelA2B = new Channel;
   _acmA->RegisterTransportCallback(_channelA2B);
-  _channelA2B->RegisterReceiverACM(_acmB);
+  _channelA2B->RegisterReceiverACM(_acmB.get());
 
   _acmA->RegisterVADCallback(&_monitor);
 
@@ -207,11 +196,11 @@
   AudioCodingModule* myACM;
   switch (side) {
     case 'A': {
-      myACM = _acmA;
+      myACM = _acmA.get();
       break;
     }
     case 'B': {
-      myACM = _acmB;
+      myACM = _acmB.get();
       break;
     }
     default:
diff --git a/modules/audio_coding/main/test/TestVADDTX.h b/modules/audio_coding/main/test/TestVADDTX.h
index d1421ca..d55bdee 100644
--- a/modules/audio_coding/main/test/TestVADDTX.h
+++ b/modules/audio_coding/main/test/TestVADDTX.h
@@ -11,6 +11,7 @@
 #ifndef TEST_VAD_DTX_H
 #define TEST_VAD_DTX_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -64,8 +65,8 @@
   void SetVAD(bool statusDTX, bool statusVAD, int16_t vadMode);
   VADDTXstruct GetVAD();
   int16_t VerifyTest();
-  AudioCodingModule* _acmA;
-  AudioCodingModule* _acmB;
+  scoped_ptr<AudioCodingModule> _acmA;
+  scoped_ptr<AudioCodingModule> _acmB;
 
   Channel* _channelA2B;
 
diff --git a/modules/audio_coding/main/test/TwoWayCommunication.cc b/modules/audio_coding/main/test/TwoWayCommunication.cc
index 6b058fd..1b74a95 100644
--- a/modules/audio_coding/main/test/TwoWayCommunication.cc
+++ b/modules/audio_coding/main/test/TwoWayCommunication.cc
@@ -30,16 +30,15 @@
 
 #define MAX_FILE_NAME_LENGTH_BYTE 500
 
-TwoWayCommunication::TwoWayCommunication(int testMode) {
-  _testMode = testMode;
+TwoWayCommunication::TwoWayCommunication(int testMode)
+    : _acmA(AudioCodingModule::Create(1)),
+      _acmB(AudioCodingModule::Create(2)),
+      _acmRefA(AudioCodingModule::Create(3)),
+      _acmRefB(AudioCodingModule::Create(4)),
+      _testMode(testMode) {
 }
 
 TwoWayCommunication::~TwoWayCommunication() {
-  AudioCodingModule::Destroy(_acmA);
-  AudioCodingModule::Destroy(_acmB);
-  AudioCodingModule::Destroy(_acmRefA);
-  AudioCodingModule::Destroy(_acmRefB);
-
   delete _channel_A2B;
   delete _channel_B2A;
   delete _channelRef_A2B;
@@ -62,7 +61,7 @@
 
 void TwoWayCommunication::ChooseCodec(uint8_t* codecID_A,
                                       uint8_t* codecID_B) {
-  AudioCodingModule* tmpACM = AudioCodingModule::Create(0);
+  scoped_ptr<AudioCodingModule> tmpACM(AudioCodingModule::Create(0));
   uint8_t noCodec = tmpACM->NumberOfCodecs();
   CodecInst codecInst;
   printf("List of Supported Codecs\n");
@@ -80,17 +79,10 @@
   EXPECT_TRUE(fgets(myStr, 10, stdin) != NULL);
   *codecID_B = (uint8_t) atoi(myStr);
 
-  AudioCodingModule::Destroy(tmpACM);
   printf("\n");
 }
 
 void TwoWayCommunication::SetUp() {
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
-  _acmRefA = AudioCodingModule::Create(3);
-  _acmRefB = AudioCodingModule::Create(4);
-
   uint8_t codecID_A;
   uint8_t codecID_B;
 
@@ -164,20 +156,20 @@
   //--- Set A-to-B channel
   _channel_A2B = new Channel;
   _acmA->RegisterTransportCallback(_channel_A2B);
-  _channel_A2B->RegisterReceiverACM(_acmB);
+  _channel_A2B->RegisterReceiverACM(_acmB.get());
   //--- Do the same for the reference
   _channelRef_A2B = new Channel;
   _acmRefA->RegisterTransportCallback(_channelRef_A2B);
-  _channelRef_A2B->RegisterReceiverACM(_acmRefB);
+  _channelRef_A2B->RegisterReceiverACM(_acmRefB.get());
 
   //--- Set B-to-A channel
   _channel_B2A = new Channel;
   _acmB->RegisterTransportCallback(_channel_B2A);
-  _channel_B2A->RegisterReceiverACM(_acmA);
+  _channel_B2A->RegisterReceiverACM(_acmA.get());
   //--- Do the same for reference
   _channelRef_B2A = new Channel;
   _acmRefB->RegisterTransportCallback(_channelRef_B2A);
-  _channelRef_B2A->RegisterReceiverACM(_acmRefA);
+  _channelRef_B2A->RegisterReceiverACM(_acmRefA.get());
 
   // The clicks will be more obvious when we
   // are in FAX mode.
@@ -186,12 +178,6 @@
 }
 
 void TwoWayCommunication::SetUpAutotest() {
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
-  _acmRefA = AudioCodingModule::Create(3);
-  _acmRefB = AudioCodingModule::Create(4);
-
   CodecInst codecInst_A;
   CodecInst codecInst_B;
   CodecInst dummyCodec;
@@ -252,20 +238,20 @@
   //--- Set A-to-B channel
   _channel_A2B = new Channel;
   _acmA->RegisterTransportCallback(_channel_A2B);
-  _channel_A2B->RegisterReceiverACM(_acmB);
+  _channel_A2B->RegisterReceiverACM(_acmB.get());
   //--- Do the same for the reference
   _channelRef_A2B = new Channel;
   _acmRefA->RegisterTransportCallback(_channelRef_A2B);
-  _channelRef_A2B->RegisterReceiverACM(_acmRefB);
+  _channelRef_A2B->RegisterReceiverACM(_acmRefB.get());
 
   //--- Set B-to-A channel
   _channel_B2A = new Channel;
   _acmB->RegisterTransportCallback(_channel_B2A);
-  _channel_B2A->RegisterReceiverACM(_acmA);
+  _channel_B2A->RegisterReceiverACM(_acmA.get());
   //--- Do the same for reference
   _channelRef_B2A = new Channel;
   _acmRefB->RegisterTransportCallback(_channelRef_B2A);
-  _channelRef_B2A->RegisterReceiverACM(_acmRefA);
+  _channelRef_B2A->RegisterReceiverACM(_acmRefA.get());
 
   // The clicks will be more obvious when we
   // are in FAX mode.
diff --git a/modules/audio_coding/main/test/TwoWayCommunication.h b/modules/audio_coding/main/test/TwoWayCommunication.h
index abe0d9b..fe0ed2a 100644
--- a/modules/audio_coding/main/test/TwoWayCommunication.h
+++ b/modules/audio_coding/main/test/TwoWayCommunication.h
@@ -11,6 +11,7 @@
 #ifndef TWO_WAY_COMMUNICATION_H
 #define TWO_WAY_COMMUNICATION_H
 
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "ACMTest.h"
 #include "Channel.h"
 #include "PCMFile.h"
@@ -30,11 +31,11 @@
   void SetUp();
   void SetUpAutotest();
 
-  AudioCodingModule* _acmA;
-  AudioCodingModule* _acmB;
+  scoped_ptr<AudioCodingModule> _acmA;
+  scoped_ptr<AudioCodingModule> _acmB;
 
-  AudioCodingModule* _acmRefA;
-  AudioCodingModule* _acmRefB;
+  scoped_ptr<AudioCodingModule> _acmRefA;
+  scoped_ptr<AudioCodingModule> _acmRefB;
 
   Channel* _channel_A2B;
   Channel* _channel_B2A;
diff --git a/modules/audio_coding/main/test/delay_test.cc b/modules/audio_coding/main/test/delay_test.cc
index d647b1f..57a912a 100644
--- a/modules/audio_coding/main/test/delay_test.cc
+++ b/modules/audio_coding/main/test/delay_test.cc
@@ -61,8 +61,8 @@
  public:
 
   DelayTest()
-      : acm_a_(NULL),
-        acm_b_(NULL),
+      : acm_a_(AudioCodingModule::Create(0)),
+        acm_b_(AudioCodingModule::Create(1)),
         channel_a2b_(NULL),
         test_cntr_(0),
         encoding_sample_rate_hz_(8000) {}
@@ -70,14 +70,6 @@
   ~DelayTest() {}
 
   void TearDown() {
-    if (acm_a_ != NULL) {
-      AudioCodingModule::Destroy(acm_a_);
-      acm_a_ = NULL;
-    }
-    if (acm_b_ != NULL) {
-      AudioCodingModule::Destroy(acm_b_);
-      acm_b_ = NULL;
-    }
     if (channel_a2b_ != NULL) {
       delete channel_a2b_;
       channel_a2b_ = NULL;
@@ -91,8 +83,6 @@
     if (FLAGS_input_file.size() > 0)
       file_name = FLAGS_input_file;
     in_file_a_.Open(file_name, 32000, "rb");
-    acm_a_ = AudioCodingModule::Create(0);
-    acm_b_ = AudioCodingModule::Create(1);
     acm_a_->InitializeReceiver();
     acm_b_->InitializeReceiver();
     if (FLAGS_init_delay > 0) {
@@ -122,7 +112,7 @@
     // Create and connect the channel
     channel_a2b_ = new Channel;
     acm_a_->RegisterTransportCallback(channel_a2b_);
-    channel_a2b_->RegisterReceiverACM(acm_b_);
+    channel_a2b_->RegisterReceiverACM(acm_b_.get());
   }
 
   void Perform(const Config* config, size_t num_tests, int duration_sec,
@@ -229,8 +219,8 @@
     out_file_b_.Close();
   }
 
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
 
   Channel* channel_a2b_;
 
@@ -256,9 +246,3 @@
 }
 }  // namespace
 }  // namespace webrtc
-
-int main(int argc, char* argv[]) {
-  using namespace webrtc;
-  google::ParseCommandLineFlags(&argc, &argv, true);
-  RunTest();
-}
diff --git a/modules/audio_coding/main/test/dual_stream_unittest.cc b/modules/audio_coding/main/test/dual_stream_unittest.cc
index 7430ff8..d8cdce5 100644
--- a/modules/audio_coding/main/test/dual_stream_unittest.cc
+++ b/modules/audio_coding/main/test/dual_stream_unittest.cc
@@ -53,9 +53,9 @@
     kMaxNumStreams
   };
 
-  AudioCodingModule* acm_dual_stream_;
-  AudioCodingModule* acm_ref_primary_;
-  AudioCodingModule* acm_ref_secondary_;
+  scoped_ptr<AudioCodingModule> acm_dual_stream_;
+  scoped_ptr<AudioCodingModule> acm_ref_primary_;
+  scoped_ptr<AudioCodingModule> acm_ref_secondary_;
 
   CodecInst primary_encoder_;
   CodecInst secondary_encoder_;
@@ -98,9 +98,6 @@
 }
 
 DualStreamTest::~DualStreamTest() {
-  AudioCodingModule::Destroy(acm_dual_stream_);
-  AudioCodingModule::Destroy(acm_ref_primary_);
-  AudioCodingModule::Destroy(acm_ref_secondary_);
 }
 
 void DualStreamTest::PopulateCodecInstances(int frame_size_primary_ms,
@@ -138,9 +135,9 @@
 void DualStreamTest::InitializeSender(int frame_size_primary_samples,
                                       int num_channels_primary,
                                       int sampling_rate) {
-  ASSERT_TRUE(acm_dual_stream_ != NULL);
-  ASSERT_TRUE(acm_ref_primary_ != NULL);
-  ASSERT_TRUE(acm_ref_secondary_ != NULL);
+  ASSERT_TRUE(acm_dual_stream_.get() != NULL);
+  ASSERT_TRUE(acm_ref_primary_.get() != NULL);
+  ASSERT_TRUE(acm_ref_secondary_.get() != NULL);
 
   ASSERT_EQ(0, acm_dual_stream_->InitializeSender());
   ASSERT_EQ(0, acm_ref_primary_->InitializeSender());
diff --git a/modules/audio_coding/main/test/iSACTest.cc b/modules/audio_coding/main/test/iSACTest.cc
index e8b77ac..50809fc 100644
--- a/modules/audio_coding/main/test/iSACTest.cc
+++ b/modules/audio_coding/main/test/iSACTest.cc
@@ -21,7 +21,7 @@
 #else
 #include <sys/time.h>
 #include <time.h>
-#endif 
+#endif
 
 #include "webrtc/modules/audio_coding/main/source/acm_common_defs.h"
 #include "webrtc/modules/audio_coding/main/test/utility.h"
@@ -86,14 +86,13 @@
   return 0;
 }
 
-ISACTest::ISACTest(int testMode) {
-  _testMode = testMode;
+ISACTest::ISACTest(int testMode)
+    : _acmA(AudioCodingModule::Create(1)),
+      _acmB(AudioCodingModule::Create(2)),
+      _testMode(testMode) {
 }
 
 ISACTest::~ISACTest() {
-  AudioCodingModule::Destroy(_acmA);
-  AudioCodingModule::Destroy(_acmB);
-
   delete _channel_A2B;
   delete _channel_B2A;
 }
@@ -102,9 +101,6 @@
   int codecCntr;
   CodecInst codecParam;
 
-  _acmA = AudioCodingModule::Create(1);
-  _acmB = AudioCodingModule::Create(2);
-
   for (codecCntr = 0; codecCntr < AudioCodingModule::NumberOfCodecs();
       codecCntr++) {
     EXPECT_EQ(0, AudioCodingModule::Codec(codecCntr, &codecParam));
diff --git a/modules/audio_coding/main/test/initial_delay_unittest.cc b/modules/audio_coding/main/test/initial_delay_unittest.cc
index 3a08dea..a731808 100644
--- a/modules/audio_coding/main/test/initial_delay_unittest.cc
+++ b/modules/audio_coding/main/test/initial_delay_unittest.cc
@@ -46,8 +46,8 @@
  protected:
 
   InitialPlayoutDelayTest()
-      : acm_a_(NULL),
-        acm_b_(NULL),
+      : acm_a_(AudioCodingModule::Create(0)),
+        acm_b_(AudioCodingModule::Create(1)),
         channel_a2b_(NULL) {
   }
 
@@ -55,14 +55,6 @@
   }
 
   void TearDown() {
-    if (acm_a_ != NULL) {
-      AudioCodingModule::Destroy(acm_a_);
-      acm_a_ = NULL;
-    }
-    if (acm_b_ != NULL) {
-      AudioCodingModule::Destroy(acm_b_);
-      acm_b_ = NULL;
-    }
     if (channel_a2b_ != NULL) {
       delete channel_a2b_;
       channel_a2b_ = NULL;
@@ -70,9 +62,6 @@
   }
 
   void SetUp() {
-    acm_a_ = AudioCodingModule::Create(0);
-    acm_b_ = AudioCodingModule::Create(1);
-
     acm_b_->InitializeReceiver();
     acm_a_->InitializeReceiver();
 
@@ -90,7 +79,7 @@
     // Create and connect the channel
     channel_a2b_ = new Channel;
     acm_a_->RegisterTransportCallback(channel_a2b_);
-    channel_a2b_->RegisterReceiverACM(acm_b_);
+    channel_a2b_->RegisterReceiverACM(acm_b_.get());
   }
 
   void Run(CodecInst codec, int initial_delay_ms) {
@@ -125,8 +114,8 @@
     ASSERT_LE(num_frames * 10, initial_delay_ms + 100);
   }
 
-  AudioCodingModule* acm_a_;
-  AudioCodingModule* acm_b_;
+  scoped_ptr<AudioCodingModule> acm_a_;
+  scoped_ptr<AudioCodingModule> acm_b_;
   Channel* channel_a2b_;
 };
 
diff --git a/modules/audio_coding/main/test/insert_packet_with_timing.cc b/modules/audio_coding/main/test/insert_packet_with_timing.cc
index 543d901..398a6b3 100644
--- a/modules/audio_coding/main/test/insert_packet_with_timing.cc
+++ b/modules/audio_coding/main/test/insert_packet_with_timing.cc
@@ -18,6 +18,7 @@
 #include "webrtc/modules/audio_coding/main/test/PCMFile.h"
 #include "webrtc/modules/interface/module_common_types.h"
 #include "webrtc/system_wrappers/interface/clock.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/test/testsupport/fileutils.h"
 
 // Codec.
@@ -75,8 +76,8 @@
     ASSERT_TRUE(sender_clock_ != NULL);
     ASSERT_TRUE(receiver_clock_ != NULL);
 
-    ASSERT_TRUE(send_acm_ != NULL);
-    ASSERT_TRUE(receive_acm_ != NULL);
+    ASSERT_TRUE(send_acm_.get() != NULL);
+    ASSERT_TRUE(receive_acm_.get() != NULL);
     ASSERT_TRUE(channel_ != NULL);
 
     ASSERT_TRUE(seq_num_fid_ != NULL);
@@ -99,7 +100,7 @@
     samples_in_1ms_ = codec.plfreq / 1000;
     num_10ms_in_codec_frame_ = codec.pacsize / (codec.plfreq / 100);
 
-    channel_->RegisterReceiverACM(receive_acm_);
+    channel_->RegisterReceiverACM(receive_acm_.get());
     send_acm_->RegisterTransportCallback(channel_);
 
     if (FLAGS_input.size() == 0) {
@@ -195,8 +196,6 @@
   }
 
   void TearDown() {
-    AudioCodingModule::Destroy(send_acm_);
-    AudioCodingModule::Destroy(receive_acm_);
     delete channel_;
 
     fclose(seq_num_fid_);
@@ -250,8 +249,8 @@
   SimulatedClock* sender_clock_;
   SimulatedClock* receiver_clock_;
 
-  AudioCodingModule* send_acm_;
-  AudioCodingModule* receive_acm_;
+  scoped_ptr<AudioCodingModule> send_acm_;
+  scoped_ptr<AudioCodingModule> receive_acm_;
   Channel* channel_;
 
   FILE* seq_num_fid_;  // Input (text), one sequence number per line.
diff --git a/modules/audio_coding/main/test/opus_test.cc b/modules/audio_coding/main/test/opus_test.cc
index fb72cbc..5116934 100644
--- a/modules/audio_coding/main/test/opus_test.cc
+++ b/modules/audio_coding/main/test/opus_test.cc
@@ -29,7 +29,7 @@
 namespace webrtc {
 
 OpusTest::OpusTest()
-    : acm_receiver_(NULL),
+    : acm_receiver_(AudioCodingModule::Create(0)),
       channel_a2b_(NULL),
       counter_(0),
       payload_type_(255),
@@ -37,10 +37,6 @@
 }
 
 OpusTest::~OpusTest() {
-  if (acm_receiver_ != NULL) {
-    AudioCodingModule::Destroy(acm_receiver_);
-    acm_receiver_ = NULL;
-  }
   if (channel_a2b_ != NULL) {
     delete channel_a2b_;
     channel_a2b_ = NULL;
@@ -93,9 +89,7 @@
   ASSERT_GT(WebRtcOpus_DecoderInitNew(opus_mono_decoder_), -1);
   ASSERT_GT(WebRtcOpus_DecoderInitNew(opus_stereo_decoder_), -1);
 
-  // Create and initialize one ACM, to be used as receiver.
-  acm_receiver_ = AudioCodingModule::Create(0);
-  ASSERT_TRUE(acm_receiver_ != NULL);
+  ASSERT_TRUE(acm_receiver_.get() != NULL);
   EXPECT_EQ(0, acm_receiver_->InitializeReceiver());
 
   // Register Opus stereo as receiving codec.
@@ -107,7 +101,7 @@
 
   // Create and connect the channel.
   channel_a2b_ = new TestPackStereo;
-  channel_a2b_->RegisterReceiverACM(acm_receiver_);
+  channel_a2b_->RegisterReceiverACM(acm_receiver_.get());
 
   //
   // Test Stereo.
diff --git a/modules/audio_coding/main/test/opus_test.h b/modules/audio_coding/main/test/opus_test.h
index b4526b2..ca0da9e 100644
--- a/modules/audio_coding/main/test/opus_test.h
+++ b/modules/audio_coding/main/test/opus_test.h
@@ -19,6 +19,7 @@
 #include "webrtc/modules/audio_coding/main/test/Channel.h"
 #include "webrtc/modules/audio_coding/main/test/PCMFile.h"
 #include "webrtc/modules/audio_coding/main/test/TestStereo.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 
 namespace webrtc {
 
@@ -34,7 +35,7 @@
 
   void OpenOutFile(int test_number);
 
-  AudioCodingModule* acm_receiver_;
+  scoped_ptr<AudioCodingModule> acm_receiver_;
   TestPackStereo* channel_a2b_;
   PCMFile in_file_stereo_;
   PCMFile in_file_mono_;
diff --git a/modules/audio_coding/main/test/target_delay_unittest.cc b/modules/audio_coding/main/test/target_delay_unittest.cc
index e81cbac..9d23ec6 100644
--- a/modules/audio_coding/main/test/target_delay_unittest.cc
+++ b/modules/audio_coding/main/test/target_delay_unittest.cc
@@ -12,6 +12,7 @@
 #include "webrtc/common_types.h"
 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
 #include "webrtc/modules/interface/module_common_types.h"
+#include "webrtc/system_wrappers/interface/scoped_ptr.h"
 #include "webrtc/system_wrappers/interface/sleep.h"
 #include "webrtc/test/testsupport/fileutils.h"
 #include "webrtc/test/testsupport/gtest_disable.h"
@@ -32,11 +33,10 @@
       : acm_(AudioCodingModule::Create(0)) {}
 
   ~TargetDelayTest() {
-    AudioCodingModule::Destroy(acm_);
   }
 
   void SetUp() {
-    EXPECT_TRUE(acm_ != NULL);
+    EXPECT_TRUE(acm_.get() != NULL);
 
     CodecInst codec;
     ASSERT_EQ(0, AudioCodingModule::Codec("L16", &codec, kSampleRateHz, 1));
@@ -108,7 +108,7 @@
     return acm_->LeastRequiredDelayMs();
   }
 
-  AudioCodingModule* acm_;
+  scoped_ptr<AudioCodingModule> acm_;
   WebRtcRTPHeader rtp_info_;
 };
 
diff --git a/modules/audio_coding/main/test/utility.h b/modules/audio_coding/main/test/utility.h
index 4e3d525..13c3e2c 100644
--- a/modules/audio_coding/main/test/utility.h
+++ b/modules/audio_coding/main/test/utility.h
@@ -52,14 +52,6 @@
     }                                                                          \
   } while(0)
 
-#define DESTROY_ACM(acm)                                                       \
-  do {                                                                         \
-    if (acm != NULL) {                                                         \
-      AudioCodingModule::Destroy(acm);                                         \
-      acm = NULL;                                                              \
-    }                                                                          \
-  } while(0)
-
 #define DELETE_POINTER(p)                                                      \
   do {                                                                         \
     if (p != NULL) {                                                           \
