diff --git a/daemon/src/Makefile.am b/daemon/src/Makefile.am
index a41ef7488264d1570730e639641bdffb1921efad..94d57850f5cdb515472d468d568f56e1fe0b77ab 100644
--- a/daemon/src/Makefile.am
+++ b/daemon/src/Makefile.am
@@ -39,7 +39,6 @@ noinst_LTLIBRARIES = libsflphone.la
 
 noinst_HEADERS = \
 		global.h \
-		codec.h \
 		conference.h \
 		voiplink.h \
 		preferences.h \
diff --git a/daemon/src/audio/codecs/alaw.cpp b/daemon/src/audio/codecs/alaw.cpp
index da917e718288d176461722de130d9262776c77db..0fffb18a434773391378b80a174a55deb8740df7 100644
--- a/daemon/src/audio/codecs/alaw.cpp
+++ b/daemon/src/audio/codecs/alaw.cpp
@@ -123,13 +123,13 @@ class Alaw : public sfl::AudioCodec {
 
 // the class factories
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Alaw;
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/audiocodec.h b/daemon/src/audio/codecs/audiocodec.h
index 004061bb5b18681fc6bbb18ee542ee1c8f401fee..8d5759d0bd97cb105b9e3821976d1932b9465bd5 100644
--- a/daemon/src/audio/codecs/audiocodec.h
+++ b/daemon/src/audio/codecs/audiocodec.h
@@ -36,11 +36,9 @@
 #include "cc_config.h"
 #include <ccrtp/formats.h> // for ost::DynamicPayloadFormat
 
-#include "codec.h"
-
 /* bump when codec binary interface changes */
-#define CODEC_ENTRY create_1_2_0
-#define CODEC_ENTRY_SYMBOL "create_1_2_0"
+#define AUDIO_CODEC_ENTRY create_1_2_0
+#define AUDIO_CODEC_ENTRY_SYMBOL "create_1_2_0"
 
 // We assume all decoders will be fed 20ms of audio or less
 // And we'll resample them to 44.1kHz or less
@@ -49,7 +47,7 @@
 
 namespace sfl {
 
-class AudioCodec : public Codec {
+class AudioCodec {
     public:
         AudioCodec(uint8 payload, const std::string &codecName, int clockRate,
                    int frameSize, int channel);
@@ -61,10 +59,7 @@ class AudioCodec : public Codec {
 
         virtual ~AudioCodec() {};
 
-        /**
-         * @Override
-         */
-        std::string getMimeSubtype() const;
+        virtual std::string getMimeSubtype() const;
 
         /**
          * Decode an input buffer and fill the output buffer with the decoded data
@@ -80,14 +75,8 @@ class AudioCodec : public Codec {
          */
         virtual int encode(unsigned char *dst, short *src, size_t buffer_size) = 0;
 
-        /**
-         * @Override
-         */
-        uint8 getPayloadType() const ;
+        virtual uint8 getPayloadType() const;
 
-        /**
-         * @Override
-         */
         void setPayloadType(uint8 pt) {
             payload_ = pt;
         }
@@ -97,15 +86,9 @@ class AudioCodec : public Codec {
          */
         bool hasDynamicPayload() const;
 
-        /**
-         * @Override
-         */
-        uint32 getClockRate() const;
+        virtual uint32 getClockRate() const;
 
-        /**
-         * @Override
-         */
-        double getBitRate() const;
+        virtual double getBitRate() const;
 
         /**
          * @return the framing size for this codec.
@@ -139,4 +122,8 @@ protected:
 };
 } // end namespace sfl
 
+
+typedef sfl::AudioCodec* create_t();
+typedef void destroy_t(sfl::AudioCodec* codec);
+
 #endif
diff --git a/daemon/src/audio/codecs/audiocodecfactory.cpp b/daemon/src/audio/codecs/audiocodecfactory.cpp
index 5318b1cd721bb508ff29496a90d56fe519e2d85a..f38c3487b793cd964a2db6fbe107281ad558b9d4 100644
--- a/daemon/src/audio/codecs/audiocodecfactory.cpp
+++ b/daemon/src/audio/codecs/audiocodecfactory.cpp
@@ -50,13 +50,13 @@
 AudioCodecFactory::AudioCodecFactory() :
     codecsMap_(), defaultCodecList_(), libCache_(), codecInMemory_()
 {
-    typedef std::vector<sfl::Codec*> CodecVector;
-    CodecVector codecDynamicList(scanCodecDirectory());
+    typedef std::vector<sfl::AudioCodec*> AudioCodecVector;
+    AudioCodecVector codecDynamicList(scanCodecDirectory());
 
     if (codecDynamicList.empty())
         ERROR("No codecs available");
     else {
-        for (CodecVector::const_iterator iter = codecDynamicList.begin();
+        for (AudioCodecVector::const_iterator iter = codecDynamicList.begin();
                 iter != codecDynamicList.end() ; ++iter) {
             codecsMap_[(int)(*iter)->getPayloadType()] = *iter;
             DEBUG("Loaded codec %s" , (*iter)->getMimeSubtype().c_str());
@@ -64,17 +64,18 @@ AudioCodecFactory::AudioCodecFactory() :
     }
 }
 
-void AudioCodecFactory::setDefaultOrder()
+void
+AudioCodecFactory::setDefaultOrder()
 {
     defaultCodecList_.clear();
-    for (CodecsMap::const_iterator i = codecsMap_.begin(); i != codecsMap_.end(); ++i)
+    for (AudioCodecsMap::const_iterator i = codecsMap_.begin(); i != codecsMap_.end(); ++i)
         defaultCodecList_.push_back(i->first);
 }
 
 std::string
 AudioCodecFactory::getCodecName(int payload) const
 {
-    CodecsMap::const_iterator iter = codecsMap_.find(payload);
+    AudioCodecsMap::const_iterator iter = codecsMap_.find(payload);
 
     if (iter != codecsMap_.end())
         return iter->second->getMimeSubtype();
@@ -83,10 +84,10 @@ AudioCodecFactory::getCodecName(int payload) const
 }
 
 std::vector<int32_t>
-AudioCodecFactory::getAudioCodecList() const
+AudioCodecFactory::getCodecList() const
 {
     std::vector<int32_t> list;
-    for (CodecsMap::const_iterator iter = codecsMap_.begin(); iter != codecsMap_.end(); ++iter)
+    for (AudioCodecsMap::const_iterator iter = codecsMap_.begin(); iter != codecsMap_.end(); ++iter)
         if (iter->second)
             list.push_back((int32_t) iter->first);
 
@@ -96,7 +97,7 @@ AudioCodecFactory::getAudioCodecList() const
 sfl::AudioCodec*
 AudioCodecFactory::getCodec(int payload) const
 {
-    CodecsMap::const_iterator iter = codecsMap_.find(payload);
+    AudioCodecsMap::const_iterator iter = codecsMap_.find(payload);
 
     if (iter != codecsMap_.end())
         return static_cast<sfl::AudioCodec *>(iter->second);
@@ -106,9 +107,10 @@ AudioCodecFactory::getCodec(int payload) const
     }
 }
 
-double AudioCodecFactory::getBitRate(int payload) const
+double
+AudioCodecFactory::getBitRate(int payload) const
 {
-    CodecsMap::const_iterator iter = codecsMap_.find(payload);
+    AudioCodecsMap::const_iterator iter = codecsMap_.find(payload);
 
     if (iter != codecsMap_.end())
         return iter->second->getBitRate();
@@ -117,9 +119,10 @@ double AudioCodecFactory::getBitRate(int payload) const
 }
 
 
-int AudioCodecFactory::getSampleRate(int payload) const
+int
+AudioCodecFactory::getSampleRate(int payload) const
 {
-    CodecsMap::const_iterator iter = codecsMap_.find(payload);
+    AudioCodecsMap::const_iterator iter = codecsMap_.find(payload);
 
     if (iter != codecsMap_.end())
         return iter->second->getClockRate();
@@ -127,7 +130,8 @@ int AudioCodecFactory::getSampleRate(int payload) const
         return 0;
 }
 
-void AudioCodecFactory::saveActiveCodecs(const std::vector<std::string>& list)
+void
+AudioCodecFactory::saveActiveCodecs(const std::vector<std::string>& list)
 {
     defaultCodecList_.clear();
     // list contains the ordered payload of active codecs picked by the user
@@ -144,14 +148,15 @@ void AudioCodecFactory::saveActiveCodecs(const std::vector<std::string>& list)
 
 AudioCodecFactory::~AudioCodecFactory()
 {
-    for (std::vector<CodecHandlePointer>::const_iterator iter =
-                codecInMemory_.begin(); iter != codecInMemory_.end(); ++iter)
+    for (std::vector<AudioCodecHandlePointer>::iterator iter =
+         codecInMemory_.begin(); iter != codecInMemory_.end(); ++iter)
         unloadCodec(*iter);
 }
 
-std::vector<sfl::Codec*> AudioCodecFactory::scanCodecDirectory()
+std::vector<sfl::AudioCodec*>
+AudioCodecFactory::scanCodecDirectory()
 {
-    std::vector<sfl::Codec*> codecs;
+    std::vector<sfl::AudioCodec*> codecs;
     std::vector<std::string> dirToScan;
 
     dirToScan.push_back(std::string(HOMEDIR) + DIR_SEPARATOR_STR "." PACKAGE "/");
@@ -184,7 +189,7 @@ std::vector<sfl::Codec*> AudioCodecFactory::scanCodecDirectory()
                 continue;
 
             if (seemsValid(file) && !alreadyInCache(file)) {
-                sfl::Codec* audioCodec = loadCodec(dirStr + file);
+                sfl::AudioCodec *audioCodec(loadCodec(dirStr + file));
 
                 if (audioCodec) {
                     codecs.push_back(audioCodec);
@@ -199,7 +204,8 @@ std::vector<sfl::Codec*> AudioCodecFactory::scanCodecDirectory()
     return codecs;
 }
 
-sfl::AudioCodec *AudioCodecFactory::loadCodec(const std::string &path)
+sfl::AudioCodec *
+AudioCodecFactory::loadCodec(const std::string &path)
 {
     void * codecHandle = dlopen(path.c_str(), RTLD_NOW);
 
@@ -208,7 +214,7 @@ sfl::AudioCodec *AudioCodecFactory::loadCodec(const std::string &path)
         return NULL;
     }
 
-    create_t* createCodec = (create_t*) dlsym(codecHandle, CODEC_ENTRY_SYMBOL);
+    create_t* createCodec = (create_t*) dlsym(codecHandle, AUDIO_CODEC_ENTRY_SYMBOL);
     const char *error = dlerror();
 
     if (error) {
@@ -218,15 +224,16 @@ sfl::AudioCodec *AudioCodecFactory::loadCodec(const std::string &path)
 
     sfl::AudioCodec *a = static_cast<sfl::AudioCodec *>(createCodec());
     if (a)
-        codecInMemory_.push_back(CodecHandlePointer(a, codecHandle));
+        codecInMemory_.push_back(AudioCodecHandlePointer(a, codecHandle));
 
     return a;
 }
 
 
-void AudioCodecFactory::unloadCodec(CodecHandlePointer p)
+void
+AudioCodecFactory::unloadCodec(AudioCodecHandlePointer &ptr)
 {
-    destroy_t* destroyCodec = (destroy_t*) dlsym(p.second , "destroy");
+    destroy_t* destroyCodec = (destroy_t*) dlsym(ptr.second , "destroy");
 
     const char *error = dlerror();
 
@@ -235,34 +242,37 @@ void AudioCodecFactory::unloadCodec(CodecHandlePointer p)
         return;
     }
 
-    if (p.first)
-        destroyCodec(p.first);
+    if (ptr.first)
+        destroyCodec(ptr.first);
 
-    if (p.second)
-        dlclose(p.second);
+    if (ptr.second)
+        dlclose(ptr.second);
 }
 
-sfl::AudioCodec* AudioCodecFactory::instantiateCodec(int payload) const
+sfl::AudioCodec*
+AudioCodecFactory::instantiateCodec(int payload) const
 {
-    std::vector< CodecHandlePointer >::const_iterator iter;
+    std::vector<AudioCodecHandlePointer>::const_iterator iter;
 
+    sfl::AudioCodec *result = NULL;
     for (iter = codecInMemory_.begin(); iter != codecInMemory_.end(); ++iter) {
         if (iter->first->getPayloadType() == payload) {
-            create_t* createCodec = (create_t*) dlsym(iter->second , CODEC_ENTRY_SYMBOL);
+            create_t* createCodec = (create_t*) dlsym(iter->second , AUDIO_CODEC_ENTRY_SYMBOL);
 
             const char *error = dlerror();
 
             if (error)
                 ERROR("%s", error);
             else
-                return static_cast<sfl::AudioCodec *>(createCodec());
+                result = static_cast<sfl::AudioCodec *>(createCodec());
         }
     }
 
-    return NULL;
+    return result;
 }
 
-bool AudioCodecFactory::seemsValid(const std::string &lib)
+bool
+AudioCodecFactory::seemsValid(const std::string &lib)
 {
     // The name of the shared library seems valid  <==> it looks like libcodec_xxx.so
     // We check this
@@ -312,9 +322,10 @@ AudioCodecFactory::alreadyInCache(const std::string &lib)
     return std::find(libCache_.begin(), libCache_.end(), lib) != libCache_.end();
 }
 
-bool AudioCodecFactory::isCodecLoaded(int payload) const
+bool
+AudioCodecFactory::isCodecLoaded(int payload) const
 {
-    CodecsMap::const_iterator iter;
+    AudioCodecsMap::const_iterator iter;
 
     for (iter = codecsMap_.begin(); iter != codecsMap_.end(); ++iter)
         if (iter->first == payload)
diff --git a/daemon/src/audio/codecs/audiocodecfactory.h b/daemon/src/audio/codecs/audiocodecfactory.h
index 0a98ae582675a02a9f8020d9b14ad77575890ade..137b7c2497254966a62a602bdd341c192b8add13 100644
--- a/daemon/src/audio/codecs/audiocodecfactory.h
+++ b/daemon/src/audio/codecs/audiocodecfactory.h
@@ -45,9 +45,6 @@
  * @brief Handle audio codecs, load them in memory
  */
 
-/** Maps a pointer on an audiocodec object to a payload */
-typedef std::map<int, sfl::Codec*> CodecsMap;
-
 class AudioCodecFactory {
     public:
         AudioCodecFactory();
@@ -62,7 +59,7 @@ class AudioCodecFactory {
          */
         std::string getCodecName(int payload) const;
 
-        std::vector<int32_t > getAudioCodecList() const;
+        std::vector<int32_t > getCodecList() const;
         /**
          * Get the codec object associated with the payload
          * @param payload The payload looked for
@@ -119,16 +116,18 @@ class AudioCodecFactory {
         bool isCodecLoaded(int payload) const;
 
     private:
-        /** Enable us to keep the handle pointer on the codec dynamicaly loaded so that we could destroy when we dont need it anymore */
-        typedef std::pair<sfl::Codec* , void*> CodecHandlePointer;
+        /** Maps a pointer on an audiocodec object to a payload */
+        typedef std::map<int, sfl::AudioCodec*> AudioCodecsMap;
 
+        /** Enable us to keep the handle pointer on the codec dynamicaly loaded so that we could destroy when we dont need it anymore */
+        typedef std::pair<sfl::AudioCodec*, void*> AudioCodecHandlePointer;
 
         /**
          * Scan the installation directory ( --prefix configure option )
          * And load the dynamic library
          * @return std::vector<AudioCodec*> The list of the codec object successfully loaded in memory
          */
-        std::vector<sfl::Codec *> scanCodecDirectory();
+        std::vector<sfl::AudioCodec *> scanCodecDirectory();
 
         /**
          * Load a codec
@@ -139,9 +138,9 @@ class AudioCodecFactory {
 
         /**
          * Unload a codec
-         * @param CodecHandlePointer	The map containing the pointer on the object and the pointer on the handle function
+         * @param AudioCodecHandlePointer The map containing the pointer on the object and the pointer on the handle function
          */
-        void unloadCodec(CodecHandlePointer);
+        void unloadCodec(AudioCodecHandlePointer &ptr);
 
         /**
          * Check if the files found in searched directories seems valid
@@ -163,7 +162,7 @@ class AudioCodecFactory {
         /**
          * Map the payload of a codec and the object associated ( AudioCodec * )
          */
-        CodecsMap codecsMap_;
+        AudioCodecsMap codecsMap_;
 
         /**
          * Vector containing a default order for the codecs
@@ -179,7 +178,7 @@ class AudioCodecFactory {
          * Vector containing pairs
          * Pair between pointer on function handle and pointer on audiocodec object
          */
-        std::vector< CodecHandlePointer > codecInMemory_;
+        std::vector<AudioCodecHandlePointer> codecInMemory_;
 };
 
 #endif // __CODEC_DESCRIPTOR_H__
diff --git a/daemon/src/audio/codecs/g722.cpp b/daemon/src/audio/codecs/g722.cpp
index fb8d45fb29d42e9b7fd5e8b7220098d5ea1fe6a4..a6965718ed063c87143ac3e82843d8525d9e8f2f 100644
--- a/daemon/src/audio/codecs/g722.cpp
+++ b/daemon/src/audio/codecs/g722.cpp
@@ -758,13 +758,13 @@ class G722 : public sfl::AudioCodec {
 
 // the class factories
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new G722;
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/g729.cpp b/daemon/src/audio/codecs/g729.cpp
index 7f54dcacfdc47d145af69ac26eb614780e1f47a1..a263ceb1f38215d387e0cd0ca435b81f457ebc9c 100644
--- a/daemon/src/audio/codecs/g729.cpp
+++ b/daemon/src/audio/codecs/g729.cpp
@@ -92,7 +92,7 @@ void G729::loadError(const char *error)
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     try {
         return new G729;
@@ -103,7 +103,7 @@ extern "C" sfl::Codec* CODEC_ENTRY()
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/gsmcodec.cpp b/daemon/src/audio/codecs/gsmcodec.cpp
index ab1fdc2d26db482aaf2fafe7cfe5c833c05f0720..67280c593daf4813829de7e69fc419276c58b3da 100644
--- a/daemon/src/audio/codecs/gsmcodec.cpp
+++ b/daemon/src/audio/codecs/gsmcodec.cpp
@@ -86,13 +86,13 @@ class Gsm : public sfl::AudioCodec {
 };
 
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Gsm;
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/ilbc.cpp b/daemon/src/audio/codecs/ilbc.cpp
index f5c7f0fc22eb6f84142366ba3646d67a3982a375..53b1ad5d3af7b25d15a90c2af457fe3d1e9a0392 100644
--- a/daemon/src/audio/codecs/ilbc.cpp
+++ b/daemon/src/audio/codecs/ilbc.cpp
@@ -85,12 +85,12 @@ class Ilbc: public sfl::AudioCodec {
 };
 
 // the class factories
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Ilbc;
 }
 
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/opus.cpp b/daemon/src/audio/codecs/opus.cpp
index 78bbaf1d88a43c7becc2ed0818f4c88fd2b4061e..4cbd83bafa90f54e2065574c946e55c52051d436 100644
--- a/daemon/src/audio/codecs/opus.cpp
+++ b/daemon/src/audio/codecs/opus.cpp
@@ -113,7 +113,7 @@ void Opus::loadError(const char *error)
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     try {
         return new Opus;
@@ -124,7 +124,7 @@ extern "C" sfl::Codec* CODEC_ENTRY()
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/speexcodec_nb.cpp b/daemon/src/audio/codecs/speexcodec_nb.cpp
index fb4171acf9a2aab538bfaa70bb0bc72bd0e1ce6f..03f8669dc7882c43abe6ac7657549c4d58076edb 100644
--- a/daemon/src/audio/codecs/speexcodec_nb.cpp
+++ b/daemon/src/audio/codecs/speexcodec_nb.cpp
@@ -33,13 +33,13 @@
 #include "speexcodec.h"
 
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Speex(110, 8000, 160, 24, true, &speex_nb_mode);
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/speexcodec_ub.cpp b/daemon/src/audio/codecs/speexcodec_ub.cpp
index 813057083664c709274dbedfcd1fe2bbcb22c862..a1b2fc6458df4434ad47f3f84266c309e89b6f81 100644
--- a/daemon/src/audio/codecs/speexcodec_ub.cpp
+++ b/daemon/src/audio/codecs/speexcodec_ub.cpp
@@ -33,13 +33,13 @@
 #include "speexcodec.h"
 
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Speex(112, 32000, 640, 0, true, &speex_uwb_mode);
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/speexcodec_wb.cpp b/daemon/src/audio/codecs/speexcodec_wb.cpp
index a57c39d3c3adc686f70993049bf2382741549d60..790c2776014432a5ed7e675b7ff11f27099277a3 100644
--- a/daemon/src/audio/codecs/speexcodec_wb.cpp
+++ b/daemon/src/audio/codecs/speexcodec_wb.cpp
@@ -33,13 +33,13 @@
 #include "speexcodec.h"
 
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Speex(111, 16000, 320, 42, false, &speex_wb_mode);
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/audio/codecs/ulaw.cpp b/daemon/src/audio/codecs/ulaw.cpp
index 41c35bec16f90057213c77ec589aa2531c5a34c9..375eb3892a24b7fc2ea46b9f6300cc7ea28ffa24 100644
--- a/daemon/src/audio/codecs/ulaw.cpp
+++ b/daemon/src/audio/codecs/ulaw.cpp
@@ -115,13 +115,13 @@ class Ulaw : public sfl::AudioCodec {
 
 // the class factories
 // cppcheck-suppress unusedFunction
-extern "C" sfl::Codec* CODEC_ENTRY()
+extern "C" sfl::AudioCodec* AUDIO_CODEC_ENTRY()
 {
     return new Ulaw;
 }
 
 // cppcheck-suppress unusedFunction
-extern "C" void destroy(sfl::Codec* a)
+extern "C" void destroy(sfl::AudioCodec* a)
 {
     delete a;
 }
diff --git a/daemon/src/codec.h b/daemon/src/codec.h
deleted file mode 100644
index ab63a78ab309c3a5028d39eb180f09aae5b02e1f..0000000000000000000000000000000000000000
--- a/daemon/src/codec.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- *  Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
- *  Author: Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 3 of the License, or
- *  (at your option) any later version.
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
- *
- *  Additional permission under GNU GPL version 3 section 7:
- *
- *  If you modify this program, or any covered work, by linking or
- *  combining it with the OpenSSL project's OpenSSL library (or a
- *  modified version of that library), containing parts covered by the
- *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
- *  grants you additional permission to convey the resulting work.
- *  Corresponding Source for a non-source form of such a combination
- *  shall include the source code for the parts of OpenSSL used as well
- *  as that of the covered work.
- */
-
-#ifndef CODEC_H_
-#define CODEC_H_
-
-#include "cc_config.h" // for types
-
-/**
- * Interface for both audio codecs as well as video codecs.
- */
-namespace sfl {
-class Codec {
-    public:
-        virtual ~Codec() {}
-        /**
-         * @return The mimesubtype for this codec. Eg. : "theora"
-         */
-        virtual std::string getMimeSubtype() const = 0;
-
-        /**
-         * @return payload type numeric identifier.
-         */
-        virtual uint8 getPayloadType() const = 0;
-
-        /**
-         * @return RTP clock rate in Hz.
-         */
-        virtual uint32 getClockRate() const = 0;
-
-        /**
-         * @return The bitrate for which this codec is configured // TODO deal with VBR case.
-         */
-        virtual double getBitRate() const = 0;
-};
-}
-
-typedef sfl::Codec* create_t();
-
-typedef void destroy_t (sfl::Codec*);
-
-#endif // CODEC_H_
diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp
index 0a5b8ff2696ccca79ef00ae71937a56a1f1c99b9..6bc898222385b9b794b5413e0d431d895ed2302d 100644
--- a/daemon/src/dbus/configurationmanager.cpp
+++ b/daemon/src/dbus/configurationmanager.cpp
@@ -183,7 +183,7 @@ std::vector<std::string> ConfigurationManager::getAccountList()
  */
 std::vector<int32_t> ConfigurationManager::getAudioCodecList()
 {
-    std::vector<int32_t> list(Manager::instance().audioCodecFactory.getAudioCodecList());
+    std::vector<int32_t> list(Manager::instance().audioCodecFactory.getCodecList());
 
     if (list.empty())
         errorAlert(CODECS_NOT_LOADED);
diff --git a/daemon/src/iax/iaxvoiplink.cpp b/daemon/src/iax/iaxvoiplink.cpp
index 12e4a95d012804c26fb4ae178d395f53a7f651dd..6a46ded739b5ad977ee5491e08ef4b26b25b5bce 100644
--- a/daemon/src/iax/iaxvoiplink.cpp
+++ b/daemon/src/iax/iaxvoiplink.cpp
@@ -478,7 +478,7 @@ std::string
 IAXVoIPLink::getCurrentAudioCodecNames(Call *c) const
 {
     IAXCall *call = static_cast<IAXCall*>(c);
-    sfl::Codec *audioCodec = Manager::instance().audioCodecFactory.getCodec(call->getAudioCodec());
+    sfl::AudioCodec *audioCodec = Manager::instance().audioCodecFactory.getCodec(call->getAudioCodec());
     return audioCodec ? audioCodec->getMimeSubtype() : "";
 }
 
diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index ebf59ebfb1aeb342f7d0535e64a300c09e5f7c8f..fa3557a06397ab86f462c7fcb0573e2a9a71bd6a 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -1783,7 +1783,7 @@ void ManagerImpl::ringtone(const std::string& accountID)
             if (ringchoice.find(".wav") != std::string::npos)
                 audiofile_.reset(new WaveFile(ringchoice, audioLayerSmplr));
             else {
-                sfl::Codec *codec;
+                sfl::AudioCodec *codec;
                 if (ringchoice.find(".ul") != std::string::npos or ringchoice.find(".au") != std::string::npos)
                     codec = audioCodecFactory.getCodec(PAYLOAD_CODEC_ULAW);
                 else
diff --git a/daemon/src/sip/sdp.cpp b/daemon/src/sip/sdp.cpp
index 5df6c7be82160cb7b83edd63995d8416dfea9208..2d1ac6dee669b9989a876a7dee61e6d3a163a7d4 100644
--- a/daemon/src/sip/sdp.cpp
+++ b/daemon/src/sip/sdp.cpp
@@ -218,7 +218,7 @@ Sdp::setMediaDescriptorLines(bool audio)
         int payload;
 
         if (audio) {
-            sfl::Codec *codec = audio_codec_list_[i];
+            sfl::AudioCodec *codec = audio_codec_list_[i];
             payload = codec->getPayloadType();
             enc_name = codec->getMimeSubtype();
             clock_rate = codec->getClockRate();
@@ -288,7 +288,7 @@ void Sdp::addRTCPAttribute(pjmedia_sdp_media *med)
     std::ostringstream os;
     os << localIpAddr_ << ":" << (localAudioPort_ + 1);
     const std::string str(os.str());
-    const pj_str_t input_str = {(char*) str.c_str(), str.size()};
+    pj_str_t input_str = pj_str((char*) str.c_str());
     pj_sockaddr outputAddr;
     pj_status_t status = pj_sockaddr_parse(PJ_AF_UNSPEC, 0, &input_str, &outputAddr);
     if (status != PJ_SUCCESS) {
@@ -336,7 +336,7 @@ void Sdp::setLocalMediaAudioCapabilities(const vector<int> &selectedCodecs)
 
     audio_codec_list_.clear();
     for (vector<int>::const_iterator i = selectedCodecs.begin(); i != selectedCodecs.end(); ++i) {
-        sfl::Codec *codec = Manager::instance().audioCodecFactory.getCodec(*i);
+        sfl::AudioCodec *codec = Manager::instance().audioCodecFactory.getCodec(*i);
 
         if (codec)
             audio_codec_list_.push_back(codec);
diff --git a/daemon/src/sip/sdp.h b/daemon/src/sip/sdp.h
index 5e1e133dc721a1089ec228dc985ba0fde3b1340f..78636d97dab94fda4ec7290e9be38b45ff1bffff 100644
--- a/daemon/src/sip/sdp.h
+++ b/daemon/src/sip/sdp.h
@@ -49,7 +49,6 @@
 
 namespace sfl {
 class AudioCodec;
-class Codec;
 }
 
 class SdpException : public std::runtime_error {
@@ -293,7 +292,7 @@ class Sdp {
         /**
          * Codec Map used for offer
          */
-        std::vector<sfl::Codec *> audio_codec_list_;
+        std::vector<sfl::AudioCodec *> audio_codec_list_;
         std::vector<std::map<std::string, std::string> > video_codec_list_;
 
         /**