diff --git a/src/api/newcallmodel.h b/src/api/newcallmodel.h
index d3f37c19a9cf40901efb6686ed143eef0d0290b0..c331e30e72e59ff360eadfa559df12fcfa365e4c 100644
--- a/src/api/newcallmodel.h
+++ b/src/api/newcallmodel.h
@@ -247,6 +247,14 @@ public:
      */
     bool isModerator(const QString& confId, const QString& uri = "");
 
+    /**
+     * Set/unset a moderator
+     * @param confId        The conference to change
+     * @param peerId        Uri of the participant to change
+     * @param state         State of the change (true set moderator / false unset moderator)
+     */
+    void setModerator(const QString& confId, const QString& peerId, const bool& state);
+
 Q_SIGNALS:
     /**
      * Emitted when a call state changes
diff --git a/src/newcallmodel.cpp b/src/newcallmodel.cpp
index 560006e662e84d8b3ed1268f59fe150978d751ed..ff661bb76275a573e1beeee4696dee62211999fc 100644
--- a/src/newcallmodel.cpp
+++ b/src/newcallmodel.cpp
@@ -768,6 +768,12 @@ NewCallModel::isModerator(const QString& confId, const QString& uri)
     return isModerator;
 }
 
+void
+NewCallModel::setModerator(const QString& confId, const QString& peerId, const bool& state)
+{
+    CallManager::instance().setModerator(confId, peerId, state);
+}
+
 void
 NewCallModel::sendSipMessage(const QString& callId, const QString& body) const
 {
diff --git a/src/qtwrapper/callmanager_wrap.h b/src/qtwrapper/callmanager_wrap.h
index fd96479aa64bd04dd55e4845259bf9f043ad12f3..4c856d97707337ff794a74e654e45bd64b670838 100644
--- a/src/qtwrapper/callmanager_wrap.h
+++ b/src/qtwrapper/callmanager_wrap.h
@@ -386,6 +386,11 @@ public Q_SLOTS: // METHODS
 #endif
     }
 
+    void setModerator(const QString& confId, const QString& peerId, const bool& state)
+    {
+        DRing::setModerator(confId.toStdString(), peerId.toStdString(), state);
+    }
+
 Q_SIGNALS: // SIGNALS
     void callStateChanged(const QString& callID, const QString& state, int code);
     void transferFailed();