diff --git a/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs b/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs
index 95fd2f60c536511509dd9fbd123655a69991de69..144f98d6c7a5eab36cc3617d9507a994281458a9 100644
--- a/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs
+++ b/Assets/_Scripts/Core/Entities/Mobs/BossEntity.cs
@@ -24,6 +24,7 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable
             else companionSelectorIndex = 0;
         }
     }
+    protected bool isStarted = false;
 
     // Functions
 
@@ -36,6 +37,12 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable
         {
             CompanionActive.Add(false);
         }
+
+        if (!isStarted)
+        {
+            ActivateAllCompanions();
+            isStarted = true;
+        }
     }
 
     public void ActivateCompanion(int index)
@@ -67,7 +74,7 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable
 
         selectedCompanion.gameObject.SetActive(true);
 
-        selectedCompanion.transform.position = transform.position - new Vector3((index + 1) * 1.2f, 0, 0);
+        selectedCompanion.spawnPosition = transform.position - new Vector3((index + 1) * 1.2f, 0, 0);
         companionActive[CompanionSelectorIndex] = true;
         selectedCompanion.Assign(this);
     }
@@ -94,6 +101,14 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable
         Debug.Log($"Deactivating Companion {selectedCompanion.name}");
     }
 
+    public void DeactivateAllCompanions()
+    {
+        for (int i = 0; i < companionList.Count; i++)
+        {
+            DeactivateCompanion(i);
+        }
+    }
+
     public void AddCompanion(Companion companion)
     {
         CompanionList.Add(companion);
@@ -105,4 +120,24 @@ public abstract class BossEntity : EnemyEntity, IAccompaniable
         CompanionActive.RemoveAt(index);
         CompanionList.RemoveAt(index);
     }
+
+    protected void OnEnable()
+    {
+        Debug.Log("OnEnable: Enabling all companions. isStarted: " + isStarted);
+
+        if (isStarted)
+        {
+            ActivateAllCompanions();
+        }
+    }
+
+    protected void OnDisable()
+    {
+        Debug.Log("OnDisable: Disabling all companions. isStarted: " + isStarted);
+
+        if (isStarted)
+        {
+            DeactivateAllCompanions();
+        }
+    }
 }
diff --git a/Assets/_Scripts/Core/Entities/Mobs/General/General.cs b/Assets/_Scripts/Core/Entities/Mobs/General/General.cs
index ed2fce4599263311054a64e18bbc77b587fb4f64..ddda91b9db8489d7b4bdcf554a58b0444889356d 100644
--- a/Assets/_Scripts/Core/Entities/Mobs/General/General.cs
+++ b/Assets/_Scripts/Core/Entities/Mobs/General/General.cs
@@ -30,7 +30,6 @@ public class General : BossEntity
         animationController.Init(this);
 
         EquipWeapon(0);
-        ActivateAllCompanions();
 
         OnDeathEvent += OnDeath;
         StartCoroutine(DrainPlayerHealth());
diff --git a/Assets/_Scripts/Core/Entities/Mobs/King/King.cs b/Assets/_Scripts/Core/Entities/Mobs/King/King.cs
index a8f2ddaebd98b139737c689de66bcf459e635f79..21ad2784c37a9dbd867a3dfb61b4fcabc5d559c1 100644
--- a/Assets/_Scripts/Core/Entities/Mobs/King/King.cs
+++ b/Assets/_Scripts/Core/Entities/Mobs/King/King.cs
@@ -36,7 +36,6 @@ public class King : BossEntity
         animationController.Init(this);
 
         EquipWeapon(0);
-        ActivateAllCompanions();
 
         OnDeathEvent += OnDeath;
         StartCoroutine(SpawnGoons());
diff --git a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs
index 2ea46fbbb9145d0ca4cbb65305eb9331af41c6c2..3868f659bcd51863442b5b0fd771ea18d62cfea3 100644
--- a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPet.cs
@@ -48,8 +48,10 @@ public class AttackingPet : Companion, IArmed
         EquipWeapon();
 
         aiController.Init(this);
-        stateController.Init(this);
+        aiController.nav.enabled = false;
+        transform.position = spawnPosition;
 
+        stateController.Init(this);
         type = Type.DAMAGE;
     }
 
diff --git a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs
index 72405acfa7ee28d1730947767e771427e96df2a1..a8e59ffdaebb4e642ae08a90cd9ca13588efd493 100644
--- a/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/AttackingPet/AttackingPetAIController.cs
@@ -11,7 +11,7 @@ public class AttackingPetAIController : PetAIController<AttackingPet>
 
         if (currState == AttackingPetState.AI_ATTACK_STATE)
         {
-            Debug.Log($"{pet.id}: ATTACKING {pet.stateController.nearest.name}");
+            // Debug.Log($"{pet.id}: ATTACKING {pet.stateController.nearest.name}");
             pet.aiController.nav.stoppingDistance = 3;
             EnemyEntity target = pet.stateController.nearest;
             Quaternion targetAngle = LookToward(target.transform);
@@ -22,14 +22,14 @@ public class AttackingPetAIController : PetAIController<AttackingPet>
         }
         else if (currState == AttackingPetState.AI_FOLLOW_STATE)
         {
-            Debug.Log($"{pet.id}: FOLLOWING {pet.stateController.nearest.name}");
+            // Debug.Log($"{pet.id}: FOLLOWING {pet.stateController.nearest.name}");
             pet.aiController.nav.stoppingDistance = 3;
             EnemyEntity target = pet.stateController.nearest;
             GoToward(target.transform);
         }
         else // AI_IDLE_STATE
         {
-            Debug.Log($"{pet.id}: IDLE");
+            // Debug.Log($"{pet.id}: IDLE");
             pet.aiController.nav.stoppingDistance = 1;
             LookToward(GameController.Instance.player.transform);
             GoToward(GameController.Instance.player.transform);
diff --git a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs
index 3e298923003fee87c0a8ae58c6e7c9725563f502..f8c551e292b784861fbbe0b802dbff6596d6319d 100644
--- a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPet.cs
@@ -24,6 +24,9 @@ public class BuffPet : Companion
 
         IncreaseDamage();
         type = Type.INCREASE;
+
+        aiController.nav.enabled = false;
+        transform.position = spawnPosition;
     }
 
     // Function
