diff --git a/Assets/Scripts/Save/SaveAndLoad.cs b/Assets/Scripts/Save/SaveAndLoad.cs
new file mode 100644
index 0000000000000000000000000000000000000000..45fed20c3ecd3a8de7e28f898ae7de738b3aa69e
--- /dev/null
+++ b/Assets/Scripts/Save/SaveAndLoad.cs
@@ -0,0 +1,192 @@
+using UnityEngine;
+using UnityEngine.SceneManagement;
+using System.Security.Cryptography;
+using System.IO;
+using System;
+
+public class SaveAndLoad
+{
+    private SaveSlot saveSlot;
+    private string savePath = Application.dataPath+"/customsave.cssav";
+    private static byte[] saveKey = System.Text.Encoding.ASCII.GetBytes("Extended+Survival+Shooter+Secret");
+    
+    public SaveSlot LoadState(){
+        try
+        {
+            using (AesManaged aes = new AesManaged())
+            {
+                byte[] iv;
+                byte[] data;
+                int filesize = (int)(new FileInfo(savePath).Length);
+                using (var stream = File.OpenRead(savePath))
+                {
+                    using(var reader = new BinaryReader(stream, System.Text.Encoding.UTF8, false))
+                    {
+                        iv = reader.ReadBytes(16);
+                        data = reader.ReadBytes(filesize-16);
+                    }
+                }
+                
+                string decrypted = Decrypt(data, saveKey, iv);
+                saveSlot = JsonUtility.FromJson<SaveSlot>(decrypted);
+                Debug.Log(decrypted);
+            }
+        }
+        catch (System.Exception)
+        {   
+            return saveSlot = new SaveSlot();
+        }
+
+        return saveSlot;
+    }
+
+    public SaveInstance LoadSaveSlot(int index)
+    {
+        
+        SaveInstance selectedSave;
+        
+        switch (index)
+        {
+            case 1:
+                selectedSave = saveSlot.slot1;
+                break;
+            case 2:
+                selectedSave = saveSlot.slot2;
+                break;
+            default:
+                selectedSave = saveSlot.slot3;
+                break;
+        }
+        
+        return selectedSave;
+    }
+
+    public void SaveState(int index, 
+                          int playerHP,
+                          string current_level,
+                          string completedQuest,
+                          string saveTitle){
+        string encrSave;
+        SaveInstance currentState = new SaveInstance(
+            saveTitle, playerHP, current_level, DateTime.Now, completedQuest
+        );
+
+        // Pick the Save Slot
+        switch (index)
+        {
+            case 1:
+                saveSlot.slot1 = currentState;
+                break;
+            case 2:
+                saveSlot.slot2 = currentState;
+                break;
+            default:
+                saveSlot.slot3 = currentState;
+                break;
+        }
+
+        // Create JSON object
+        encrSave = JsonUtility.ToJson(saveSlot);
+        Debug.Log(encrSave);
+        
+        // Encrypt
+        try
+        {
+            using(AesManaged aes = new AesManaged()) {
+                byte[] encrypted = Encrypt(encrSave, saveKey, aes.IV);
+                using (var stream = File.OpenWrite(savePath))
+                {
+                    using(BinaryWriter writer = new BinaryWriter(stream, System.Text.Encoding.UTF8, false))
+                    {
+                        writer.Write(aes.IV);
+                        writer.Write(encrypted);
+                    }   
+                }
+            }
+        }
+        catch (System.Exception)
+        {
+            throw;
+        }
+    }
+
+    static byte[] Encrypt(string plaintext, byte[] Key, byte[] IV) {
+        byte[] encrypted;
+
+        using(AesManaged aes = new AesManaged()) {
+            ICryptoTransform encryptor = aes.CreateEncryptor(Key,IV);
+            using(MemoryStream ms = new MemoryStream()) {
+                using(CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) {
+                    using(StreamWriter sw = new StreamWriter(cs))
+                    sw.Write(plaintext);
+                    encrypted = ms.ToArray();
+                }
+            }
+        }
+
+        return encrypted;
+    }
+
+    static string Decrypt(byte[] cipherteks, byte[] Key, byte[] IV) {
+        string plainteks = null;
+
+        using(AesManaged aes = new AesManaged()) {
+            ICryptoTransform decryptor = aes.CreateDecryptor(Key, IV);
+            using(MemoryStream ms = new MemoryStream(cipherteks)) {
+                using(CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) {
+                    using(StreamReader reader = new StreamReader(cs))
+                    plainteks = reader.ReadToEnd();
+                }
+            }
+        }
+
+        return plainteks;
+    }
+  
+    [Serializable]
+    public class SaveInstance {
+        public bool isEmpty;
+        public string saveTitle;
+        public int playerHealth;
+        public string currentLevel;
+        public string dateTime;
+        public string completedQuest;
+
+        public SaveInstance(
+            string saveTitle,
+            int playerHealth,
+            string currentLevel,
+            DateTime dateTime,
+            string completedQuest
+        ){
+            this.saveTitle = saveTitle;
+            this.playerHealth = playerHealth;
+            this.currentLevel = currentLevel;
+            this.dateTime = dateTime.ToString();
+            this.completedQuest = completedQuest;
+            this.isEmpty = false;
+        }
+
+        public SaveInstance() {
+            this.saveTitle = "";
+            this.playerHealth = -1;
+            this.currentLevel = "";
+            this.dateTime = "";
+            this.completedQuest = "";
+            this.isEmpty = true;
+        }
+    }
+    
+    [Serializable]
+    public class SaveSlot {
+        public SaveInstance slot1;
+        public SaveInstance slot2;
+        public SaveInstance slot3;
+
+        public SaveSlot() {
+            this.slot1 = new SaveInstance();
+            this.slot2 = new SaveInstance();
+            this.slot3 = new SaveInstance();
+        }
+    }
+}
\ No newline at end of file