diff --git a/daemon/src/audio/alsa/alsalayer.cpp b/daemon/src/audio/alsa/alsalayer.cpp
index e1798b4c82ca8886a25c5294ec40db292a040b9e..29f284f860d6ba9bcaf88dce7b4694baf6fc1fa4 100644
--- a/daemon/src/audio/alsa/alsalayer.cpp
+++ b/daemon/src/audio/alsa/alsalayer.cpp
@@ -162,8 +162,6 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int indexRing, int sampleRate,
 
     // use 1 sec buffer for resampling
     converter_ = new SamplerateConverter (audioSampleRate_);
-    dcblocker_ = new DcBlocker;
-    audiofilter_ = new AudioProcessing (dcblocker_);
 }
 
 void
@@ -171,8 +169,7 @@ AlsaLayer::startStream (void)
 {
     _debug ("Audio: Start stream");
 
-    if (audiofilter_)
-        audiofilter_->resetAlgorithm();
+	dcblocker_.reset();
 
     if (is_playback_running_ and is_capture_running_)
         return;
@@ -931,12 +928,12 @@ void AlsaLayer::audioCallback (void)
     	int outBytes = outSamples * sizeof (SFLDataFormat);
         SFLDataFormat* rsmpl_out = (SFLDataFormat*) malloc (outBytes);
         converter_->resample ( (SFLDataFormat*) in, rsmpl_out, mainBufferSampleRate, audioSampleRate_, toPutSamples);
-        audiofilter_->processAudio (rsmpl_out, outBytes);
+        dcblocker_.process(rsmpl_out, outBytes);
         getMainBuffer()->putData (rsmpl_out, outBytes);
         free (rsmpl_out);
     } else {
         SFLDataFormat* filter_out = (SFLDataFormat*) malloc (toPutBytes);
-		audiofilter_->processAudio (in, filter_out, toPutBytes);
+        dcblocker_.process(in, filter_out, toPutBytes);
 		getMainBuffer()->putData (filter_out, toPutBytes);
 		free (filter_out);
     }
diff --git a/daemon/src/audio/audiolayer.cpp b/daemon/src/audio/audiolayer.cpp
index 55346ad821a640792a43347868f94384e89bc441..b9a2a66ca7f329cff793cf7407ba6894c89f3f11 100644
--- a/daemon/src/audio/audiolayer.cpp
+++ b/daemon/src/audio/audiolayer.cpp
@@ -49,8 +49,6 @@ AudioLayer::AudioLayer (int type)
     , outChannel_ (1)
     , errorMessage_ (0)
     , mutex_ ()
-    , dcblocker_ (0)
-    , audiofilter_ (0)
 	, audioPref(Manager::instance().audioPreference)
     , lastNotificationTime_ (0)
 {}
@@ -58,8 +56,6 @@ AudioLayer::AudioLayer (int type)
 
 AudioLayer::~AudioLayer ()
 {
-    delete audiofilter_;
-    delete dcblocker_;
 }
 
 void AudioLayer::flushMain (void)
diff --git a/daemon/src/audio/audiolayer.h b/daemon/src/audio/audiolayer.h
index 45b52d81e7771239c635e43342100b355268b103..20e5458f101f6fd517627ad577fa031197c5c977 100644
--- a/daemon/src/audio/audiolayer.h
+++ b/daemon/src/audio/audiolayer.h
@@ -39,15 +39,15 @@
 
 #include "manager.h"
 #include "ringbuffer.h"
+#include "dcblocker.h"
 
 /**
  * @file  audiolayer.h
  * @brief Main sound class. Manages the data transfers between the application and the hardware.
  */
 
-class DcBlocker;
 class MainBuffer;
-class AudioProcessing;
+
 namespace ost {
     class Time;
 }
@@ -296,8 +296,7 @@ class AudioLayer
          */
         ost::Mutex mutex_;
 
-        DcBlocker *dcblocker_;
-        AudioProcessing *audiofilter_;
+        DcBlocker dcblocker_;
 
         AudioPreference &audioPref;
 
diff --git a/daemon/src/audio/pulseaudio/pulselayer.cpp b/daemon/src/audio/pulseaudio/pulselayer.cpp
index 90fb23dfffe2b8753b4d1b054fd7bf784a5b3742..1226f1b4b0c547e980e057a5255d81a7c2982004 100644
--- a/daemon/src/audio/pulseaudio/pulselayer.cpp
+++ b/daemon/src/audio/pulseaudio/pulselayer.cpp
@@ -382,10 +382,6 @@ void PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int indexR
 
     // use 1 sec buffer for resampling
     converter_ = new SamplerateConverter (audioSampleRate_);
-
-    // Instantiate the algorithm
-    dcblocker_ = new DcBlocker;
-    audiofilter_ = new AudioProcessing (dcblocker_);
 }
 
 
@@ -723,13 +719,13 @@ void PulseLayer::readFromMic (void)
 		SFLDataFormat* rsmpl_out = (SFLDataFormat*) pa_xmalloc (outBytes);
 		converter_->resample ( (SFLDataFormat *) data, rsmpl_out, mainBufferSampleRate, audioSampleRate_, inSamples);
 		// remove dc offset
-		audiofilter_->processAudio (rsmpl_out, outBytes);
+		dcblocker_.process(rsmpl_out, outBytes);
 		getMainBuffer()->putData (rsmpl_out, outBytes);
 		pa_xfree (rsmpl_out);
 	} else {
 		SFLDataFormat* filter_out = (SFLDataFormat*) pa_xmalloc (r);
 		// remove dc offset
-		audiofilter_->processAudio ( (SFLDataFormat *) data, filter_out, r);
+		dcblocker_.process( (SFLDataFormat *) data, filter_out, r);
 		getMainBuffer()->putData (filter_out, r);
 		pa_xfree (filter_out);
 	}
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index eea8003efb8daddcba14f1591d2f404ee2bd009f..38e552dd5d536fc980680f2113f137bf503fdf83 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -2425,20 +2425,16 @@ std::string ManagerImpl::getCurrentAudioOutputPlugin (void) const
 
 std::string ManagerImpl::getNoiseSuppressState (void) const
 {
-    // noise suppress disabled by default
     return audioPreference.getNoiseReduce() ? "enabled" : "disabled";
 }
 
 void ManagerImpl::setNoiseSuppressState (const std::string &state)
 {
-    bool isEnabled = (state == "enabled");
-
-    audioPreference.setNoiseReduce (isEnabled);
+    audioPreference.setNoiseReduce (state == "enabled");
 }
 
 std::string ManagerImpl::getEchoCancelState() const
 {
-	// echo canceller disabled by default
 	return audioPreference.getEchoCancel() ? "enabled" : "disabled";
 }