diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift
index cd7a54edc4177b90839fe46f8c781b389423b278..abb4c7e20086b5aa6bd23e9991e3900c272843e5 100644
--- a/enzevalos_iphone/DataHandler.swift
+++ b/enzevalos_iphone/DataHandler.swift
@@ -480,15 +480,16 @@ class DataHandler {
 
         // -------- Handle mail addresses ---------
         func getMailAddress(_ address: String, temporary: Bool) -> MailAddress {
-            let search = find("Mail_Address", type: "address", search: address)
+            let adr = address.lowercased()
+            let search = find("Mail_Address", type: "address", search: adr)
             if search == nil || search!.count == 0 {
                 if temporary {
-                    return CNMailAddressExtension(addr: address as NSString)
+                    return CNMailAddressExtension(addr: adr as NSString)
                 }
-                    else {
-                        let mail_address = NSEntityDescription.insertNewObject(forEntityName: "Mail_Address", into: managedObjectContext) as! Mail_Address
-                        mail_address.address = address
-                        return mail_address
+                else {
+                    let mail_address = NSEntityDescription.insertNewObject(forEntityName: "Mail_Address", into: managedObjectContext) as! Mail_Address
+                    mail_address.address = adr
+                    return mail_address
                 }
             }
                 else {
@@ -533,16 +534,23 @@ class DataHandler {
 
         func getContactByAddress(_ address: String) -> EnzevalosContact {
             let lowerAdr = address.lowercased()
-            if let contacts = find("EnzevalosContact", type: "addresses", search: lowerAdr){
-                for c in contacts{
-                    if case let contact as EnzevalosContact = c{
-                        return contact
-                    }
+            if let mailAdr = findMailAddress(adr: address){
+                if let contact = mailAdr.contact{
+                    return contact
                 }
             }
             if let contacts = findAll("EnzevalosContact"){
                 for c  in contacts{
                     if case let contact as EnzevalosContact = c{
+                        if let adrs = contact.addresses{
+                            for adr in adrs{
+                                if case let mailAdr as Mail_Address = adr{
+                                    if mailAdr.address == address{
+                                        return contact
+                                    }
+                                }
+                            }
+                        }
                         if let cnContact = contact.cnContact{
                             for adr in cnContact.emailAddresses {
                                 let name = adr.value as String
@@ -561,12 +569,11 @@ class DataHandler {
             contact = NSEntityDescription.insertNewObject(forEntityName: "EnzevalosContact", into: managedObjectContext) as! EnzevalosContact
             contact.displayname = lowerAdr
             let adr = getMailAddress(lowerAdr, temporary: false) as! Mail_Address
-            contact.addToAddresses(adr)
             adr.contact = contact
             return contact
         }
 
-        func getContact(_ name: String, address: String, key: String, prefer_enc: Bool) -> EnzevalosContact {
+        func getContact(name: String, address: String, key: String, prefer_enc: Bool) -> EnzevalosContact {
             let contact = getContactByAddress(address)
             contact.displayname = name
             contact.getAddress(address)?.key?.adding(key)
@@ -574,17 +581,17 @@ class DataHandler {
             return contact
         }
 
-        func getContacts(_ receivers: [MCOAddress]) -> [EnzevalosContact] {
+        func getContacts(receivers: [MCOAddress]) -> [EnzevalosContact] {
             var contacts = [EnzevalosContact]()
             var contact: EnzevalosContact
             for r in receivers {
-                contact = getContactByMCOAddress(r)
+                contact = getContactByMCOAddress(address: r)
                 contacts.append(contact)
             }
             return contacts
         }
 
-        func getContactByMCOAddress(_ address: MCOAddress) -> EnzevalosContact {
+        func getContactByMCOAddress(address: MCOAddress) -> EnzevalosContact {
             let contact = getContactByAddress(address.mailbox!)
             if address.displayName != nil {
                 contact.displayname = address.displayName
@@ -599,17 +606,25 @@ class DataHandler {
             let adr: Mail_Address
             adr = getMailAddressByMCOAddress(sender, temporary: false) as! Mail_Address
             if adr.contact == nil{
-                adr.contact = getContactByMCOAddress(sender)
+                adr.contact = getContactByMCOAddress(address: sender)
+            }
+            if let contact = adr.contact{
+                if contact.addresses == nil{
+                    contact.addToAddresses(adr)
+                }
+                else if !(contact.addresses?.contains(adr))!{
+                    contact.addToAddresses(adr)
+                }
+                if contact.addresses == nil || contact.addresses?.count == 0{
+                    print("ERROR Contact has no addresses!")
+                }
             }
             else{
-                let c = adr.contact
-                print("\(sender.mailbox) has contact \(c?.displayname)")
+                print("ERROR! No ENzContact!")
             }
+            
             //let contact = getContactByMCOAddress(sender)
            // adr = contact.getAddressByMCOAddress(sender)!
-            if adr.address != sender.mailbox{
-                print("False Matching!")
-            }
             
             /* TODO: Handle AUtocrypt again!
             if adr.lastSeen > fromMail.date{
@@ -729,8 +744,8 @@ class DataHandler {
             }
             if mail.uid < myfolder.lastID || myfolder.lastID == 1{
                 myfolder.lastID = mail.uid
-                save()
             }
+            save()
             return mail
         }
 
diff --git a/enzevalos_iphone/KeyRecord.swift b/enzevalos_iphone/KeyRecord.swift
index e88de24b5bdb22e4b765c3ffb0f71aaaf52ed73f..380bf89b9370f719f6a5fe27a89950fe7165837a 100644
--- a/enzevalos_iphone/KeyRecord.swift
+++ b/enzevalos_iphone/KeyRecord.swift
@@ -162,11 +162,11 @@ open class KeyRecord: Record {
                 ezContact = c
             }
             else{
-                ezContact = DataHandler.handler.getContact("", address: "", key: "", prefer_enc: false)
+                ezContact = DataHandler.handler.getContact(name: "", address: "", key: "", prefer_enc: false)
             }
         }
         else{
-            ezContact = DataHandler.handler.getContact("", address: "", key: "", prefer_enc: false)
+            ezContact = DataHandler.handler.getContact(name: "", address: "", key: "", prefer_enc: false)
         }
     }