diff --git a/daemon/src/audio/codecs/Makefile.am b/daemon/src/audio/codecs/Makefile.am
index bcd90a585e1300cd08326e257c7feaf53f5b74ac..36a051ecd02d0870b2872e2adb40ea273fac5577 100644
--- a/daemon/src/audio/codecs/Makefile.am
+++ b/daemon/src/audio/codecs/Makefile.am
@@ -3,6 +3,7 @@ include $(top_srcdir)/globals.mak
 noinst_LTLIBRARIES = libcodecdescriptor.la
 
 libcodecdescriptor_la_SOURCES = audiocodecfactory.cpp audiocodec.cpp
+libcodecdescriptor_la_LIBADD = $(CCRTP_LIBS)
 
 if BUILD_GSM
 GSM_LIB = libcodec_gsm.so
diff --git a/daemon/src/audio/codecs/celtcodec.cpp b/daemon/src/audio/codecs/celtcodec.cpp
index 5dabb59acd937b284609cc998ac45c2747a5fdfc..276728821bffa211bddfffd5b1d8a17dae720acc 100644
--- a/daemon/src/audio/codecs/celtcodec.cpp
+++ b/daemon/src/audio/codecs/celtcodec.cpp
@@ -29,9 +29,9 @@
  */
 
 #include "audiocodec.h"
-#include "logger.h"
 #include <cstdio>
 #include <celt/celt.h>
+#include <stdexcept>
 
 
 class Celt : public sfl::AudioCodec
@@ -53,39 +53,39 @@ class Celt : public sfl::AudioCodec
             if (error != CELT_OK) {
                 switch (error) {
                     case CELT_BAD_ARG:
-                        _error ("Celt: An (or more) invalid argument (e.g. out of range)\n");
+                        throw std::runtime_error("Celt: An (or more) invalid argument (e.g. out of range)\n");
                         break;
                     case CELT_INVALID_MODE:
-                        _error("Celt: The mode struct passed is invalid\n");
+                        throw std::runtime_error("Celt: The mode struct passed is invalid\n");
                         break;
                     case CELT_INTERNAL_ERROR:
-                        _error("Celt: An internal error was detected\n");
+                        throw std::runtime_error("Celt: An internal error was detected\n");
                         break;
                     case CELT_CORRUPTED_DATA:
-                        _error("Celt: The data passed (e.g. compressed data to decoder) is corrupted\n");
+                        throw std::runtime_error("Celt: The data passed (e.g. compressed data to decoder) is corrupted\n");
                         break;
                     case CELT_UNIMPLEMENTED:
-                        _error("Celt: Invalid/unsupported request numbe\n");
+                        throw std::runtime_error("Celt: Invalid/unsupported request numbe\n");
                         break;
                     case CELT_INVALID_STATE:
-                        _error("Celt: An encoder or decoder structure is invalid or already freed\n");
+                        throw std::runtime_error("Celt: An encoder or decoder structure is invalid or already freed\n");
                         break;
                     case CELT_ALLOC_FAIL:
-                        _error("Celt: Memory allocation has failed\n");
+                        throw std::runtime_error("Celt: Memory allocation has failed\n");
                         break;
                     default:
-                        _error("Celt: Unknown error %d\n", error);
+                        throw std::runtime_error("Celt: Unknown error");
                 }
 
             }
 
             if (_mode == NULL)
-                _error("Celt: Failed to create Celt mode");
+                throw std::runtime_error("Celt: Failed to create Celt mode");
 
             // bytes_per_packet = 1024;
             // if (bytes_per_packet < 0 || bytes_per_packet > MAX_PACKET)
             // {
-            //     _error("bytes per packet must be between 0 and %d");
+            //     throw std::runtime_error("bytes per packet must be between 0 and %d");
             // }
 
             // celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size);
diff --git a/daemon/src/audio/codecs/gsmcodec.cpp b/daemon/src/audio/codecs/gsmcodec.cpp
index 1bdac48a90e51c17d4e591a8f800364f3679db2b..30c66cc6d873ab5cd4f31853f80911e05a88f66b 100644
--- a/daemon/src/audio/codecs/gsmcodec.cpp
+++ b/daemon/src/audio/codecs/gsmcodec.cpp
@@ -31,8 +31,8 @@
 
 
 #include "audiocodec.h"
-#include "logger.h"
 #include <cassert>
+#include <stdexcept>
 
 extern "C" {
 #include <gsm/gsm.h>
@@ -55,10 +55,10 @@ class Gsm : public sfl::AudioCodec
             _hasDynamicPayload = false;
 
             if (! (_decode_gsmhandle = gsm_create()))
-                _error("ERROR: decode_gsm_create\n");
+                throw std::runtime_error("ERROR: decode_gsm_create\n");
 
             if (! (_encode_gsmhandle = gsm_create()))
-                _error("ERROR: encode_gsm_create\n");
+                throw std::runtime_error("ERROR: encode_gsm_create\n");
         }
 
         Gsm (const Gsm&);
@@ -75,7 +75,7 @@ class Gsm : public sfl::AudioCodec
         	(void) buf_size;
 
             if (gsm_decode (_decode_gsmhandle, (gsm_byte*) src, (gsm_signal*) dst) < 0)
-                _error("ERROR: gsm_decode\n");
+                throw std::runtime_error("ERROR: gsm_decode\n");
 
             return _frameSize;
         }