diff --git a/Assets/Scripts/Upgrades/CityUpgrade.cs b/Assets/Scripts/Upgrades/CityUpgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c16877c631e7ee7b4b78021fb4bf14ae02065305
--- /dev/null
+++ b/Assets/Scripts/Upgrades/CityUpgrade.cs
@@ -0,0 +1,32 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CityUpgrade : Upgrade
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+
+    public void UpgradeCity()
+    {
+
+        UpgradeTargets target = UpgradeTargets.city;
+        City city = gameObject.GetComponent<City>();
+        int currentLevel = city.GetLevel(target);
+
+        if (city.GetLevel(UpgradeTargets.population) >= 5) {
+            city.UseResources(GetPrices(currentLevel * 10));
+        //    city.IncreaseCityLevel();  currently not implemented in City
+        }
+        
+    }
+}
diff --git a/Assets/Scripts/Upgrades/CityUpgrade.cs.meta b/Assets/Scripts/Upgrades/CityUpgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a1b5e1c7f62cd4a595b1e11a76cab2a5e2c23ad3
--- /dev/null
+++ b/Assets/Scripts/Upgrades/CityUpgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d033c0fdb28116543820fef49807d764
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
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}