diff --git a/enzevalos_iphone/SMIME.swift b/enzevalos_iphone/SMIME.swift
index 63c2ae111e22b52f73e3ba4cbe735cbdc34c9800..6fb937aa549a7ef1573a22e8efac499d7bf4389a 100644
--- a/enzevalos_iphone/SMIME.swift
+++ b/enzevalos_iphone/SMIME.swift
@@ -473,6 +473,10 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO
          */
     }
     
+    func testCryptoObjectMethods() {
+        
+    }
+    
     func testKeyEnc() {
         let (pKeyEnc, errArrEnc) = getEncryptedPemFromPKey(pem: test_key, passwd: "testpwd")
         
@@ -537,7 +541,7 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO
             let fps = privateKeyKeychain.allKeys()
             for f in fps{
                 if f != fp{
-                    (decStr,errArr) = decryptWithPem(message: text, certAsPem: certsKeychain[f]!, keyAsPem: privateKeyKeychain[f]!)
+                    (decStr, errArr) = decryptWithPem(message: text, certAsPem: certsKeychain[f]!, keyAsPem: privateKeyKeychain[f]!)
                     if decStr != nil{
                         encState = EncryptionState.ValidEncryptedWithOldKey
                         break
@@ -626,50 +630,52 @@ PkfA6mR7rtcyIbHi34tfkCv/qolV3QivMHov0IJpRyNO
         // TODO: Exception no valid signatures
     }
     
-    func encrypt(plainData: Data, ids: [String], ownId: String, encryptForMyId: Bool = true) -> CryptoObject? {
+    func encrypt(plainData: Data, ids: [String], ownId: String, encryptForMyId: Bool = true) throws -> CryptoObject {
         let text = String(data: plainData, encoding: .utf8)
         var pems: [String] = []
         var ownFp: String? = nil
+        
+        // retrieve the certs as pems for each ID (email), certsKeychain stores for each email a fingerprint of the cert of that user and under a fingerprint a cert is stored
         for id in ids {
             if let fp = certsKeychain[id] {
-                // TODO: Exception try catch
                 pems.append(certsKeychain[fp]!)
             }
             else{
-                // TODO: Exception
-                print("No cert for email ", id)
+                throw SMIMEError(message: "No cert for email " + id + "!", errorArray: nil, type: SMIMEError.ErrorType.encryption)
             }
         }
-        // TODO: Ask Oliver why signing is allowed only with encryptForMyID = true
+        
+        // if we want to encrypt with the user's own key, retrieve the key and handle errors
         if encryptForMyId {
             if let fp = getOwnKeyFP() {
                 ownFp = fp
-                // TODO: Exception try catch
                 pems.append(certsKeychain[fp]!)
             }
             else {
-                // TODO: Exception
-                print("No cert for own key!")
+                throw SMIMEError(message: "Tried to encrypt email with the user's key but no cert for own key present!", errorArray: nil, type: SMIMEError.ErrorType.encryption)
             }
         }
-        // TODO: try-catch text
-        let (encStr, errArr) = encryptWithPem(message: text!, certPems: pems)
-        let encData = encStr?.data(using: .utf8)
         
-        // TODO: check if errArr empty, exception
+        // do the actual encryption
+        let (encStr, errArr) = encryptWithPem(message: text!, certPems: pems)
+        if errArr != nil && errArr!.count > 0 {
+            throw SMIMEError(message: "Encryption failed!", errorArray: errArr, type: SMIMEError.ErrorType.encryption)
+        }
         
+        // check if the user has a certificate
         if ownFp != nil {
             let ownCert = certsKeychain[ownFp!]!
             let ownPk = privateKeyKeychain[ownFp!]!
             let (sigText, sigErrArr) = signWithPem(message: encStr!, certAsPem: ownCert, keyAsPem: ownPk, detached: false)
-            // TODO: check if errArr empty, exception
+            
+            if sigErrArr != nil && sigErrArr!.count > 0 {
+                throw SMIMEError(message: "Signing during encryption failed!", errorArray: sigErrArr, type: SMIMEError.ErrorType.encryption)
+            }
             
             return CryptoObject(chiphertext: sigText!.data(using: .utf8), plaintext: text, decryptedData: plainData, sigState: SignatureState.ValidSignature, encState: EncryptionState.ValidedEncryptedWithCurrentKey, signKey: ownFp, encType: CryptoScheme.SMIME, signedAdrs: [ownId])
         }
         
-        return nil
-        // TODO: Exception
-        // throw SMIMEError
+        throw SMIMEError(message: "Tried to sign with user's certificate but none was present!", errorArray: errArr, type: SMIMEError.ErrorType.encryption)
     }
 }