diff --git a/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs b/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs
index ba1cf6a0eb2e6691b6dbff4b0267a00450eb41b8..7736f249c8a91dddaa25dd242f0643bbeb37e7c9 100644
--- a/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs
+++ b/VectoCore/VectoCore/Models/Simulation/DataBus/IGearboxInfo.cs
@@ -29,42 +29,44 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Models.SimulationComponent;
-using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
-
-namespace TUGraz.VectoCore.Models.Simulation.DataBus
-{
-	/// <summary>
-	/// Defines a method to access shared data of the gearbox.
-	/// </summary>
-	public interface IGearboxInfo
-	{
-		GearboxType GearboxType { get; }
-
-		/// <summary>
-		/// Returns the current gear.
-		/// </summary>
-		/// <returns></returns>
-		uint Gear { get; }
-
-		MeterPerSecond StartSpeed { get; }
-
-		MeterPerSquareSecond StartAcceleration { get; }
-
-		Watt GearboxLoss();
-
-		Second LastShift { get; }
-
-		GearData GetGearData(uint gear);
-
-		/// <summary>
-		/// Returns the next gear during shifting operations
-		/// </summary>
-		GearInfo NextGear { get; }
-
-		Second TractionInterruption { get; }
-		uint NumGears { get; }
-	}
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.SimulationComponent;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+
+namespace TUGraz.VectoCore.Models.Simulation.DataBus
+{
+	/// <summary>
+	/// Defines a method to access shared data of the gearbox.
+	/// </summary>
+	public interface IGearboxInfo
+	{
+		GearboxType GearboxType { get; }
+
+		/// <summary>
+		/// Returns the current gear.
+		/// </summary>
+		/// <returns></returns>
+		uint Gear { get; }
+
+		bool TCLocked { get; }
+
+		MeterPerSecond StartSpeed { get; }
+
+		MeterPerSquareSecond StartAcceleration { get; }
+
+		Watt GearboxLoss();
+
+		Second LastShift { get; }
+
+		GearData GetGearData(uint gear);
+
+		/// <summary>
+		/// Returns the next gear during shifting operations
+		/// </summary>
+		GearInfo NextGear { get; }
+
+		Second TractionInterruption { get; }
+		uint NumGears { get; }
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
index a75c351db78e761bce7a13f3329453718c4559cd..a6e16a6e0ad50d067472dea23de0e76c27f6328b 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/VehicleContainer.cs
@@ -93,6 +93,16 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			}
 		}
 
+		public bool TCLocked
+		{
+			get {
+				if (Gearbox == null) {
+					return true;
+				}
+				return  Gearbox.TCLocked;
+			}
+		}
+
 		public MeterPerSecond StartSpeed
 		{
 			[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
index ef36ca9a9bdd0809673d775d908a44fbc159d2db..45d69d6881344a9d097b8b82dc202a72e56d468e 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/ATGearbox.cs
@@ -144,6 +144,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return response;
 		}
 
+		public override bool TCLocked { get { return PreviousState.TorqueConverterLocked; } }
+
 		internal ResponseDryRun Initialize(uint gear, bool torqueConverterLocked, NewtonMeter outTorque,
 			PerSecond outAngularVelocity)
 		{
@@ -391,12 +393,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				CurrentState.TorqueLossResult.Extrapolated) {
 				Log.Warn(
 					"Gear {0} LossMap data was extrapolated: range for loss map is not sufficient: n:{1}, torque:{2}, ratio:{3}",
-                    Gear, CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque,
+					Gear, CurrentState.OutAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.OutTorque,
 					ModelData.Gears[Gear].Ratio);
 				if (DataBus.ExecutionMode == ExecutionMode.Declaration) {
 					throw new VectoException(
 						"Gear {0} LossMap data was extrapolated in Declaration Mode: range for loss map is not sufficient: n:{1}, torque:{2}, ratio:{3}",
-                        Gear, CurrentState.InAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.InTorque,
+						Gear, CurrentState.InAngularVelocity.ConvertToRoundsPerMinute(), CurrentState.InTorque,
 						ModelData.Gears[Gear].Ratio);
 				}
 			}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs
index c5fc0df602aa043c92b8e4b9d2d43132097d7cd4..1feacbaf805dd0b08821796f2e9e093c7d56e8ae 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/AbstractGearbox.cs
@@ -29,132 +29,134 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System.ComponentModel.DataAnnotations;
-using System.Diagnostics;
-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.Simulation.DataBus;
-using TUGraz.VectoCore.Models.SimulationComponent.Data;
-using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
-
-namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
-{
-	public abstract class AbstractGearbox<TStateType> :
-		StatefulProviderComponent<TStateType, ITnOutPort, ITnInPort, ITnOutPort>, ITnOutPort, ITnInPort, IGearbox,
-		IClutchInfo
-		where TStateType : GearboxState, new()
-	{
-		/// <summary>
-		/// The data and settings for the gearbox.
-		/// </summary>
-		[Required, ValidateObject] internal readonly GearboxData ModelData;
-
-		protected AbstractGearbox(IVehicleContainer container, VectoRunData runData) : base(container)
-		{
-			ModelData = runData.GearboxData;
-		}
-
-		#region ITnOutPort
-
-		public abstract IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
-			bool dryRun = false);
-
-		public abstract IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity);
-
-		#endregion
-
-		#region IGearboxCockpit
-
-		public GearboxType GearboxType
-		{
-			get { return ModelData.Type; }
-		}
-
-		/// <summary>
-		/// The current gear.
-		/// </summary>
-		public uint Gear { get; protected internal set; }
-
-		[DebuggerHidden]
-		public MeterPerSecond StartSpeed
-		{
-			get { return ModelData.StartSpeed; }
-		}
-
-		[DebuggerHidden]
-		public MeterPerSquareSecond StartAcceleration
-		{
-			get { return ModelData.StartAcceleration; }
-		}
-
-		public Watt GearboxLoss()
-		{
-			var ratio = ModelData.Gears[PreviousState.Gear].HasLockedGear
-				? ModelData.Gears[PreviousState.Gear].Ratio
-				: ModelData.Gears[PreviousState.Gear].TorqueConverterRatio;
-
-			return (PreviousState.TransmissionTorqueLoss +
-					PreviousState.InertiaTorqueLossOut) / ratio * PreviousState.InAngularVelocity;
-		}
-
-		public Second LastShift { get; protected set; }
-
-		public GearData GetGearData(uint gear)
-		{
-			return ModelData.Gears[gear];
-		}
-
-		public abstract GearInfo NextGear { get; }
-
-		public virtual Second TractionInterruption
-		{
-			get { return ModelData.TractionInterruption; }
-		}
-
-		public uint NumGears
-		{
-			get { return (uint)ModelData.Gears.Count; }
-		}
-
-		#endregion
-
-		public abstract bool ClutchClosed(Second absTime);
-
-		protected bool ConsiderShiftLosses(GearInfo nextGear, NewtonMeter torqueOut)
-		{
-			if (ModelData.Type.ManualTransmission()) {
-				return false;
-			}
-			if (torqueOut.IsSmaller(0)) {
-				return false;
-			}
-			if (nextGear.Gear == 0) {
-				return false;
-			}
-			if (ModelData.Gears[2].HasTorqueConverter) {
-				return nextGear.TorqueConverterLocked; // || nextGear.Gear == 2;
-			}
-			return nextGear.TorqueConverterLocked;
-		}
-
-		protected internal WattSecond ComputeShiftLosses(NewtonMeter outTorque, PerSecond outAngularVelocity)
-		{
-			var torqueGbxIn = outTorque / ModelData.Gears[Gear].Ratio;
-			var deltaClutchSpeed = (DataBus.EngineSpeed - PreviousState.OutAngularVelocity * ModelData.Gears[Gear].Ratio) / 2;
-			var shiftLossEnergy = torqueGbxIn * deltaClutchSpeed * ModelData.PowershiftShiftTime;
-
-			return shiftLossEnergy.Abs();
-		}
-	}
-
-	public class GearboxState : SimpleComponentState
-	{
-		public NewtonMeter InertiaTorqueLossOut = 0.SI<NewtonMeter>();
-		public NewtonMeter TransmissionTorqueLoss = 0.SI<NewtonMeter>();
-		public uint Gear;
-		public TransmissionLossMap.LossMapResult TorqueLossResult;
-	}
+using System.ComponentModel.DataAnnotations;
+using System.Diagnostics;
+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.Simulation.DataBus;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
+{
+	public abstract class AbstractGearbox<TStateType> :
+		StatefulProviderComponent<TStateType, ITnOutPort, ITnInPort, ITnOutPort>, ITnOutPort, ITnInPort, IGearbox,
+		IClutchInfo
+		where TStateType : GearboxState, new()
+	{
+		/// <summary>
+		/// The data and settings for the gearbox.
+		/// </summary>
+		[Required, ValidateObject] internal readonly GearboxData ModelData;
+
+		protected AbstractGearbox(IVehicleContainer container, VectoRunData runData) : base(container)
+		{
+			ModelData = runData.GearboxData;
+		}
+
+		#region ITnOutPort
+
+		public abstract IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
+			bool dryRun = false);
+
+		public abstract IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity);
+
+		#endregion
+
+		#region IGearboxCockpit
+
+		public GearboxType GearboxType
+		{
+			get { return ModelData.Type; }
+		}
+
+		/// <summary>
+		/// The current gear.
+		/// </summary>
+		public uint Gear { get; protected internal set; }
+
+		public abstract bool TCLocked { get; }
+
+		[DebuggerHidden]
+		public MeterPerSecond StartSpeed
+		{
+			get { return ModelData.StartSpeed; }
+		}
+
+		[DebuggerHidden]
+		public MeterPerSquareSecond StartAcceleration
+		{
+			get { return ModelData.StartAcceleration; }
+		}
+
+		public Watt GearboxLoss()
+		{
+			var ratio = ModelData.Gears[PreviousState.Gear].HasLockedGear
+				? ModelData.Gears[PreviousState.Gear].Ratio
+				: ModelData.Gears[PreviousState.Gear].TorqueConverterRatio;
+
+			return (PreviousState.TransmissionTorqueLoss +
+					PreviousState.InertiaTorqueLossOut) / ratio * PreviousState.InAngularVelocity;
+		}
+
+		public Second LastShift { get; protected set; }
+
+		public GearData GetGearData(uint gear)
+		{
+			return ModelData.Gears[gear];
+		}
+
+		public abstract GearInfo NextGear { get; }
+
+		public virtual Second TractionInterruption
+		{
+			get { return ModelData.TractionInterruption; }
+		}
+
+		public uint NumGears
+		{
+			get { return (uint)ModelData.Gears.Count; }
+		}
+
+		#endregion
+
+		public abstract bool ClutchClosed(Second absTime);
+
+		protected bool ConsiderShiftLosses(GearInfo nextGear, NewtonMeter torqueOut)
+		{
+			if (ModelData.Type.ManualTransmission()) {
+				return false;
+			}
+			if (torqueOut.IsSmaller(0)) {
+				return false;
+			}
+			if (nextGear.Gear == 0) {
+				return false;
+			}
+			if (ModelData.Gears[2].HasTorqueConverter) {
+				return nextGear.TorqueConverterLocked; // || nextGear.Gear == 2;
+			}
+			return nextGear.TorqueConverterLocked;
+		}
+
+		protected internal WattSecond ComputeShiftLosses(NewtonMeter outTorque, PerSecond outAngularVelocity)
+		{
+			var torqueGbxIn = outTorque / ModelData.Gears[Gear].Ratio;
+			var deltaClutchSpeed = (DataBus.EngineSpeed - PreviousState.OutAngularVelocity * ModelData.Gears[Gear].Ratio) / 2;
+			var shiftLossEnergy = torqueGbxIn * deltaClutchSpeed * ModelData.PowershiftShiftTime;
+
+			return shiftLossEnergy.Abs();
+		}
+	}
+
+	public class GearboxState : SimpleComponentState
+	{
+		public NewtonMeter InertiaTorqueLossOut = 0.SI<NewtonMeter>();
+		public NewtonMeter TransmissionTorqueLoss = 0.SI<NewtonMeter>();
+		public uint Gear;
+		public TransmissionLossMap.LossMapResult TorqueLossResult;
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
index 7bdcca0846b85a66eb4ab0be252f13adaa9a70e1..ea52d426001697c52e0e08c85e44b689361471f9 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CycleGearbox.cs
@@ -126,6 +126,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return response;
 		}
 
