diff --git a/Ring/jamiNotificationExtension/Adapter.mm b/Ring/jamiNotificationExtension/Adapter.mm
index 06e73bd..9aa2578 100644
--- a/Ring/jamiNotificationExtension/Adapter.mm
+++ b/Ring/jamiNotificationExtension/Adapter.mm
@@ -135,6 +135,25 @@
                                                                     hasVideo:hasVideo];
             }
         }));
+    //Contact added signal
+    confHandlers.insert(exportable_callback<ConfigurationSignal::ContactAdded>([&](const std::string& accountId,
+                                                                                   const std::string& uri,
+                                                                                   bool confirmed) {
+        if(Adapter.delegate) {
+            NSString* accountIdStr = [NSString stringWithUTF8String:accountId.c_str()];
+            NSString* uriStr = [NSString stringWithUTF8String:uri.c_str()];
+            [Adapter.delegate receivedContactRequestWithAccountId: accountIdStr peerId: uriStr];
+        }
+    }));
+
+    confHandlers.insert(exportable_callback<ConversationSignal::ConversationRequestReceived>([&](const std::string& accountId, const std::string& conversationId, std::map<std::string, std::string> metadata) {
+        if(Adapter.delegate) {
+            NSString* accountIdStr = [NSString stringWithUTF8String:accountId.c_str()];
+            NSString* convIdStr = [NSString stringWithUTF8String:conversationId.c_str()];
+            NSMutableDictionary* info = [Utils mapToDictionnary: metadata];
+            [Adapter.delegate receivedConversationRequestWithAccountId: accountIdStr conversationId: convIdStr metadata:info];
+        }
+    }));
     registerSignalHandlers(confHandlers);
 }
 
@@ -229,6 +248,18 @@
         dht::Sp<dht::Value> decrypted = dhtValue.decrypt(dhtKey);
         auto unpacked = msgpack::unpack((const char*) decrypted->data.data(), decrypted->data.size());
         auto peerCR = unpacked.get().as<PeerConnectionRequest>();
+        if (peerCR.connType.empty()) {
+            // this value is not a PeerConnectionRequest
+            // check if it a TrustRequest
+            auto conversationRequest = unpacked.get().as<dht::TrustRequest>();
+            if (!conversationRequest.conversationId.empty()) {
+                if (conversationRequest.service == "cx.ring") {
+                    // return git message type to start daemon
+                    return @{@"": @"application/im-gitmessage-id"};
+                }
+            }
+            return {};
+        }
         if (isMessageTreated(peerCR.id, [treatedMessagesPath UTF8String])) {
             return {};
         }
