diff --git a/daemon/src/Makefile.am b/daemon/src/Makefile.am
index cc610fdf19de8326d7250dafe1bfd4ce729f6ba1..e0cc364b6f5563c38a299d35c362529158b78315 100644
--- a/daemon/src/Makefile.am
+++ b/daemon/src/Makefile.am
@@ -63,7 +63,6 @@ libsflphone_la_LDFLAGS = \
 
 libsflphone_la_CFLAGS = \
 		@CCGNU2_CFLAGS@ \
-		@CCEXT2_CFLAGS@ \
 		@ZRTPCPP_CFLAGS@ \
 		$(PJSIP_CFLAGS) \
 		@CCRTP_CFLAGS@ \
@@ -82,7 +81,7 @@ libsflphone_la_SOURCES = conference.cpp \
 		eventthread.cpp \
 		call.cpp \
 		account.cpp \
-		logger.cpp \
+		logger.c \
 		numbercleaner.cpp \
 		fileutils.cpp \
 		threadloop.cpp \
diff --git a/daemon/src/history/history.cpp b/daemon/src/history/history.cpp
index eb634ad3fdf5ceae35ead6068f5935b5d7b68c10..d944abd06c64cd84ee1167938e68dba45928fd64 100644
--- a/daemon/src/history/history.cpp
+++ b/daemon/src/history/history.cpp
@@ -109,7 +109,7 @@ void History::ensurePath()
             // If directory	creation failed
             if (errno != EEXIST) {
                 DEBUG("Cannot create directory: %s", userdata.c_str());
-                Logger::strErr();
+                strErr();
                 return;
             }
         }
diff --git a/daemon/src/logger.cpp b/daemon/src/logger.c
similarity index 84%
rename from daemon/src/logger.cpp
rename to daemon/src/logger.c
index 3281a74b6520cff12b5b9b6313bbc806d0ebeaa9..f7751918369ecb6c8bf3d60dd749b5e086915c86 100644
--- a/daemon/src/logger.cpp
+++ b/daemon/src/logger.c
@@ -28,17 +28,16 @@
  *  as that of the covered work.
  */
 
-#include "logger.h"
-#include <cstdarg>
-#include <string>
-#include <cstdio>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
 
-namespace Logger {
+#include "logger.h"
 
-bool consoleLog = false;
-bool debugMode = false;
+static int consoleLog;
+static int debugMode;
 
-void log(const int level, const char* format, ...)
+void logger(const int level, const char* format, ...)
 {
     if (!debugMode && level == LOG_DEBUG)
         return;
@@ -71,28 +70,25 @@ void log(const int level, const char* format, ...)
     }
 }
 
-void setConsoleLog(bool c)
+void setConsoleLog(int c)
 {
     consoleLog = c;
 }
 
-void setDebugMode(bool d)
+void setDebugMode(int d)
 {
     debugMode = d;
 }
 
-bool getDebugMode()
+int getDebugMode(void)
 {
     return debugMode;
 }
 
-void strErr(const char *msg)
+void strErr(void)
 {
 #ifdef __GLIBC__
-    if (strlen(msg))
-        ERROR("%s: %m", msg);
-    else
-        ERROR("%m");
+    ERROR("%m");
 #else
     char buf[1000];
     const char *errstr;
@@ -109,10 +105,6 @@ void strErr(const char *msg)
             break;
     }
 
-    if (strlen(msg))
-        ERROR("%s: %s", msg, errstr);
-    else
-        ERROR("%s", errstr);
+    ERROR("%s", errstr);
 #endif
 }
-}
diff --git a/daemon/src/logger.h b/daemon/src/logger.h
index 0ae6e32fefd97ba888c9796f12799e8fe9e9a8e0..a1059e8624ce2a379dddce664bd0891b7ba30df8 100644
--- a/daemon/src/logger.h
+++ b/daemon/src/logger.h
@@ -28,32 +28,50 @@
  *  as that of the covered work.
  */
 
-#ifndef LOGGER_H_
-#define LOGGER_H_
+#ifndef H_LOGGER
+#define H_LOGGER
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
 #include <pthread.h>
+
 #ifdef __ANDROID__
-#include <cstring>
 #include <android/log.h>
 #else
 #include <syslog.h>
 #endif
 
-#include <cstring>
+/**
+ * Print something, coloring it depending on the level
+ */
+void logger(const int level, const char *format, ...);
+
+/**
+ * Allow writing on the console
+ */
+void setConsoleLog(int c);
+
+/**
+ * When debug mode is not set, logging will not print anything
+ */
+void setDebugMode(int d);
 
