diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj
index 33b8efeaa60ef07a5a84982a894ff9e4f04ca90b..e773f8170c7782874ea0853af43b3f981653153a 100644
--- a/enzevalos_iphone.xcodeproj/project.pbxproj
+++ b/enzevalos_iphone.xcodeproj/project.pbxproj
@@ -121,6 +121,7 @@
 		47B71AAD2538354A00CA87C6 /* NewOnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B71AAA2538354A00CA87C6 /* NewOnboardingView.swift */; };
 		47B71AAE2538354A00CA87C6 /* OnboardingIntro.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B71AAB2538354A00CA87C6 /* OnboardingIntro.swift */; };
 		47B71AAF2538354A00CA87C6 /* OnboardingValueState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B71AAC2538354A00CA87C6 /* OnboardingValueState.swift */; };
+		47B71AB325387AC000CA87C6 /* SearchHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B71AB225387AC000CA87C6 /* SearchHelper.swift */; };
 		47C09C76243B3395007F74A2 /* SmallContactListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C09C75243B3395007F74A2 /* SmallContactListView.swift */; };
 		47C112C22531D72E00621A07 /* PublicKeyRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C112C12531D72E00621A07 /* PublicKeyRecord.swift */; };
 		47C112C62531DBDD00621A07 /* SecretKeyRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C112C52531DBDD00621A07 /* SecretKeyRecord.swift */; };
@@ -188,7 +189,6 @@
 		A1123E6A1DA682850069551C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1123E6C1DA682850069551C /* Localizable.strings */; };
 		A114E4321FACB23000E40243 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A114E4311FACB23000E40243 /* StringExtension.swift */; };
 		A13526791D955BDF00D3BFE1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A13526781D955BDF00D3BFE1 /* AppDelegate.swift */; };
-		A13526861D955BDF00D3BFE1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A13526841D955BDF00D3BFE1 /* LaunchScreen.storyboard */; };
 		A15D215B223BE5F4003E0CE0 /* TempAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15D215A223BE5F4003E0CE0 /* TempAttachment.swift */; };
 		A15D215D223BE614003E0CE0 /* attachment.eml in Resources */ = {isa = PBXBuildFile; fileRef = A15D215C223BE614003E0CE0 /* attachment.eml */; };
 		A15D215F223BE6E4003E0CE0 /* MailTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15D215E223BE6E4003E0CE0 /* MailTest.swift */; };
@@ -471,6 +471,7 @@
 		47B71AAA2538354A00CA87C6 /* NewOnboardingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewOnboardingView.swift; sourceTree = "<group>"; };
 		47B71AAB2538354A00CA87C6 /* OnboardingIntro.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingIntro.swift; sourceTree = "<group>"; };
 		47B71AAC2538354A00CA87C6 /* OnboardingValueState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingValueState.swift; sourceTree = "<group>"; };
+		47B71AB225387AC000CA87C6 /* SearchHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchHelper.swift; sourceTree = "<group>"; };
 		47C09C75243B3395007F74A2 /* SmallContactListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallContactListView.swift; sourceTree = "<group>"; };
 		47C112C12531D72E00621A07 /* PublicKeyRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicKeyRecord.swift; sourceTree = "<group>"; };
 		47C112C52531DBDD00621A07 /* SecretKeyRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecretKeyRecord.swift; sourceTree = "<group>"; };
@@ -566,8 +567,6 @@
 		A1EB057B1D956838008659C1 /* MailHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MailHandler.swift; sourceTree = "<group>"; };
 		A1EB05871D956879008659C1 /* AddressHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddressHandler.swift; sourceTree = "<group>"; };
 		A1EB05A31D956E32008659C1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
-		A1F992301DA7D22D0073BF1B /* de */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = de; path = de.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
-		A1F992321DA7D2360073BF1B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = en; path = en.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
 		A5E303D624110F6400310264 /* smime-helpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "smime-helpers.h"; sourceTree = "<group>"; };
 		A5E303D724110F6400310264 /* smime-helpers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "smime-helpers.c"; sourceTree = "<group>"; };
 		AA686D4FC9B86445A0C87F0F /* Pods-enzevalos_iphone.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-enzevalos_iphone.release.xcconfig"; path = "../enzevalos_iphone_workspace/Pods/Target Support Files/Pods-enzevalos_iphone/Pods-enzevalos_iphone.release.xcconfig"; sourceTree = "<group>"; };
@@ -1037,6 +1036,7 @@
 		47B91AC11EC0C1FB000AE3EE /* data */ = {
 			isa = PBXGroup;
 			children = (
+				47B71AB225387AC000CA87C6 /* SearchHelper.swift */,
 				A15D215A223BE5F4003E0CE0 /* TempAttachment.swift */,
 				472F39921E279792009260FB /* protocols */,
 				A114E4311FACB23000E40243 /* StringExtension.swift */,
@@ -1296,7 +1296,6 @@
 				A198270D1D9A8ABC0027F65C /* enzevalos_iphone-Bridging-Header.h */,
 				4790114A228997620057AB04 /* StyleKits */,
 				A1123E6C1DA682850069551C /* Localizable.strings */,
-				A13526841D955BDF00D3BFE1 /* LaunchScreen.storyboard */,
 				A1EB05A31D956E32008659C1 /* Assets.xcassets */,
 				476142091E082F9C00FD5E4F /* Settings.bundle */,
 				A1BE3FF81E9664660040114B /* InfoPlist.strings */,
@@ -1433,7 +1432,7 @@
 				A13526721D955BDF00D3BFE1 /* Frameworks */,
 				A13526731D955BDF00D3BFE1 /* Resources */,
 				47F867DB2052B33C00AA832F /* CopyFiles */,
-				47F867E52052B4B500AA832F /* ShellScript */,
+				47F867E52052B4B500AA832F /* Run Script */,
 				3992B0CB6412E8526773B814 /* [CP] Embed Pods Frameworks */,
 			);
 			buildRules = (
@@ -1565,7 +1564,6 @@
 				A1BE3FF61E9664660040114B /* InfoPlist.strings in Resources */,
 				3E6B07DE2011246500E49609 /* invitationText.html in Resources */,
 				0ECEA0FB240E7DB1007DC71E /* mykey.pem in Resources */,
-				A13526861D955BDF00D3BFE1 /* LaunchScreen.storyboard in Resources */,
 				47CD5AAA2012368D00E771A1 /* logging_pk.asc in Resources */,
 				A1EB05A41D956E32008659C1 /* Assets.xcassets in Resources */,
 				4756DE0E20402F8E00452288 /* invitationTextCensor.html in Resources */,
@@ -1695,13 +1693,14 @@
 			shellPath = /bin/sh;
 			shellScript = "# Define output file. Change \"${PROJECT_DIR}/${PROJECT_NAME}Tests\" to your test's root source folder, if it's not the default name.\nOUTPUT_FILE=\"${PROJECT_DIR}/${PROJECT_NAME}Tests/GeneratedMocks.swift\"\necho \"Generated Mocks File = ${OUTPUT_FILE}\"\n\n# Define input directory. Change \"${PROJECT_DIR}/${PROJECT_NAME}\" to your project's root source folder, if it's not the default name.\nINPUT_DIR=\"${PROJECT_DIR}/${PROJECT_NAME}\"\necho \"Mocks Input Directory = ${INPUT_DIR}\"\n\n# Generate mock files, include as many input files as you'd like to create mocks for.\n\"${PODS_ROOT}/Cuckoo/run\" generate --testable \"${PROJECT_NAME}\" \\\n--output \"${OUTPUT_FILE}\" \\\n\"${INPUT_DIR}/AuthenticationModel.swift\" \\\n\"${INPUT_DIR}/AuthenticationViewModel.swift\" \n# ... and so forth, the last line should never end with a backslash\n\n# After running once, locate `GeneratedMocks.swift` and drag it into your Xcode test target group.\n";
 		};
-		47F867E52052B4B500AA832F /* ShellScript */ = {
+		47F867E52052B4B500AA832F /* Run Script */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 8;
 			files = (
 			);
 			inputPaths = (
 			);
+			name = "Run Script";
 			outputPaths = (
 			);
 			runOnlyForDeploymentPostprocessing = 1;
@@ -1793,6 +1792,7 @@
 				47EABF272423BFDD00774A93 /* AuthenticationScreen.swift in Sources */,
 				4764069A2416B54D00C7D426 /* MailView.swift in Sources */,
 				476406952416B54D00C7D426 /* KeyRecordRow.swift in Sources */,
+				47B71AB325387AC000CA87C6 /* SearchHelper.swift in Sources */,
 				47EABF3024240BD300774A93 /* AccountSetupView.swift in Sources */,
 				47C822602437A143005BCE73 /* CornerRounder.swift in Sources */,
 				4775D7AC243F18BC0052F2CC /* SecurityBriefingView.swift in Sources */,
@@ -1942,15 +1942,6 @@
 			name = Localizable.strings;
 			sourceTree = "<group>";
 		};
-		A13526841D955BDF00D3BFE1 /* LaunchScreen.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				A1F992301DA7D22D0073BF1B /* de */,
-				A1F992321DA7D2360073BF1B /* en */,
-			);
-			name = LaunchScreen.storyboard;
-			sourceTree = "<group>";
-		};
 		A1BE3FF81E9664660040114B /* InfoPlist.strings */ = {
 			isa = PBXVariantGroup;
 			children = (
diff --git a/enzevalos_iphone/AddressHandler.swift b/enzevalos_iphone/AddressHandler.swift
index dc7c79007173b4c269359b0efa9b288a345bdbcc..299c8a61a88bdd91a654495e5fa012b58a2886eb 100644
--- a/enzevalos_iphone/AddressHandler.swift
+++ b/enzevalos_iphone/AddressHandler.swift
@@ -24,7 +24,7 @@ import UIKit.UIImage
 class AddressHandler {
 
     static var addresses: [String] = []
-
+/*
     static var freqAlgorithm: ([String]) -> [(UIImage, String, String, UIImage?, UIColor)] = {
         (inserted: [String]) -> [(UIImage, String, String, UIImage?, UIColor)] in
         var cons: [(UIImage, String, String, UIImage?, UIColor)] = []
@@ -79,7 +79,7 @@ class AddressHandler {
 
         return list
     }
-/* TODO
+// TODO
     static var freqAlgorithm2: ([String]) -> [(UIImage, String, String, UIImage?, UIColor)] = {
         (inserted: [String]) -> [(UIImage, String, String, UIImage?, UIColor)] in
 
diff --git a/enzevalos_iphone/AppDelegate.swift b/enzevalos_iphone/AppDelegate.swift
index 396ee1794c27a751a7947899a5c49b58c530b28a..bf602e463a6024d628a52219018a9c458b46e05b 100644
--- a/enzevalos_iphone/AppDelegate.swift
+++ b/enzevalos_iphone/AppDelegate.swift
@@ -120,7 +120,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
     }
 
     func credentialsWork() {
-        self.window?.rootViewController = Onboarding.contactView(self.requestForAccess)
+       //TODO  self.window?.rootViewController = Onboarding.contactView(self.requestForAccess)
     }
 
     func contactCheck(_ accessGranted: Bool) {
@@ -149,14 +149,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
                 print("Delete All data")
                 //TODO What about the keychain?
             })
-            Onboarding.credentials = nil
-            Onboarding.credentialFails = 0
-            Onboarding.manualSet = false
+           
+            // Start screen Onboarding!
             UserManager.resetUserValues()
             
             self.window = UIWindow(frame: UIScreen.main.bounds)
-            //self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("onboarding")
-            self.window?.rootViewController = Onboarding.onboarding()
             self.window?.makeKeyAndVisible()
             UserDefaults.standard.set(false, forKey: "launchedBefore")
             UserDefaults.standard.set(false, forKey: "reset")
@@ -199,9 +196,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
     }
      */
     func onboardingDone() {
-        Logger.log(onboardingState: .Finish, duration: 0)
+        //Logger.log(onboardingState: .Finish, duration: 0)
         UserDefaults.standard.set(true, forKey: "launchedBefore")
-        self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
+        //self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()
         presentInboxViewController()
     }
 
@@ -220,18 +217,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
 
     func applicationWillEnterForeground(_ application: UIApplication) {
         // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
-        if let vc = self.window?.rootViewController {
-            if let inboxController = vc as? InboxViewController {
-                inboxController.loadData()
-            }
-            else {
-                for x in vc.children {
-                    if let inboxController = x as? InboxViewController {
-                        inboxController.loadData()
-                    }
-                }
-            }
-        }
+        presentInboxViewController()
         
     }
 
@@ -245,7 +231,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
             if let con = window?.rootViewController {
                 ItunesKeyHandling.simpleImportSecretKey(con: con)
             }
-            DataHandler.handler.startToSendMore()
+           //TODO DataHandler.handler.startToSendMore()
         }
     }
     
@@ -256,7 +242,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
     func applicationWillTerminate(_ application: UIApplication) {
         // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
         Logger.log(terminateApp: Void())
-        DataHandler.handler.terminate()
+        //TODO DataHandler.handler.terminate()
     }
     
   
@@ -287,11 +273,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
     func requestForNotifications(){
         if #available(iOS 10.0, *) {
         UNUserNotificationCenter.current().requestAuthorization(options: [ .badge], completionHandler: {didAllow, error in
-                self.setupKeys()
+               // self.setupKeys()
             })
         } else {
             // TODO: Fallback on earlier versions
-            self.setupKeys()
+            //self.setupKeys()
         }
     }
 
