diff --git a/CMakeLists.txt b/CMakeLists.txt
index 712c99586a8bc8d7051d74c93e352aa5f005b4c0..ac59388ce0908d26cf7dce46df1a5f5f3d7c0f0d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,6 +12,7 @@ option(JAMI_NATPMP "Build with NAT-PMP" ON)
 option(JAMI_PUPNP "Build with PUPNP" ON)
 option(JAMI_PLUGIN "Build with plugin support" ON)
 option(JAMI_JNI "Build the JNI binding" OFF)
+option(JAMI_DBUS "Build the DBUS binding" OFF)
 option(JAMI_VIDEO "Build with video support" ON)
 option(BUILD_CONTRIB "Build contrib to CONTRIB_PATH" ON)
 option(BUILD_EXTRA_TOOLS "Build extra tools" OFF)
@@ -110,8 +111,8 @@ if(NOT MSVC)
     if (JAMI_NATPMP)
         pkg_search_module (natpmp IMPORTED_TARGET natpmp)
         if (NOT natpmp_FOUND)
-            find_library(natpmp natpmp)
-            if (natpmp_NOTFOUND)
+            find_library(natpmp_LIBRARIES natpmp)
+            if (NOT natpmp_LIBRARIES)
                 message("NAT-PMP not found: disabling")
                 set(JAMI_NATPMP Off)
             endif()
@@ -123,6 +124,10 @@ if(NOT MSVC)
             set(JAMI_PUPNP Off)
         endif()
     endif()
+    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+        pkg_search_module (udev REQUIRED IMPORTED_TARGET libudev)
+        pkg_search_module (pulseaudio REQUIRED IMPORTED_TARGET libpulse)
+    endif()
 endif()
 
 ################################################################################
@@ -204,8 +209,18 @@ if (ANDROID)
         ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/audio_recorder.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/opensl/opensllayer.cpp
     )
-endif()
-if(MSVC)
+elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+    if (JAMI_VIDEO)
+        list (APPEND ALL_FILES ${ALL_FILES}
+            ${CMAKE_CURRENT_SOURCE_DIR}/src/media/video/v4l2/video_device_impl.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/src/media/video/v4l2/video_device_monitor_impl.cpp
+        )
+    endif()
+    list (APPEND ALL_FILES ${ALL_FILES}
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/pulseaudio/audiostream.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/src/media/audio/pulseaudio/pulselayer.cpp
+    )
+elseif(MSVC)
    list (APPEND ALL_FILES ${ALL_FILES}
          "${Source_Files__media__audio__portaudio}"
          "${Source_Files__media__video__uwpvideo}"
@@ -453,7 +468,7 @@ else()
 
     find_package (jsoncpp REQUIRED)
     find_package (yaml-cpp REQUIRED)
-    find_package (fmt REQUIRED)
+    pkg_search_module (fmt REQUIRED IMPORTED_TARGET fmt)
     pkg_search_module (webrtcap REQUIRED IMPORTED_TARGET webrtc-audio-processing)
     pkg_search_module (gnutls REQUIRED IMPORTED_TARGET gnutls)
     pkg_search_module (opendht REQUIRED IMPORTED_TARGET opendht)
@@ -484,8 +499,8 @@ else()
         PkgConfig::swscale
         jsoncpp
         yaml-cpp
-        fmt
-        secp256k1
+        PkgConfig::fmt
+        PkgConfig::secp256k1
         PUBLIC
         PkgConfig::avutil
     )
@@ -503,9 +518,18 @@ else()
     )
     if (ANDROID)
         target_link_libraries(${PROJECT_NAME} PRIVATE OpenSLES log)
+    elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+        target_link_libraries(${PROJECT_NAME} PRIVATE
+            PkgConfig::udev
+            PkgConfig::pulseaudio
+        )
     endif()
     if (JAMI_NATPMP)
-        target_link_libraries(${PROJECT_NAME} PRIVATE natpmp)
+        if (natpmp_FOUND)
+            target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::natpmp)
+        elseif (natpmp_LIBRARIES)
+            target_link_libraries(${PROJECT_NAME} PRIVATE natpmp_LIBRARIES)
+        endif()
     endif()
     if (JAMI_PUPNP)
         target_link_libraries(${PROJECT_NAME} PRIVATE upnp)
@@ -517,10 +541,71 @@ else()
         target_link_directories(${PROJECT_NAME}-jni PRIVATE ${CONTRIB_PATH}/lib)
         target_link_libraries(${PROJECT_NAME}-jni ${PROJECT_NAME} android log)
         set_target_properties(${PROJECT_NAME}-jni PROPERTIES CXX_STANDARD 17)
+        target_compile_options(${PROJECT_NAME}-jni PRIVATE
+            -fvisibility=hidden
+            -Wall -Wextra
+            -Wnon-virtual-dtor
+            -Wno-deprecated
+            -Wno-deprecated-declarations
+            -Wno-unknown-pragmas
+            -Wno-unused-function
+            -Wno-unused-parameter
+        )
         target_link_options(${PROJECT_NAME}-jni PRIVATE
             -Wl,-Bsymbolic
             -Wall -Wextra
         )
     endif()
 
