diff --git a/src/account.cpp b/src/account.cpp
index 5b26c3f66cb39c7d43e7586f544a4d5447dabf4a..29e3c567a069be352782b0ac4ba84cc486565d37 100644
--- a/src/account.cpp
+++ b/src/account.cpp
@@ -708,7 +708,7 @@ bool Account::needsMigration() const
  * return all ContactsMethod from @this account
  * @return Account::ContactMethods a.k.a. QVector<ContactMethod*>
  */
-const Account::ContactMethods&
+Account::ContactMethods&
 Account::getContacts() const
 {
     return d_ptr->m_NumbersFromDaemon;
diff --git a/src/account.h b/src/account.h
index 11b0f71804178bc45cdb658ddf0f22b379192262..d360780083070a56039a1585c9fbb79f67c8bdf3 100644
--- a/src/account.h
+++ b/src/account.h
@@ -473,7 +473,7 @@ class LIB_EXPORT Account : public ItemBase {
       uint   trimesterCallCount     () const;
       time_t lastUsed               () const;
 
-      const ContactMethods& getContacts () const;
+      ContactMethods& getContacts () const;
 
       Q_INVOKABLE QVariant roleData    ( int role             ) const;
       Q_INVOKABLE bool supportScheme   ( URI::SchemeType type ) const;
diff --git a/src/accountmodel.cpp b/src/accountmodel.cpp
index af87936a6255b45450152a6462034a532b0ae211..d8f5a6776a4e7f0858fb8284d8425f899832e0d2 100644
--- a/src/accountmodel.cpp
+++ b/src/accountmodel.cpp
@@ -54,6 +54,7 @@
 #include "private/vcardutils.h"
 #include "phonedirectorymodel.h"
 #include "bannedcontactmodel.h"
+#include "contactmethod.h"
 
 QHash<QByteArray,AccountPlaceHolder*> AccountModelPrivate::m_hsPlaceHolder;
 
@@ -97,6 +98,8 @@ void AccountModelPrivate::init()
             &AccountModelPrivate::slotExportOnRingEnded, Qt::QueuedConnection);
     connect(&configurationManager, &ConfigurationManagerInterface::migrationEnded, this,
             &AccountModelPrivate::slotMigrationEnded, Qt::QueuedConnection);
+    connect(&configurationManager, &ConfigurationManagerInterface::contactAdded, this,
+            &AccountModelPrivate::slotContactAdded, Qt::QueuedConnection);
     connect(&configurationManager, &ConfigurationManagerInterface::contactRemoved, this,
             &AccountModelPrivate::slotContactRemoved, Qt::QueuedConnection);
 }
@@ -308,7 +311,7 @@ QList<Account*> AccountModel::accountsToMigrate() const
 /**
  * returns a vector of contacts from the daemon
  * @param account the account to query
- * @return contacts a QVector<QMap<QString, QString>>, keywords : "id" and "added"
+ * @return contacts a QVector<QMap<QString, QString>>
  */
 QVector<QMap<QString, QString>>
 AccountModel::getContacts(const Account* account) const
@@ -532,6 +535,21 @@ AccountModelPrivate::slotMigrationEnded(const QString& accountId, const QString&
         emit a->migrationEnded(status);
 }
 
+
+/// slot function used with ConfigurationManagerInterface::contactAdded signal
+void
+AccountModelPrivate::slotContactAdded(const QString &accountID, const QString &uri, bool confirmed)
+{
+    if (auto account = q_ptr->getById(accountID.toLatin1())) {
+        if (auto cm = PhoneDirectoryModel::instance().getNumber(uri, account)) {
+            cm->setConfirmed(confirmed);
+            auto& daemon_contacts = account->getContacts();
+            if (not daemon_contacts.contains(cm))
+                daemon_contacts << cm;
+        }
+    }
+}
+
 /**
  * slot function used with ConfigurationManagerInterface::contactRemoved signal
  */
diff --git a/src/private/accountmodel_p.h b/src/private/accountmodel_p.h
index 076cfaded363670885cf0b59549546d2c3ae9374..fa21fa3d30d7cbdb2ec2dffa6523ebfbfd34f9a8 100644
--- a/src/private/accountmodel_p.h
+++ b/src/private/accountmodel_p.h
@@ -75,5 +75,6 @@ public Q_SLOTS:
    void slotKownDevicesChanged(const QString& accountId, const MapStringString& devices);
    void slotExportOnRingEnded(const QString& accountId, int status, const QString& pin);
    void slotMigrationEnded(const QString& accountId, const QString& result);
+   void slotContactAdded(const QString &accountID, const QString &uri, bool confirmed);
    void slotContactRemoved(const QString &accountID, const QString &uri, bool banned);
 };