@@ -337,7 +323,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
         return
     }
     
-    func presentReadViewController(mail: PersistentMail) {
+    func presentReadViewController(mail: MailRecord) {
         //presentSwiftUIReadView()
         guard let vc = self.window?.rootViewController as? UINavigationController else {
             fatalError("No rootViewController!")
@@ -441,7 +427,7 @@ extension AppDelegate { //Network check
             Timer.scheduledTimer(withTimeInterval: TimeInterval(5), repeats: true, block: ({(t: Timer) -> () in
                 if self.currentReachabilityStatus != .notReachable {
                     t.invalidate()
-                    DataHandler.handler.startToSendMore()
+                    //TODO DataHandler.handler.startToSendMore()
                 }
             }))
         } else {
diff --git a/enzevalos_iphone/AuthenticationViewModel.swift b/enzevalos_iphone/AuthenticationViewModel.swift
index fb17e551c5ea787ce185a2b57f46ac600cb50b80..99908069fc7d6bd8ac07e7e393e6ef2abee3ad21 100644
--- a/enzevalos_iphone/AuthenticationViewModel.swift
+++ b/enzevalos_iphone/AuthenticationViewModel.swift
@@ -63,7 +63,7 @@ class AuthenticationViewModel : ObservableObject {
             print("No view controller!")
             return
         }
-        Logger.log(onboardingState: .GoogleLogIn, duration: 0)
+        //TODO Logger.log(onboardingState: .GoogleLogIn, duration: 0)
         
         EmailHelper.singleton().doEmailLoginIfRequired(onVC: vc, completionBlock: {
             guard let userEmail = EmailHelper.singleton().authorization?.userEmail, EmailHelper.singleton().authorization?.canAuthorize() ?? false else {
diff --git a/enzevalos_iphone/BadgeProgressView.swift b/enzevalos_iphone/BadgeProgressView.swift
index 575f1c3441ad0f7fd299fd479b512728d97ef02e..8319670aa184f0c2723ce8da61df1923f6a6d971 100644
--- a/enzevalos_iphone/BadgeProgressView.swift
+++ b/enzevalos_iphone/BadgeProgressView.swift
@@ -67,6 +67,6 @@ struct Quest: View {
 
 struct BadgeProgressView_Previews: PreviewProvider {
     static var previews: some View {
-        BadgeProgressView(badge: Badge(type: .MailMaster, description: NSLocalizedString("Mailmaster", comment:"Mailmaster badge" ), imageOn: "verschluesseltOn", imageOff: "verschluesseltOff", isActive: true))
+        BadgeProgressView(badge: Badge(description: NSLocalizedString("Mailmaster", comment:"Mailmaster badge" ), imageOn: "verschluesseltOn", imageOff: "verschluesseltOff", isActive: true))
     }
 }
diff --git a/enzevalos_iphone/DebugSettings.swift b/enzevalos_iphone/DebugSettings.swift
index 1aa2ea20ae945cde5c8501d32b71b43081e0b644..64156b55670d133bd652b24c971d5d67efe44359 100644
--- a/enzevalos_iphone/DebugSettings.swift
+++ b/enzevalos_iphone/DebugSettings.swift
@@ -21,7 +21,7 @@
 import Foundation
 
 private let pgp = SwiftPGP()
-private let datahandler = DataHandler.handler
+private let datahandler = PersitentDataProvider.dataProvider
 
 
 let SUPPORT_MAIL_ADR = "letterbox@inf.fu-berlin.de"
@@ -32,7 +32,7 @@ func setupStudyPublicKeys() {
     let support_pk = "support_pk"
     let keys = ["noreply@bitcoin.de": "bitcoinde", "letterbox@zedat.fu-berlin.de": support_pk, "letterbox-hilfe@inf.fu-berlin.de": support_pk, "enzevalos@inf.fu-berlin.de": support_pk, SUPPORT_MAIL_ADR: support_pk, LOGGING_MAIL_ADR: logging_pk]
     importPublicKeyDic(keys: keys, type: "asc")
-    datahandler.save(during: "init study keys")
+    //TODO datahandler.save(during: "init study keys")
 }
 
 
@@ -55,7 +55,7 @@ func importSecretKey(file: String, type: String){
     if let path = Bundle.main.path(forResource: file, ofType: type){
         let ids = try! pgp.importKeysFromFile(file: path, pw: nil)
         for id in ids {
-            _ = datahandler.newSecretKey(keyID: id, addPk: true)
+           //TODO  _ = datahandler.newSecretKey(keyID: id, addPk: true)
         }
     }
 }
@@ -71,7 +71,7 @@ private func importPublicKey(file: String, type: String, adr: String) {
         do {
             let ids = try pgp.importKeysFromFile(file: path, pw: nil)
             for id in ids {
-                _ = datahandler.newPublicKey(keyID: id, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, transferType: nil)
+               //TODO  _ = datahandler.newPublicKey(keyID: id, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false, transferType: nil)
             }
         } catch _ {
 
diff --git a/enzevalos_iphone/FeedbackButtonHelper.swift b/enzevalos_iphone/FeedbackButtonHelper.swift
index 25bf01a6480b06ab27cb7dbe7f48d8a1808ffd40..54e4df265c1da00dc5b01959d3a8c33a12b9112f 100644
--- a/enzevalos_iphone/FeedbackButtonHelper.swift
+++ b/enzevalos_iphone/FeedbackButtonHelper.swift
@@ -26,12 +26,13 @@ class FeedbackButtonHelper {
         let subject = String(format: NSLocalizedString("Feedback.Mail.Subject", comment: "Feedback"), view.rawValue)
         let body = String(format: NSLocalizedString("Feedback.Mail.Body", comment: ""), view.rawValue)
         let mail = EphemeralMail(to: NSSet(object: receiver), subject: subject, body: String(format: body, StudySettings.studyID))
+        /*
         if let navi = navigationController, let sendController = FeedbackButtonHelper.createSendViewController(navigationController: navi) {
             sendController.prefilledMail = mail
             sendController.isFeedback = true
-        }
+        }*/
     }
-    
+    /* TODO
     private static func createSendViewController(navigationController: UINavigationController) -> SendViewController? {
         let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
         if let viewController = mainStoryboard.instantiateViewController(withIdentifier: "SendViewController") as? SendViewController {
@@ -39,5 +40,5 @@ class FeedbackButtonHelper {
             return viewController
         }
         return nil
-    }
+    } */
 }
diff --git a/enzevalos_iphone/ItunesHandler.swift b/enzevalos_iphone/ItunesHandler.swift
index 7e5aec52a941b8dcdc4464b967d08fb0092b7167..088f02947aa772a88b80d5569f13b3c09ad87397 100644
--- a/enzevalos_iphone/ItunesHandler.swift
+++ b/enzevalos_iphone/ItunesHandler.swift
@@ -12,9 +12,9 @@ class ItunesKeyHandling {
     static func simpleImportSecretKey(con: UIViewController) {
         var sks = iTunesKeyHandler.storedKeys.filter{$0.isSecret}
         // filter known secret keys
-        sks = sks.filter{DataHandler.handler.prefSecretKey()?.keyID != $0.keyID}
-        let knownIds = DataHandler.handler.findSecretKeys().map{$0.keyID}
-        sks = sks.filter{!knownIds.contains($0.keyID)}
+        // TODO sks = sks.filter{DataHandler.handler.prefSecretKey()?.keyID != $0.keyID}
+        //let knownIds = DataHandler.handler.findSecretKeys().map{$0.keyID}
+        //sks = sks.filter{!knownIds.contains($0.keyID)}
         // Import only keys with our mail addr.
         sks = sks.filter{
             if let useradr = UserManager.loadUserValue(Attribute.userAddr) as? String {
@@ -35,9 +35,9 @@ class ItunesKeyHandling {
     func extractSecretKeys(withKnownKeys: Bool) -> [TempKey] {
         var newSecretKeys = storedKeys.filter{$0.isSecret}
         if !withKnownKeys {
-            var knownIDs = DataHandler.handler.findSecretKeys().map{$0.keyID}
-            knownIDs = knownIDs.filter{return !($0 == "")}
-            newSecretKeys = newSecretKeys.filter{!knownIDs.contains($0.keyID)}
+            //TODO var knownIDs = DataHandler.handler.findSecretKeys().map{$0.keyID}
+            //knownIDs = knownIDs.filter{return !($0 == "")}
+            //newSecretKeys = newSecretKeys.filter{!knownIDs.contains($0.keyID)}
         }
         return newSecretKeys
     }
@@ -45,9 +45,9 @@ class ItunesKeyHandling {
     func extractPublicKeys(withKnownKeys: Bool) -> [TempKey] {
         var newPublicKeys = storedKeys.filter{!$0.isSecret}
         if !withKnownKeys {
-            var knownIDs = DataHandler.handler.findPublicKeys().map{$0.keyID}
-            knownIDs = knownIDs.filter{return !($0 == "")}
-            newPublicKeys = newPublicKeys.filter{!knownIDs.contains($0.keyID)}
+            //TODO var knownIDs = DataHandler.handler.findPublicKeys().map{$0.keyID}
+            // knownIDs = knownIDs.filter{return !($0 == "")}
+            // newPublicKeys = newPublicKeys.filter{!knownIDs.contains($0.keyID)}
         }
         return newPublicKeys
     }
@@ -96,7 +96,7 @@ class ItunesKeyHandling {
     
     func importPublicKeys() -> [String]{
         var publicKeys = storedKeys.filter{!$0.isSecret}
-        publicKeys = publicKeys.filter{DataHandler.handler.findKey(keyID: $0.keyID) == nil}
+       //TODO  publicKeys = publicKeys.filter{DataHandler.handler.findKey(keyID: $0.keyID) == nil}
         let keyIds = pgp.store(tempKeys: publicKeys)
         //TODO: Store in Datahandler -> in tempKey?
         return keyIds
@@ -144,14 +144,14 @@ class MinimalImportUI {
             if let pw = secretKeyPasswordField?.text {
                 if secretKey.testPassword(guess: pw) {
                     let keyIDs = SwiftPGP.init().store(tempKeys: [secretKey])
-                    _ = DataHandler.handler.newSecretKeys(keyIds: keyIDs, addPKs: true)
+                    //TODO _ = DataHandler.handler.newSecretKeys(keyIds: keyIDs, addPKs: true)
                 }
                 else {
                     importSecretKeyDialog(first: false)
                 }
             } else {
                 let keyIDs = SwiftPGP.init().store(tempKeys: [secretKey])
-                _ = DataHandler.handler.newSecretKeys(keyIds: keyIDs, addPKs: true)
+                //TODO _ = DataHandler.handler.newSecretKeys(keyIds: keyIDs, addPKs: true)
             }
         }
     }
diff --git a/enzevalos_iphone/LoggerDetail.swift b/enzevalos_iphone/LoggerDetail.swift
index 9555cb9be3dbbbe060c0e40a8b9ce0fc75498189..08a36f25b8f2550e0e925d9b4864abbd33329b70 100644
--- a/enzevalos_iphone/LoggerDetail.swift
+++ b/enzevalos_iphone/LoggerDetail.swift
@@ -142,7 +142,7 @@ class LoggerDetail {
         saveToDisk(json: dictToJSON(fields: event))
         sendCheck()
     }
-
+/*
     static func log(contactViewOpen keyRecord: KeyRecord?, otherRecords: [KeyRecord]?, isUser: Bool) {
         if !logging {
             return
@@ -169,32 +169,9 @@ class LoggerDetail {
         saveToDisk(json: dictToJSON(fields: event))
         sendCheck()
     }
+ 
 
-    static func log(badgeCaseViewOpen badges: [Badges]) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.badgeCaseViewOpen.rawValue
-
-        var achievedBadges: [String] = []
-        var missingBadges: [String] = []
-
-        for badge in badges {
-            if badge.isAchieved() {
-                achievedBadges.append(badge.displayName)
-            } else {
-                missingBadges.append(badge.displayName)
-            }
-        }
-
-        event["achievedBadges"] = achievedBadges
-        event["missingBadges"] = missingBadges
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
+  
 
     static func log(contactViewClose keyRecord: KeyRecord?, otherRecords: [KeyRecord]?, isUser: Bool) {
         if !logging {
@@ -222,6 +199,7 @@ class LoggerDetail {
         saveToDisk(json: dictToJSON(fields: event))
         sendCheck()
     }
+ */
 
     static func log(keyViewOpen keyID: String) {
         if !logging {
@@ -293,53 +271,7 @@ class LoggerDetail {
         sendCheck()
     }
 
-    static func log(importPrivateKeyPopupOpen mail: PersistentMail?) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.importPrivateKeyPopupOpen.rawValue
-        if let mail = mail {
-            event = extract(from: mail, event: event)
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(importPrivateKeyPopupClose mail: PersistentMail?, doImport: Bool) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.importPrivateKeyPopupClose.rawValue
-        event["doImport"] = doImport
-        if let mail = mail {
-            event = extract(from: mail, event: event)
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(importPrivateKey mail: PersistentMail?, success: Bool) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.importPrivateKey.rawValue
-        event["success"] = success
-        if let mail = mail {
-            event = extract(from: mail, event: event)
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
+    
     static func log(sendViewOpen mail: EphemeralMail?) {
         if !logging {
             return
@@ -370,76 +302,8 @@ class LoggerDetail {
         sendCheck()
     }
 
-    static func log(createDraft to: [Mail_Address?], cc: [Mail_Address?], bcc: [Mail_Address?], subject: String, bodyLength: Int, isEncrypted: Bool, isSigned: Bool, myKeyID: String) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.createDraft.rawValue
-
-
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(sent from: Mail_Address, to: [Mail_Address], cc: [Mail_Address], bcc: [Mail_Address], subject: String, bodyLength: Int, isEncrypted: Bool, decryptedBodyLength: Int, decryptedWithOldPrivateKey: Bool = false, isSigned: Bool, isCorrectlySigned: Bool = true, signingKeyID: String, myKeyID: String, secureAddresses: [Mail_Address] = [], encryptedForKeyIDs: [String] = [], inviteMailContent: String?, invitationMail: Bool) {
-
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-
-        event["type"] = LoggingEventType.mailSent.rawValue
-        event["from"] = LoggerDetail.resolve(mailAddress: from)
-        event["to"] = LoggerDetail.resolve(mailAddresses: to)
-        event["cc"] = LoggerDetail.resolve(mailAddresses: cc)
-        event["bcc"] = LoggerDetail.resolve(mailAddresses: bcc)
-        event["communicationState"] = LoggerDetail.communicationState(subject: subject)
-        event["specialMail"] = LoggerDetail.specialMail(subject: subject)
-        event["bodyLength"] = bodyLength
-        event["isEncrypted"] = isEncrypted
-        event["decryptedBodyLength"] = decryptedBodyLength
-        event["decryptedWithOldPrivateKey"] = decryptedWithOldPrivateKey
-        event["isSigned"] = isSigned
-        event["isCorrectlySigned"] = isCorrectlySigned
-        event["signingKeyID"] = LoggerDetail.resolve(keyID: signingKeyID)
-        event["myKeyID"] = LoggerDetail.resolve(keyID: myKeyID)
-        event["secureAddresses"] = LoggerDetail.resolve(mailAddresses: secureAddresses) //means the addresses, which received a secure mail
-        event["encryptedForKeyIDs"] = LoggerDetail.resolve(keyIDs: encryptedForKeyIDs)
-        if let content = inviteMailContent {
-            event["inviteMailContent"] = content
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        if invitationMail {
-            sendLog()
-        }
-        else {
-            sendCheck()
-        }
 
 
-    }
-
-    static func log(readViewOpen mail: PersistentMail, message: String, draft: Bool = false) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-
-        event["type"] = LoggingEventType.readViewOpen.rawValue
-        event = extract(from: mail, event: event)
-        event["messagePresented"] = message
-        event["draft"] = draft
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
     static func log(readViewClose message: String, draft: Bool = false) {
         if !logging {
             return
@@ -455,20 +319,7 @@ class LoggerDetail {
         sendCheck()
     }
 
-    static func log(received mail: PersistentMail) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-
-        event["type"] = LoggingEventType.mailReceived.rawValue
-        event = extract(from: mail, event: event)
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
+  
     static func log(bitcoinMail gotIt: Bool) {
         if !logging {
             return
@@ -482,128 +333,6 @@ class LoggerDetail {
         sendCheck()
     }
 
-
-    static func log(delete mail: PersistentMail, toTrash: Bool) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        if toTrash {
-            event["type"] = LoggingEventType.mailDeletedToTrash.rawValue
-        } else {
-            event["type"] = LoggingEventType.mailDeletedPersistent.rawValue
-        }
-        // event = extract(from: mail, event: event)
-        event["operation"] = "DeleteMail"
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(archive mail: PersistentMail) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.mailArchived.rawValue
-        event = extract(from: mail, event: event)
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(open indicatorButton: String, mail: PersistentMail?) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.indicatorButtonOpen.rawValue
-        event["indicatorButton"] = indicatorButton
-        if let mail = mail {
-            event["view"] = "readView"
-            event = extract(from: mail, event: event)
-        } else {
-            event["view"] = "sendView"
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(close indicatorButton: String, mail: PersistentMail?, action: String) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.indicatorButtonClose.rawValue
-        event["indicatorButton"] = indicatorButton
-        if let mail = mail {
-            event["view"] = "readView"
-            event = extract(from: mail, event: event)
-        } else {
-            event["view"] = "sendView"
-        }
-        event["action"] = action
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(showBroken mail: PersistentMail?) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.showBrokenMail.rawValue
-        event["view"] = "readView"
-        if let mail = mail {
-            event = extract(from: mail, event: event)
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(reactTo mail: PersistentMail?) {
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        event["type"] = LoggingEventType.reactButtonTapped.rawValue
-        if let mail = mail {
-            event = extract(from: mail, event: event)
-        }
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
-    static func log(discover publicKeyID: String, mailAddress: Mail_Address, importChannel: String, knownPrivateKey: Bool, knownBefore: Bool) { //add reference to mail here?
-        if !logging {
-            return
-        }
-
-        var event = plainLogDict()
-        if !knownBefore {
-            event["type"] = LoggingEventType.pubKeyDiscoveryNewKey.rawValue
-        } else {
-            event["type"] = LoggingEventType.pubKeyDiscoveryKnownKey.rawValue
-        }
-        event["keyID"] = LoggerDetail.resolve(keyID: publicKeyID)
-        event["mailAddress"] = LoggerDetail.resolve(mail_address: mailAddress)
-        event["knownPrivateKey"] = knownPrivateKey //Do we have a private key for it?
-        event["importChannel"] = importChannel
-
-        saveToDisk(json: dictToJSON(fields: event))
-        sendCheck()
-    }
-
     static func log(backgroundFetch newMails: UInt32, duration: Double) {
         if !logging {
             return
@@ -664,21 +393,19 @@ class LoggerDetail {
         sendCheck()
     }
 
-    static fileprivate func extract(from mail: PersistentMail, event: [String: Any]) -> [String: Any] {
+    static fileprivate func extract(from mail: MailRecord, event: [String: Any]) -> [String: Any] {
         var event = event
-        event["from"] = LoggerDetail.resolve(mailAddress: mail.from)
-        event["to"] = LoggerDetail.resolve(mailAddresses: mail.to)
-        event["cc"] = LoggerDetail.resolve(mailAddresses: mail.cc ?? NSSet())
-        event["bcc"] = LoggerDetail.resolve(mailAddresses: mail.bcc ?? NSSet())
+        event["from"] = LoggerDetail.resolve(mailAddress: mail.fromAddress as! MailAddress)
+        event["to"] = LoggerDetail.resolve(mailAddresses: mail.tos)
+        event["cc"] = LoggerDetail.resolve(mailAddresses: mail.ccs)
+        event["bcc"] = LoggerDetail.resolve(mailAddresses: mail.bccs)
         event["communicationState"] = LoggerDetail.communicationState(subject: mail.subject ?? "")
         event["specialMail"] = LoggerDetail.specialMail(subject: mail.subject ?? "")
-        event["timeInHeader"] = mail.date.description
+        event["timeInHeader"] = mail.date?.description
         event["bodyLength"] = (mail.body)?.count
-        event["isEncrypted"] = mail.isEncrypted
-        event["decryptedBodyLength"] = (mail.decryptedBody ?? "").count
-        event["decryptedWithOldPrivateKey"] = mail.decryptedWithOldPrivateKey
-        event["isSigned"] = mail.isSigned
-        event["isCorrectlySigned"] = mail.isCorrectlySigned
+        event["encState"] = mail.encryptionState.rawValue
+        event["decryptedBodyLength"] = (mail.body ?? "").count
+        event["signatureState"] = mail.signedState.rawValue
         event["x-Mailer"] = mail.xMailer
         //TODO:
         //event["signingKeyID"] = Logger.resolve(keyID: signingKeyID)
@@ -690,7 +417,7 @@ class LoggerDetail {
         //event["encryptedForKeyIDs"] = Logger.resolve(keyIDs: encryptedForKeyIDs)
 
         event["trouble"] = mail.trouble
-        event["folder"] = LoggerDetail.resolve(folder: mail.folder)
+       // event["folder"] = LoggerDetail.resolve(folder: mail.folder)
 
         return event
     }
@@ -749,7 +476,7 @@ class LoggerDetail {
     }
 
     //takes backendFolderPath
-    static func resolve(folder: Folder) -> String {
+    static func resolve(folder: FolderRecord) -> String {
         let folderPath = folder.path
         if folderPath == UserManager.backendSentFolderPath {
             return "sent"
@@ -766,31 +493,23 @@ class LoggerDetail {
         if folderPath == UserManager.backendArchiveFolderPath {
             return "archive"
         }
-        return folder.pseudonym
+        return folder.path ?? ""//TODO
     }
 
     //get an pseudonym for a mailAddress
     static func resolve(mailAddress: MailAddress) -> String {
-        if let addr = mailAddress as? Mail_Address {
-            return resolve(mail_address: addr)
-        } else if mailAddress is CNMailAddressExtension {
-            return "CNMailAddress"
+        if mailAddress.isUser {
+                return "self"
         }
-        return "unknownMailAddressType"
+        return mailAddress.mailAddress//TODO .pseudonym
     }
 
-    static func resolve(mail_address: Mail_Address) -> String {
-        if mail_address.isUser {
-            return "self"
-        }
-        return mail_address.pseudonym
-    }
 
     static func resolve(mailAddresses: NSSet) -> [String] {
         var result: [String] = []
         for addr in mailAddresses {
-            if let addr = addr as? Mail_Address {
-                result.append(resolve(mail_address: addr))
+            if let addr = addr as? MailAddress {
+                result.append(resolve(mailAddress: addr))
             } else if addr is CNMailAddressExtension {
                 result.append("CNMailAddress")
             } else {
@@ -800,38 +519,25 @@ class LoggerDetail {
         return result
     }
 
-    static func resolve(mailAddresses: [Mail_Address]) -> [String] {
-        var result: [String] = []
-        for addr in mailAddresses {
-            result.append(resolve(mail_address: addr))
-        }
-        return result
-    }
-
     static func resolve(mailAddresses: [MailAddress]) -> [String] {
         var result: [String] = []
         for addr in mailAddresses {
-            if let addr = addr as? Mail_Address {
-                result.append(resolve(mail_address: addr))
-            } else if addr is CNMailAddressExtension {
-                result.append("CNMailAddress")
-            } else {
-                result.append("unknownMailAddressType")
-            }
+            result.append(resolve(mailAddress: addr))
         }
         return result
     }
 
+
     //get an pseudonym for a keyID
     static func resolve(keyID: String) -> String {
-        if let key = DataHandler.handler.findKey(keyID: keyID) {
+        /*if let key = DataHandler.handler.findKey(keyID: keyID) {
             return key.pseudonym
-        }
+        }*/
         return "noKeyID"
     }
 
-    static func resolve(key: PersistentKey) -> String {
-        return key.pseudonym
+    static func resolve(key: PublicKeyRecord) -> String {
+        return key.fingerprint ?? "" //TODO
     }
 
     static func resolve(keyIDs: [String]) -> [String] {
diff --git a/enzevalos_iphone/MailComparison.swift b/enzevalos_iphone/MailComparison.swift
index b221bb319c57f101c8b932d50a8590b1c3b39816..724bf6c0b940d8cbc1861da574a48b548c838e30 100644
--- a/enzevalos_iphone/MailComparison.swift
+++ b/enzevalos_iphone/MailComparison.swift
@@ -9,22 +9,25 @@
 import Foundation
 import CoreData
 
-private let datahandler = DataHandler.handler
+//TODO private let datahandler = DataHandler.handler
 
 public enum ResultCompareSenderToContacts {
        case isContact, isSender, OnlyIdentity, Unknown
    }
 
+
+//TODO: Move to Mail Address?
 extension String {
     
     /**
      compares the given mail address to the persistant mails and returns the number of matches
      ***/
-    private func countMatches(_ mailAddr: String, _ inboxMails: [PersistentMail]) -> Int {
+    private func countMatches(_ mailAddr: String, _ inboxMails: [MailRecord]) -> Int {
         var senders: [String] = []
         for sender in inboxMails{
-            let sender: String = sender.from.mailAddress
-            senders.append(sender)
+            if let sender: String = sender.fromAddress?.email {
+                senders.append(sender)
+            }
         }
         var numberOfFoundMatches = 0
         for addr in senders{
@@ -38,15 +41,16 @@ extension String {
     /**
      returns a mail address, wich has the same identity as the given one but a different domain
      ***/
-    private func getIdentityWithDifferentDomain(_ mailAdd: String, inboxMails: [PersistentMail]) -> String{
+    private func getIdentityWithDifferentDomain(_ mailAdd: String, inboxMails: [MailRecord]) -> String{
         let senderIdentity = mailAdd.getLocalMailIdentity()
         var senderDomain = mailAdd.splitAddress()
             senderDomain.removeFirst()
         
         var senders: [String] = []
         for sender in inboxMails{
-            let sender: String = sender.from.mailAddress
-            senders.append(sender)
+            if let sender: String = sender.fromAddress?.email {
+             senders.append(sender)
+            }
         }
         var foundMatch = ""
         for addr in senders{
@@ -66,12 +70,12 @@ extension String {
      ***/
     public func compareSenderToContacts() -> ResultCompareSenderToContacts {
         // Case 1: Is the address of the sender known through previous mails?
-        let inboxMails = datahandler.getAllPersistentMails()
+        let inboxMails = [MailRecord]()//datahandler.getAllPersistentMails()
         if countMatches(self, inboxMails) >= 2{
             return ResultCompareSenderToContacts.isSender
         }
         // Case 2: Is the address of the sender in the address book?
-        let enzContacts = datahandler.getContacts()
+        let enzContacts = [AddressRecord]()// datahandler.getContacts()
         for contact in enzContacts {
             let contMailAddr = contact.cnContact?.getMailAddresses()
             if contMailAddr != nil{
diff --git a/enzevalos_iphone/MailHandler.swift b/enzevalos_iphone/MailHandler.swift
index 179dc93b464b71427138dc6981c2ba8b0458c734..6c140faa5767dadc094dc60c7f23d2704a1f4789 100644
--- a/enzevalos_iphone/MailHandler.swift
+++ b/enzevalos_iphone/MailHandler.swift
@@ -513,7 +513,7 @@ class MailHandler {
         }
     }
 
-    private func loadMessagesFromServer(_ uids: MCOIndexSet, folderPath: String, maxLoad: Int = MailHandler.MAXMAILS, record: KeyRecord?, completionCallback: @escaping ((_ error: MailServerConnectionError?) -> ())) {
+    private func loadMessagesFromServer(_ uids: MCOIndexSet, folderPath: String, maxLoad: Int = MailHandler.MAXMAILS, completionCallback: @escaping ((_ error: MailServerConnectionError?) -> ())) {
         guard IMAPSession != nil else {
             completionCallback(MailServerConnectionError.NoData)
             return
@@ -530,7 +530,7 @@ class MailHandler {
         fetchOperation.start{[unowned self] (err, msg, vanished) -> Void in
             guard err == nil else {
                 let connerror = MailServerConnectionError.findErrorCode(error: err!)
-                self.errorhandling(error: connerror, originalCall: {self.loadMessagesFromServer(uids, folderPath: folderPath, maxLoad: maxLoad, record: record, completionCallback: completionCallback)}, completionCallback: completionCallback)
+                self.errorhandling(error: connerror, originalCall: {self.loadMessagesFromServer(uids, folderPath: folderPath, maxLoad: maxLoad, completionCallback: completionCallback)}, completionCallback: completionCallback)
                 return
             }
             var calledMails = 0
@@ -542,13 +542,13 @@ class MailHandler {
                     op?.start {[unowned self] err, data in
                         guard err == nil else {
                             let connerror = MailServerConnectionError.findErrorCode(error: err!)
-                            self.errorhandling(error: connerror, originalCall: {self.loadMessagesFromServer(uids, folderPath: folderPath, maxLoad: maxLoad, record: record, completionCallback: completionCallback)}, completionCallback: completionCallback)
+                            self.errorhandling(error: connerror, originalCall: {self.loadMessagesFromServer(uids, folderPath: folderPath, maxLoad: maxLoad, completionCallback: completionCallback)}, completionCallback: completionCallback)
                             return
                         }
                         if let parser = data {
                             let id = UInt64(message.uid)
                             let incomingMail = IncomingMail(rawData: parser, uID: id, folderPath: folderPath, flags: message.flags)
-                            _ = incomingMail.store(keyRecord: record)
+                            //TODO _ = incomingMail.store(keyRecord: record)
                         }
                         dispatchGroup.leave()
                     }
@@ -561,7 +561,7 @@ class MailHandler {
                     self.IMAPSession?.disconnectOperation().start({[unowned self] err2 in
                         guard err2 == nil else {
                             let connerror = MailServerConnectionError.findErrorCode(error: err2!)
-                            self.errorhandling(error: connerror, originalCall: {self.loadMessagesFromServer(uids, folderPath: folderPath, maxLoad: maxLoad, record: record, completionCallback: completionCallback)}, completionCallback: completionCallback)
+                            self.errorhandling(error: connerror, originalCall: {self.loadMessagesFromServer(uids, folderPath: folderPath, maxLoad: maxLoad, completionCallback: completionCallback)}, completionCallback: completionCallback)
                             return
                         }
                     })
@@ -571,7 +571,7 @@ class MailHandler {
         }
     }
     
-
+/* TODO
     func move(mails: [MailRecord], from: String, to: String, folderCreated: Bool = false) {
         guard IMAPSession != nil else {
             return
@@ -642,7 +642,7 @@ class MailHandler {
         }
     }
 
-
+*/
     func allFolders(_ completion: @escaping (Error?, [Any]?) -> Void) {
         guard IMAPSession != nil else {
             completion(MailServerConnectionError.NoData, nil)
@@ -671,7 +671,7 @@ class MailHandler {
                 for message in msgs {
                     toFetchIDs.add(UInt64(message.uid))
                 }
-                self.loadMessagesFromServer(toFetchIDs, folderPath: folderPath, maxLoad: 50, record: nil, completionCallback: completionCallback)
+                self.loadMessagesFromServer(toFetchIDs, folderPath: folderPath ?? "", maxLoad: 50, completionCallback: completionCallback)
             } else {
                 completionCallback(nil)
             }
@@ -692,10 +692,10 @@ class MailHandler {
             return
         }
         folder.lastUpdate = Date()
-        if folder.mailsOfFolder.count > 0 {
+        if folder.mailsInFolder?.count ?? 0 > 0 {
             self.loadMailsByNum(folder: folder, completionCallback: completionCallback, multipleMails: false)
         } else {
-            if folder.path == UserManager.backendInboxFolderPath || folder.path.lowercased() == "INBOX".lowercased() {
+            if folder.path == UserManager.backendInboxFolderPath || folder.path?.lowercased() == "INBOX".lowercased() {
                 self.initInbox(inbox: folder, completionCallback: completionCallback)
             } else {
                 self.initFolder(folder: folder, completionCallback: completionCallback)
@@ -731,18 +731,19 @@ class MailHandler {
             range = MCORange(location: UInt64(lastMinElem), length: UInt64(MailHandler.MAXMAILS))
             requestIds.add(range)
             requestIds.remove(knownIds)
-            if folder.minID > UInt64(lastMinElem) {
-                folder.minID = UInt64(lastMinElem)
+            if UInt64(truncating: folder.minUID ?? 0) > UInt64(lastMinElem) {
+                folder.minUID = NSDecimalNumber(value: UInt64(lastMinElem))
             }
         }
         if lastMinElem < MailHandler.MAXMAILS {
             range = MCORange(location: UInt64(1), length: UInt64(MailHandler.MAXMAILS))
             requestIds.add(range)
-            folder.minID = 1
+            folder.minUID = 1
         }
         if multipleMails {
-            var (start, overflow) = folder.minID.subtractingReportingOverflow(UInt64(MailHandler.MAXMAILS))
-            if overflow && folder.minID > 1 {
+            var min = UInt64(folder.minUID ?? 0)
+            var (start, overflow) = min.subtractingReportingOverflow(UInt64(MailHandler.MAXMAILS))
+            if overflow && min > 1 {
                 // 1 < folder.min < MailHandler.MAXMAILs -> start with uid = 1
                 start = 1
                 overflow = false
@@ -750,7 +751,7 @@ class MailHandler {
             if !overflow {
                 range = MCORange(location: start, length: UInt64(MailHandler.MAXMAILS))
                 requestIds.add(range)
-                folder.minID = start
+                folder.minUID = NSDecimalNumber(value: start)
             }
             
         }
@@ -774,7 +775,7 @@ class MailHandler {
                 }
                 if let status = status, let ids = MCOIndexSet(range: MCORange(location: 0, length: UInt64(status.uidNext))) {
                     let newIds = self.calculateIndicies(indicies: ids, folder: folder, multipleMails: multipleMails)
-                    self.loadMessagesFromServer(newIds, folderPath: path, record: nil, completionCallback: completionCallback)
+                  //TODO  self.loadMessagesFromServer(newIds, folderPath: path, record: nil, completionCallback: completionCallback)
                 }
             }
         }
@@ -786,7 +787,7 @@ class MailHandler {
             completionCallback(MailServerConnectionError.NoData)
             return
         }
-        if let mails = folder.mails, mails.count > 0 {
+        if let mails = folder.mailsInFolder, mails.count > 0 {
             loadMailsByNum(folder: folder, completionCallback: completionCallback, multipleMails: true)
         } else {
             initFolder(folder: folder, completionCallback: completionCallback)
@@ -810,8 +811,8 @@ class MailHandler {
             }
             if let ids = uids {
                 folder.lastUpdate = Date()
-                ids.remove(folder.uids)
-                self.loadMessagesFromServer(ids, folderPath: folderPath, maxLoad: maxLoad, record: nil, completionCallback: completionCallback)
+                //TODO ids.remove(folder.uids)
+               // self.loadMessagesFromServer(ids, folderPath: folderPath, maxLoad: maxLoad, record: nil, completionCallback: completionCallback)
             } else {
                 completionCallback(nil)
             }
diff --git a/enzevalos_iphone/OutgoingMail.swift b/enzevalos_iphone/OutgoingMail.swift
index 975fd61e95268bf4c3005969a19f9a3876c3df41..0bbe5f9ce6990156914069b535ace23a006aaf4c 100644
--- a/enzevalos_iphone/OutgoingMail.swift
+++ b/enzevalos_iphone/OutgoingMail.swift
@@ -132,9 +132,10 @@ class OutgoingMail {
         bccEntrys = OutgoingMail.mapToMCOAddresses(addr: mail.bccs)
         subject = mail.subject != nil ? mail.subject!: ""
         textContent = mail.body
-        //TODO htmlContent = mail.decryptedBody //TODO FIX HERE
+        htmlContent = mail.body //.decryptedBody //TODO FIX HERE
         textparts = 0 //TODO FIX HERE
         //sendEncryptedIfPossible = mail.isEncrypted //TODO FIX HERE
+        sendEncryptedIfPossible = mail.encryptionState != .UnableToDecrypt
         self.orderReceivers()
         self.mail = mail
         //self.loggingMail = mail.isCorrectlySigned //TODO FIX HERE
diff --git a/enzevalos_iphone/PLists/enzevalos-Info.plist b/enzevalos_iphone/PLists/enzevalos-Info.plist
index dc2c11754b298e22486597dac723fcc186581312..a3aa25accbf1a86fccd45791502033d1bace6832 100644
--- a/enzevalos_iphone/PLists/enzevalos-Info.plist
+++ b/enzevalos_iphone/PLists/enzevalos-Info.plist
@@ -86,8 +86,6 @@
 	<true/>
 	<key>UILaunchStoryboardName</key>
 	<string>LaunchScreen</string>
-	<key>UIMainStoryboardFile</key>
-	<string>Main</string>
 	<key>UIRequiredDeviceCapabilities</key>
 	<array>
 		<string>armv7</string>
diff --git a/enzevalos_iphone/SearchHelper.swift b/enzevalos_iphone/SearchHelper.swift
new file mode 100644
index 0000000000000000000000000000000000000000..b6bffdc347dc16b1eb19dce08035fb3bdf18c4f4
--- /dev/null
+++ b/enzevalos_iphone/SearchHelper.swift
@@ -0,0 +1,60 @@
+//
+//  SearchHelper.swift
+//  enzevalos_iphone
+//
+//  Created by lazarog98 on 26.02.20.
+//  Copyright © 2020 fu-berlin. All rights reserved.
+//
+
+import Foundation
+
+/**
+ A collection of helper methods that are used for the different search bars
+ */
+
+/**
+ Function to be used to find mails that contain the search terms. All terms (separated by spaces) need to be contained in the search text.
+ - parameters:
+    - content: The String that will be searched
+    - searchText: Search terms (space-separated) that will be searched for
+*/
+func containsSearchTerms ( content : String?, searchText: String) -> Bool
+{
+    guard searchText.count > 0 else {
+        ///Case empty search
+        return true
+    }
+    guard let content = content else {
+        //Case Mail has no body/subject
+        return false
+    }
+        
+    var longterms : [String] = []
+    var terms : [String] = []
+    //Break String into substrings separated by quoatation marks
+    longterms = searchText.components(separatedBy: "\"")
+    var i = 0
+    //even elements will be outside the quotation marks and need to be separated again
+    while (i < longterms.count)
+    {
+        if i % 2 == 0
+        {
+            terms.append(contentsOf: longterms[i].lowercased().components(separatedBy: " "))
+        }
+        else
+        {
+            terms.append(longterms[i].lowercased())
+        }
+        i+=1
+    }
+    
+    var found = true
+    for t in terms
+    {
+        if !(t == "")
+        {
+            found = found && content.lowercased().contains(t)
+        }
+    }
+    return found
+}
diff --git a/enzevalos_iphone/StudySettings.swift b/enzevalos_iphone/StudySettings.swift
index 90babfd7c6fb36052accd549cceffeaa474f72be..b417f735761336da5db68978e2232bbebbbafffd 100644
--- a/enzevalos_iphone/StudySettings.swift
+++ b/enzevalos_iphone/StudySettings.swift
@@ -77,7 +77,7 @@ class StudySettings {
                 let keychain = Keychain(service: "Enzevalos/Study")
                 keychain["bitcoin"] = "true"
                 UserDefaults.standard.set(true, forKey: "bitcoin")
-                Logger.log(bitcoinMail: true)
+                //TODO Logger.log(bitcoinMail: true)
             }
         }
     }
diff --git a/enzevalos_iphone/SwiftPGP.swift b/enzevalos_iphone/SwiftPGP.swift
index fdb750554d55bd7dd5b1ca5860fa71a67b601a23..939179a917519c1e1cb27a9ec50f9b9406b7b2d9 100644
--- a/enzevalos_iphone/SwiftPGP.swift
+++ b/enzevalos_iphone/SwiftPGP.swift
@@ -501,14 +501,14 @@ class SwiftPGP: Encryption {
     
     func decrypt(data: Data, attachedSignature: Data? = nil, decKeyIDs: [String], signatureIDs: [String], fromAddr: String) -> CryptoObject{
         
-        let prefKey = DataHandler.handler.prefSecretKey()
+        let prefKey: SecretKeyRecord? = nil// DataHandler.handler.prefSecretKey()
         var plaindata: Data? = nil
         var plaintext: String? = nil
         var sigState = SignatureState.NoSignature
         var encState = EncryptionState.UnableToDecrypt
         var sigKeyID: String? = nil
         var signedAdr = [String]()
-        let prefID = prefKey?.keyID
+        let prefID = prefKey?.fingerprint
         var keyring = Keyring()
         var validDecryptionIDs: [String] = []
         
@@ -614,8 +614,7 @@ class SwiftPGP: Encryption {
         var encState = EncryptionState.UnableToDecrypt
         var plaindata: Data? = nil
         let key: [Key] = keyAsKeyList(keyID: keyID)
-        let datahandler = DataHandler.handler
-        let mailList = datahandler.getAllNotDecryptedPersistentMail()
+        let mailList = [MailRecord]() //TODO datahandler.getAllNotDecryptedPersistentMail()
         for mail in mailList {
             // Change data
             guard let data =  mail.body?.data(using: .utf8) else {
@@ -625,10 +624,9 @@ class SwiftPGP: Encryption {
             (plaindata, encState) = decryptMessage(data: data, keys: key, encForCurrentSK: true)
             if let plaindata = plaindata, encState == EncryptionState.ValidedEncryptedWithCurrentKey || encState == EncryptionState.ValidEncryptedWithOldKey {
                 // Update database
-                mail.isEncrypted = true
-                mail.unableToDecrypt = false
+                //TODO mail.encryptionState = encState
                 mail.body = String.init(data: plaindata, encoding: .utf8)
-                datahandler.save(during: "decryption of older mails")
+                //TODO datahandler.save(during: "decryption of older mails")
             }
         }
     }
@@ -665,20 +663,21 @@ class SwiftPGP: Encryption {
     func findNotSignedMailForPublicKey(keyID: String) {
         var sigState = SignatureState.NoPublicKey
         let key: [Key] = keyAsKeyList(keyID: keyID)
-        let datahandler = DataHandler.handler
-        let mailList = datahandler.getAllNotSignedPersistentMail()
-        for mail in mailList {
-            // Change data
-            guard let data =  mail.body?.data(using: .utf8) else {
-                    return
-            }
-            // Try to verify mail signature
-            sigState = verifySignature(data: data, attachedSignature: mail.attachedSignature, keys: key)
-            if sigState == SignatureState.ValidSignature {
-                // Update database
-                mail.isSigned = true
-                mail.isCorrectlySigned = true
-                datahandler.save(during: "verifying of older mails")
+        let datahandler = PersitentDataProvider.dataProvider
+        if let mailList = datahandler.fetchedMailResultsController.fetchedObjects { //TODO look for not verified signed mails.
+            for mail in mailList {
+                // Change data
+                guard let data =  mail.body?.data(using: .utf8) else {
+                        return
+                }
+                // Try to verify mail signature
+                sigState = verifySignature(data: data, attachedSignature:mail.body?.toBase64(), keys: key) // TODO  mail.attachedSignature
+                if sigState == SignatureState.ValidSignature {
+                    // TODO Update database
+                    // mail.isSigned = true
+                    //mail.isCorrectlySigned = true
+                    //datahandler.save(during: "verifying of older mails")
+                }
             }
         }
     }
diff --git a/enzevalos_iphone/SwiftUI/Data/DisplayProtocols.swift b/enzevalos_iphone/SwiftUI/Data/DisplayProtocols.swift
index 7e03ea49a2ebc2fe949c42986396f9dac669a6dc..d677d60ee10461f82dc52e5a6479e7661d69e6f7 100644
--- a/enzevalos_iphone/SwiftUI/Data/DisplayProtocols.swift
+++ b/enzevalos_iphone/SwiftUI/Data/DisplayProtocols.swift
@@ -95,7 +95,7 @@ protocol DisplayMail {
     var bccs: [C] { get }
     var routingStops: [Landmark] { get }
     
-    var date: Date { get }
+    var date: Date? { get }
     
     var isRead: Bool {get set}
     var folderType: FolderType { get }
diff --git a/enzevalos_iphone/SwiftUI/Data/SimulatorData.swift b/enzevalos_iphone/SwiftUI/Data/SimulatorData.swift
index dfdd1c9705f59a493f40cd0ede0501d675567aba..7dc05e89ed83b0b14686642db30f8e41fabed909 100644
--- a/enzevalos_iphone/SwiftUI/Data/SimulatorData.swift
+++ b/enzevalos_iphone/SwiftUI/Data/SimulatorData.swift
@@ -147,7 +147,7 @@ struct PseuoMail: DisplayMail {
     
     var isRead: Bool = false
     
-    var date = Date()
+    var date: Date? = Date()
     
     var subject: String? = "Hello World"
     var subjectWithFlag: String? = "Hello World"
diff --git a/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift b/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift
index df12d3661c82e1f554e7355ee38448d9df73f41e..86785fed0ce2c998023bf71de1d7f54a45b3f20a 100644
--- a/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift
+++ b/enzevalos_iphone/SwiftUI/Inbox/Inbox.swift
@@ -10,9 +10,9 @@ import SwiftUI
 
 struct Inbox: View {
     @Environment(\.managedObjectContext) var managedObjectContext
-    @FetchRequest(fetchRequest: KeyRecord.allRecordsFetchRequest(in: Folder.inbox)) var keyrecords: FetchedResults<KeyRecord>
+    @FetchRequest(fetchRequest: MailRecord.allMailsFetchRequest(in: MailHandler.INBOX)) var keyrecords: FetchedResults<MailRecord>
     
-    @ObservedObject var folder = Folder.inbox
+    //@ObservedObject var folder = Folder.inbox
     
     @State var updating = false
     @State var showUser = false
@@ -20,7 +20,7 @@ struct Inbox: View {
     @State var searchField = 0
     @State var searchNow = false
     
-    let coord: InboxCoordinator
+    let coord: InboxCoordinator<MailRecord, AddressRecord>
     
     var body: some View {
         VStack{
@@ -48,7 +48,8 @@ struct Inbox: View {
     private var mailList: some View {
         List (self.keyrecords.filter(filterKeyRecord), id: \.self){
             record in
-            KeyRecordRow(keyrecord: record)
+            //KeyRecordRow(keyrecord: record)
+            MailView(mail: record)
        }
        .resignKeyboardOnDragGesture() // hide keyboard when dragging
     }
@@ -61,7 +62,7 @@ struct Inbox: View {
     
     private var idButton: some View {
         Button(action: {
-            self.coord.pushRecordView(record: self.userRecord)
+           //  self.coord.pushRecordView(record: self.userRecord)
         }, label: {
             Text(NSLocalizedString("KeyID", comment: "id"))
         })
@@ -76,7 +77,7 @@ struct Inbox: View {
     private var lastUpdate: some View {
         var text = NSLocalizedString("Updating", comment: "updating...")
         if !updating {
-            if let last = Folder.inbox.lastUpdate {
+            if let last = Date() as? Date {// TODO Folder.inbox.lastUpdate {
                 let dateFormatter = DateFormatter()
                 dateFormatter.locale = Locale.current
                 dateFormatter.timeStyle = .medium
@@ -92,7 +93,7 @@ struct Inbox: View {
             
         })
     }
-    
+    /*
     var userRecord: KeyRecord {
         get {
             let keyID = UserManager.loadUserValue(Attribute.prefSecretKeyID) as? String
@@ -100,33 +101,34 @@ struct Inbox: View {
             return DataHandler.handler.getKeyRecord(addr: addr, keyID: keyID)
         }
     }
+ */
     
     func updateMails() {
         guard !updating else {
             return
         }
-        AppDelegate.getAppDelegate().mailHandler.updateFolder(folder: Folder.inbox, completionCallback: {_ in
+        /*AppDelegate.getAppDelegate().mailHandler.updateFolder(folder: Folder.inbox, completionCallback: {_ in
             self.updating = false
-        })
+        })*/
         updating = true
     }
     
-    func filterKeyRecord(keyRecord: KeyRecord) -> Bool {
+    func filterKeyRecord(keyRecord: MailRecord) -> Bool {
         let searchType = SearchType.findType(i: searchField)
         if self.searchText.isEmpty || self.searchText == NSLocalizedString("Searchbar.Title", comment: "Search") {
             return true
         }
         let query = self.searchText.lowercased()
-        if (searchType == .All || searchType == .Sender) && containsSearchTerms(content: keyRecord.name, searchText: query){
+        if (searchType == .All || searchType == .Sender) && (containsSearchTerms(content: keyRecord.sender.displayname, searchText: query) || containsSearchTerms(content: keyRecord.sender.email, searchText: query)) {
             return true
         }
         else if (searchType == .All || searchType == .Sender) && keyRecord.addresses.filter({containsSearchTerms(content: $0.mailAddress, searchText: query)}).count > 0 {
             return true
         }
-        else if (searchType == .All || searchType == .Subject) && keyRecord.mails.filter({containsSearchTerms(content: $0.subject, searchText: query)}).count > 0 {
+        else if (searchType == .All || searchType == .Subject) && containsSearchTerms(content: keyRecord.subject, searchText: query){
             return true
         }
-        else if (searchType == .All || searchType == .Body) && keyRecord.mails.filter({containsSearchTerms(content: $0.body, searchText: query)}).count > 0 {
+        else if (searchType == .All || searchType == .Body) && containsSearchTerms(content: keyRecord.body, searchText: query){
             return true
         }
         return false
diff --git a/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift b/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift
index 8054fa0c6e7c48dba317e595746cf83a17249660..c9e089c9068fc8e8ad6a4fc95c7351204781f9fe 100644
--- a/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift
+++ b/enzevalos_iphone/SwiftUI/Inbox/InboxCoordinator.swift
@@ -63,9 +63,10 @@ class InboxCoordinator <M: MailRecord, C: DisplayContact> {
             readCoord.pushReadView(mail: mail)
         } else {
             let vc = mainStoryboard.instantiateViewController(withIdentifier: ViewID.ReadView.rawValue)
+            /*
             if let vc = vc as? ReadViewController {
                 vc.mail = mail
-            }
+            }*/
             root.isToolbarHidden = false
             root.pushViewController(vc, animated: true)
         }
@@ -74,18 +75,18 @@ class InboxCoordinator <M: MailRecord, C: DisplayContact> {
     // TODO FIX!!! Was ist ein Record? Key oder address?
     func pushRecordView(record: C){
         let vc = mainStoryboard.instantiateViewController(withIdentifier: ViewID.KeyRecordView.rawValue)
-        if let vc = vc as? ContactViewController {
+        /*if let vc = vc as? ContactViewController {
             vc.keyRecord = record
-        }
+        }*/
         root.isToolbarHidden = false
         root.pushViewController(vc, animated: true)
     }
     
     func pushComposeView() {
         let vc = mainStoryboard.instantiateViewController(identifier: ViewID.ComposeView.rawValue)
-        if let vc = vc as? SendViewController {
+        /*if let vc = vc as? SendViewController {
             vc.wasPushed = true
-        }
+        }*/
         root.isToolbarHidden = true
         root.pushViewController(vc, animated: true)
     }
@@ -93,9 +94,9 @@ class InboxCoordinator <M: MailRecord, C: DisplayContact> {
     // TODO FIX!!! Was ist ein Record? Key oder address?
     func pushMailListView(record: C) {
         let vc = mainStoryboard.instantiateViewController(identifier: ViewID.MailListView.rawValue)
-        if let vc = vc as? ListViewController {
+        /*if let vc = vc as? ListViewController {
             vc.contact = record
-        }
+        }*/
         root.isToolbarHidden = true
         root.pushViewController(vc, animated: true)
     }
diff --git a/enzevalos_iphone/SwiftUI/Read/ReadViewCoordinator.swift b/enzevalos_iphone/SwiftUI/Read/ReadViewCoordinator.swift
index 339f3cf2e8aa77bd1bab9478dd000ce68a55ea4d..f4d7dab481c9a6c219102c77ca7e65388070d48a 100644
--- a/enzevalos_iphone/SwiftUI/Read/ReadViewCoordinator.swift
+++ b/enzevalos_iphone/SwiftUI/Read/ReadViewCoordinator.swift
@@ -89,19 +89,21 @@ class ReadViewCoordinator <M: DisplayMail, C: DisplayContact> {
         if let subject = subject, let body = body, let responseType = responseType  {
             prefilledMail = EphemeralMail(to: NSSet.init(array: to), cc: NSSet.init(array: cc), bcc: NSSet.init(array: bcc), date: Date(), subject: responseType.addPrefix(subject: subject), body: body, uid: 0, predecessor: nil)
         }
-        if let vc = vc as? SendViewController {
+        /*
+    TODOif let vc = vc as? SendViewController {
             vc.wasPushed = true
             vc.prefilledMail = prefilledMail
-        }
+        }*/
         root.isToolbarHidden = false
         root.pushViewController(vc, animated: true)
     }
     
     func pushContactView(contact: C) {
         let vc = mainStoryboard.instantiateViewController(withIdentifier: ViewID.KeyRecordView.rawValue)
+        /*
         if let vc = vc as? ContactViewController {
            vc.keyRecord = contact
-        }
+        }*/
         root.isToolbarHidden = false
         root.pushViewController(vc, animated: true)
     }
@@ -112,11 +114,8 @@ class ReadViewCoordinator <M: DisplayMail, C: DisplayContact> {
     }
     
     /// AskUserToImportSK, ImportSK, ImportPK, MoreInformation, ExportSK, OK, IgnoreWarning, SendPK
-    func ignoreMail <M: DisplayMail> (mail: M) {
-        guard let m = mail.persistentMail else {
-            return
-        }
-        delete(mail: m)
+    func ignoreMail(mail: M) {
+        delete(mail: mail)
     }
     func invitePerson <M: DisplayMail> (mail: M) {
         let body = String(format: NSLocalizedString("inviteText", comment: "Body for the invitation mail"),StudySettings.studyID)
@@ -161,7 +160,7 @@ class ReadViewCoordinator <M: DisplayMail, C: DisplayContact> {
         time.dateStyle = .short
         time.timeStyle = .short
         time.locale = Locale.current
-        body.append(" " + NSLocalizedString("sent at", comment: "describing when the mail was send") + " " + time.string(from: mail.date))
+        body.append(" " + NSLocalizedString("sent at", comment: "describing when the mail was send") + " " + time.string(from: mail.date ?? Date()))
         body.append("\n" + NSLocalizedString("To", comment: "describing adressee") + ": ")
         for addr in mail.tos {
             body.append("\(addr.addr), ")
diff --git a/enzevalos_iphone/SwiftUI/Read/Tabbed Views/SenderViewMain.swift b/enzevalos_iphone/SwiftUI/Read/Tabbed Views/SenderViewMain.swift
index 9b5a3eabb5c4ead9f6334ba3a180bccccf79b8a8..351368e3a8c13967c60a57a872d5b7bd955fc448 100644
--- a/enzevalos_iphone/SwiftUI/Read/Tabbed Views/SenderViewMain.swift	
+++ b/enzevalos_iphone/SwiftUI/Read/Tabbed Views/SenderViewMain.swift	
@@ -162,11 +162,11 @@ struct SenderViewMain <M: DisplayMail>: View {
     }
     
     private func goToContact(contact: DisplayContact) {
-        guard let con = contact.keyRecord else {
+       /* guard let con = contact.keyRecord else {
             print("No record...")
             return
         }
-        AppDelegate.getAppDelegate().readViewCoordinator?.pushContactView(contact: con)
+        AppDelegate.getAppDelegate().readViewCoordinator?.pushContactView(contact: con) */
     }
 }
 
diff --git a/enzevalos_iphone/SwiftUI/SupportingViews/MailView.swift b/enzevalos_iphone/SwiftUI/SupportingViews/MailView.swift
index 3fe0d949a1bdd4f7b740665c4215d5025a7fcd0f..f897d155128cbb38171c444f114f890e3dd694cd 100644
--- a/enzevalos_iphone/SwiftUI/SupportingViews/MailView.swift
+++ b/enzevalos_iphone/SwiftUI/SupportingViews/MailView.swift
@@ -26,7 +26,7 @@ struct MailView <M: DisplayMail>: View {
                    .frame(minWidth: 10, maxWidth: 200, alignment: .leading)
                    .lineLimit(1)
                 Spacer()
-                Text(mail.date.dateToString)
+                Text(mail.date?.dateToString ?? Date().dateToString)
                     .font(.footnote)
             }
         }
@@ -48,3 +48,15 @@ struct MailView <M: DisplayMail>: View {
 }
 
 
+
+struct MailView_Previews: PreviewProvider {
+    static let simulator = Simulators<MailView<PseuoMail>>()
+    static let deviceNames: [String] = [
+        "iPhone SE",
+        "iPhone 11 Pro Max"
+    ]
+    
+  static var previews: some View {
+    simulator.previews(view: MailView(mail: DummyData.SecureMail))//DummyData.SecureMail))
+   }
+}
diff --git a/enzevalos_iphone/SwiftUI/SupportingViews/SwiftUI to UIKit/SelectableTextView.swift b/enzevalos_iphone/SwiftUI/SupportingViews/SwiftUI to UIKit/SelectableTextView.swift
index f8f8f7b645191532f77f1e376fee3cc35b0fd7e1..c07b29f9293f8f04e02ad4035e7100cdcbde4f9f 100644
--- a/enzevalos_iphone/SwiftUI/SupportingViews/SwiftUI to UIKit/SelectableTextView.swift	
+++ b/enzevalos_iphone/SwiftUI/SupportingViews/SwiftUI to UIKit/SelectableTextView.swift	
@@ -13,8 +13,8 @@ class TextViewDelegate:NSObject, UITextViewDelegate {
     func textView(_ textView: UITextView, shouldInteractWith url: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
         if url.scheme == "mailto" {
             if let coord = AppDelegate.getAppDelegate().readViewCoordinator {
-                let to = DataHandler.handler.getMailAddress(url.absoluteString.replacingOccurrences(of: "mailto:", with: ""), temporary: true)
-                coord.pushComposeView(to: [to], cc: [], bcc: [], subject: "", body: "", responseType: .Reply)
+                let to = [MailAddress] () //DataHandler.handler.getMailAddress(url.absoluteString.replacingOccurrences(of: "mailto:", with: ""), temporary: true)
+                coord.pushComposeView(to: to, cc: [], bcc: [], subject: "", body: "", responseType: .Reply)
             }
            return false
         }
diff --git a/enzevalos_iphone/TempAttachment.swift b/enzevalos_iphone/TempAttachment.swift
index 9b8acbdd57692027c3f31cfa1a1ca0c9d3e181e7..3950136341686edce8167d26057555b768a6d3b4 100644
--- a/enzevalos_iphone/TempAttachment.swift
+++ b/enzevalos_iphone/TempAttachment.swift
@@ -62,7 +62,7 @@ class TempAttachment: Hashable {
         return lhs.name == rhs.name && lhs.mimeType == rhs.mimeType
     }
     
-    func equal(at: Attachment) -> Bool {
+    func equal(at: AttachmentRecord) -> Bool {
         if let n = at.name, let t = at.mimeType {
             return name == n && mimeType == MIMETYPE.init(rawValue: t)
         }
diff --git a/enzevalos_iphone/TempKey.swift b/enzevalos_iphone/TempKey.swift
index f1bb6b0d3afd562b9a3f77bb9d366617ecfdfbe0..90b146aa593150a88ca2ca570e28c5ae70fff9c9 100644
--- a/enzevalos_iphone/TempKey.swift
+++ b/enzevalos_iphone/TempKey.swift
@@ -117,6 +117,10 @@ class TempKey: DisplayKey {
 }
 
 extension SecretKeyRecord: DisplayKey {
+    var keyID: String {
+        return fingerprint ?? ""
+    }
+    
     var importDate: Date {
         if let date = self.importedDate {
             return date as Date
@@ -137,6 +141,10 @@ extension SecretKeyRecord: DisplayKey {
 }
 
 extension PublicKeyRecord: DisplayKey {
+    var keyID: String {
+        return fingerprint ?? ""
+    }
+    
     var importDate: Date {
         if let date = self.discoveryDate {
             return date
diff --git a/enzevalos_iphone/de.lproj/LaunchScreen.storyboard b/enzevalos_iphone/de.lproj/LaunchScreen.storyboard
deleted file mode 100644
index 2e4cb45d92bb8ef43483a908f5acea4ef1cdd1cb..0000000000000000000000000000000000000000
--- a/enzevalos_iphone/de.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <scenes>
-        <!--View Controller-->
-        <scene sceneID="EHf-IW-A2E">
-            <objects>
-                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
-                    <layoutGuides>
-                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
-                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
-                    </layoutGuides>
-                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </view>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="53" y="375"/>
-        </scene>
-    </scenes>
-</document>
diff --git a/enzevalos_iphone/en.lproj/LaunchScreen.storyboard b/enzevalos_iphone/en.lproj/LaunchScreen.storyboard
deleted file mode 100644
index 2e4cb45d92bb8ef43483a908f5acea4ef1cdd1cb..0000000000000000000000000000000000000000
--- a/enzevalos_iphone/en.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <scenes>
-        <!--View Controller-->
-        <scene sceneID="EHf-IW-A2E">
-            <objects>
-                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
-                    <layoutGuides>
-                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
-                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
-                    </layoutGuides>
-                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </view>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
-            </objects>
-            <point key="canvasLocation" x="53" y="375"/>
-        </scene>
-    </scenes>
-</document>
diff --git a/enzevalos_iphone/mail/IncomingMail.swift b/enzevalos_iphone/mail/IncomingMail.swift
index 12fc5c6d1ff3e91dc2c480dc3d1e85d3bbd07364..f039ccfe3da9a8d97f0f8dc54d2fbd889a08e20a 100644
--- a/enzevalos_iphone/mail/IncomingMail.swift
+++ b/enzevalos_iphone/mail/IncomingMail.swift
@@ -147,11 +147,12 @@ class IncomingMail {
             keyIds.append(contentsOf: newAutocrypPublicKeys)
             keyIds.append(contentsOf: newPublicKeys)
             if let fromAdr = from?.mailbox{
+                /* TODO
                 if let adr = DataHandler.handler.findMailAddress(adr: fromAdr) {
                     for k in adr.publicKeys {
                         keyIds.append(k.keyID)
                     }
-                }
+                }*/
             }
             return keyIds
         }
@@ -183,7 +184,7 @@ class IncomingMail {
     private var body: String = ""
     private var encryptedBody: String?
     private var secretKeys: [String] = []
-    private var relaedSecrectKey: SecretKey? = nil
+    private var relatedSecrectKey: SecretKeyRecord? = nil
     private var newPublicKeys: [String] = []
     private var newAutocrypPublicKeys: [String] = []
     private var newSecretKeyIDs: [String]? = []
@@ -205,19 +206,21 @@ class IncomingMail {
     }
     var decryptionKeyIDs: [String] {
         get {
-            let secretkeys = DataHandler.handler.findSecretKeys()
+            let secretkeys = [SecretKeyRecord]() //TODO DataHandler.handler.findSecretKeys()
             var decIds = [String]()
             for sk in secretkeys {
-                decIds.append(sk.keyID)
+                if let id = sk.fingerprint {
+                    decIds.append(id)
+                }
             }
             return decIds
         }
     }
     
     var primaryDecryptionKeyID: String? {
-        if let sk = DataHandler.handler.prefSecretKey() {
+        /* TODOif let sk = DataHandler.handler.prefSecretKey() {
             return sk.keyID
-        }
+        }*/
         return nil
     }
     
@@ -276,6 +279,7 @@ class IncomingMail {
         return m
     }
     
+    /* TODO
     func store(keyRecord: KeyRecord?) -> PersistentMail? {
         let sk = secretKeys.first //TODO FIX: may import more secret keys?
         let mail = DataHandler.handler.createMail(uID, sender: from, receivers: rec, cc: cc, time: date, received: true, subject: subject, body: body, readableAttachments: readableAttachments, flags: flags, record: keyRecord, autocrypt: autocrypt, decryptedData: cryptoObj, folderPath: folderPath, secretKey: sk, references: references, mailagent: userAgent, messageID: msgID, encryptedBody: encryptedBody, storeEncrypted: storeEncrypted, attachedSignature: attachedSignature)
@@ -323,6 +327,7 @@ class IncomingMail {
         }
         return mail
     }
+     */
     
     private func parseBody() {
         var isEncrypted = false
@@ -335,11 +340,7 @@ class IncomingMail {
         
         if let cryptoObject = cryptoObj, cryptoObject.encryptionState == .ValidedEncryptedWithCurrentKey || cryptoObject.encryptionState == .ValidEncryptedWithOldKey {
             readableAttachments = parseUserReadableAttachments(parser: msgParser, sentEncrypted: true)
-            repealAttachments = readableAttachments.filter({$0.mimeType == .travelRepeal})
             useAttachments = readableAttachments.filter({$0.mimeType == .travelUse})
-            callForRepealMail = repealAttachments.count > 0
-            callForUseMail = !callForRepealMail && useAttachments.count > 0
-            travelMail = callForRepealMail || callForUseMail
         }
         
         readableAttachments=parseUserReadableAttachments(parser: msgParser)
diff --git a/enzevalos_iphone/persistentData/DataModel.xcdatamodeld/DataModel.xcdatamodel/contents b/enzevalos_iphone/persistentData/DataModel.xcdatamodeld/DataModel.xcdatamodel/contents
index 8248d51ba153eb870a0af7a81909b2c73508671d..eb871de9b077117cacd489d0e84f7b696f61146f 100644
--- a/enzevalos_iphone/persistentData/DataModel.xcdatamodeld/DataModel.xcdatamodel/contents
+++ b/enzevalos_iphone/persistentData/DataModel.xcdatamodeld/DataModel.xcdatamodel/contents
@@ -52,6 +52,7 @@
         <attribute name="messageID" attributeType="String"/>
         <attribute name="signatureStateInt" attributeType="Integer 16" minValueString="-1" maxValueString="2" defaultValueString="0" usesScalarValueType="YES"/>
         <attribute name="subject" attributeType="String"/>
+        <attribute name="uID" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
         <attribute name="xMailer" optional="YES" attributeType="String"/>
         <relationship name="attachedAutocryptPublicKey" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="PublicKeyRecord" inverseName="sendWithAutocryptHeader" inverseEntity="PublicKeyRecord"/>
         <relationship name="attachedPublicKeys" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="PublicKeyRecord" inverseName="sendWithMail" inverseEntity="PublicKeyRecord"/>
@@ -96,7 +97,7 @@
         <element name="AddressRecord" positionX="-36" positionY="27" width="128" height="163"/>
         <element name="AttachmentRecord" positionX="0" positionY="144" width="128" height="133"/>
         <element name="FolderRecord" positionX="27" positionY="135" width="128" height="193"/>
-        <element name="MailRecord" positionX="-54" positionY="-9" width="128" height="28"/>
+        <element name="MailRecord" positionX="-54" positionY="-9" width="128" height="343"/>
         <element name="PublicKeyRecord" positionX="9" positionY="63" width="128" height="223"/>
         <element name="SecretKeyRecord" positionX="-9" positionY="63" width="128" height="118"/>
     </elements>
diff --git a/enzevalos_iphone/persistentData/FolderRecord.swift b/enzevalos_iphone/persistentData/FolderRecord.swift
index 4a9dd1384fb74b7b1b6db842993b6440ac32135b..0162b6fcfc527effc719307dba0c00627ede7370 100644
--- a/enzevalos_iphone/persistentData/FolderRecord.swift
+++ b/enzevalos_iphone/persistentData/FolderRecord.swift
@@ -32,4 +32,14 @@ extension FolderRecord {
         }
         path = properties.path
     }
+    
+    var uids: MCOIndexSet {
+        get {
+            let indexSet = MCOIndexSet()
+            if let set = self.mailsInFolder, set.count > 0, let mails = set.allObjects as? [MailRecord] {
+               // TODO mails.forEach{indexSet.add($0.uID)}
+            }
+            return indexSet
+        }
+    }
 }
diff --git a/enzevalos_iphone/persistentData/MailRecord.swift b/enzevalos_iphone/persistentData/MailRecord.swift
index 39249a3b9e8ee6f9662ddc14cfe1cadd2c73d3f6..e0fd1cb1ee13d12f351174fdc7a85eb32892cfb4 100644
--- a/enzevalos_iphone/persistentData/MailRecord.swift
+++ b/enzevalos_iphone/persistentData/MailRecord.swift
@@ -18,7 +18,11 @@
  
  self.keyDiscoveryDate = mail?.from.contact?.firstSecureMailReceived
  isNewPubKey -> First mail with a new public key
+ add attached Signature?
  */
+
+import CoreData
+
 extension MailRecord {
     static let entityName = "MailRecord"
     
@@ -66,23 +70,40 @@ extension MailRecord {
         }
         return []
     }
-    
-    // TODO: Change Flag!
-    var isRead: Bool {
+
+    var messageFlag: MCOMessageFlag {
         get {
-            let mcoflag = MCOMessageFlag.init(rawValue: Int(flag))
-            let value = mcoflag.contains(MCOMessageFlag.seen)
-            return value
+            return MCOMessageFlag.init(rawValue: Int(flag))
         }
     }
     
-    var messageFlag: MCOMessageFlag {
-        get {
-            return MCOMessageFlag.init(rawValue: Int(flag))
+    /**
+     Just a short part of the body. Can be used for a preview.
+     In case of trouble there is no preview.
+     */
+    var shortBodyString: String? {
+        guard self.signatureState == .InvalidSignature || self.encryptionState == .UnableToDecrypt else {
+            return nil
+        }
+        guard var body = body else {
+            return nil
+        }
+        
+       
+        body = body.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
+        if body.count > 50 {
+            body = String(body[..<body.index(body.startIndex, offsetBy: 50)])
         }
+        let messageArray = body.components(separatedBy: "\n")
+        return messageArray.joined(separator: " ")
+        
     }
+}
+
+extension MailRecord: DisplayMail {
     
-    var subjectWithFlag: String {
+   
+    var subjectWithFlag: String? {
         let subj: String
         var returnString: String = ""
         if let subject = self.subject {
@@ -105,30 +126,25 @@ extension MailRecord {
         return "\(returnString)\(subj)"
     }
     
-    /**
-     Just a short part of the body. Can be used for a preview.
-     In case of trouble there is no preview.
-     */
-    var shortBodyString: String? {
-        guard self.signatureState == .InvalidSignature || self.encryptionState == .UnableToDecrypt else {
-            return nil
-        }
-        guard var body = body else {
-            return nil
+    
+    var isRead: Bool {
+        get {
+            let mcoflag = MCOMessageFlag.init(rawValue: Int(flag))
+            let value = mcoflag.contains(MCOMessageFlag.seen)
+            return value
         }
-        
-       
-        body = body.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
-        if body.count > 50 {
-            body = String(body[..<body.index(body.startIndex, offsetBy: 50)])
+        set {
+            var mcoflag = MCOMessageFlag.init(rawValue: Int(flag))
+            mcoflag = mcoflag.update(with: .seen) ?? mcoflag
+            self.flag = Int16(mcoflag.rawValue)
+
         }
-        let messageArray = body.components(separatedBy: "\n")
-        return messageArray.joined(separator: " ")
-        
     }
-}
-
-extension MailRecord: DisplayMail {
+    
+    var encState: EncryptionState {
+        return encryptionState
+    }
+    
     typealias C = AddressRecord
     
     var sender: C {
@@ -198,6 +214,27 @@ extension MailRecord: DisplayMail {
             return true
         }
     }
-    
-    
 }
+
+extension MailRecord {
+    static func allMailsFetchRequest(in folderpath: String) -> NSFetchRequest<MailRecord> {
+        let request: NSFetchRequest<MailRecord> = NSFetchRequest<MailRecord>(entityName: MailRecord.entityName)
+        request.predicate = NSPredicate(format: "iFnolder.path == %@", folderpath)
+        request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]
+        return request
+    }
+    
+    static func allRecordsFetchRequest(in folderPath: String, query: String) -> NSFetchRequest<MailRecord> {
+        let request = MailRecord.allMailsFetchRequest(in: folderPath)
+        if !query.isEmpty {
+            let name = NSPredicate(format: "name CONTAINS %@", query)
+            if let prePredicates = request.predicate {
+                request.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [prePredicates, name])
+            } else {
+                request.predicate = name
+            }
+        }
+        return request
+    }
+}
+
diff --git a/enzevalos_iphone/persistentData/PersistentDataProvider.swift b/enzevalos_iphone/persistentData/PersistentDataProvider.swift
index 498ca2de77afc31240878b6b0180041059260f5b..54f0ea014e97e891495f76925428d8e48bacdf3a 100644
--- a/enzevalos_iphone/persistentData/PersistentDataProvider.swift
+++ b/enzevalos_iphone/persistentData/PersistentDataProvider.swift
@@ -29,7 +29,7 @@ Reload mails for record loadMailsForRecord(contact!, folderPath: UserManager.bac
  find public or secret keys
  find address by name
  find folder by name
- 
+ //TODO look for not verified signed mails.
  */
 class PersitentDataProvider {
     static let dataProvider = PersitentDataProvider()