-namespace Logger {
-void log(const int, const char*, ...);
+/**
+ * Return the current mode
+ */
+int getDebugMode(void);
 
-void setConsoleLog(bool);
-void setDebugMode(bool);
-bool getDebugMode();
 /**
- * Thread-safe function to print the stringified contents of errno appended to a
- * user defined message */
-void strErr(const char *message = "");
-};
+ * Thread-safe function to print the stringified contents of errno
+ */
+void strErr();
 
-#define LOG_FORMAT(M, ...) "%s:%d:0x%x: " M, FILE_NAME, __LINE__, (unsigned long) pthread_self() & 0xffff, ##__VA_ARGS__
+#define LOG_FORMAT(M, ...) "%s:%d:0x%x: " M, FILE_NAME, __LINE__, \
+                           (unsigned long) pthread_self() & 0xffff, \
+                           ##__VA_ARGS__
 
 #ifndef __ANDROID__
 
@@ -62,23 +80,24 @@ void strErr(const char *message = "");
 #define WARN(M, ...)    LOGGER(M, LOG_WARNING, ##__VA_ARGS__)
 #define INFO(M, ...)    LOGGER(M, LOG_INFO, ##__VA_ARGS__)
 #define DEBUG(M, ...)   LOGGER(M, LOG_DEBUG, ##__VA_ARGS__)
-#define LOGGER(M, LEVEL, ...) Logger::log(LEVEL, LOG_FORMAT(M, ##__VA_ARGS__))
+#define LOGGER(M, LEVEL, ...) logger(LEVEL, LOG_FORMAT(M, ##__VA_ARGS__))
 
-#else /* ANDROID */
+#else /* __ANDROID__ */
 
 #ifndef APP_NAME
 #define APP_NAME "libsflphone"
-#endif
+#endif /* APP_NAME */
 
 // Avoid printing whole path on android
-#define FILE_NAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
+#define FILE_NAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 \
+                                          : __FILE__)
 
 #define ERROR(M, ...)   LOGGER(M, ANDROID_LOG_ERROR, ##__VA_ARGS__)
 #define WARN(M, ...)    LOGGER(M, ANDROID_LOG_WARN, ##__VA_ARGS__)
 #define INFO(M, ...)    LOGGER(M, ANDROID_LOG_INFO, ##__VA_ARGS__)
 #define DEBUG(M, ...)   LOGGER(M, ANDROID_LOG_DEBUG, ##__VA_ARGS__)
 #define LOGGER(M, LEVEL, ...) __android_log_print(LEVEL, APP_NAME, LOG_FORMAT(M, ##__VA_ARGS__))
-#endif /* ANDROID */
+#endif /* __ANDROID__ */
 
 #define BLACK "\033[22;30m"
 #define RED "\033[22;31m"
@@ -98,5 +117,8 @@ void strErr(const char *message = "");
 #define WHITE "\033[01;37m"
 #define END_COLOR "\033[0m"
 
-#endif // LOGGER_H_
+#ifdef __cplusplus
+}
+#endif
 
+#endif // H_LOGGER
diff --git a/daemon/src/main.cpp b/daemon/src/main.cpp
index 2c0d5acad7ff92967d293e10b6751b11ccd9f73c..3faac0941476bc1c14e7da8a1be7e1cbf4f3e23c 100644
--- a/daemon/src/main.cpp
+++ b/daemon/src/main.cpp
@@ -116,8 +116,8 @@ namespace {
             // We've always print the title/version, so we can just exit
             quit = true;
         } else {
-            Logger::setConsoleLog(consoleFlag);
-            Logger::setDebugMode(debugFlag);
+            setConsoleLog(consoleFlag);
+            setDebugMode(debugFlag);
         }
         return quit;
     }
diff --git a/daemon/src/video/libav_utils.cpp b/daemon/src/video/libav_utils.cpp
index 512199da7692abca29c852947948c8af87fa65b7..d461e900640ffbe781eaed5b7ac49679c854569a 100644
--- a/daemon/src/video/libav_utils.cpp
+++ b/daemon/src/video/libav_utils.cpp
@@ -118,7 +118,7 @@ void init_once()
 
     av_lockmgr_register(avcodecManageMutex);
 
-    if (Logger::getDebugMode())
+    if (getDebugMode())
         av_log_set_level(AV_LOG_VERBOSE);
 
     /* list of codecs tested and confirmed to work */
