diff --git a/Ring/Ring/Account/VCardUtils.swift b/Ring/Ring/Account/VCardUtils.swift
index a3506b48dd87bf464ac16c7550b059ba453aeb1f..9a360b1e3a2c6ea7528deadaf1a0eea8ef72a0a0 100644
--- a/Ring/Ring/Account/VCardUtils.swift
+++ b/Ring/Ring/Account/VCardUtils.swift
@@ -105,4 +105,23 @@ class VCardUtils {
             return path
         }
     }
+
+    class func getName(from vCard: CNContact?) -> String {
+        guard let vCard = vCard else {
+            return ""
+        }
+        var name = ""
+
+        if !vCard.givenName.isEmpty {
+            name = vCard.givenName
+        }
+
+        if !vCard.familyName.isEmpty {
+            if !name.isEmpty {
+                name += " "
+            }
+            name += vCard.familyName
+        }
+        return name
+    }
 }
diff --git a/Ring/Ring/Database/DBHelpers/ProfileDataHelper.swift b/Ring/Ring/Database/DBHelpers/ProfileDataHelper.swift
index 4d31d444e7b513683ec8f2220ebcc920d14e8bd6..01a181904597f07cbd1a41d1462320fdc85caf14 100644
--- a/Ring/Ring/Database/DBHelpers/ProfileDataHelper.swift
+++ b/Ring/Ring/Database/DBHelpers/ProfileDataHelper.swift
@@ -136,4 +136,29 @@ final class ProfileDataHelper {
         }
         return nil
     }
+
+    func insertOrUpdateProfile(item: Profile) throws {
+        guard let dataBase = RingDB.instance.ringDB else {
+            throw DataAccessError.datastoreConnectionError
+        }
+        try dataBase.transaction {
+            let selectQuery = table.filter(uri == item.uri)
+            let rows = try dataBase.run(selectQuery.update(alias <- item.alias,
+                                                           photo <- item.photo,
+                                                           status <- item.status))
+            if rows > 0 {
+                return
+            }
+            let insertQuery = table.insert(uri <- item.uri,
+                                           alias <- item.alias,
+                                           photo <- item.photo,
+                                           type <- item.type,
+                                           status <- item.status)
+            let rowId = try dataBase.run(insertQuery)
+            guard rowId > 0 else {
+                throw DataAccessError.databaseError
+            }
+            return
+        }
+    }
 }
diff --git a/Ring/Ring/Database/DBManager.swift b/Ring/Ring/Database/DBManager.swift
index f2f88ed6d4e099832a480026c59d2bf20cc19720..6d740524f11c4d5a385366d3f4098ca512d2cf84 100644
--- a/Ring/Ring/Database/DBManager.swift
+++ b/Ring/Ring/Database/DBManager.swift
@@ -413,6 +413,17 @@ class DBManager {
         return self.interactionHepler.insertIfNotExist(item: interaction)
     }
 
