diff --git a/bin/nodejs/callback.h b/bin/nodejs/callback.h
index 657b15ab6e7097991ec698ea8b9271d0bf95d497..c1da6535c28bb51ef5b60f40ae47dc849faa33e3 100644
--- a/bin/nodejs/callback.h
+++ b/bin/nodejs/callback.h
@@ -23,8 +23,10 @@ Persistent<Function> nameRegistrationEndedCb;
 Persistent<Function> knownDevicesChangedCb;
 Persistent<Function> registeredNameFoundCb;
 Persistent<Function> callStateChangedCb;
+Persistent<Function> mediaChangeRequestedCb;
 Persistent<Function> incomingMessageCb;
 Persistent<Function> incomingCallCb;
+Persistent<Function> incomingCallWithMediaCb;
 Persistent<Function> conversationLoadedCb;
 Persistent<Function> messageReceivedCb;
 Persistent<Function> conversationRequestReceivedCb;
@@ -73,10 +75,14 @@ getPresistentCb(std::string_view signal)
         return &registeredNameFoundCb;
     else if (signal == "CallStateChanged")
         return &callStateChangedCb;
+    else if (signal == "MediaChangeRequested")
+        return &mediaChangeRequestedCb;
     else if (signal == "IncomingMessage")
         return &incomingMessageCb;
     else if (signal == "IncomingCall")
         return &incomingCallCb;
+    else if (signal == "IncomingCallWithMedia")
+        return &incomingCallWithMediaCb;
     else if (signal == "ConversationLoaded")
         return &conversationLoadedCb;
     else if (signal == "MessageReceived")
@@ -342,7 +348,12 @@ accountMessageStatusChanged(const std::string& account_id,
         Local<Function> func = Local<Function>::New(Isolate::GetCurrent(),
                                                     accountMessageStatusChangedCb);
         if (!func.IsEmpty()) {
-            Local<Value> callback_args[] = {V8_STRING_NEW_LOCAL(account_id), SWIGV8_INTEGER_NEW_UNS(message_id), V8_STRING_NEW_LOCAL(to), SWIGV8_INTEGER_NEW(state)};
+            Local<Value> callback_args[] = {
+                V8_STRING_NEW_LOCAL(account_id),
+                V8_STRING_NEW_LOCAL(message_id),
+                V8_STRING_NEW_LOCAL(peer),
+                SWIGV8_INTEGER_NEW(state)
+            };
             func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 4, callback_args);
         }
     });
@@ -408,7 +419,31 @@ callStateChanged(const std::string& callId, const std::string& state, int detail
     pendingSignals.emplace([callId, state, detail_code]() {
         Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), callStateChangedCb);
         if (!func.IsEmpty()) {
-            SWIGV8_VALUE callback_args[] = {V8_STRING_NEW_LOCAL(callId), V8_STRING_NEW_LOCAL(state), SWIGV8_INTEGER_NEW(detail_code)};
+            SWIGV8_VALUE callback_args[] = {
+                V8_STRING_NEW_LOCAL(callId),
+                V8_STRING_NEW_LOCAL(state),
+                SWIGV8_INTEGER_NEW(detail_code)
+            };
+            func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args);
+        }
+    });
+
+    uv_async_send(&signalAsync);
+}
+
+void
+mediaChangeRequested(const std::string& accountId, const std::string& callId,
+        const std::vector<std::map<std::string, std::string>>& mediaList)
+{
+    std::lock_guard<std::mutex> lock(pendingSignalsLock);
+    pendingSignals.emplace([accountId, callId, mediaList]() {
+        Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), mediaChangeRequestedCb);
+        if (!func.IsEmpty()) {
+            SWIGV8_VALUE callback_args[] = {
+                V8_STRING_NEW_LOCAL(accountId),
+                V8_STRING_NEW_LOCAL(callId),
+                stringMapVecToJsMapArray(mediaList)
+            };
             func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args);
         }
     });
@@ -456,6 +491,27 @@ incomingCall(const std::string& accountId, const std::string& callId, const std:
     uv_async_send(&signalAsync);
 }
 
+
+void
+incomingCallWithMedia(const std::string& accountId, const std::string& callId, const std::string& from, const std::vector<std::map<std::string, std::string>>& mediaList)
+{
+    std::lock_guard<std::mutex> lock(pendingSignalsLock);
+    pendingSignals.emplace([accountId, callId, from, mediaList]() {
+        Local<Function> func = Local<Function>::New(Isolate::GetCurrent(), incomingCallWithMediaCb);
+        if (!func.IsEmpty()) {
+            SWIGV8_VALUE callback_args[] = {
+                V8_STRING_NEW_LOCAL(accountId),
+                V8_STRING_NEW_LOCAL(callId),
+                V8_STRING_NEW_LOCAL(from),
+                stringMapVecToJsMapArray(mediaList)
+            };
+            func->Call(SWIGV8_CURRENT_CONTEXT(), SWIGV8_NULL(), 3, callback_args);
+        }
+    });
+
+    uv_async_send(&signalAsync);
+}
+
 /** Conversations */
 
 void
diff --git a/bin/nodejs/nodejs_interface.i b/bin/nodejs/nodejs_interface.i
index fa7d1b97f3c83d69c4adf902dd6080743545b2a5..d64d875ee7e0f50b19813fcabc3827fd0318c383 100644
--- a/bin/nodejs/nodejs_interface.i
+++ b/bin/nodejs/nodejs_interface.i
@@ -124,7 +124,7 @@ void init(const SWIGV8_VALUE& funcMap){
         exportable_callback<CallSignal::IncomingMessage>(bind(&incomingMessage, _1, _2, _3)),
         exportable_callback<CallSignal::IncomingCall>(bind(&incomingCall, _1, _2, _3)),
         exportable_callback<CallSignal::IncomingCallWithMedia>(bind(&incomingCallWithMedia, _1, _2, _3, _4)),
-        exportable_callback<CallSignal::MediaChangeRequested>(bind(&mediaChangeRequested, _1, _2, _3)
+        exportable_callback<CallSignal::MediaChangeRequested>(bind(&mediaChangeRequested, _1, _2, _3))
     };
 
     const std::map<std::string, SharedCallback> configEvHandlers = {
@@ -140,8 +140,8 @@ void init(const SWIGV8_VALUE& funcMap){
         exportable_callback<ConfigurationSignal::KnownDevicesChanged>(bind(&knownDevicesChanged, _1, _2 )),
         exportable_callback<ConfigurationSignal::IncomingAccountMessage>(bind(&incomingAccountMessage, _1, _2, _3, _4 )),
         exportable_callback<ConfigurationSignal::AccountMessageStatusChanged>(bind(&accountMessageStatusChanged, _1, _2, _3, _4, _5 )),
-        exportable_callback<ConfigurationSignal::ProfileReceived>(bind(&profileReceived, _1, _2, _3, _4 )),
-        exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )),
+        //exportable_callback<ConfigurationSignal::ProfileReceived>(bind(&profileReceived, _1, _2, _3, _4 )),
+        //exportable_callback<ConfigurationSignal::IncomingTrustRequest>(bind(&incomingTrustRequest, _1, _2, _3, _4, _5 )),
     };
 
     const std::map<std::string, SharedCallback> conversationHandlers = {