diff --git a/Assets/Scenes/Main.unity b/Assets/Scenes/Main.unity
index 95b3a1728fd54fed8de19556baeeb1b427c9d3e1..b09f4e04af79d221a1bdb172ce8672839665b173 100644
--- a/Assets/Scenes/Main.unity
+++ b/Assets/Scenes/Main.unity
@@ -5715,17 +5715,14 @@ PrefabInstance:
     - {fileID: 8455667667674168468, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
     - {fileID: 100008, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
     m_AddedGameObjects: []
-    m_AddedComponents:
-    - targetCorrespondingSourceObject: {fileID: 100006, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
-      insertIndex: -1
-      addedObject: {fileID: 2023876525}
+    m_AddedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
 --- !u!114 &1641232234 stripped
 MonoBehaviour:
   m_CorrespondingSourceObject: {fileID: 11400004, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
   m_PrefabInstance: {fileID: 1641232233}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1974427093}
+  m_GameObject: {fileID: 0}
   m_Enabled: 1
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: c32067ea884548644b13cf9baddd4573, type: 3}
@@ -7205,36 +7202,10 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 615057aa5dd75e34383756f1bf0fa143, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  healingPet: {fileID: 7022846624846827769, guid: f86d09f168862644d8d36c6929850322, type: 3}
+  attackingPet: {fileID: 7022846624846827769, guid: 89d690d2254d9714f88745a7913a6bf3, type: 3}
   fileName: data.game
---- !u!1 &1974427093 stripped
-GameObject:
-  m_CorrespondingSourceObject: {fileID: 100006, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
-  m_PrefabInstance: {fileID: 1641232233}
-  m_PrefabAsset: {fileID: 0}
---- !u!4 &2023876510 stripped
-Transform:
-  m_CorrespondingSourceObject: {fileID: 400006, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
-  m_PrefabInstance: {fileID: 1641232233}
-  m_PrefabAsset: {fileID: 0}
---- !u!95 &2023876517 stripped
-Animator:
-  m_CorrespondingSourceObject: {fileID: 9500000, guid: 4e5a0d387dc27394b81600988ad0216f, type: 3}
-  m_PrefabInstance: {fileID: 1641232233}
-  m_PrefabAsset: {fileID: 0}
---- !u!114 &2023876525
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1974427093}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 8c07b35243918104da53773333c73e60, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  balance: 0
---- !u!1 &2025282751
+--- !u!1 &1979757893
 GameObject:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
diff --git a/Assets/Scripts/Camera/CameraFollow.cs b/Assets/Scripts/Camera/CameraFollow.cs
index 5e3ebe8d79067eb4752772ed47092ab68f77b7d0..e02e4fa89dec8bdb553baf29b30563fc3b4abe0e 100644
--- a/Assets/Scripts/Camera/CameraFollow.cs
+++ b/Assets/Scripts/Camera/CameraFollow.cs
@@ -3,7 +3,7 @@ using System.Collections;
 
 namespace Nightmare
 {
-    public class CameraFollow : MonoBehaviour, IDataPersistance
+    public class CameraFollow : MonoBehaviour
     {
         public Transform target;            // The position that that camera will be following.
         public float smoothing = 5f;        // The speed with which the camera will be following.
@@ -24,19 +24,5 @@ namespace Nightmare
             // Smoothly interpolate between the camera's current position and it's target position.
             transform.position = Vector3.Lerp (transform.position, targetCamPos, smoothing * Time.deltaTime);
         }
-
-        public void LoadData(GameData data)
-        {
-            if (data.cameraPosition != Vector3.zero)
-            {
-                this.transform.position = data.cameraPosition;
-            }
-        }
-
-        public void SaveData(ref GameData data)
-        {
-            data.cameraPosition = this.transform.position;
-        }
-
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Camera/CameraPosition.cs b/Assets/Scripts/Camera/CameraPosition.cs
deleted file mode 100644
index d663007ef8c1f56b52b799fd5486e107b8c81097..0000000000000000000000000000000000000000
--- a/Assets/Scripts/Camera/CameraPosition.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class CameraPosition : MonoBehaviour
-{
-    // Start is called before the first frame update
-    void Start()
-    {
-
-    }
-
-    // Update is called once per frame
-    void Update()
-    {
-
-    }
-    //public void LoadData(GameData data)
-    //{
-    //    this.transform.position = data.cameraPosition;
-    //}
-
-    //public void SaveData(ref GameData data)
-    //{
-    //    data.cameraPosition = this.transform.position;
-    //}
-}
diff --git a/Assets/Scripts/Camera/CameraPosition.cs.meta b/Assets/Scripts/Camera/CameraPosition.cs.meta
deleted file mode 100644
index 96dd0796cd9eb15dd49e9f7494933b7ff209614a..0000000000000000000000000000000000000000
--- a/Assets/Scripts/Camera/CameraPosition.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 0bb2d3419e085b341a2beb50ff4e439c
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Assets/Scripts/DataPersistance/Data/GameData.cs b/Assets/Scripts/DataPersistance/Data/GameData.cs
index ad5baf5415b2057622bca3960f652af62e08c1ce..6edb16289057da9aa6644f8c8cfe3bf9855412d8 100644
--- a/Assets/Scripts/DataPersistance/Data/GameData.cs
+++ b/Assets/Scripts/DataPersistance/Data/GameData.cs
@@ -8,10 +8,14 @@ public class GameData
 {
     // public int timer;
     public int playerHealth;
+    public Vector3 playerPosition;
+    public int balance;
+
     public float damagePercent;
 
-    public Vector3 playerPosition;
-    public Vector3 cameraPosition;
+    public List<int> healingPetHealths;
+    public List<int> attackingPetHealths;
+
 
     public int score;
     public int shotsFired;
@@ -29,7 +33,12 @@ public class GameData
         this.playerHealth = 100;
         this.damagePercent = 1;
         this.playerPosition = Vector3.zero;
-        this.cameraPosition = Vector3.zero;
+        this.balance = 0;
+
+
+
+        this.healingPetHealths = new List<int>();
+        this.attackingPetHealths = new List<int>();
 
         // Statistics
         this.score = 0;
diff --git a/Assets/Scripts/DataPersistance/DataPersistanceManager.cs b/Assets/Scripts/DataPersistance/DataPersistanceManager.cs
index 9944b64235eea2b349141c6818b47696e87263cf..480938e9338c2b91ce383f6b710498f3450dd7d6 100644
--- a/Assets/Scripts/DataPersistance/DataPersistanceManager.cs
+++ b/Assets/Scripts/DataPersistance/DataPersistanceManager.cs
@@ -2,9 +2,17 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using System.Linq;
+using Nightmare;
+
 
 public class DataPersistanceManager : MonoBehaviour
 {
+    [Header("Pet Prefabs")]
+
+    [SerializeField] public GameObject healingPet;
+    [SerializeField] public GameObject attackingPet;
+
+
     [Header("File Storage Config")]
     [SerializeField] private string fileName;
 
@@ -29,7 +37,6 @@ public class DataPersistanceManager : MonoBehaviour
     private void Start()
     {
         this.dataHandler = new FileDataHandler(Application.persistentDataPath, fileName);
-        this.dataPersistanceObjects = FindAllDataPersistanceObjects();
         LoadGame();
     }
 
@@ -49,6 +56,37 @@ public class DataPersistanceManager : MonoBehaviour
         {
             NewGame();
         }
+        else
+        {
+            if (this.gameData.healingPetHealths.Count != 0)
+            {
+                foreach (int healingPetHealth in this.gameData.healingPetHealths)
+                {
+                    GameObject pet = Instantiate(healingPet, gameData.playerPosition, Quaternion.identity);
+                    AllyPetHealth petHealthScript = pet.GetComponent<AllyPetHealth>();
+                    if (petHealthScript != null)
+                    {
+                        petHealthScript.currentHealth = healingPetHealth;
+                    }
+                }
+                this.gameData.healingPetHealths.Clear();
+            }
+            if (this.gameData.attackingPetHealths.Count != 0)
+            {
+                foreach (int attackingPetHealth in this.gameData.attackingPetHealths)
+                {
+                    GameObject pet = Instantiate(attackingPet, gameData.playerPosition, Quaternion.identity);
+                    AllyPetHealth petHealthScript = pet.GetComponent<AllyPetHealth>();
+                    if (petHealthScript != null)
+                    {
+                        petHealthScript.currentHealth = attackingPetHealth;
+                    }
+                }
+                this.gameData.attackingPetHealths.Clear();
+            }
+        }
+
+        this.dataPersistanceObjects = FindAllDataPersistanceObjects();
 
         // push the loaded data to all other scipts that need it
         foreach (IDataPersistance dataPersistanceObj in dataPersistanceObjects)
@@ -59,6 +97,8 @@ public class DataPersistanceManager : MonoBehaviour
     }
     public void SaveGame()
     {
+        this.dataPersistanceObjects = FindAllDataPersistanceObjects();
+
         // pass the data to other scripts so they can update it 
         foreach (IDataPersistance dataPersistanceObj in dataPersistanceObjects)
         {
diff --git a/Assets/Scripts/Pets/AllyPetHealth.cs b/Assets/Scripts/Pets/AllyPetHealth.cs
index a294a6b9cefbdfa566ad98afbd8a7bfca4c86f2b..eeb2703e3c8bfaa5d3f821d74b5117ef8f1ad1ab 100644
--- a/Assets/Scripts/Pets/AllyPetHealth.cs
+++ b/Assets/Scripts/Pets/AllyPetHealth.cs
@@ -10,7 +10,7 @@ namespace Nightmare
 
         Animator anim;
         CapsuleCollider capsuleCollider;
-        int currentHealth;
+        public int currentHealth;
 
         // Cheat Full HP Pet
         public bool isCheatFullHPPet = false;
diff --git a/Assets/Scripts/Pets/AttackingPetMovement.cs b/Assets/Scripts/Pets/AttackingPetMovement.cs
index 64ca5da688fe219566c2ab0943879c4ad8da6ebe..99b5210dcae7c8273580d9798487552dbb6a748a 100644
--- a/Assets/Scripts/Pets/AttackingPetMovement.cs
+++ b/Assets/Scripts/Pets/AttackingPetMovement.cs
@@ -5,29 +5,32 @@ using UnityEngine.Events;
 
 namespace Nightmare
 {
-    public class AttackingPetMovement : PausibleObject
+    public class AttackingPetMovement : PausibleObject, IDataPersistance
     {
         public float visionRange = 10f;
         public float wanderDistance = 10f;
         public Vector2 idleTimeRange;
-        [Range(0f,1f)]
+        [Range(0f, 1f)]
 
-        float currentVision; 
+        float currentVision;
         Transform player;
         PlayerHealth playerHealth;
 
-        Animator anim;        
+        Animator anim;
         NavMeshAgent nav;
         public float timer = 0f;
 
         float attackTimer = 0f;
 
-        void Awake ()
+        private AllyPetHealth allyPetHealthScript;
+
+        void Awake()
         {
-            player = GameObject.FindGameObjectWithTag ("Player").transform;
-            playerHealth = player.GetComponent <PlayerHealth> ();
+            player = GameObject.FindGameObjectWithTag("Player").transform;
+            playerHealth = player.GetComponent<PlayerHealth>();
             nav = GetComponent<NavMeshAgent>();
             anim = GetComponent<Animator>();
+            allyPetHealthScript = GetComponent<AllyPetHealth>();
             StartPausible();
         }
 
@@ -46,7 +49,7 @@ namespace Nightmare
                 nav.ResetPath();
         }
 
-        void Update ()
+        void Update()
         {
             if (!isPaused)
             {
@@ -95,7 +98,7 @@ namespace Nightmare
                 nav.isStopped = false;
         }
 
-        private GameObject getNearestEnemy() 
+        private GameObject getNearestEnemy()
         {
             GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy");
             float nearestDistance = Mathf.Infinity;
@@ -140,7 +143,7 @@ namespace Nightmare
             timer = -1f;
             // if (!enemyHealth.IsDead()) TODO: verify pet health
             // {
-                SetDestination(position);
+            SetDestination(position);
             // }
         }
 
@@ -174,7 +177,7 @@ namespace Nightmare
 
         private Vector3 GetRandomPoint(float distance, int layermask)
         {
-            Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position;;
+            Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position; ;
 
             NavMeshHit navHit;
             NavMesh.SamplePosition(randomPoint, out navHit, distance, layermask);
@@ -195,5 +198,18 @@ namespace Nightmare
             return navHit.mask;
         }
 
+        public void LoadData(GameData data)
+        {
+            // Do Nothing
+        }
+
+        public void SaveData(ref GameData data)
+        {
+            if (allyPetHealthScript.CurrentHealth() > 0)
+            {
+                data.attackingPetHealths.Add(allyPetHealthScript.CurrentHealth());
+            }
+        }
+
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Pets/HealingPetMovement.cs b/Assets/Scripts/Pets/HealingPetMovement.cs
index 587250feafba7f4161750849cd989d0e51f6694d..ba2f49099a2a0d9694c6a35e966048c31181a090 100644
--- a/Assets/Scripts/Pets/HealingPetMovement.cs
+++ b/Assets/Scripts/Pets/HealingPetMovement.cs
@@ -5,29 +5,32 @@ using UnityEngine.Events;
 
 namespace Nightmare
 {
-    public class HealingPetMovement : PausibleObject
+    public class HealingPetMovement : PausibleObject, IDataPersistance
     {
         public float visionRange = 10f;
         public float hearingRange = 20f;
         public float wanderDistance = 10f;
         public Vector2 idleTimeRange;
-        [Range(0f,1f)]
+        [Range(0f, 1f)]
         public float psychicLevels = 0.2f;
 
-        float currentVision; 
+        float currentVision;
         Transform player;
         PlayerHealth playerHealth;
 
-        Animator anim; 
+        Animator anim;
 
         NavMeshAgent nav;
         public float timer = 0f;
-        void Awake ()
+
+        private AllyPetHealth allyPetHealthScript;
+        void Awake()
         {
             anim = GetComponent<Animator>();
-            player = GameObject.FindGameObjectWithTag ("Player").transform;
-            playerHealth = player.GetComponent <PlayerHealth> ();
+            player = GameObject.FindGameObjectWithTag("Player").transform;
+            playerHealth = player.GetComponent<PlayerHealth>();
             nav = GetComponent<NavMeshAgent>();
+            allyPetHealthScript = GetComponent<AllyPetHealth>();
             StartPausible();
         }
 
@@ -46,7 +49,7 @@ namespace Nightmare
                 nav.ResetPath();
         }
 
-        void Update ()
+        void Update()
         {
             if (!isPaused)
             {
@@ -120,7 +123,7 @@ namespace Nightmare
         {
             timer = -1f;
             SetDestination(position);
-   
+
         }
 
         private void SetDestination(Vector3 position)
@@ -153,7 +156,7 @@ namespace Nightmare
 
         private Vector3 GetRandomPoint(float distance, int layermask)
         {
-            Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position;;
+            Vector3 randomPoint = UnityEngine.Random.insideUnitSphere * distance + this.transform.position; ;
 
             NavMeshHit navHit;
             NavMesh.SamplePosition(randomPoint, out navHit, distance, layermask);
@@ -174,5 +177,18 @@ namespace Nightmare
             return navHit.mask;
         }
 
+        public void LoadData(GameData data)
+        {
+            // Do nothing
+        }
+
+        public void SaveData(ref GameData data)
+        {
+            if (allyPetHealthScript.CurrentHealth() > 0)
+            {
+                data.healingPetHealths.Add(allyPetHealthScript.CurrentHealth());
+            }
+        }
+
     }
 }
\ No newline at end of file
diff --git a/Assets/Scripts/Player/PlayerCurrency.cs b/Assets/Scripts/Player/PlayerCurrency.cs
index bc6cc5765a8cf2b4715ea7811c5d8689b29a9eac..101037ddf14e4618aadc2041e135440f3fa33f63 100644
--- a/Assets/Scripts/Player/PlayerCurrency.cs
+++ b/Assets/Scripts/Player/PlayerCurrency.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
 using UnityEditor;
 using UnityEngine;
 
-public class PlayerCurrency : MonoBehaviour
+public class PlayerCurrency : MonoBehaviour, IDataPersistance
 {
     public int balance = 0;
     int prevBalance;
@@ -40,4 +40,14 @@ public class PlayerCurrency : MonoBehaviour
     {
         balance = prevBalance;
     }
+
+    public void LoadData(GameData data)
+    {
+        this.balance = data.balance;
+    }
+
+    public void SaveData(ref GameData data)
+    {
+        data.balance = this.balance;
+    }
 }
diff --git a/Assets/Scripts/Player/PlayerPosition.cs b/Assets/Scripts/Player/PlayerPosition.cs
index 5562906036fad64be2c57142d0f046b8a479dd37..ad956983cd04249863f63083fa7e517b717a47b6 100644
--- a/Assets/Scripts/Player/PlayerPosition.cs
+++ b/Assets/Scripts/Player/PlayerPosition.cs
@@ -7,18 +7,18 @@ public class PlayerPosition : MonoBehaviour, IDataPersistance
     // Start is called before the first frame update
     void Start()
     {
-        
+
     }
 
     // Update is called once per frame
     void Update()
     {
-        
+
     }
 
     public void LoadData(GameData data)
     {
-        this.transform.position = data.playerPosition;
+        // this.transform.position = data.playerPosition;
     }
 
     public void SaveData(ref GameData data)