+    func createOrUpdateRingProfile(profileUri: String, alias: String?, image: String?, status: ProfileStatus) -> Bool {
+        let profile = Profile(defaultID, profileUri, alias, image, ProfileType.ring.rawValue,
+                              status.rawValue)
+        do {
+            try self.profileHepler.insertOrUpdateProfile(item: profile)
+        } catch {
+            return  false
+        }
+        return true
+    }
+
     private func getProfile(for profileUri: String, createIfNotExists: Bool) throws -> Profile? {
         if let profile = try self.profileHepler.selectProfile(accountURI: profileUri) {
             return profile
diff --git a/Ring/Ring/Features/ContactRequests/ContactRequestsViewModel.swift b/Ring/Ring/Features/ContactRequests/ContactRequestsViewModel.swift
index 9ef1b7173c3f2e499659cd056519688f19b1d4d8..7590991eeafa3dd2ee00b651150b84ed797eb7e9 100644
--- a/Ring/Ring/Features/ContactRequests/ContactRequestsViewModel.swift
+++ b/Ring/Ring/Features/ContactRequests/ContactRequestsViewModel.swift
@@ -79,15 +79,7 @@ class ContactRequestsViewModel: Stateable, ViewModel {
         self.presenceService.subscribeBuddy(withAccountId: (self.accountsService.currentAccount?.id)!,
                                             withUri: item.contactRequest.ringId,
                                             withFlag: true)
-
-        if let vCard = item.contactRequest.vCard {
-            let saveVCardCompleted = self.contactsService.saveVCard(vCard: vCard, forContactWithRingId: item.contactRequest.ringId)
-            return Observable<Void>.zip(acceptCompleted, saveVCardCompleted) { _, _ in
-                return
-            }
-        } else {
-            return acceptCompleted.asObservable()
-        }
+        return acceptCompleted.asObservable()
     }
 
     func discard(withItem item: ContactRequestItem) -> Observable<Void> {
diff --git a/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift b/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift
index 7c9ed1669ed8613008baa0ba5ee4be7bcfa95413..28dff04672baf3c48ca34f0b926890fca739eb3a 100644
--- a/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift
+++ b/Ring/Ring/Features/Conversations/Conversation/ConversationViewModel.swift
@@ -81,15 +81,21 @@ class ConversationViewModel: ViewModel {
 
             let contact = self.contactsService.contact(withRingId: contactRingId)
 
-            self.contactsService.loadVCard(forContactWithRingId: contactRingId)
-                .subscribe(onSuccess: { vCard in
-                    guard let imageData = vCard.imageData else {
-                        self.log.warning("vCard for ringId: \(contactRingId) has no image")
-                        return
-                    }
-                    self.profileImageData = imageData
-                })
-                .disposed(by: self.disposeBag)
+            if let profile = conversation.value.participantProfile, let photo =  profile.photo {
+                if let data = NSData(base64Encoded: photo, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) as Data? {
+                    self.profileImageData = data
+                }
+            } else {
+                self.contactsService.loadVCard(forContactWithRingId: contactRingId)
+                    .subscribe(onSuccess: { vCard in
+                        guard let imageData = vCard.imageData else {
+                            self.log.warning("vCard for ringId: \(contactRingId) has no image")
+                            return
+                        }
+                        self.profileImageData = imageData
+                    })
+                    .disposed(by: self.disposeBag)
+            }
 
             // invite and block buttons
             if let contact = contact {
diff --git a/Ring/Ring/Services/ContactsService.swift b/Ring/Ring/Services/ContactsService.swift
index 12cad8912055ebd2b93197581ee268f261ea14ca..34b51cb0c33bbbcafbb8c156ee98b9ffa718c876 100644
--- a/Ring/Ring/Services/ContactsService.swift
+++ b/Ring/Ring/Services/ContactsService.swift
@@ -43,6 +43,7 @@ class ContactsService {
 
     fileprivate let responseStream = PublishSubject<ServiceEvent>()
     var sharedResponseStream: Observable<ServiceEvent>
+    let dbManager = DBManager(profileHepler: ProfileDataHelper(), conversationHelper: ConversationDataHelper(), interactionHepler: InteractionDataHelper())
 
     init(withContactsAdapter contactsAdapter: ContactsAdapter) {
         self.contactsAdapter = contactsAdapter
@@ -105,6 +106,16 @@ class ContactsService {
             let success = self.contactsAdapter.acceptTrustRequest(fromContact: contactRequest.ringId,
                                                                   withAccountId: account.id)
             if success {
+                var stringImage: String?
+                if let vCard = contactRequest.vCard, let image = vCard.imageData {
+                    stringImage = image.base64EncodedString()
+                }
+                let name = VCardUtils.getName(from: contactRequest.vCard)
+                _ = self.dbManager
+                    .createOrUpdateRingProfile(profileUri: contactRequest.ringId,
+                                               alias: name,
+                                               image: stringImage,
+                                               status: ProfileStatus.trusted)
                 var event = ServiceEvent(withEventType: .contactAdded)
                 event.addEventInput(.accountId, value: account.id)
                 event.addEventInput(.state, value: true)
@@ -202,7 +213,7 @@ extension ContactsService: ContactsAdapterDelegate {
             vCard = nil
             log.error("Unable to parse the vCard :\(error)")
         }
-
+        
         //Update trust request list
         if self.contactRequest(withRingId: senderAccount) == nil {
             let contactRequest = ContactRequestModel(withRingId: senderAccount,