diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
index 6ba54d2fecbd2fefd407111aecfd536fa8f1d153..7bdcca0846b85a66eb4ab0be252f13adaa9a70e1 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
@@ -29,6 +29,7 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
+using System.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
@@ -54,7 +55,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		protected bool? TorqueConverterActive;
 
-		protected internal readonly CycleTorqueConverter TorqueConverter;
+		protected internal readonly TorqueConverterWrapper TorqueConverter;
 
 		public CycleGearbox(IVehicleContainer container, VectoRunData runData)
 			: base(container, runData)
@@ -64,7 +65,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 
 			var strategy = new CycleShiftStrategy(ModelData, null);
-			TorqueConverter = new CycleTorqueConverter(container, ModelData.TorqueConverterData);
+
+			
+			TorqueConverter = new TorqueConverterWrapper(runData.Cycle.Entries.All(x => x.EngineSpeed != null),
+				new CycleTorqueConverter(container, ModelData.TorqueConverterData),
+				new TorqueConverter(this, strategy, container, ModelData.TorqueConverterData, runData));
 			if (TorqueConverter == null) {
 				throw new VectoException("Torque Converter required for AT transmission!");
 			}
@@ -536,69 +541,4 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			}
 		}
 	}
-
-	public class CycleTorqueConverter : StatefulVectoSimulationComponent<TorqueConverter.TorqueConverterComponentState>
-	{
-		protected internal ITnOutPort NextComponent;
-		private TorqueConverterData ModelData;
-
-		public CycleTorqueConverter(IVehicleContainer container, TorqueConverterData modelData) : base(container)
-		{
-			ModelData = modelData;
-		}
-
-		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity, PerSecond inAngularVelocity)
-		{
-			
-			var operatingPoint = ModelData.LookupOperatingPoint(outAngularVelocity, inAngularVelocity, outTorque);
-
-			PreviousState.OperatingPoint = operatingPoint;
-			return NextComponent.Initialize(operatingPoint.InTorque, inAngularVelocity);
-		}
-
-		public IResponse Request(
-			Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, PerSecond inAngularVelocity,
-			bool dryRun = false)
-		{
-			var operatingPoint = ModelData.LookupOperatingPoint(outAngularVelocity, inAngularVelocity, outTorque);
-			if (!dryRun) {
-				CurrentState.OperatingPoint = operatingPoint;
-			}
-			return NextComponent.Request(absTime, dt, operatingPoint.InTorque, inAngularVelocity, dryRun);
-		}
-
-		public void Locked(
-			NewtonMeter inTorque, PerSecond inAngularVelocity, NewtonMeter outTorque,
-			PerSecond outAngularVelocity) { }
-
-		#region Overrides of VectoSimulationComponent
-
-		protected override void DoWriteModalResults(IModalDataContainer container)
-		{
-			if (CurrentState.OperatingPoint == null) {
-				container[ModalResultField.TorqueConverterTorqueRatio] = 1.0;
-				container[ModalResultField.TorqueConverterSpeedRatio] = 1.0;
-			} else {
-				container[ModalResultField.TorqueConverterTorqueRatio] = CurrentState.OperatingPoint.TorqueRatio;
-				container[ModalResultField.TorqueConverterSpeedRatio] = CurrentState.OperatingPoint.SpeedRatio;
-			}
-			container[ModalResultField.TC_TorqueIn] = CurrentState.InTorque;
-			container[ModalResultField.TC_TorqueOut] = CurrentState.OutTorque;
-			container[ModalResultField.TC_angularSpeedIn] = CurrentState.InAngularVelocity;
-			container[ModalResultField.TC_angularSpeedOut] = CurrentState.OutAngularVelocity;
-
-			var avgOutVelocity = (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
-			var avgInVelocity = (PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2.0;
-			container[ModalResultField.P_TC_out] = CurrentState.OutTorque * avgOutVelocity;
-			container[ModalResultField.P_TC_loss] = CurrentState.InTorque * avgInVelocity -
-													CurrentState.OutTorque * avgOutVelocity;
-		}
-
-		protected override void DoCommitSimulationStep()
-		{
-			AdvanceState();
-		}
-
-		#endregion
-	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleTorqueConverter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleTorqueConverter.cs
new file mode 100644
index 0000000000000000000000000000000000000000..69b99ce1a3c843910c600fb074a7a4d425d79b1f
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleTorqueConverter.cs
@@ -0,0 +1,74 @@
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Connector.Ports;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
+	public class CycleTorqueConverter : StatefulVectoSimulationComponent<TorqueConverter.TorqueConverterComponentState>
+	{
+		protected internal ITnOutPort NextComponent;
+		private TorqueConverterData ModelData;
+
+		public CycleTorqueConverter(IVehicleContainer container, TorqueConverterData modelData) : base(container)
+		{
+			ModelData = modelData;
+		}
+
+		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity, PerSecond inAngularVelocity)
+		{
+			
+			var operatingPoint = ModelData.LookupOperatingPoint(outAngularVelocity, inAngularVelocity, outTorque);
+
+			PreviousState.OperatingPoint = operatingPoint;
+			return NextComponent.Initialize(operatingPoint.InTorque, inAngularVelocity);
+		}
+
+		public IResponse Request(
+			Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, PerSecond inAngularVelocity,
+			bool dryRun = false)
+		{
+			var operatingPoint = ModelData.LookupOperatingPoint(outAngularVelocity, inAngularVelocity, outTorque);
+			if (!dryRun) {
+				CurrentState.OperatingPoint = operatingPoint;
+			}
+			return NextComponent.Request(absTime, dt, operatingPoint.InTorque, inAngularVelocity, dryRun);
+		}
+
+		public void Locked(
+			NewtonMeter inTorque, PerSecond inAngularVelocity, NewtonMeter outTorque,
+			PerSecond outAngularVelocity) { }
+
+		#region Overrides of VectoSimulationComponent
+
+		protected override void DoWriteModalResults(IModalDataContainer container)
+		{
+			if (CurrentState.OperatingPoint == null) {
+				container[ModalResultField.TorqueConverterTorqueRatio] = 1.0;
+				container[ModalResultField.TorqueConverterSpeedRatio] = 1.0;
+			} else {
+				container[ModalResultField.TorqueConverterTorqueRatio] = CurrentState.OperatingPoint.TorqueRatio;
+				container[ModalResultField.TorqueConverterSpeedRatio] = CurrentState.OperatingPoint.SpeedRatio;
+			}
+			container[ModalResultField.TC_TorqueIn] = CurrentState.InTorque;
+			container[ModalResultField.TC_TorqueOut] = CurrentState.OutTorque;
+			container[ModalResultField.TC_angularSpeedIn] = CurrentState.InAngularVelocity;
+			container[ModalResultField.TC_angularSpeedOut] = CurrentState.OutAngularVelocity;
+
+			var avgOutVelocity = (PreviousState.OutAngularVelocity + CurrentState.OutAngularVelocity) / 2.0;
+			var avgInVelocity = (PreviousState.InAngularVelocity + CurrentState.InAngularVelocity) / 2.0;
+			container[ModalResultField.P_TC_out] = CurrentState.OutTorque * avgOutVelocity;
+			container[ModalResultField.P_TC_loss] = CurrentState.InTorque * avgInVelocity -
+													CurrentState.OutTorque * avgOutVelocity;
+		}
+
+		protected override void DoCommitSimulationStep()
+		{
+			AdvanceState();
+		}
+
+		#endregion
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverterWrapper.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverterWrapper.cs
new file mode 100644
index 0000000000000000000000000000000000000000..5def29fe2fb852553c243cf847b0c26458bcea7f
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/TorqueConverterWrapper.cs
@@ -0,0 +1,57 @@
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Connector.Ports;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
+	public class TorqueConverterWrapper
+	{
+		protected internal CycleTorqueConverter CycleTorqueConverter;
+		protected internal TorqueConverter TorqueConverter;
+		protected bool UseCycleTorqueConverter;
+		
+		public TorqueConverterWrapper(bool useCycle, CycleTorqueConverter cycleTorqueConverter, TorqueConverter torqueConverter)
+		{
+			UseCycleTorqueConverter = useCycle;
+			if (useCycle) {
+				CycleTorqueConverter = cycleTorqueConverter;
+			} else {
+				TorqueConverter = torqueConverter;
+			}
+		}
+
+		public ITnOutPort NextComponent
+		{
+			set {
+				if (UseCycleTorqueConverter) {
+					CycleTorqueConverter.NextComponent = value;
+				} else {
+					TorqueConverter.NextComponent = value;
+				}
+			}
+		}
+
+		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity, PerSecond inAngularVelocity)
+		{
+			return UseCycleTorqueConverter
+				? CycleTorqueConverter.Initialize(outTorque, outAngularVelocity, inAngularVelocity)
+				: TorqueConverter.Initialize(outTorque, outAngularVelocity);
+		}
+
+		public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity, PerSecond inAngularVelocity, bool dryRun = false)
+		{
+			return UseCycleTorqueConverter
+				? CycleTorqueConverter.Request(absTime, dt, outTorque, outAngularVelocity, inAngularVelocity, dryRun)
+				: TorqueConverter.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
+		}
+
+		public void Locked(NewtonMeter outTorque, PerSecond outAngularVelocity, NewtonMeter inTorque, PerSecond inAngularVelocity)
+		{
+			if (UseCycleTorqueConverter) {
+				CycleTorqueConverter.Locked(outTorque, outAngularVelocity, inTorque, inAngularVelocity);
+			} else {
+				TorqueConverter.Locked(outTorque, outAngularVelocity, inTorque, inAngularVelocity);
+			}
+
+		}
+	}
+}
\ No newline at end of file