+    if (JAMI_DBUS)
+        find_program(DBusXml2Cpp dbusxx-xml2cpp REQUIRED)
+        pkg_search_module (DBusCpp REQUIRED IMPORTED_TARGET dbus-c++-1)
+        configure_file(
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/net.jami.daemon.service.in
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.service
+            @ONLY)
+        set(DBUS_XML_FILES
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.CallManager.xml
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.Instance.xml
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.PresenceManager.xml
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.VideoManager.xml
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/cx.ring.Ring.PluginManagerInterface.xml
+        )
+        set(DBUS_ADAPTOR_FILES
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuscallmanager.adaptor.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusconfigurationmanager.adaptor.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusinstance.adaptor.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuspresencemanager.adaptor.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusvideomanager.adaptor.h
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuspluginmanagerinterface.adaptor.h
+        )
+        set(DBUS_FILES
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuscallmanager.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusclient.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusconfigurationmanager.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbusinstance.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/dbuspresencemanager.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/bin/dbus/main.cpp
+        )
+
+        # XML adaptors
+        foreach(DBUS_XML_FILE ${DBUS_XML_FILES})
+            list(FIND DBUS_XML_FILES ${DBUS_XML_FILE} DBUS_XML_FILE_INDEX)
+            list(GET DBUS_ADAPTOR_FILES ${DBUS_XML_FILE_INDEX} DBUS_ADAPTOR_FILE)
+            add_custom_command(
+                OUTPUT ${DBUS_ADAPTOR_FILE}
+                COMMAND ${DBusXml2Cpp} ${DBUS_XML_FILE} --adaptor=${DBUS_ADAPTOR_FILE}
+                DEPENDS ${DBUS_XML_FILE}
+            )
+        endforeach()
+
+        # Jamid
+        add_executable(jamid
+            ${DBUS_FILES}
+            ${DBUS_ADAPTOR_FILES}
+        )
+        target_link_libraries(jamid ${PROJECT_NAME} PkgConfig::DBusCpp)
+    endif()
+
 endif()
diff --git a/contrib/src/fmt/rules.mak b/contrib/src/fmt/rules.mak
index 696412a6cdde5d8b84ef31bc0a11b7ce4f203283..41b40363b2b4cbf3110545db68af5de8af52234d 100644
--- a/contrib/src/fmt/rules.mak
+++ b/contrib/src/fmt/rules.mak
@@ -8,8 +8,7 @@ PKGS_FOUND += fmt
 endif
 
 FMT_CMAKECONF = -DBUILD_SHARED_LIBS=Off \
-				-DFMT_TEST=Off \
-                CMAKE_INSTALL_LIBDIR=$(PREFIX)/lib
+				-DFMT_TEST=Off
 
 $(TARBALLS)/fmt-$(FMT_VERSION).tar.gz:
 	$(call download,$(FMT_URL))
diff --git a/contrib/src/libgit2/rules.mak b/contrib/src/libgit2/rules.mak
index 4f56da14658a7c144ab1a5f8eef9b67b0bf2b4bd..7d83a33627e08026de7266c3792a0cbe7edb78fa 100644
--- a/contrib/src/libgit2/rules.mak
+++ b/contrib/src/libgit2/rules.mak
@@ -23,6 +23,6 @@ libgit2: libgit2-v$(LIBGIT2_VERSION).tar.gz .sum-libgit2
 # TODO windows pcre?
 .libgit2: libgit2
 	cd $< && mkdir -p build && cd build \
-    && $(CMAKE) -DCMAKE_C_FLAGS=-fPIC -DCMAKE_INSTALL_PREFIX=$(PREFIX) -DUSE_HTTPS=OFF -DCURL=OFF -DUSE_HTTP_PARSER=system -DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_SSH=OFF -DREGEX_BACKEND=regcomp .. \
+    && $(CMAKE) -DCMAKE_C_FLAGS=-fPIC -DUSE_HTTPS=OFF -DCURL=OFF -DUSE_HTTP_PARSER=system -DBUILD_CLAR=OFF -DBUILD_SHARED_LIBS=OFF -DUSE_SSH=OFF -DREGEX_BACKEND=regcomp .. \
     && $(MAKE) install
 	touch $@
diff --git a/contrib/src/main.mak b/contrib/src/main.mak
index b09cc4973e98621b5a8467f61d896a25969cfd28..76eeb2ae38d202ab449ba4dcc4c3d08d98b71ffd 100644
--- a/contrib/src/main.mak
+++ b/contrib/src/main.mak
@@ -403,7 +403,8 @@ CMAKE = cmake . -DCMAKE_TOOLCHAIN_FILE=$(ANDROID_NDK)/build/cmake/android.toolch
 		-DCMAKE_INSTALL_PREFIX=$(PREFIX)
 else
 CMAKE = cmake . -DCMAKE_TOOLCHAIN_FILE=$(abspath toolchain.cmake) \
-		-DCMAKE_INSTALL_PREFIX=$(PREFIX)
+		-DCMAKE_INSTALL_PREFIX=$(PREFIX) \
+		-DCMAKE_INSTALL_LIBDIR=$(PREFIX)/lib
 endif
 
 #