diff --git a/enzevalos_iphone/SwiftUI/Read/ReadModel.swift b/enzevalos_iphone/SwiftUI/Read/ReadModel.swift
index 53460c2f3d66cb3d92a71ce27d73be5b9e57c240..8b78a307a25522bf619148a86d8207bb21cbcc1c 100644
--- a/enzevalos_iphone/SwiftUI/Read/ReadModel.swift
+++ b/enzevalos_iphone/SwiftUI/Read/ReadModel.swift
@@ -45,6 +45,7 @@ class ReadModel <M: DisplayMail>: ObservableObject {
     
     init(mail: M) {
         self.mail = mail
+        mail.markAsRead(isRead: true)
     }
     
     func newUserAction(action: UserAction) -> PreMailData? {
@@ -54,6 +55,9 @@ class ReadModel <M: DisplayMail>: ObservableObject {
             // TODO
             return nil
         case .Delete:
+            if let mail = mail as? MailRecord {
+                PersistentDataProvider.dataProvider.deleteMail(mail: mail)
+            }
             dismissView = true
             return nil
         case .Move:
@@ -66,6 +70,9 @@ class ReadModel <M: DisplayMail>: ObservableObject {
         case .Forward:
             return PreMailData(body: mail.preparePreviousMailBody(), subject: ResponseType.Reply.addPrefix(subject: mail.subject), to: [], cc: [], bcc: [])
         case .Archive:
+            if let mail = mail as? MailRecord {
+                PersistentDataProvider.dataProvider.archiveMail(mail: mail)
+            }
             dismissView = true
             return nil
         case .Unread:
diff --git a/enzevalos_iphone/persistentData/FolderRecord.swift b/enzevalos_iphone/persistentData/FolderRecord.swift
index f89e98a32791cee6929d35a7e9a3a7fe45a4d8f5..37d358782986b92b5b34c21dad3b863982217cba 100644
--- a/enzevalos_iphone/persistentData/FolderRecord.swift
+++ b/enzevalos_iphone/persistentData/FolderRecord.swift
@@ -16,6 +16,20 @@ extension FolderRecord {
         request.sortDescriptors = [NSSortDescriptor(key: "flags", ascending: false), NSSortDescriptor(key: "path", ascending: true)]
         return request
     }
+    
+    static var onlySpecialFolderFetchRequest: NSFetchRequest<FolderRecord> {
+        let request: NSFetchRequest<FolderRecord> = NSFetchRequest<FolderRecord>(entityName: FolderRecord.entityName)
+        request.predicate = NSPredicate(format: " flags > 0")
+        request.sortDescriptors = [NSSortDescriptor(key: "flags", ascending: false), NSSortDescriptor(key: "path", ascending: true)]
+        return request
+    }
+    
+    static var onlyUserDefinedFolderFetchRequest: NSFetchRequest<FolderRecord> {
+        let request: NSFetchRequest<FolderRecord> = NSFetchRequest<FolderRecord>(entityName: FolderRecord.entityName)
+        request.predicate = NSPredicate(format: " flags == 0")
+        request.sortDescriptors = [NSSortDescriptor(key: "path", ascending: true)]
+        return request
+    }
 }
 
 extension FolderRecord {
diff --git a/enzevalos_iphone/persistentData/MailRecord.swift b/enzevalos_iphone/persistentData/MailRecord.swift
index 46f675480d4f7eb9d0e2e1ddaa9dda08258623a2..7abc53e8fe77043c48466e6ebb7cd7a7b9147521 100644
--- a/enzevalos_iphone/persistentData/MailRecord.swift
+++ b/enzevalos_iphone/persistentData/MailRecord.swift
@@ -142,6 +142,13 @@ extension MailRecord: DisplayMail {
             var mcoflag = MCOMessageFlag.init(rawValue: Int(flag))
             mcoflag = mcoflag.update(with: .seen) ?? mcoflag
             self.flag = Int16(mcoflag.rawValue)
+            
+            if let moc = self.managedObjectContext {
+                try? PersistentDataProvider.dataProvider.save(taskContext: moc)
+            }
+            if let folder = self.inFolder?.path {
+                MailHandler.init().setFlag(UInt64(self.uID), flags: mcoflag, folder: folder)
+            }
         }
     }
     
diff --git a/enzevalos_iphone/persistentData/PersistentDataProvider.swift b/enzevalos_iphone/persistentData/PersistentDataProvider.swift
index da2877a7f5175ee57430a076e3c04c282c10c774..9cfdc3ce876e03cb04ed932049e13494cefe6e52 100644
--- a/enzevalos_iphone/persistentData/PersistentDataProvider.swift
+++ b/enzevalos_iphone/persistentData/PersistentDataProvider.swift
@@ -477,11 +477,22 @@ class PersistentDataProvider {
     }
     
     func deleteMail(mail: MailRecord) {
-        let taskContext = newTaskContext()
-        taskContext.perform {
-            taskContext.delete(mail)
-            try? self.save(taskContext: taskContext)
+        guard let folder = mail.inFolder?.path else {
+            let taskContext = newTaskContext()
+            taskContext.perform {
+                taskContext.delete(mail)
+                try? self.save(taskContext: taskContext)
+            }
+            return
+        }
+        moveMails(with: [UInt64(mail.uID)], from: folder, to: UserManager.backendTrashFolderPath)
+    }
+    
+    func archiveMail(mail: MailRecord) {
+        guard let folder = mail.inFolder?.path else {
+            return
         }
+        moveMails(with: [UInt64(mail.uID)], from: folder, to: UserManager.backendArchiveFolderPath)
     }
     
     func moveMails(with uids: [UInt64], from: String, to: String) {