diff --git a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index f3832255fbb093c9d13a5998c8bfb3109a000f06..99cc19853cc3880c32bd2b38bf4224e0c493f8c3 100644
--- a/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -71,8 +71,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			}
 
 			var engine = new CombustionEngine(_container, data.EngineData);
+			var clutch = new Clutch(_container, data.EngineData, engine.IdleController);
+
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+
 			// gearbox --> clutch
-			tmp = AddComponent(tmp, new Clutch(_container, data.EngineData, engine.GetIdleController()));
+			tmp = AddComponent(tmp, clutch);
 
 
 			// clutch --> direct aux --> ... --> aux_XXX --> directAux
diff --git a/VectoCore/Models/SimulationComponent/IClutch.cs b/VectoCore/Models/SimulationComponent/IClutch.cs
index 64ee08e9f8675a4c6090c74624d2e06b6db7b943..78ca0c1358d6098cd94a4c9f6a778dbe97432cf9 100644
--- a/VectoCore/Models/SimulationComponent/IClutch.cs
+++ b/VectoCore/Models/SimulationComponent/IClutch.cs
@@ -1,4 +1,6 @@
-namespace TUGraz.VectoCore.Models.SimulationComponent
+using TUGraz.VectoCore.Models.Connector.Ports;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent
 {
 	public enum ClutchState
 	{
@@ -7,5 +9,8 @@
 		ClutchSlipping
 	}
 
-	public interface IClutch : IPowerTrainComponent {}
+	public interface IClutch : IPowerTrainComponent
+	{
+		ITnOutPort IdleControlPort { get; }
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/ICombustionEngine.cs b/VectoCore/Models/SimulationComponent/ICombustionEngine.cs
index 34b0eaf1c0731c025e6445259fb4e12dc41130fb..d795974b9a05d7e26b65d21e73252c9a4c3b69e0 100644
--- a/VectoCore/Models/SimulationComponent/ICombustionEngine.cs
+++ b/VectoCore/Models/SimulationComponent/ICombustionEngine.cs
@@ -8,6 +8,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent
 	/// </summary>
 	public interface ICombustionEngine : ITnOutProvider, IEngineInfo
 	{
-		ICombustionEngineIdleController GetIdleController();
+		ICombustionEngineIdleController IdleController { get; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs b/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs
index 1b2f61d94cf3a2203a9a97a6202a11396094c1ec..41dcc182b985f399a7879ce498f228f92d14f061 100644
--- a/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs
+++ b/VectoCore/Models/SimulationComponent/ICombustionEngineIdleController.cs
@@ -5,6 +5,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent
 {
 	public interface ICombustionEngineIdleController : ITnOutPort
 	{
-		void SetRequestPort(ITnOutPort tnOutPort);
+		ITnOutPort RequestPort { set; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs
index 14661335e7c93c7d45f5a101e23034d4a68b2076..791a25fc7b8e0cd9b19f97d0fe4ce770377e7425 100644
--- a/VectoCore/Models/SimulationComponent/Impl/Clutch.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/Clutch.cs
@@ -57,6 +57,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return this;
 		}
 
+		public ITnOutPort IdleControlPort
+		{
+			get { return NextComponent; }
+		}
+
 		public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity, bool dryRun = false)
 		{
 			if (angularVelocity == null) {
diff --git a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
index f9e1ef202791d7a68e3eddbdf26cd3d00ae6b711..190182cdcf0b2c0c00813113cf282f6a0dcef6bd 100644
--- a/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
@@ -79,12 +79,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			get { return Data.FullLoadCurve.RatedSpeed; }
 		}
 
-		public ICombustionEngineIdleController GetIdleController()
+		public ICombustionEngineIdleController IdleController
 		{
-			return IdleController ?? new CombustionEngineIdleController(this);
+			get { return EngineIdleController ?? new CombustionEngineIdleController(this); }
 		}
 
-		protected CombustionEngineIdleController IdleController { get; set; }
+		protected CombustionEngineIdleController EngineIdleController { get; set; }
 
 		#endregion
 
@@ -468,9 +468,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				Engine = combustionEngine;
 			}
 
-			public void SetRequestPort(ITnOutPort tnOutPort)
+			public ITnOutPort RequestPort
 			{
-				OutPort = tnOutPort;
+				set { OutPort = value; }
 			}
 
 			public IResponse Request(Second absTime, Second dt, NewtonMeter torque, PerSecond angularVelocity,
diff --git a/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCoreTest/Integration/CoachPowerTrain.cs
index 003829bcd263553e47a2e77450cf3261518c0f1b..a6f09c1b11068a55ff78c837ca9f0515c935b548 100644
--- a/VectoCoreTest/Integration/CoachPowerTrain.cs
+++ b/VectoCoreTest/Integration/CoachPowerTrain.cs
@@ -48,15 +48,18 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var vehicleData = CreateVehicleData(3300.SI<Kilogram>());
 			var driverData = CreateDriverData(AccelerationFile);
 
-			var engine = new CombustionEngine(container, engineData);
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
+			var engine = new CombustionEngine(container, engineData);
+			var clutch = new Clutch(container, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+
 			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
 			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
 			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius));
 			tmp = Port.AddComponent(tmp, new Brakes(container));
 			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
 			tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
-			tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
+			tmp = Port.AddComponent(tmp, clutch);
 
 			var aux = new Auxiliary(container);
 			aux.AddConstant("", 0.SI<Watt>());
diff --git a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
index 4784c93be460a336b49769e76c00ef394a1c2e3b..b3f6592d56e5dc588a7c2d0f63fc962097ab6222 100644
--- a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
+++ b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
@@ -59,7 +59,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
 			tmp = Port.AddComponent(tmp, gbx);
 			var engine = new CombustionEngine(container, engineData);
-			tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(container, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = Port.AddComponent(tmp, clutch);
 			Port.AddComponent(tmp, engine);
 
 			cyclePort.Initialize();
@@ -116,7 +118,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			var gbx = new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container));
 			tmp = Port.AddComponent(tmp, gbx);
 			var engine = new CombustionEngine(container, engineData);
-			tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(container, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = Port.AddComponent(tmp, clutch);
 			Port.AddComponent(tmp, engine);
 
 			cyclePort.Initialize();
@@ -189,7 +193,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
 			tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
 			var engine = new CombustionEngine(container, engineData);
-			tmp = Port.AddComponent(tmp, new Clutch(container, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(container, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = Port.AddComponent(tmp, clutch);
 			Port.AddComponent(tmp, engine);
 
 			cyclePort.Initialize();
diff --git a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
index b59165ec3e5743377933c0cba0bb8cdd90fee5ae..6354e58a9a470ff2ecd9d81fb146a1f488adeb07 100644
--- a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
+++ b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
@@ -54,7 +54,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
 
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = Port.AddComponent(tmp, clutch);
 			Port.AddComponent(tmp, engine);
 
 			var gbx = new MockGearbox(vehicleContainer);
@@ -105,7 +107,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer));
 			tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = Port.AddComponent(tmp, clutch);
 			Port.AddComponent(tmp, engine);
 
 			var gbx = new MockGearbox(vehicleContainer);
@@ -175,7 +179,9 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			tmp = Port.AddComponent(tmp, new Brakes(vehicleContainer));
 			tmp = Port.AddComponent(tmp, new AxleGear(vehicleContainer, axleGearData));
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			tmp = Port.AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = Port.AddComponent(tmp, clutch);
 			Port.AddComponent(tmp, engine);
 
 			var gbx = new MockGearbox(vehicleContainer);
diff --git a/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCoreTest/Integration/Truck40tPowerTrain.cs
index d0cf2c748b7b9273fdaeae291970cf8e6db54d8e..eda9db83474f16242f0686f116dc624d79895604 100644
--- a/VectoCoreTest/Integration/Truck40tPowerTrain.cs
+++ b/VectoCoreTest/Integration/Truck40tPowerTrain.cs
@@ -55,16 +55,17 @@ namespace TUGraz.VectoCore.Tests.Integration
 			var vehicleData = CreateVehicleData(massExtra, loading);
 			var driverData = CreateDriverData(AccelerationFile);
 
-			var engine = new CombustionEngine(container, engineData);
 			var cycle = new DistanceBasedDrivingCycle(container, cycleData);
+			var engine = new CombustionEngine(container, engineData);
+			var clutch = new Clutch(container, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+
 			dynamic tmp = Port.AddComponent(cycle, new Driver(container, driverData, new DefaultDriverStrategy()));
 			tmp = Port.AddComponent(tmp, new Vehicle(container, vehicleData));
 			tmp = Port.AddComponent(tmp, new Wheels(container, vehicleData.DynamicTyreRadius));
 			tmp = Port.AddComponent(tmp, new Brakes(container));
 			tmp = Port.AddComponent(tmp, new AxleGear(container, axleGearData));
 			tmp = Port.AddComponent(tmp, new Gearbox(container, gearboxData, new AMTShiftStrategy(gearboxData, container)));
-			var clutch = new Clutch(container, engineData, engine.GetIdleController());
-			engine.GetIdleController().SetRequestPort(clutch);
 			tmp = Port.AddComponent(tmp, clutch);
 
 			var aux = new Auxiliary(container);
diff --git a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
index 671e92727f4e3923def0909dbcf827a1ae10782f..308c9d3c947d316d83239011712b0948710f4d25 100644
--- a/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
+++ b/VectoCoreTest/Models/SimulationComponent/CombustionEngineTest.cs
@@ -204,9 +204,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var container = new VehicleContainer();
 			var gearbox = new MockGearbox(container);
 			var engineData = EngineeringModeSimulationDataReader.CreateEngineDataFromFile(CoachEngine);
-			var engine = new CombustionEngine(container, engineData);
 
-			var clutch = new Clutch(container, engineData, engine.GetIdleController());
+			var engine = new CombustionEngine(container, engineData);
+			var clutch = new Clutch(container, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
 
 			var driver = new MockDriver(container);
 
diff --git a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
index 0857517930696ad307727a1e63f7dc2a93ae3990..f9466a24b6ff807e8a1bd70f7bbc1c4d4e783c22 100644
--- a/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
+++ b/VectoCoreTest/Models/SimulationComponent/DriverTest.cs
@@ -47,10 +47,11 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 
 			var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy());
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-
+			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
 			dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
 			tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
-			tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
+			tmp = AddComponent(tmp, clutch);
 			AddComponent(tmp, engine);
 
 			var gbx = new MockGearbox(vehicleContainer) { Gear = 1 };
@@ -102,10 +103,12 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 
 			var driver = new Driver(vehicleContainer, driverData, new DefaultDriverStrategy());
 			var engine = new CombustionEngine(vehicleContainer, engineData);
+			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
 
 			dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
 			tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
-			tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
+			tmp = AddComponent(tmp, clutch);
 			AddComponent(tmp, engine);
 
 			var gbx = new MockGearbox(vehicleContainer);
@@ -164,7 +167,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			dynamic tmp = AddComponent(driver, new Vehicle(vehicleContainer, vehicleData));
 			tmp = AddComponent(tmp, new Wheels(vehicleContainer, vehicleData.DynamicTyreRadius));
 			var engine = new CombustionEngine(vehicleContainer, engineData);
-			tmp = AddComponent(tmp, new Clutch(vehicleContainer, engineData, engine.GetIdleController()));
+			var clutch = new Clutch(vehicleContainer, engineData, engine.IdleController);
+			engine.IdleController.RequestPort = clutch.IdleControlPort;
+			tmp = AddComponent(tmp, clutch);
 			AddComponent(tmp, engine);
 
 			var gbx = new MockGearbox(vehicleContainer);