+		public override bool TCLocked { get { return !TorqueConverterActive ?? false; } }
+
 		/// <summary>
 		/// Requests the Gearbox to deliver torque and angularVelocity
 		/// </summary>
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
index 81d4df08be1c613064660caf47eb8824d01908c4..0b123606072091d6db2aea310991c3d2feba7fff 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Driver.cs
@@ -732,7 +732,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 							? response.DeltaDragLoad
 							: response.GearboxPowerRequest;
 						return delta.Value();
-					});
+					},
+					forceLineSearch: DataBus.GearboxType.AutomaticTransmission() && !DataBus.TCLocked);
 
 				return operatingPoint;
 			} catch (Exception) {
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
index 31e770803a5dc23b8a37bbfa53829e9fa43ac78e..d1a468fbdd5ea2242d83b8b67bd850567dec729c 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/Gearbox.cs
@@ -110,6 +110,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			return response;
 		}
 
+		public override bool TCLocked { get { return true; } }
+
 		internal ResponseDryRun Initialize(uint gear, NewtonMeter outTorque, PerSecond outAngularVelocity)
 		{
 			var oldGear = Gear;
diff --git a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
index 2316cded98f3764e921705622f54f83c5833aa01..aa4e4c5b8897215900d4c38dc5d6d4997abe368a 100644
--- a/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
+++ b/VectoCore/VectoCore/Utils/SearchAlgorithm.cs
@@ -55,10 +55,10 @@ namespace TUGraz.VectoCore.Utils
 		/// </code>
 		/// </summary>
 		public static T Search<T>(T x, SI y, T interval, Func<object, SI> getYValue, Func<T, object> evaluateFunction,
-			Func<object, double> criterion) where T : SIBase<T>
+			Func<object, double> criterion, bool forceLineSearch = false) where T : SIBase<T>
 		{
 			var iterationCount = 0;
-			return Search(x, y, interval, getYValue, evaluateFunction, criterion, null, ref iterationCount);
+			return Search(x, y, interval, getYValue, evaluateFunction, criterion, null, ref iterationCount, forceLineSearch);
 		}
 
 		/// <summary>