diff --git a/daemon/src/video/shm_sink.cpp b/daemon/src/video/shm_sink.cpp
index 510a6d010ce8eb842e4b0216d1ebb9cb9041f168..d539c1cda565b28efed4c002f9cd92a7d9210796 100644
--- a/daemon/src/video/shm_sink.cpp
+++ b/daemon/src/video/shm_sink.cpp
@@ -84,7 +84,7 @@ bool SHMSink::start()
         fd_ = shm_open(shm_name_.c_str(), flags, perms);
         if (fd_ < 0) {
             ERROR("could not open shm area \"%s\"", shm_name_.c_str());
-            Logger::strErr();
+            strErr();
             return false;
         }
     } else {
@@ -94,7 +94,7 @@ bool SHMSink::start()
             shm_name_ = name.str();
             fd_ = shm_open(shm_name_.c_str(), flags, perms);
             if (fd_ < 0 and errno != EEXIST) {
-                Logger::strErr();
+                strErr();
                 return false;
             }
         }
@@ -107,7 +107,7 @@ bool SHMSink::start()
 
     if (ftruncate(fd_, shm_area_len_)) {
         ERROR("Could not make shm area large enough for header");
-        Logger::strErr();
+        strErr();
         return false;
     }
 
@@ -133,7 +133,7 @@ bool SHMSink::start()
 bool SHMSink::stop()
 {
     if (fd_ >= 0 and close(fd_) == -1)
-        Logger::strErr();
+        strErr();
 
     fd_ = -1;
 
@@ -159,13 +159,13 @@ bool SHMSink::resize_area(size_t desired_length)
 
     if (munmap(shm_area_, shm_area_len_)) {
         ERROR("Could not unmap shared area");
-        Logger::strErr();
+        strErr();
         return false;
     }
 
     if (ftruncate(fd_, desired_length)) {
         ERROR("Could not resize shared area");
-        Logger::strErr();
+        strErr();
         return false;
     }
 
diff --git a/daemon/src/video/socket_pair.cpp b/daemon/src/video/socket_pair.cpp
index a9fb9a15882edd9fed3d93cf16a412335a73389b..f5426527233c435e5dae4aac8a042a199983a550 100644
--- a/daemon/src/video/socket_pair.cpp
+++ b/daemon/src/video/socket_pair.cpp
@@ -124,7 +124,7 @@ int udp_socket_create(sockaddr_storage *addr, socklen_t *addr_len,
     // on local port
     if (bind(udp_fd, reinterpret_cast<sockaddr*>(addr), *addr_len) < 0) {
         ERROR("Bind failed");
-        Logger::strErr();
+        strErr();
         close(udp_fd);
         udp_fd = -1;
     }
@@ -168,9 +168,9 @@ void SocketPair::interrupt()
 void SocketPair::closeSockets()
 {
     if (rtcpHandle_ > 0 and close(rtcpHandle_))
-        Logger::strErr();
+        strErr();
     if (rtpHandle_ > 0 and close(rtpHandle_))
-        Logger::strErr();
+        strErr();
 }
 
 void SocketPair::openSockets(const char *uri, int local_rtp_port)
diff --git a/daemon/src/video/v4l2/video_preferences.cpp b/daemon/src/video/v4l2/video_preferences.cpp
index 6dc9e28f0969ab3f6cfb731737e8091ba92fe701..244acdd74cdfebe80acea0be3cb7eb96e28a49f3 100644
--- a/daemon/src/video/v4l2/video_preferences.cpp
+++ b/daemon/src/video/v4l2/video_preferences.cpp
@@ -326,7 +326,7 @@ bool VideoDeviceMonitorImpl::addDevice(const string &dev)
     int fd = open(dev.c_str(), O_RDWR);
     if (fd == -1) {
         ERROR("Problem opening device");
-        Logger::strErr();
+        strErr();
         return false;
     }
 
diff --git a/daemon/test/main.cpp b/daemon/test/main.cpp
index 80528e56732857ee2af11a6b50c956a1394ff3cc..401b23132b6c0e1111174fcc82a1cf9426c9a324 100644
--- a/daemon/test/main.cpp
+++ b/daemon/test/main.cpp
@@ -63,8 +63,8 @@ int main(int argc, char* argv[])
 {
     atexit(cleanup);
     printf("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2014\n\n");
-    Logger::setConsoleLog(true);
-    Logger::setDebugMode(true);
+    setConsoleLog(true);
+    setDebugMode(true);
     fileutils::FileHandle f(fileutils::create_pidfile());
     if (f.fd == -1) {
         fprintf(stderr, "An sflphoned instance is already running, quitting...\n");
@@ -96,7 +96,7 @@ int main(int argc, char* argv[])
         } else if (strcmp("--debug", argv[1]) == 0) {
             argvIndex++;
 
-            Logger::setDebugMode(true);
+            setDebugMode(true);
             INFO("Debug mode activated");
 
         } else if (strcmp("--xml", argv[1]) == 0) {