diff --git a/Assets/Scripts/CollectorUpgrade.cs b/Assets/Scripts/CollectorUpgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..cb793b28c16b648e6511b5e93ca604dd48489870
--- /dev/null
+++ b/Assets/Scripts/CollectorUpgrade.cs
@@ -0,0 +1,24 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CollectorUpgrade : Upgrade
+{
+
+    // Start is called before the first frame update
+    void Start()
+    {
+
+        UpgradeTargets target = UpgradeTargets.collector;
+        City city = gameObject.GetComponent<City>();
+        float currentLevel = city.getLevel(target);
+        city.useResources(getPrices(currentLevel));
+        city.addCollector();
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+}
diff --git a/Assets/Scripts/CollectorUpgrade.cs.meta b/Assets/Scripts/CollectorUpgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..c367164b122ed3ec6dd5d412f1daf37fedf0ed2b
--- /dev/null
+++ b/Assets/Scripts/CollectorUpgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f39036a325f1d1f4da3df98a7fb16119
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/PopulationUpgrade.cs b/Assets/Scripts/PopulationUpgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c2338c21aee18fb6d2097f5b703bbbcacd7b37d2
--- /dev/null
+++ b/Assets/Scripts/PopulationUpgrade.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class PopulationUpgrade : Upgrade
+{
+    // Start is called before the first frame update
+    public void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    public void Update()
+    {
+        
+    }
+
+    public void upgrade()
+    {
+        UpgradeTargets target = UpgradeTargets.population;
+        City city = gameObject.GetComponent<City>();
+        float currentLevel = city.getLevel(target);
+        city.useResources(getPrices(currentLevel));
+        city.addPopulation(currentLevel * 10);
+        Debug.Log("population upgraded");
+    }
+}
diff --git a/Assets/Scripts/PopulationUpgrade.cs.meta b/Assets/Scripts/PopulationUpgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..60c4be0bb8e02226f0ad79517e48513aeb250608
--- /dev/null
+++ b/Assets/Scripts/PopulationUpgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fcd69bbed7a9ef3409a62541648ecefa
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/ResourceCapacityUpgrade.cs b/Assets/Scripts/ResourceCapacityUpgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..88ba170bb136aef9ac2f510c8dcf4ac95cb68f17
--- /dev/null
+++ b/Assets/Scripts/ResourceCapacityUpgrade.cs
@@ -0,0 +1,29 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ResourceCapacityUpgrade : Upgrade
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+
+    public void upgrade()
+    {
+        UpgradeTargets target = UpgradeTargets.capacity;
+        City city = gameObject.GetComponent<City>();
+        float currentLevel = city.getLevel(target);
+        city.useResources(getPrices(currentLevel));
+        city.increaseCapacity(currentLevel * 100);
+        Debug.Log("Capacity upgraded");
+    }
+
+}
diff --git a/Assets/Scripts/ResourceCapacityUpgrade.cs.meta b/Assets/Scripts/ResourceCapacityUpgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..a47f78289e7c69ecfbbc2e3e926769f36d7ccf8e
--- /dev/null
+++ b/Assets/Scripts/ResourceCapacityUpgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2670538e329f5494c9ccb621f90f3d23
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/ResourceEfficiencyUpgrade.cs b/Assets/Scripts/ResourceEfficiencyUpgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..adb204045f25075befe5482c4a549ac503c2da75
--- /dev/null
+++ b/Assets/Scripts/ResourceEfficiencyUpgrade.cs
@@ -0,0 +1,26 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ResourceEfficiencyUpgrade : Upgrade
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+
+    public void upgrade()
+    {
+        City city = gameObject.GetComponent<City>();
+        increaseEfficiencyLevel();
+        city.useResources(getPrices(getEfficiencyLevel() * getEfficiencyLevel()));
+        Debug.Log("Efficienfy upgraded to: " + getEfficiencyLevel());
+    }
+}
diff --git a/Assets/Scripts/ResourceEfficiencyUpgrade.cs.meta b/Assets/Scripts/ResourceEfficiencyUpgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..7d8ee32d54b6cb402062981d7648bcc9307714ad
--- /dev/null
+++ b/Assets/Scripts/ResourceEfficiencyUpgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 80c1408915a79524aa4536502432e25d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/RoadUpgrade.cs b/Assets/Scripts/RoadUpgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7ec0befe541b8e0be175f4b80b07a0c802d99d10
--- /dev/null
+++ b/Assets/Scripts/RoadUpgrade.cs
@@ -0,0 +1,30 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class RoadUpgrade : Upgrade
+{
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+
+    public void upgrade()
+    {
+        UpgradeTargets target = UpgradeTargets.speed;
+        Road road = gameObject.GetComponent<Road>();
+        City city = gameObject.GetComponent<City>();
+        float currentLevel = road.getLevel(target);
+        city.useResources(getPrices(currentLevel));
+        road.increaseSpeed(1 / currentLevel);
+        Debug.Log("Road upgraded");
+    }
+
+}
diff --git a/Assets/Scripts/RoadUpgrade.cs.meta b/Assets/Scripts/RoadUpgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..93ef0d12d015630afe45a78af1ae10e500a7070d
--- /dev/null
+++ b/Assets/Scripts/RoadUpgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9aec1805133c8c746afa3368a29d0e34
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scripts/Upgrade.cs b/Assets/Scripts/Upgrade.cs
new file mode 100644
index 0000000000000000000000000000000000000000..d521f6e01e0bc0c91105e6d57c8a14df0149409f
--- /dev/null
+++ b/Assets/Scripts/Upgrade.cs
@@ -0,0 +1,72 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public abstract class Upgrade : MonoBehaviour
+{
+    /*
+    private float baseWoodCost = 10;
+    private float baseStoneCost = 10;
+    private float baseFoodCost = 10;
+    */
+    private float efficiencyLevel = 1;
+
+    private Dictionary<Resources, int> resources = new Dictionary<Resources, int>();
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        
+    }
+
+    public float getEfficiencyLevel()
+    {
+        return efficiencyLevel;
+    }
+
+    public void increaseEfficiencyLevel()
+    {
+        efficiencyLevel++;
+    }
+
+    public float getEfficiency()
+    {
+        switch (efficiencyLevel)
+        {
+            case 1:
+                Debug.Log("effLevel 1");
+                return 1;
+            case 2:
+                Debug.Log("effLevel 2");
+                return 0.9f;
+            case 3:
+                return 0.8f;
+            case 4:
+                return 0.7f;
+            case 5:
+                return 0.6f;
+            default:
+                Debug.Log("Default");
+                return 1;
+        }
+
+    }
+
+    public List<float> getPrices(float modifier)
+    {
+        List<float> prices = new List<float>();
+        foreach(KeyValuePair<Resources, int> key in resources)
+        {
+            prices.Add(key.Value * modifier * 50 * getEfficiency());
+        }
+
+        return prices;
+    }
+
+}
diff --git a/Assets/Scripts/Upgrade.cs.meta b/Assets/Scripts/Upgrade.cs.meta
new file mode 100644
index 0000000000000000000000000000000000000000..ea31029c16b380f10b98f9cdd4ea4723743445d0
--- /dev/null
+++ b/Assets/Scripts/Upgrade.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 06620cacd9f76874d8f0e478ddea0be2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: