diff --git a/Assets/Scripts/Fighter.cs b/Assets/Scripts/Fighter.cs
index fdf008160d434763c5b56c052e71bda87e46281f..078202b480350cf6679206e19f09da3142db045e 100644
--- a/Assets/Scripts/Fighter.cs
+++ b/Assets/Scripts/Fighter.cs
@@ -22,6 +22,7 @@ public abstract class Fighter : MonoBehaviour
     protected int currentHealth = 100;
     protected Animator animator;
     protected bool alive { get => currentHealth > 0; }
+    protected FighterTypes fighterType;
     protected abstract void Attack();
 
     float timeSinceLastAttack = 0f;
@@ -29,8 +30,12 @@ public abstract class Fighter : MonoBehaviour
     protected virtual void Awake()
     {
         animator = GetComponent<Animator>();
-        var enemyStats = StatsManager.instance.GetEnemyStats();
-        currentHealth = Mathf.RoundToInt(baseHealth * enemyStats.healthMultiplier);
+        fighterType = FighterTypes.ENEMY;
+    }
+
+    protected virtual void Start()
+    {
+        currentHealth = Mathf.RoundToInt(baseHealth * GetStats().healthMultiplier);
     }
 
     protected virtual void Update()
@@ -51,8 +56,7 @@ public abstract class Fighter : MonoBehaviour
 
     public void DealDamage(int dmg)
     {
-        var enemyStats = StatsManager.instance.GetEnemyStats();
-        var actualDamage = Mathf.Max(0, Mathf.RoundToInt(dmg - baseArmor * enemyStats.armorMultiplier));
+        var actualDamage = Mathf.Max(0, Mathf.RoundToInt(dmg - baseArmor * GetStats().armorMultiplier));
         currentHealth = Mathf.Max(currentHealth - actualDamage, 0);
         if (currentHealth == 0)
         {
@@ -67,12 +71,16 @@ public abstract class Fighter : MonoBehaviour
         }
     }
 
+    protected FighterStats GetStats()
+    {
+        return StatsManager.instance.fighterStats[fighterType];
+    }
+
     void OnTriggerEnter2D(Collider2D other)
     {
         if (other.CompareTag("AntiPlayer"))
         {
-            var enemyStats = StatsManager.instance.GetEnemyStats();
-            var damageToDeal = Mathf.RoundToInt(baseAttackDamage * enemyStats.damageMultiplier);
+            var damageToDeal = Mathf.RoundToInt(baseAttackDamage * GetStats().damageMultiplier);
             other.GetComponent<Fighter>().DealDamage(damageToDeal);
         }
     }
diff --git a/Assets/Scripts/StatsManager.cs b/Assets/Scripts/StatsManager.cs
index ea985e2465f905d35fad488d07d6e669c5b40344..dc23221b67f2d53b24281164e1af48102dc0c183 100644
--- a/Assets/Scripts/StatsManager.cs
+++ b/Assets/Scripts/StatsManager.cs
@@ -11,14 +11,13 @@ public enum UpgradeTypes
     MANA_COST,
 }
 
-public struct EnemyStats
+public enum FighterTypes
 {
-    public float healthMultiplier;
-    public float damageMultiplier;
-    public float armorMultiplier;
+    ANTI_PLAYER,
+    ENEMY,
 }
 
-public struct PlayerStats
+public struct FighterStats
 {
     public float healthMultiplier;
     public float damageMultiplier;
@@ -53,26 +52,15 @@ public class StatsManager : MonoBehaviour
 
     public static StatsManager instance { get; private set; }
 
-    EnemyStats currentEnemyStats;
-    PlayerStats currentPlayerStats;
     [SerializeField] int currentMana;
-
     [SerializeField] List<Upgrade> availableUpgrades;
 
+    // The currently active statistics for each fighter type
+    public Dictionary<FighterTypes, FighterStats> fighterStats = new Dictionary<FighterTypes, FighterStats>();
+
     // Information about currently available and purchased upgrades. Should only be read, not modified.
     public Dictionary<UpgradeTypes, UpgradeData> upgrades = new Dictionary<UpgradeTypes, UpgradeData>();
 
-    public EnemyStats GetEnemyStats()
-    {
-        return currentEnemyStats;
-    }
-
-    public PlayerStats GetPlayerStats(int stage)
-    {
-        // TODO use `stage`
-        return currentPlayerStats;
-    }
-
     public int GetMana()
     {
         return currentMana;
@@ -120,9 +108,10 @@ public class StatsManager : MonoBehaviour
 
     void RecalculateStatMultipliers()
     {
-        currentEnemyStats.healthMultiplier = upgrades[UpgradeTypes.ENEMY_HEALTH].GetTotalEffectMultiplier();
-        currentEnemyStats.damageMultiplier = upgrades[UpgradeTypes.ENEMY_DAMAGE].GetTotalEffectMultiplier();
-        currentEnemyStats.armorMultiplier = upgrades[UpgradeTypes.ENEMY_ARMOR].GetTotalEffectMultiplier();
+        var enemyStats = fighterStats[FighterTypes.ENEMY];
+        enemyStats.healthMultiplier = upgrades[UpgradeTypes.ENEMY_HEALTH].GetTotalEffectMultiplier();
+        enemyStats.damageMultiplier = upgrades[UpgradeTypes.ENEMY_DAMAGE].GetTotalEffectMultiplier();
+        enemyStats.armorMultiplier = upgrades[UpgradeTypes.ENEMY_ARMOR].GetTotalEffectMultiplier();
     }
 
     void Awake()
@@ -143,11 +132,17 @@ public class StatsManager : MonoBehaviour
             upgrades.Add(upgrade.type, upgradeData);
         }
 
-        currentEnemyStats.healthMultiplier = 1f;
-        currentEnemyStats.damageMultiplier = 1f;
-        currentEnemyStats.armorMultiplier = 1f;
-        currentPlayerStats.healthMultiplier = 1f;
-        currentPlayerStats.damageMultiplier = 1f;
-        currentPlayerStats.armorMultiplier = 1f;
+        fighterStats.Add(FighterTypes.ANTI_PLAYER, new FighterStats()
+        {
+            healthMultiplier = 1f,
+            damageMultiplier = 1f,
+            armorMultiplier = 1f,
+        });
+        fighterStats.Add(FighterTypes.ENEMY, new FighterStats()
+        {
+            healthMultiplier = 1f,
+            damageMultiplier = 1f,
+            armorMultiplier = 1f,
+        });
     }
 }