@@ -107,6 +110,5 @@ public class BuffPet : Companion
         (Owner as BossEntity).companionActive.RemoveAt(index);
 
         Destroy(gameObject);
-
     }
 }
\ No newline at end of file
diff --git a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs
index 90b4dacdb3f71c6af3b069fca2fb6acde71ddac5..1decd102c51547c46b925f5bcec1b06b3928eb38 100644
--- a/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/BuffPet/BuffPetAIController.cs
@@ -12,12 +12,14 @@ public class BuffPetAIController : PetAIController<BuffPet>
         if (currState == BuffPetState.AI_AVOID_STATE)
         {
             // Get allowed farthest point from owner
+            // Debug.Log($"{pet.id}: AI_AVOID_STATE");
             Vector3 direction = MathUtils.GetDirectionVectorFlat(GameController.Instance.player.transform.position, pet.Owner.CompanionController.transform.position);
             Vector3 to = pet.Owner.CompanionController.transform.position - Vector3.Normalize(direction) * pet.stateController.maxDistFromOwner;
             GoToward(to);
         }
         else // AI_IDLE_STATE
         {
+            // Debug.Log($"{pet.id}: IDLE");
             GoToward(pet.Owner.CompanionController.transform);
         }
     }
diff --git a/Assets/_Scripts/Core/Entities/Pets/Companion.cs b/Assets/_Scripts/Core/Entities/Pets/Companion.cs
index 4b3fd5265e470ea1c1a6c853753a801388ae6238..8b57b42cdb3387be1b751375d5bbb5faa1602d71 100644
--- a/Assets/_Scripts/Core/Entities/Pets/Companion.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/Companion.cs
@@ -16,6 +16,7 @@ public abstract class Companion : DamageableEntity
     public CompanionData data;
 
     public Type type;
+    public Vector3 spawnPosition;
 
     public static string GetCompanionTypeNameFromEnum(Type type)
     {
diff --git a/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs b/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs
index 1e5f0e63cfc4e6f39700b99c804d1ef09947a37b..9c16f48158ee79c2f1b7f37fa5da19840416aa08 100644
--- a/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/HealingPet/HealingPet.cs
@@ -28,6 +28,8 @@ public class HealingPet : Companion
         OnHealOwnerEvent += Heal;
 
         aiController.Init(this);
+        aiController.nav.enabled = false;
+        transform.position = spawnPosition;
     }
 
     // Function
diff --git a/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs b/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs
index f80cc64f8136785436497a86d82567e0383e02f3..03975f21c8e729f3965a20ad2f055a90df728931 100644
--- a/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs
+++ b/Assets/_Scripts/Core/Entities/Pets/PetAIController.cs
@@ -35,17 +35,28 @@ public abstract class PetAIController<T> where T : Companion
 
     public void GoToward(Transform target)
     {
+        if (!nav.enabled)
+        {
+            nav.enabled = true;
+        }
         nav.destination = target.position;
     }
 
     public void GoToward(Vector3 position)
     {
+        if (!nav.enabled)
+        {
+            nav.enabled = true;
+        }
         nav.destination = position;
     }
 
     private void OnDamaged()
     {
-        nav.velocity = Vector3.zero;
+        if (nav.enabled)
+        {
+            nav.velocity = Vector3.zero;
+        }
     }
 
     private void OnDeath()
diff --git a/Assets/_Scripts/Core/Player/Player.cs b/Assets/_Scripts/Core/Player/Player.cs
index 4c1c6997cc3032223308550f6dffd58f65e60b88..24e9aa5eccef2e0affe4e347b0c879753aa1bce6 100644
--- a/Assets/_Scripts/Core/Player/Player.cs
+++ b/Assets/_Scripts/Core/Player/Player.cs
@@ -175,12 +175,18 @@ public class Player : PlayerEntity
 
             if (companion is AttackingPet)
             {
-                (companion as AttackingPet).aiController.nav.Warp(destination);
+                AttackingPet comp = companion as AttackingPet;
+                comp.aiController.nav.enabled = false;
+                comp.transform.position = destination;
+                comp.aiController.nav.enabled = true;
             }
 
             if (companion is HealingPet)
             {
-                (companion as HealingPet).aiController.nav.Warp(destination);
+                HealingPet comp = companion as HealingPet;
+                comp.aiController.nav.enabled = false;
+                comp.transform.position = destination;
+                comp.aiController.nav.enabled = true;
             }
         }
     }
diff --git a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs
index 3c681fe2b392a2f4a4b099463ddcc80854f4e53c..c95dc498efbb98b8a0e548bd5a9c39c460cdcd28 100644
--- a/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs
+++ b/Assets/_Scripts/Library/BaseClasses/EntityObject/PlayerEntity.cs
@@ -73,7 +73,7 @@ public class PlayerEntity : CombatantEntity, IAccompaniable
 
         selectedCompanion.gameObject.SetActive(true);
 
-        selectedCompanion.transform.position = transform.position - new Vector3((index + 1) * 1.2f, 0, 0);
+        selectedCompanion.spawnPosition = transform.position - new Vector3((index + 1) * 1.2f, 0, 0);
         companionActive[CompanionSelectorIndex] = true;
         selectedCompanion.Assign(this);
     }