diff --git a/Assets/Scripts/Upgrades/CollectorUpgrade.cs b/Assets/Scripts/Upgrades/CollectorUpgrade.cs
index ab1c34d767aed16bf66ab706a5824176a0ddf3d0..b5c72f59933ba0c139219c9f346d9d29979241e8 100644
--- a/Assets/Scripts/Upgrades/CollectorUpgrade.cs
+++ b/Assets/Scripts/Upgrades/CollectorUpgrade.cs
@@ -8,12 +8,7 @@ public class CollectorUpgrade : Upgrade
     // Start is called before the first frame update
     void Start()
     {
-
-        UpgradeTargets target = UpgradeTargets.collector;
-        City city = gameObject.GetComponent<City>();
-        int currentLevel = city.GetLevel(target);
-        city.UseResources(GetPrices(currentLevel));
-        city.AddCollector();
+        maxLevelModifier = 4;
     }
 
     // Update is called once per frame
@@ -21,4 +16,13 @@ public class CollectorUpgrade : Upgrade
     {
         
     }
+
+    public void UpgradeCollector()
+    {
+        UpgradeTargets target = UpgradeTargets.collector;
+        City city = gameObject.GetComponent<City>();
+        int currentLevel = city.GetLevel(target);
+        city.UseResources(GetPrices(currentLevel));
+        city.AddCollector();
+    }
 }
diff --git a/Assets/Scripts/Upgrades/PopulationUpgrade.cs b/Assets/Scripts/Upgrades/PopulationUpgrade.cs
index 04377c22e30f7c2ab3c8ded9ff765617130e67b9..fbda2c4c702dce9efee3713888199cbaffbb219e 100644
--- a/Assets/Scripts/Upgrades/PopulationUpgrade.cs
+++ b/Assets/Scripts/Upgrades/PopulationUpgrade.cs
@@ -7,7 +7,7 @@ public class PopulationUpgrade : Upgrade
     // Start is called before the first frame update
     public void Start()
     {
-        
+        maxLevelModifier = 10;
     }
 
     // Update is called once per frame
diff --git a/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs b/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs
index 6158772d0a4fb080ef6a4b477144b05c3ea18f13..45ac50727a3cc441d682695ee050eb0824668a57 100644
--- a/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs
+++ b/Assets/Scripts/Upgrades/ResourceCapacityUpgrade.cs
@@ -7,7 +7,7 @@ public class ResourceCapacityUpgrade : Upgrade
     // Start is called before the first frame update
     void Start()
     {
-
+        maxLevelModifier = 4;
     }
 
     // Update is called once per frame
diff --git a/Assets/Scripts/Upgrades/RoadUpgrade.cs b/Assets/Scripts/Upgrades/RoadUpgrade.cs
index 52676a0fd29f8148bfedffab67789e09a572ed9a..329ef10f69d2e2e2a93328e359d578c1982b7d42 100644
--- a/Assets/Scripts/Upgrades/RoadUpgrade.cs
+++ b/Assets/Scripts/Upgrades/RoadUpgrade.cs
@@ -4,10 +4,11 @@ using UnityEngine;
 
 public class RoadUpgrade : Upgrade
 {
+
     // Start is called before the first frame update
     void Start()
     {
-        
+        maxLevelModifier = 2;
     }
 
     // Update is called once per frame
diff --git a/Assets/Scripts/Upgrades/Upgrade.cs b/Assets/Scripts/Upgrades/Upgrade.cs
index 085a6a5f479780f3601d5d71e3bde5c52f4832bd..0dc875ab5c672895c4bd4ec0390efb3c67d89378 100644
--- a/Assets/Scripts/Upgrades/Upgrade.cs
+++ b/Assets/Scripts/Upgrades/Upgrade.cs
@@ -4,11 +4,8 @@ using UnityEngine;
 
 public abstract class Upgrade : MonoBehaviour
 {
-    /*
-    private float baseWoodCost = 10;
-    private float baseStoneCost = 10;
-    private float baseFoodCost = 10;
-    */
+    protected int maxLevelModifier;
+
     private float efficiencyLevel = 1;
 
     private Dictionary<Resources, int> resources = new Dictionary<Resources, int>();
diff --git a/Assets/Scripts/Upgrades/UpgradeTargets.cs b/Assets/Scripts/Upgrades/UpgradeTargets.cs
index ae059aa35a7bd0107c426ee560069bc9db115f51..57c44cd58ea805d7643d30e1959562063434b595 100644
--- a/Assets/Scripts/Upgrades/UpgradeTargets.cs
+++ b/Assets/Scripts/Upgrades/UpgradeTargets.cs
@@ -3,5 +3,5 @@ using System.Collections.Generic;
 using UnityEngine;
 
 public enum UpgradeTargets
-    {population, capacity, speed, collector}
+    {population, capacity, speed, collector, city}