diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs
index b970b1c3a12ab947c88806db4185dcc4e02d36c8..198a110e9f75647e48868b7b75a98a69fd318dc8 100644
--- a/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs
+++ b/VectoCore/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs
@@ -71,7 +71,7 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 			return new GearboxData() {
 				SavedInDeclarationMode = data.SavedInDeclarationMode,
 				ModelName = data.ModelName,
-				Type = (GearboxData.GearboxType)Enum.Parse(typeof(GearboxData.GearboxType), data.GearboxType, true),
+				Type = data.GearboxType.Parse<GearboxData.GearboxType>()
 			};
 		}
 
diff --git a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
index b39f173d23c1184e7e9a2b09903f941ff8c2cad3..0639d7e1aa8d2686c8b9503bf4612d087f9d2ffb 100644
--- a/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
+++ b/VectoCore/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
@@ -163,6 +163,11 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 			if (retVal.Type == GearboxData.GearboxType.Custom) {
 				throw new VectoSimulationException("Custom Transmission not supported in DeclarationMode!");
 			}
+
+			if (gearbox.Body.Gears.Count < 2) {
+				throw new VectoSimulationException("At least two gears must be defined: 1 Axle-Gear and 1 Gearbox-Gear!");
+			}
+
 			retVal.Inertia = DeclarationData.Gearbox.Inertia.SI<KilogramSquareMeter>();
 			retVal.TractionInterruption = DeclarationData.Gearbox.TractionInterruption(retVal.Type);
 			retVal.SkipGears = DeclarationData.Gearbox.SkipGears(retVal.Type);
@@ -176,36 +181,35 @@ namespace TUGraz.VectoCore.FileIO.Reader.DataObjectAdaper
 
 			retVal.HasTorqueConverter = false;
 
+			var axleGear = gearbox.Body.Gears.First();
+			var lossMap = TransmissionLossMap.ReadFromFile(Path.Combine(gearbox.BasePath, axleGear.LossMap), axleGear.Ratio);
+			retVal.AxleGearData = new GearData { LossMap = lossMap, Ratio = axleGear.Ratio, TorqueConverterActive = false };
 
-			for (uint i = 0; i < gearbox.Body.Gears.Count; i++) {
-				var gearSettings = gearbox.Body.Gears[(int)i];
-				var lossMapPath = Path.Combine(gearbox.BasePath, gearSettings.LossMap);
-				var lossMap = TransmissionLossMap.ReadFromFile(lossMapPath, gearSettings.Ratio);
-
-
-				if (i == 0) {
-					retVal.AxleGearData = new GearData() {
-						LossMap = lossMap,
-						Ratio = gearSettings.Ratio,
-						TorqueConverterActive = false
-					};
+			retVal.Gears = gearbox.Body.Gears.Skip(1).Select((gear, i) => {
+				lossMap = TransmissionLossMap.ReadFromFile(Path.Combine(gearbox.BasePath, axleGear.LossMap), axleGear.Ratio);
+				EngineFullLoadCurve fullLoadCurve;
+				if (string.IsNullOrWhiteSpace(gear.FullLoadCurve) || gear.FullLoadCurve == "<NOFILE>") {
+					fullLoadCurve = engine.FullLoadCurve;
 				} else {
-					var fullLoad = !string.IsNullOrEmpty(gearSettings.FullLoadCurve) && !gearSettings.FullLoadCurve.Equals("<NOFILE>")
-						? GearFullLoadCurve.ReadFromFile(Path.Combine(gearbox.BasePath, gearSettings.FullLoadCurve))
-						: null;
-					var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(fullLoad, engine);
-
-					retVal.Gears.Add(i, new GearData() {
-						LossMap = lossMap,
-						ShiftPolygon = shiftPolygon,
-						Ratio = gearSettings.Ratio,
-						TorqueConverterActive = false
-					});
+					var gearFullLoad = GearFullLoadCurve.ReadFromFile(Path.Combine(gearbox.BasePath, gear.FullLoadCurve));
+					fullLoadCurve = IntersectFullLoadCurves(gearFullLoad, engine.FullLoadCurve);
 				}
-			}
+
+				var shiftPolygon = DeclarationData.Gearbox.ComputeShiftPolygon(fullLoadCurve, engine.IdleSpeed);
+				return new KeyValuePair<uint, GearData>((uint)i,
+					new GearData { LossMap = lossMap, ShiftPolygon = shiftPolygon, Ratio = gear.Ratio, TorqueConverterActive = false });
+			}).ToDictionary(kv => kv.Key, kv => kv.Value);
 			return retVal;
 		}
 
