diff --git a/src/authority/daemon.cpp b/src/authority/daemon.cpp
index 1d93ad2b8cb3d2f50ad73acc75966baf4f97b1f5..8a3e5234632644058af34cddd79e0955ef771166 100644
--- a/src/authority/daemon.cpp
+++ b/src/authority/daemon.cpp
@@ -49,17 +49,17 @@ removeContact(const api::account::Info& owner, const std::string& contactUri, bo
     QString(contactUri.c_str()), banned);
 }
 
-void
+bool
 addContactFromPending(const api::account::Info& owner, const std::string& contactUri)
 {
-    ConfigurationManager::instance().acceptTrustRequest(QString(owner.id.c_str()),
+    return ConfigurationManager::instance().acceptTrustRequest(QString(owner.id.c_str()),
     QString(contactUri.c_str()));
 }
 
-void
+bool
 discardFromPending(const api::account::Info& owner, const std::string& contactUri)
 {
-    ConfigurationManager::instance().discardTrustRequest(
+    return ConfigurationManager::instance().discardTrustRequest(
         QString(owner.id.c_str()),
         QString(contactUri.c_str())
     );
diff --git a/src/authority/daemon.h b/src/authority/daemon.h
index 1ba8abece6a68a928a23d9cbfd4934eeca8c5629..49be4448f5b81cc5682ceebb7f50d23dca8d8e8a 100644
--- a/src/authority/daemon.h
+++ b/src/authority/daemon.h
@@ -54,14 +54,16 @@ void removeContact(const api::account::Info& owner, const std::string& contactUr
  * Ask the daemon to add a contact from the pending list.
  * @param owner
  * @param contactUri
+ * @return if operation succeed
  */
-void addContactFromPending(const api::account::Info& owner, const std::string& contactUri);
+bool addContactFromPending(const api::account::Info& owner, const std::string& contactUri);
 /**
  * Ask the daemon to discard a pending.
  * @param owner
  * @param contactUri
+ * @return if operation succeed
  */
-void discardFromPending(const api::account::Info& owner, const std::string& contactUri);
+bool discardFromPending(const api::account::Info& owner, const std::string& contactUri);
 
 } // namespace daemon
 
diff --git a/src/contactmodel.cpp b/src/contactmodel.cpp
index 81a684202ba5adf58f83aa7c3c4df5c441cfdc9a..30e6d3dc709e8173400aa8f6c5c06b45e6fe79f2 100644
--- a/src/contactmodel.cpp
+++ b/src/contactmodel.cpp
@@ -234,9 +234,11 @@ ContactModel::addContact(contact::Info contactInfo)
 #endif
         break;
     case profile::Type::PENDING:
-        daemon::addContactFromPending(owner, profile.uri);
-        emit pendingContactAccepted(profile.uri);
-        daemon::addContact(owner, profile.uri); // BUGS?: daemon::addContactFromPending not always add the contact
+        if (daemon::addContactFromPending(owner, profile.uri)) {
+            emit pendingContactAccepted(profile.uri);
+        } else {
+            return;
+        }
         break;
     case profile::Type::RING:
     case profile::Type::SIP:
@@ -278,7 +280,10 @@ ContactModel::removeContact(const std::string& contactUri, bool banned)
         if (!banned && contact != pimpl_->contacts.end()
             && contact->second.profileInfo.type == profile::Type::PENDING) {
             // Discard the pending request and remove profile from db if necessary
-            daemon::discardFromPending(owner, contactUri);
+            if(!daemon::discardFromPending(owner, contactUri)) {
+                qDebug() << "Discard request for account " << owner.id.c_str() << " failed (" << contactUri.c_str() << ")";
+                return;
+            }
             pimpl_->contacts.erase(contactUri);
             database::removeContact(pimpl_->db, owner.profileInfo.uri, contactUri);
             emitContactRemoved = true;