diff --git a/bin/dbus/configurationmanager-introspec.xml b/bin/dbus/configurationmanager-introspec.xml
index 7b4f0a596c163783c8fa6450d9e0e86712149d42..bb0003f2c1d532d85ceabaa1dc2d71ae96695d62 100644
--- a/bin/dbus/configurationmanager-introspec.xml
+++ b/bin/dbus/configurationmanager-introspec.xml
@@ -982,5 +982,18 @@
            <arg type="a{ss}" name="shortcutsMap" direction="in">
            </arg>
        </method>
+
+       <signal name="mediaParametersChanged" tp:name-for-bindings="mediaParametersChanged">
+           <tp:added version="2.3.0"/>
+           <tp:docstring>
+               Notify clients that a media parameter changed.
+           </tp:docstring>
+           <arg type="s" name="accountID">
+               <tp:docstring>
+                   An account id.
+               </tp:docstring>
+           </arg>
+       </signal>
+
    </interface>
 </node>
diff --git a/bin/dbus/dbusclient.cpp b/bin/dbus/dbusclient.cpp
index b15479c929bada700bdea9cf1e59bf89ee7a85c5..22509844471df6c0df31c5566b43798e5755eff8 100644
--- a/bin/dbus/dbusclient.cpp
+++ b/bin/dbus/dbusclient.cpp
@@ -192,6 +192,7 @@ DBusClient::initLibrary(int flags)
         exportable_callback<ConfigurationSignal::CertificatePathPinned>(bind(&DBusConfigurationManager::certificatePathPinned, confM, _1, _2 )),
         exportable_callback<ConfigurationSignal::CertificateExpired>(bind(&DBusConfigurationManager::certificateExpired, confM, _1 )),
         exportable_callback<ConfigurationSignal::CertificateStateChanged>(bind(&DBusConfigurationManager::certificateStateChanged, confM, _1, _2, _3 )),
+        exportable_callback<ConfigurationSignal::MediaParametersChanged>(bind(&DBusConfigurationManager::mediaParametersChanged, confM, _1 )),
     };
 
     // Presence event handlers
diff --git a/src/client/configurationmanager.cpp b/src/client/configurationmanager.cpp
index 9df30eb2f8a8cf52f1e36daff26addd640dd8c66..e57cf050ffc83ff1f5e8ae049376d1dab7889418 100644
--- a/src/client/configurationmanager.cpp
+++ b/src/client/configurationmanager.cpp
@@ -401,6 +401,7 @@ setCodecDetails(const std::string& accountID,
     if (codec->systemCodecInfo.mediaType & ring::MEDIA_AUDIO) {
         if (auto foundCodec = std::static_pointer_cast<ring::AccountAudioCodecInfo>(codec)) {
             foundCodec->setCodecSpecifications(details);
+            ring::emitSignal<ConfigurationSignal::MediaParametersChanged>(accountID);
             return true;
         }
     }
@@ -416,6 +417,7 @@ setCodecDetails(const std::string& accountID,
                 auto call = ring::Manager::instance().getCurrentCall();
                 call->restartMediaSender();
             }
+            ring::emitSignal<ConfigurationSignal::MediaParametersChanged>(accountID);
             return true;
         }
     }
diff --git a/src/client/ring_signal.cpp b/src/client/ring_signal.cpp
index 8e4846731e74527bd8086ff985bbc768f161969b..ac552d5b5b6774c49e31a9ffbe322356209f6c25 100644
--- a/src/client/ring_signal.cpp
+++ b/src/client/ring_signal.cpp
@@ -76,6 +76,7 @@ getSignalHandlers()
         exported_callback<DRing::ConfigurationSignal::CertificateStateChanged>(),
         exported_callback<DRing::ConfigurationSignal::IncomingAccountMessage>(),
         exported_callback<DRing::ConfigurationSignal::IncomingTrustRequest>(),
+        exported_callback<DRing::ConfigurationSignal::MediaParametersChanged>(),
         exported_callback<DRing::ConfigurationSignal::Error>(),
 #ifdef __ANDROID__
         exported_callback<DRing::ConfigurationSignal::GetHardwareAudioFormat>(),
diff --git a/src/dring/configurationmanager_interface.h b/src/dring/configurationmanager_interface.h
index 537b5449f299224a437a9852ef0ffed3cc4666ab..26075f6cce4e2a966ac81bcc676876702aa51119 100644
--- a/src/dring/configurationmanager_interface.h
+++ b/src/dring/configurationmanager_interface.h
@@ -210,6 +210,10 @@ struct ConfigurationSignal {
                 constexpr static const char* name = "CertificateStateChanged";
                 using cb_type = void(const std::string& /*account_id*/, const std::string& /*certId*/, const std::string& /*state*/);
         };
+        struct MediaParametersChanged {
+                constexpr static const char* name = "MediaParametersChanged";
+                using cb_type = void(const std::string& /*accountId*/);
+        };
 #ifdef __ANDROID__
         /**
          * These are special getters for Android so the daemon can retreive