@@ -72,10 +72,10 @@ namespace TUGraz.VectoCore.Utils
 		/// </code>
 		/// </summary>
 		public static T Search<T>(T x, SI y, T interval, Func<object, SI> getYValue, Func<T, object> evaluateFunction,
-			Func<object, double> criterion, Func<object, int, bool> abortCriterion) where T : SIBase<T>
+			Func<object, double> criterion, Func<object, int, bool> abortCriterion, bool forceLineSearch = false) where T : SIBase<T>
 		{
 			var iterationCount = 0;
-			return Search(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount);
+			return Search(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount, forceLineSearch);
 		}
 
 		/// <summary>
@@ -89,12 +89,18 @@ namespace TUGraz.VectoCore.Utils
 		/// </code>
 		/// </summary>
 		public static T Search<T>(T x, SI y, T interval, Func<object, SI> getYValue, Func<T, object> evaluateFunction,
-			Func<object, double> criterion, Func<object, int, bool> abortCriterion, ref int iterationCount) where T : SIBase<T>
+			Func<object, double> criterion, Func<object, int, bool> abortCriterion, ref int iterationCount, bool forceLineSearch) where T : SIBase<T>
 		{
 			T result;
 			try {
-				result = InterpolateSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion,
-					ref iterationCount);
+				if (forceLineSearch) {
+					result = LineSearch(x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion, ref iterationCount); 
+					
+				} else {
+					result = InterpolateSearch(
+						x, y, interval, getYValue, evaluateFunction, criterion, abortCriterion,
+						ref iterationCount);
+				}
 			} catch (VectoException ex) {
 				var log = LogManager.GetLogger(typeof(SearchAlgorithm).FullName);
 				log.Debug("Falling back to InterpolationSearch in reverse. Normal InterpolationSearch failed: " + ex.Message);
diff --git a/VectoCore/VectoCoreTest/Utils/MockGearbox.cs b/VectoCore/VectoCoreTest/Utils/MockGearbox.cs
index 31da0c3cdf8c843d8280d5c594940427d3ce32fe..8c5d640344ab9997f052f2376e7210baba04c62b 100644
--- a/VectoCore/VectoCoreTest/Utils/MockGearbox.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockGearbox.cs
@@ -29,121 +29,122 @@
 *   Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
 */
 
-using System;
-using TUGraz.VectoCommon.Models;
-using TUGraz.VectoCommon.Utils;
-using TUGraz.VectoCore.Models.Connector.Ports;
-using TUGraz.VectoCore.Models.Simulation;
-using TUGraz.VectoCore.Models.Simulation.DataBus;
-using TUGraz.VectoCore.Models.SimulationComponent;
-using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
-using TUGraz.VectoCore.OutputData;
-
-namespace TUGraz.VectoCore.Tests.Utils
-{
-	public class MockGearbox : VectoSimulationComponent, IGearbox, ITnInPort, ITnOutPort, IClutchInfo
-	{
-		private ITnOutPort _outPort;
-		private bool _clutchClosed;
-
-		public MockGearbox(IVehicleContainer cockpit) : base(cockpit)
-		{
-			_clutchClosed = true;
-		}
-
-		public ITnInPort InPort()
-		{
-			return this;
-		}
-
-		public ITnOutPort OutPort()
-		{
-			return this;
-		}
-
-		public GearboxType GearboxType { get; set; }
-		public uint Gear { get; set; }
-		public GearInfo NextGear { get; private set; }
-
-		public Second TractionInterruption
-		{
-			get { return 1.SI<Second>(); }
-		}
-
-		public uint NumGears { get; set; }
-
-		public MeterPerSecond StartSpeed
-		{
-			get { return 2.SI<MeterPerSecond>(); }
-		}
-
-		public MeterPerSquareSecond StartAcceleration
-		{
-			get { return 0.6.SI<MeterPerSquareSecond>(); }
-		}
-
-		public NewtonMeter GearMaxTorque
-		{
-			get { return null; }
-		}
-
-		public Watt GearboxLoss()
-		{
-			return 0.SI<Watt>();
-		}
-
-		public Second LastShift { get; private set; }
-
-		public GearData GetGearData(uint gear)
-		{
-			return new GearData();
-		}
-
-		public void Connect(ITnOutPort other)
-		{
-			_outPort = other;
-		}
-
-		public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
-			bool dryRun = false)
-		{
-			if (_outPort != null) {
-				//if (Gear > 0) {
-				return _outPort.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
-				//}
-				//return _outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), 0.RPMtoRad(), dryRun);
-			}
-			throw new NotImplementedException();
-		}
-
-		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
-		{
-			if (_outPort != null) {
-				return _outPort.Initialize(outTorque, outAngularVelocity);
-			}
-			throw new NotImplementedException();
-		}
-
-		protected override void DoWriteModalResults(IModalDataContainer container)
-		{
-			// nothing to write
-		}
-
-		protected override void DoCommitSimulationStep() {}
-
-		public bool ClutchClosed(Second absTime)
-		{
-			return _clutchClosed;
-		}
-
-		public void SetClutch(bool closed)
-		{
-			_clutchClosed = closed;
-		}
-
-		public void Connect(IAuxPort aux)
-		{
-			throw new NotImplementedException();
-		}
-	}
+using System;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Connector.Ports;
+using TUGraz.VectoCore.Models.Simulation;
+using TUGraz.VectoCore.Models.Simulation.DataBus;
+using TUGraz.VectoCore.Models.SimulationComponent;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Tests.Utils
+{
+	public class MockGearbox : VectoSimulationComponent, IGearbox, ITnInPort, ITnOutPort, IClutchInfo
+	{
+		private ITnOutPort _outPort;
+		private bool _clutchClosed;
+
+		public MockGearbox(IVehicleContainer cockpit) : base(cockpit)
+		{
+			_clutchClosed = true;
+		}
+
+		public ITnInPort InPort()
+		{
+			return this;
+		}
+
+		public ITnOutPort OutPort()
+		{
+			return this;
+		}
+
+		public GearboxType GearboxType { get; set; }
+		public uint Gear { get; set; }
+		public bool TCLocked { get; set; }
+		public GearInfo NextGear { get; private set; }
+
+		public Second TractionInterruption
+		{
+			get { return 1.SI<Second>(); }
+		}
+
+		public uint NumGears { get; set; }
+
+		public MeterPerSecond StartSpeed
+		{
+			get { return 2.SI<MeterPerSecond>(); }
+		}
+
+		public MeterPerSquareSecond StartAcceleration
+		{
+			get { return 0.6.SI<MeterPerSquareSecond>(); }
+		}
+
+		public NewtonMeter GearMaxTorque
+		{
+			get { return null; }
+		}
+
+		public Watt GearboxLoss()
+		{
+			return 0.SI<Watt>();
+		}
+
+		public Second LastShift { get; private set; }
+
+		public GearData GetGearData(uint gear)
+		{
+			return new GearData();
+		}
+
+		public void Connect(ITnOutPort other)
+		{
+			_outPort = other;
+		}
+
+		public IResponse Request(Second absTime, Second dt, NewtonMeter outTorque, PerSecond outAngularVelocity,
+			bool dryRun = false)
+		{
+			if (_outPort != null) {
+				//if (Gear > 0) {
+				return _outPort.Request(absTime, dt, outTorque, outAngularVelocity, dryRun);
+				//}
+				//return _outPort.Request(absTime, dt, 0.SI<NewtonMeter>(), 0.RPMtoRad(), dryRun);
+			}
+			throw new NotImplementedException();
+		}
+
+		public IResponse Initialize(NewtonMeter outTorque, PerSecond outAngularVelocity)
+		{
+			if (_outPort != null) {
+				return _outPort.Initialize(outTorque, outAngularVelocity);
+			}
+			throw new NotImplementedException();
+		}
+
+		protected override void DoWriteModalResults(IModalDataContainer container)
+		{
+			// nothing to write
+		}
+
+		protected override void DoCommitSimulationStep() {}
+
+		public bool ClutchClosed(Second absTime)
+		{
+			return _clutchClosed;
+		}
+
+		public void SetClutch(bool closed)
+		{
+			_clutchClosed = closed;
+		}
+
+		public void Connect(IAuxPort aux)
+		{
+			throw new NotImplementedException();
+		}
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs b/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs
index 794d597b9605c64edfd58d0dedcae82c5da8c08e..51429c000ea7a3c1b2157a1a7eeac4949e5e1808 100644
--- a/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs
+++ b/VectoCore/VectoCoreTest/Utils/MockVehicleContainer.cs
@@ -61,6 +61,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 		public GearboxType GearboxType { get; set; }
 
 		public uint Gear { get; set; }
+		public bool TCLocked { get; set; }
 		public GearInfo NextGear { get; private set; }
 
 		public Second TractionInterruption