+		private EngineFullLoadCurve IntersectFullLoadCurves(GearFullLoadCurve fullLoadCurve,
+			EngineFullLoadCurve engineFullLoadCurve)
+		{
+			//create new entries
+
+			throw new NotImplementedException();
+		}
+
 		public IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData(IEnumerable<VectoRunData.AuxData> auxList,
 			MissionType mission, VehicleClass hvdClass)
 		{
diff --git a/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/Models/Declaration/DeclarationData.cs
index 3ec6b22fb2a6cc3ea9c25d7813150235f45aa05c..33bf955740f4a1660946f683803ada6ea3791494 100644
--- a/VectoCore/Models/Declaration/DeclarationData.cs
+++ b/VectoCore/Models/Declaration/DeclarationData.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using NLog.Targets.Wrappers;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.Models.SimulationComponent.Impl;
 using TUGraz.VectoCore.Utils;
@@ -224,21 +225,24 @@ namespace TUGraz.VectoCore.Models.Declaration
 				return false;
 			}
 
-			internal static ShiftPolygon ComputeShiftPolygon(GearFullLoadCurve gear, CombustionEngineData engine)
+			internal static ShiftPolygon ComputeShiftPolygon(EngineFullLoadCurve fullLoadCurve, PerSecond engineIdleSpeed)
 			{
 				// TODO: How to compute shift-polygons exactly? (merge with engine full load?)
-				var fullLoadCurve = engine.FullLoadCurve;
-				var idleSpeed = engine.IdleSpeed;
+				//var fullLoadCurve = engine.FullLoadCurve;
+				//var engineIdleSpeed = engine.IdleSpeed;
 
 				var maxTorque = fullLoadCurve.MaxLoadTorque;
 
 				var entriesDown = new List<ShiftPolygon.ShiftPolygonEntry>();
 				var entriesUp = new List<ShiftPolygon.ShiftPolygonEntry>();
 
-				entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = idleSpeed, Torque = 0.SI<NewtonMeter>() });
+				entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() {
+					AngularSpeed = engineIdleSpeed,
+					Torque = 0.SI<NewtonMeter>()
+				});
 
-				var tq1 = maxTorque * idleSpeed / (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed - idleSpeed);
-				entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = idleSpeed, Torque = tq1 });
+				var tq1 = maxTorque * engineIdleSpeed / (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed - engineIdleSpeed);
+				entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = engineIdleSpeed, Torque = tq1 });
 
 				var speed1 = (fullLoadCurve.PreferredSpeed + fullLoadCurve.LoSpeed) / 2;
 				entriesDown.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = speed1, Torque = maxTorque });
@@ -249,7 +253,7 @@ namespace TUGraz.VectoCore.Models.Declaration
 					Torque = 0.SI<NewtonMeter>()
 				});
 
-				tq1 = maxTorque * (fullLoadCurve.PreferredSpeed - idleSpeed) / (fullLoadCurve.N95hSpeed - idleSpeed);
+				tq1 = maxTorque * (fullLoadCurve.PreferredSpeed - engineIdleSpeed) / (fullLoadCurve.N95hSpeed - engineIdleSpeed);
 				entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = fullLoadCurve.PreferredSpeed, Torque = tq1 });
 
 				entriesUp.Add(new ShiftPolygon.ShiftPolygonEntry() { AngularSpeed = fullLoadCurve.N95hSpeed, Torque = maxTorque });
diff --git a/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
index a00f2cab70fe022aaea7d5b7424bfe07019b3bb4..4fa0721dadad8d53df4df8c57501f2eb4516f29f 100644
--- a/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
+++ b/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
@@ -26,7 +26,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 
 		public GearData AxleGearData { get; internal set; }
 
-		public readonly Dictionary<uint, GearData> Gears = new Dictionary<uint, GearData>();
+		public Dictionary<uint, GearData> Gears = new Dictionary<uint, GearData>();
 
 		public GearboxType Type { get; internal set; }
 
diff --git a/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
index 32848cdf86fb11002e49e66de3314777d508b6aa..7fa56432ad50849e5622c7998c4c9a2f9062b609 100644
--- a/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
+++ b/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
@@ -55,6 +55,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			return ((60 * v) / (2 * r * Math.PI / 1000)).RPMtoRad();
 		}
 
+		[TestMethod]
+		public void Gearbox_IntersectFullLoadCurves()
+		{
+			Assert.Inconclusive("Test if the intersection of two fullloadcurves is correct");
+		}
+
 		[TestMethod]
 		public void Gearbox_Request()
 		{