diff --git a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
index 348f7ab247182ed1e2dd45f7588433dd59f71153..517157d08a982d3e834d00f85cf375352d5d9d0f 100644
--- a/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
+++ b/bin/dbus/cx.ring.Ring.ConfigurationManager.xml
@@ -779,6 +779,24 @@
            </arg>
        </method>
 
+        <!-- Hardware encoding/decoding signals -->
+        <signal name="hardwareDecodingChanged" tp:name-for-bindings="hardwareDecodingChanged">
+           <arg type="b" name="state">
+               <tp:docstring>
+                   If hardware decoding is enabled
+               </tp:docstring>
+           </arg>
+           <tp:docstring>Signal triggered when hardware decoding changes.</tp:docstring>
+        </signal>
+        <signal name="hardwareEncodingChanged" tp:name-for-bindings="hardwareEncodingChanged">
+           <arg type="b" name="state">
+               <tp:docstring>
+                   If hardware encoding is enabled
+               </tp:docstring>
+           </arg>
+           <tp:docstring>Signal triggered when hardware encoding changes.</tp:docstring>
+        </signal>
+
        <!-- Audio devices methods -->
 
        <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
diff --git a/bin/dbus/dbusclient.cpp b/bin/dbus/dbusclient.cpp
index 465156ab790fe3cc4cb58d3d6009a2f64c645530..d412fe37585b6b096fdb9615a9306090dd286e06 100644
--- a/bin/dbus/dbusclient.cpp
+++ b/bin/dbus/dbusclient.cpp
@@ -186,6 +186,8 @@ DBusClient::initLibrary(int flags)
         exportable_callback<ConfigurationSignal::CertificateStateChanged>(bind(&DBusConfigurationManager::certificateStateChanged, confM, _1, _2, _3 )),
         exportable_callback<ConfigurationSignal::MediaParametersChanged>(bind(&DBusConfigurationManager::mediaParametersChanged, confM, _1 )),
         exportable_callback<ConfigurationSignal::MigrationEnded>(bind(&DBusConfigurationManager::migrationEnded, confM, _1, _2 )),
+        exportable_callback<ConfigurationSignal::HardwareDecodingChanged>(bind(&DBusConfigurationManager::hardwareDecodingChanged, confM, _1 )),
+        exportable_callback<ConfigurationSignal::HardwareEncodingChanged>(bind(&DBusConfigurationManager::hardwareEncodingChanged, confM, _1 )),
     };
 
     // Presence event handlers
diff --git a/bin/jni/configurationmanager.i b/bin/jni/configurationmanager.i
index 62430da0ce0a28083b6ffdded9b9c8acc6fd811e..71bb314e482c4d6d169975295da6a2d1899a17e9 100644
--- a/bin/jni/configurationmanager.i
+++ b/bin/jni/configurationmanager.i
@@ -56,6 +56,9 @@ public:
 
     virtual void migrationEnded(const std::string& /*accountId*/, const std::string& /*state*/){}
     virtual void deviceRevocationEnded(const std::string& /*accountId*/, const std::string& /*device*/, int /*status*/){}
+
+    virtual void hardwareDecodingChanged(bool /*state*/){}
+    virtual void hardwareEncodingChanged(bool /*state*/){}
 };
 %}
 
@@ -247,4 +250,7 @@ public:
 
     virtual void migrationEnded(const std::string& /*accountId*/, const std::string& /*state*/){}
     virtual void deviceRevocationEnded(const std::string& /*accountId*/, const std::string& /*device*/, int /*status*/){}
+
+    virtual void hardwareDecodingChanged(bool /*state*/){}
+    virtual void hardwareEncodingChanged(bool /*state*/){}
 };
diff --git a/bin/nodejs/configurationmanager.i b/bin/nodejs/configurationmanager.i
index a86d6aae579a79b11022ccbae2af94b31f86db1a..c696d1743fa06ad4763d55fbd3dff5a33e34815d 100644
--- a/bin/nodejs/configurationmanager.i
+++ b/bin/nodejs/configurationmanager.i
@@ -235,4 +235,8 @@ public:
 
     virtual void migrationEnded(const std::string& /*accountId*/, const std::string& /*state*/){}
     virtual void deviceRevocationEnded(const std::string& /*accountId*/, const std::string& /*device*/, int /*status*/){}
+
+    virtual void hardwareDecodingChanged(bool /*state*/){}
+    virtual void hardwareEncodingChanged(bool /*state*/){}
+
 };
diff --git a/configure.ac b/configure.ac
index 23ba8598817236c4b0bec19b40213bd8f8480720..6781dececb0143c9d90aeab01ff7585b522c86f6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2,7 +2,7 @@ dnl Jami - configure.ac for automake 1.9 and autoconf 2.59
 
 dnl Process this file with autoconf to produce a configure script.
 AC_PREREQ([2.65])
-AC_INIT([Ring Daemon],[7.2.0],[ring@gnu.org],[ring])
+AC_INIT([Ring Daemon],[7.3.0],[ring@gnu.org],[ring])
 
 AC_COPYRIGHT([[Copyright (c) Savoir-faire Linux 2004-2018]])
 AC_REVISION([$Revision$])
diff --git a/src/client/ring_signal.cpp b/src/client/ring_signal.cpp
index d1091664210cddb0913e9901e4674f5eaf96930d..39f2c079316556a6efdba9e19d74fc00c378e8b4 100644
--- a/src/client/ring_signal.cpp
+++ b/src/client/ring_signal.cpp
@@ -81,6 +81,8 @@ getSignalHandlers()
         exported_callback<DRing::ConfigurationSignal::GetAppDataPath>(),
         exported_callback<DRing::ConfigurationSignal::GetDeviceName>(),
 #endif
+        exported_callback<DRing::ConfigurationSignal::HardwareDecodingChanged>(),
+        exported_callback<DRing::ConfigurationSignal::HardwareEncodingChanged>(),
 
         /* Debug */
         exported_callback<DRing::DebugSignal::MessageSend>(),
@@ -135,4 +137,4 @@ registerSignalHandlers(const std::map<std::string,
     }
 }
 
-}
\ No newline at end of file
+}
diff --git a/src/dring/configurationmanager_interface.h b/src/dring/configurationmanager_interface.h
index 9e6d4a918428d329b180a0bcad2d5f30f2451250..e0cca93be34c633484cadf990727dd3d4d537f6d 100644
--- a/src/dring/configurationmanager_interface.h
+++ b/src/dring/configurationmanager_interface.h
@@ -338,6 +338,14 @@ struct DRING_PUBLIC ConfigurationSignal {
             using cb_type = void(std::vector<std::string>* /* path_ret */);
         };
 #endif
+        struct DRING_PUBLIC HardwareDecodingChanged {
+            constexpr static const char* name = "HardwareDecodingChanged";
+            using cb_type = void(bool /* state */);
+        };
+        struct DRING_PUBLIC HardwareEncodingChanged {
+            constexpr static const char* name = "HardwareEncodingChanged";
+            using cb_type = void(bool /* state */);
+        };
 };
 
 // Can be used when a client's stdout is not available
diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp
index f150b2bb3aaa44d4a96ed2b8528c1bf0d64f9e80..06d4e789a12e71072db233bed55014d970bd46d2 100644
--- a/src/media/media_decoder.cpp
+++ b/src/media/media_decoder.cpp
@@ -35,6 +35,7 @@
 
 #include "string_utils.h"
 #include "logger.h"
+#include "client/ring_signal.h"
 
 #include <iostream>
 #include <unistd.h>
@@ -381,6 +382,7 @@ void
 MediaDecoder::enableAccel(bool enableAccel)
 {
     enableAccel_ = enableAccel;
+    emitSignal<DRing::ConfigurationSignal::HardwareDecodingChanged>(enableAccel_);
     if (!enableAccel) {
         accel_ = {};
         if (decoderCtx_->hw_device_ctx)
diff --git a/src/preferences.h b/src/preferences.h
index 31bf3f0337e23ed4f8b036e248b5bc737a7fe36d..cf68a3bc9a52973a997b957b98e4f0f8855f0b40 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -22,6 +22,7 @@
 #define __PREFERENCE_H__
 
 #include "config/serializable.h"
+#include "client/ring_signal.h"
 #include <string>
 #include <map>
 #include <vector>
@@ -462,6 +463,7 @@ class VideoPreferences : public Serializable {
 
         void setDecodingAccelerated(bool decodingAccelerated) {
             decodingAccelerated_ = decodingAccelerated;
+            emitSignal<DRing::ConfigurationSignal::HardwareDecodingChanged>(decodingAccelerated_);
         }
 
     private: