diff --git a/VECTO/GUI/GearboxGearDialog.vb b/VECTO/GUI/GearboxGearDialog.vb
index 98aaaae8b3bc0769176e32dea1cc1fb71684507c..e4b2381f3d279b79f962480bb137531e1a206573 100644
--- a/VECTO/GUI/GearboxGearDialog.vb
+++ b/VECTO/GUI/GearboxGearDialog.vb
@@ -73,7 +73,7 @@ Public Class GearboxGearDialog
 					If(String.IsNullOrWhiteSpace(TbMaxTorque.Text), Nothing, TbMaxTorque.Text.ToDouble().SI(Of NewtonMeter))
 					}
 			Dim results As IList(Of ValidationResult) =
-					gearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), GearboxType)
+					gearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), GearboxType, False)
 
 			If (results.Any()) Then
 				Return results.Select(Function(r) r.ErrorMessage + String.Join(", ", r.MemberNames.Distinct())).ToList()
diff --git a/VECTO/GUI/VehicleAxleDialog.vb b/VECTO/GUI/VehicleAxleDialog.vb
index fefd712c245e86d1999898e5ac5b943aa02a870a..dc6487f4a4009e396cc3f952d5712c79de3ab5bf 100644
--- a/VECTO/GUI/VehicleAxleDialog.vb
+++ b/VECTO/GUI/VehicleAxleDialog.vb
@@ -59,7 +59,7 @@ Public Class VehicleAxleDialog
 				}
 
 		Dim results As IList(Of ValidationResult) =
-				axleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing)
+				axleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False)
 
 		If results.Any() Then
 			Dim messages As IEnumerable(Of String) =
diff --git a/VECTO/Input Files/Engine.vb b/VECTO/Input Files/Engine.vb
index 464423448d2265ccbf385815d814f42e168e65d5..e71df294414c2bd6ce05e0267018e4aa1c638ecb 100644
--- a/VECTO/Input Files/Engine.vb	
+++ b/VECTO/Input Files/Engine.vb	
@@ -149,7 +149,7 @@ Public Class Engine
 	Public Function SaveFile() As Boolean
 
 		Dim validationResults As IList(Of ValidationResult) =
-				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing)
+				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False)
 
 		If validationResults.Count > 0 Then
 			Dim messages As IEnumerable(Of String) =
@@ -233,6 +233,11 @@ Public Class Engine
 																	ExecutionModeServiceContainer)
 		Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode)
 
+		Dim emsCycleService As EmsCycleServiceContainer =
+				TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), 
+						EmsCycleServiceContainer)
+		Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle
+
 		Dim gbxtypeService As GearboxTypeServiceContainer =
 				TryCast(validationContext.GetService(GetType(GearboxTypeServiceContainer)), GearboxTypeServiceContainer)
 		Dim gbxType As GearboxType? = If(gbxtypeService Is Nothing, GearboxType.MT, gbxtypeService.Type)
@@ -248,7 +253,7 @@ Public Class Engine
 			End If
 
 			Dim result As IList(Of ValidationResult) =
-					engineData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType)
+					engineData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle)
 
 			If Not result.Any() Then Return ValidationResult.Success
 
diff --git a/VECTO/Input Files/Gearbox.vb b/VECTO/Input Files/Gearbox.vb
index 3b9b02216ca954729ff8d4559eab1a4f1d996e33..0b6f6edd2e4730a8f9e15871334c0ddd50d00ee1 100644
--- a/VECTO/Input Files/Gearbox.vb	
+++ b/VECTO/Input Files/Gearbox.vb	
@@ -109,7 +109,7 @@ Public Class Gearbox
 	Public Function SaveFile() As Boolean
 
 		Dim validationResults As IList(Of ValidationResult) =
-				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Type)
+				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Type, False)
 
 		If validationResults.Count > 0 Then
 			Dim messages As IEnumerable(Of String) =
@@ -190,6 +190,11 @@ Public Class Gearbox
 																	ExecutionModeServiceContainer)
 		Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode)
 
+		Dim emsCycleService As EmsCycleServiceContainer =
+				TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), 
+						EmsCycleServiceContainer)
+		Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle
+
 		Dim axlegearData As AxleGearData
 		Dim gearboxData As GearboxData
 
@@ -226,14 +231,14 @@ Public Class Gearbox
 			End If
 
 			Dim result As IList(Of ValidationResult) =
-					gearboxData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type)
+					gearboxData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type, emsCycle)
 			If result.Any() Then
 				Return _
 					New ValidationResult("Gearbox Configuration is invalid. ",
 										result.Select(Function(r) r.ErrorMessage + String.Join(Environment.NewLine, r.MemberNames)).ToList())
 			End If
 
-			result = axlegearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type)
+			result = axlegearData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gearbox.Type, emsCycle)
 			If result.Any() Then
 				Return _
 					New ValidationResult("Axlegear Configuration is invalid. ",
diff --git a/VECTO/Input Files/VectoJob.vb b/VECTO/Input Files/VectoJob.vb
index 69c8d1520097d1390d39db9985b7f0ca46aea8ef..94985746302e02bc9dc3dbca4d4238697e3bc3f1 100644
--- a/VECTO/Input Files/VectoJob.vb	
+++ b/VECTO/Input Files/VectoJob.vb	
@@ -109,7 +109,7 @@ Public Class VectoJob
 	Public Function SaveFile() As Boolean
 		Dim validationResults As IList(Of ValidationResult) =
 				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering),
-						If(GearboxInputData Is Nothing, GearboxType.MT, GearboxInputData.Type))
+						If(GearboxInputData Is Nothing, GearboxType.MT, GearboxInputData.Type), False)
 
 		If validationResults.Count > 0 Then
 			Dim messages As IEnumerable(Of String) =
@@ -402,7 +402,7 @@ Public Class VectoJob
 
 
 			result = jobData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering),
-									jobData.GearboxData.Type)
+									jobData.GearboxData.Type, False)
 			If result.Any() Then
 				Return _
 					New ValidationResult("Vecto Job Configuration is invalid. ", result.Select(Function(r) r.ErrorMessage).ToList())
diff --git a/VECTO/Input Files/Vehicle.vb b/VECTO/Input Files/Vehicle.vb
index 283f575a72e5bcd043129d614f3e4f718cad44b7..337eebf737a84d935573fb3fbd4a8a84ba00ab55 100644
--- a/VECTO/Input Files/Vehicle.vb	
+++ b/VECTO/Input Files/Vehicle.vb	
@@ -98,6 +98,11 @@ Public Class Vehicle
 		Dim modeService As ExecutionModeServiceContainer = TryCast(validationContext.GetService(GetType(ExecutionMode)), 
 																	ExecutionModeServiceContainer)
 		Dim mode As ExecutionMode = If(modeService Is Nothing, ExecutionMode.Declaration, modeService.Mode)
+		Dim emsCycleService As EmsCycleServiceContainer =
+				TryCast(validationContext.GetService(GetType(EmsCycleServiceContainer)), 
+						EmsCycleServiceContainer)
+		Dim emsCycle As Boolean = (emsCycleService IsNot Nothing) AndAlso emsCycleService.IsEmsCycle
+
 		Dim gbxtypeService As GearboxTypeServiceContainer =
 				TryCast(validationContext.GetService(GetType(GearboxTypeServiceContainer)), GearboxTypeServiceContainer)
 		Dim gbxType As GearboxType? = If(gbxtypeService Is Nothing, Nothing, gbxtypeService.Type)
@@ -120,14 +125,14 @@ Public Class Vehicle
 			End If
 
 			Dim result As IList(Of ValidationResult) =
-					vehicleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType)
+					vehicleData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle)
 			If result.Any() Then
 				Return _
 					New ValidationResult("Vehicle Configuration is invalid. ",
 										result.Select(Function(r) r.ErrorMessage + String.Join(Environment.NewLine, r.MemberNames)).ToList())
 			End If
 
-			result = retarderData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType)
+			result = retarderData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle)
 			If result.Any() Then
 				Return _
 					New ValidationResult("Retarder Configuration is invalid. ",
@@ -135,7 +140,7 @@ Public Class Vehicle
 			End If
 
 			If vehicle.AngledriveType = AngledriveType.SeparateAngledrive Then
-				result = angledriveData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType)
+				result = angledriveData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle)
 				If result.Any() Then
 					Return _
 						New ValidationResult("AngleDrive Configuration is invalid. ",
@@ -144,7 +149,7 @@ Public Class Vehicle
 			End If
 
 			If Not vehicle.PTOTransmissionType = "None" Then
-				result = ptoData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType)
+				result = ptoData.Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), gbxType, emsCycle)
 				If result.Any() Then
 					Return _
 						New ValidationResult("PTO Configuration is invalid. ",
@@ -195,7 +200,7 @@ Public Class Vehicle
 		SavedInDeclMode = Cfg.DeclMode
 
 		Dim validationResults As IList(Of ValidationResult) =
-				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing)
+				Validate(If(Cfg.DeclMode, ExecutionMode.Declaration, ExecutionMode.Engineering), Nothing, False)
 
 		If validationResults.Count > 0 Then
 			Dim messages As IEnumerable(Of String) =
diff --git a/VectoCommon/VectoCommon/Utils/Validation.cs b/VectoCommon/VectoCommon/Utils/Validation.cs
index c41577c4c1cf831ace657428b086cd296ffb9c84..c3a1fa07dbb7344be62f31cb917ab7e2013ef468 100644
--- a/VectoCommon/VectoCommon/Utils/Validation.cs
+++ b/VectoCommon/VectoCommon/Utils/Validation.cs
@@ -52,8 +52,10 @@ namespace TUGraz.VectoCommon.Utils
 		/// <param name="entity">The entity.</param>
 		/// <param name="mode">validate the entity for the given execution mode</param>
 		/// <param name="gbxType"></param>
+		/// <param name="cycleType"></param>
 		/// <returns>Null, if the validation was successfull. Otherwise a list of ValidationResults with the ErrorMessages.</returns>
-		public static IList<ValidationResult> Validate<T>(this T entity, ExecutionMode mode, GearboxType? gbxType)
+		public static IList<ValidationResult> Validate<T>(this T entity, ExecutionMode mode, GearboxType? gbxType,
+			bool emsCycle)
 		{
 			if (entity == null) {
 				return new[] { new ValidationResult(string.Format("null value given for {0}", typeof(T))) };
@@ -61,6 +63,8 @@ namespace TUGraz.VectoCommon.Utils
 			var context = new ValidationContext(entity);
 			context.ServiceContainer.AddService(typeof(ExecutionMode), new ExecutionModeServiceContainer(mode));
 			context.ServiceContainer.AddService(typeof(GearboxTypeServiceContainer), new GearboxTypeServiceContainer(gbxType));
+			context.ServiceContainer.AddService(typeof(EmsCycleServiceContainer), new EmsCycleServiceContainer(emsCycle));
+
 			var results = new List<ValidationResult>();
 			Validator.TryValidateObject(entity, context, results, true);
 
@@ -157,6 +161,16 @@ namespace TUGraz.VectoCommon.Utils
 		public GearboxType? Type { get; protected set; }
 	}
 
+	public class EmsCycleServiceContainer
+	{
+		public EmsCycleServiceContainer(bool isEmsCycle)
+		{
+			IsEmsCycle = isEmsCycle;
+		}
+
+		public bool IsEmsCycle { get; protected set; }
+	}
+
 	/// <summary>
 	/// Determines that the attributed object should be validated recursively.
 	/// </summary>
@@ -182,6 +196,9 @@ namespace TUGraz.VectoCommon.Utils
 			var gbxTypeService = validationContext.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer;
 			var gbxType = gbxTypeService != null ? gbxTypeService.Type : GearboxType.MT;
 
+			var emsTypeService = validationContext.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer;
+			var isEmsCycle = emsTypeService != null && emsTypeService.IsEmsCycle;
+
 			var enumerable = value as IEnumerable;
 			if (enumerable != null) {
 				var i = 0;
@@ -192,8 +209,8 @@ namespace TUGraz.VectoCommon.Utils
 							var baseType = valueType.GetGenericTypeDefinition();
 							if (baseType == typeof(KeyValuePair<,>)) {
 								var kvResults = new List<ValidationResult>();
-								kvResults.AddRange(valueType.GetProperty("Key").GetValue(element).Validate(mode, gbxType));
-								kvResults.AddRange(valueType.GetProperty("Value").GetValue(element).Validate(mode, gbxType));
+								kvResults.AddRange(valueType.GetProperty("Key").GetValue(element).Validate(mode, gbxType, isEmsCycle));
+								kvResults.AddRange(valueType.GetProperty("Value").GetValue(element).Validate(mode, gbxType, isEmsCycle));
 								if (kvResults.Any()) {
 									return new ValidationResult(
 										string.Format("{1}[{0}] in {1} invalid: {2}", valueType.GetProperty("Key").GetValue(element),
@@ -203,7 +220,7 @@ namespace TUGraz.VectoCommon.Utils
 							}
 						}
 
-						var results = element.Validate(mode, gbxType);
+						var results = element.Validate(mode, gbxType, isEmsCycle);
 						if (results.Any()) {
 							return new ValidationResult(
 								string.Format("{1}[{0}] in {1} invalid: {2}", i, validationContext.DisplayName,
@@ -213,7 +230,7 @@ namespace TUGraz.VectoCommon.Utils
 					i++;
 				}
 			} else {
-				var results = value.Validate(mode, gbxType);
+				var results = value.Validate(mode, gbxType, isEmsCycle);
 				if (!results.Any()) {
 					return ValidationResult.Success;
 				}
@@ -247,6 +264,7 @@ namespace TUGraz.VectoCommon.Utils
 	public class SIRangeAttribute : RangeAttribute
 	{
 		private ExecutionMode? _mode;
+		private bool? _emsMission;
 		private string _unit = "-";
 
 		/// <summary>
@@ -255,9 +273,72 @@ namespace TUGraz.VectoCommon.Utils
 		/// <param name="minimum">The minimum.</param>
 		/// <param name="maximum">The maximum.</param>
 		/// <param name="mode">if specified the validation is only performed in the corresponding mode</param>
-		public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode) : base(minimum, maximum)
+		public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode)
+			: base(minimum, maximum)
+		{
+			_mode = mode;
+		}
+
+		/// <summary>
+		/// Checks the Min-Max Range of SI Objects.
+		/// </summary>
+		/// <param name="minimum">The minimum.</param>
+		/// <param name="maximum">The maximum.</param>
+		public SIRangeAttribute(int minimum, int maximum)
+			: base(minimum, maximum) {}
+
+		/// <summary>
+		/// Checks the Min-Max Range of SI Objects.
+		/// </summary>
+		/// <param name="minimum">The minimum.</param>
+		/// <param name="maximum">The maximum.</param>
+		/// <param name="mode">if specified the validation is only performed in the corresponding mode</param>
+		public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode)
+			: base(minimum, maximum)
+		{
+			_mode = mode;
+		}
+
+		/// <summary>
+		/// Checks the Min-Max Range of SI Objects.
+		/// </summary>
+		/// <param name="minimum">The minimum.</param>
+		/// <param name="maximum">The maximum.</param>
+		public SIRangeAttribute(double minimum, double maximum)
+			: base(minimum, maximum) {}
+
+		/// <summary>
+		/// Checks the Min-Max Range of SI Objects.
+		/// </summary>
+		/// <param name="minimum">The minimum.</param>
+		/// <param name="maximum">The maximum.</param>
+		/// <param name="mode">if specified the validation is only performed in the corresponding mode</param>
+		public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode)
+			: base(minimum.Value(), maximum.Value())
+		{
+			_mode = mode;
+		}
+
+		/// <summary>
+		/// Checks the Min-Max Range of SI Objects.
+		/// </summary>
+		/// <param name="minimum">The minimum.</param>
+		/// <param name="maximum">The maximum.</param>
+		public SIRangeAttribute(SI minimum, SI maximum)
+			: base(minimum.Value(), maximum.Value()) {}
+
+		/// <summary>
+		/// Checks the Min-Max Range of SI Objects.
+		/// </summary>
+		/// <param name="minimum">The minimum.</param>
+		/// <param name="maximum">The maximum.</param>
+		/// <param name="mode">if specified the validation is only performed in the corresponding mode</param>
+		/// <param name="emsMission">Validation only applies if the mission is an EMS mission</param>
+		public SIRangeAttribute(int minimum, int maximum, ExecutionMode mode, bool emsMission)
+			: base(minimum, maximum)
 		{
 			_mode = mode;
+			_emsMission = emsMission;
 		}
 
 		/// <summary>
@@ -265,7 +346,11 @@ namespace TUGraz.VectoCommon.Utils
 		/// </summary>
 		/// <param name="minimum">The minimum.</param>
 		/// <param name="maximum">The maximum.</param>
-		public SIRangeAttribute(int minimum, int maximum) : base(minimum, maximum) {}
+		/// <param name="emsMission">Validation only applies if the mission is an EMS mission</param>
+		public SIRangeAttribute(int minimum, int maximum, bool emsMission) : base(minimum, maximum)
+		{
+			_emsMission = emsMission;
+		}
 
 		/// <summary>
 		/// Checks the Min-Max Range of SI Objects.
@@ -273,9 +358,12 @@ namespace TUGraz.VectoCommon.Utils
 		/// <param name="minimum">The minimum.</param>
 		/// <param name="maximum">The maximum.</param>
 		/// <param name="mode">if specified the validation is only performed in the corresponding mode</param>
-		public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode) : base(minimum, maximum)
+		/// <param name="emsMission">Validation only applies if the mission is an EMS mission</param>
+		public SIRangeAttribute(double minimum, double maximum, ExecutionMode mode, bool emsMission)
+			: base(minimum, maximum)
 		{
 			_mode = mode;
+			_emsMission = emsMission;
 		}
 
 		/// <summary>
@@ -283,7 +371,11 @@ namespace TUGraz.VectoCommon.Utils
 		/// </summary>
 		/// <param name="minimum">The minimum.</param>
 		/// <param name="maximum">The maximum.</param>
-		public SIRangeAttribute(double minimum, double maximum) : base(minimum, maximum) {}
+		/// <param name="emsMission">Validation only applies if the mission is an EMS mission</param>
+		public SIRangeAttribute(double minimum, double maximum, bool emsMission) : base(minimum, maximum)
+		{
+			_emsMission = emsMission;
+		}
 
 		/// <summary>
 		/// Checks the Min-Max Range of SI Objects.
@@ -291,9 +383,12 @@ namespace TUGraz.VectoCommon.Utils
 		/// <param name="minimum">The minimum.</param>
 		/// <param name="maximum">The maximum.</param>
 		/// <param name="mode">if specified the validation is only performed in the corresponding mode</param>
-		public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode) : base(minimum.Value(), maximum.Value())
+		/// <param name="emsMission">Validation only applies if the mission is an EMS mission</param>
+		public SIRangeAttribute(SI minimum, SI maximum, ExecutionMode mode, bool emsMission)
+			: base(minimum.Value(), maximum.Value())
 		{
 			_mode = mode;
+			_emsMission = emsMission;
 		}
 
 		/// <summary>
@@ -301,7 +396,11 @@ namespace TUGraz.VectoCommon.Utils
 		/// </summary>
 		/// <param name="minimum">The minimum.</param>
 		/// <param name="maximum">The maximum.</param>
-		public SIRangeAttribute(SI minimum, SI maximum) : base(minimum.Value(), maximum.Value()) {}
+		/// <param name="emsMission">Validation only applies if the mission is an EMS mission</param>
+		public SIRangeAttribute(SI minimum, SI maximum, bool emsMission) : base(minimum.Value(), maximum.Value())
+		{
+			_emsMission = emsMission;
+		}
 
 		/// <summary>
 		/// Validates that an SI Object is inside the min-max range.
@@ -318,14 +417,20 @@ namespace TUGraz.VectoCommon.Utils
 			if (si != null) {
 				_unit = si.GetUnitString();
 			}
+			var emsService = validationContext.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer;
+			var emsMode = emsService != null && emsService.IsEmsCycle;
 
 			var modeService = validationContext.GetService(typeof(ExecutionMode)) as ExecutionModeServiceContainer;
 			var mode = modeService == null ? (ExecutionMode?)null : modeService.Mode;
-			if (mode == null) {
-				return base.IsValid(si != null ? si.Value() : value, validationContext);
-			}
-			if (_mode == null || (_mode != null && (_mode.Value == mode))) {
-				return base.IsValid(si != null ? si.Value() : value, validationContext);
+
+			if (!_emsMission.HasValue || _emsMission.Value == emsMode) {
+				if (mode == null) {
+					return base.IsValid(si != null ? si.Value() : value, validationContext);
+				}
+				if (_mode == null || (_mode != null && (_mode.Value == mode))) {
+					return base.IsValid(si != null ? si.Value() : value, validationContext);
+				}
+				return ValidationResult.Success;
 			}
 			return ValidationResult.Success;
 		}
@@ -333,6 +438,7 @@ namespace TUGraz.VectoCommon.Utils
 		public override string FormatErrorMessage(string name)
 		{
 			const string unitString = "{0} [{1}]";
+
 			return string.Format(ErrorMessageString, name, string.Format(unitString, Minimum, _unit),
 				string.Format(unitString, Maximum, _unit));
 		}
diff --git a/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs
index 5ec8508fa8fbb8da59db60a905c8b3b9599b5160..8c66898676d76c4c737461ba8a5b37b9014e08d2 100644
--- a/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs
+++ b/VectoCore/VectoCore/Models/Declaration/StandardBodies.cs
@@ -90,8 +90,8 @@ namespace TUGraz.VectoCore.Models.Declaration
 	/// </summary>
 	public sealed class StandardBodies : LookupData<string, StandardBody>
 	{
-		//public static readonly StandardBody Empty = new StandardBody("", 0.SI<Kilogram>(), 0.SI<Kilogram>(),
-		//	new[] { 0.SI<SquareMeter>(), 0.SI<SquareMeter>() }, null, 0, 0.SI<CubicMeter>());
+		public static readonly StandardBody Empty = new StandardBody("", 0.SI<Kilogram>(), 0.SI<Kilogram>(),
+			new[] { 0.SI<SquareMeter>(), 0.SI<SquareMeter>() }, null, 0, 0.SI<CubicMeter>());
 
 		protected override string ResourceId
 		{
@@ -103,10 +103,10 @@ namespace TUGraz.VectoCore.Models.Declaration
 			get { return "StandardWeigths Lookup Error: No value found for ID '{0}'"; }
 		}
 
-		//public override StandardBody Lookup(string id)
-		//{
-		//	return string.IsNullOrWhiteSpace(id) ? Empty : base.Lookup(id);
-		//}
+		public override StandardBody Lookup(string id)
+		{
+			return string.IsNullOrWhiteSpace(id) ? Empty : base.Lookup(id);
+		}
 
 		protected override void ParseData(DataTable table)
 		{
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
index b4f253b610418b585bdbd5d0b3465daa17a955e1..b5eba984bdc33441b90685c15f183b5ff7fd27dc 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs
@@ -42,6 +42,7 @@ using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.InputData;
 using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.ModFilter;
@@ -168,7 +169,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 						throw new ArgumentOutOfRangeException("CycleType unknown:" + data.Cycle.CycleType);
 				}
 
-				var validationErrors = run.Validate(_mode, data.GearboxData == null ? (GearboxType?)null : data.GearboxData.Type);
+				var validationErrors = run.Validate(_mode, data.GearboxData == null ? (GearboxType?)null : data.GearboxData.Type, data.Mission != null && data.Mission.MissionType.IsEMS());
 				if (validationErrors.Any()) {
 					throw new VectoException("Validation of Run-Data Failed: " +
 											string.Join("\n", validationErrors.Select(r => r.ErrorMessage + string.Join("; ", r.MemberNames))));
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs
index bef80d665a8268563dd21d50cb1cbe3f5a28cc3d..64856e1d2bf3921864275f8cc253f47a630bfff3 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/Gearbox/GearData.cs
@@ -83,11 +83,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox
 			var gbxTypeService = context.GetService(typeof(GearboxTypeServiceContainer)) as GearboxTypeServiceContainer;
 			var gbxType = gbxTypeService == null ? GearboxType.MT : gbxTypeService.Type;
 
+			var emsTypeService = context.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer;
+			var emsMission = emsTypeService != null && emsTypeService.IsEmsCycle;
+
 			if (gearData.HasTorqueConverter) {
 				if (gearData.TorqueConverterShiftPolygon == null) {
 					return new ValidationResult("Shift Polygon for Torque Converter Gear required!");
 				}
-				var result = gearData.TorqueConverterShiftPolygon.Validate(mode, gbxType);
+				var result = gearData.TorqueConverterShiftPolygon.Validate(mode, gbxType, emsMission);
 				if (result.Any()) {
 					return new ValidationResult(string.Format("Validation of GearData failed"), result.Select(x => x.ErrorMessage));
 				}
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
index e52acfa68889644ba9fdbe4502350739ec92d1d5..d13afec5cd6d6849eac38bbf8daf335832bd04d5 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/GearboxData.cs
@@ -109,13 +109,14 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		{
 			var mode = GetExecutionMode(validationContext);
 			//var gbxType = GetGearboxType(validationContext);
+			var emsMission = GetEmsMode(validationContext);
 
 			var result = new List<ValidationResult>();
 			if (gearboxData.Type.AutomaticTransmission()) {
 				gearboxData.TorqueConverterData.RequiredSpeedRatio =
 					Math.Round(Constants.SimulationSettings.RequiredTorqueConverterSpeedRatio / gearboxData.Gears[1].Ratio *
 								gearboxData.Gears[1].TorqueConverterRatio, 4);
-				result.AddRange(gearboxData.TorqueConverterData.Validate(mode, gearboxData.Type));
+				result.AddRange(gearboxData.TorqueConverterData.Validate(mode, gearboxData.Type, emsMission));
 				//result.AddRange(gearboxData.PowershiftShiftTime.Validate(mode, gearboxData.Type));
 				//result.AddRange(gearboxData.PowershiftInertiaFactor.Validate(mode, gearboxData.Type));
 				validationContext.MemberName = "PowershiftInertiaFactor";
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs
index 344747dfddadb6bc78702a81a3c19675f9a47abf..7142c1e34a5a4da8cc015dd1796e15f25d98a243 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs
@@ -61,5 +61,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 			return modeService == null ? ExecutionMode.Declaration : modeService.Mode;
 		}
 
+		protected static bool GetEmsMode(ValidationContext context)
+		{
+			var emsService = context.GetService(typeof(EmsCycleServiceContainer)) as EmsCycleServiceContainer;
+			return emsService != null && emsService.IsEmsCycle;
+		}
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
index 48b7c1b670818aa4d63522374a53236d7e3c5392..d82e8aa0ab1dee168a68feba9e39704079f0e9a4 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/VehicleData.cs
@@ -75,10 +75,12 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		/// (+ Curb Weight of Standard-Body if it has one)
 		/// (+ Curb Weight of Trailer if it has one)
 		/// </summary>
-		[Required, SIRange(500, 40000)]
+		[Required, SIRange(500, 40000, emsMission: false),
+		SIRange(0, 60000, emsMission: true)]
 		public Kilogram CurbWeight { get; internal set; }
 
-		[Required, SIRange(0, 40000)]
+		[Required, SIRange(0, 40000, emsMission: false),
+		SIRange(0, 60000, emsMission: true)]
 		public Kilogram Loading { get; internal set; }
 
 		[SIRange(0, 500)]
@@ -88,14 +90,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		/// The Gross Vehicle Weight of the Vehicle.
 		/// </summary>
 		[Required,
-		SIRange(3500, 40000, ExecutionMode.Declaration),
+		SIRange(3500, 40000, ExecutionMode.Declaration, emsMission: false),
+		SIRange(0, 60000, ExecutionMode.Declaration, emsMission: true),
 		SIRange(0, 1000000, ExecutionMode.Engineering)]
 		public Kilogram GrossVehicleWeight { get; internal set; }
 
 		/// <summary>
 		/// The Gross Vehicle Weight of the Trailer (if the vehicle has one).
 		/// </summary>
-		[Required, SIRange(0, 40000)]
+		[Required, SIRange(0, 40000, emsMission: false),
+		SIRange(0, 60000, emsMission: true)]
 		public Kilogram TrailerGrossVehicleWeight { get; internal set; }
 
 		[Required, SIRange(0.1, 0.7)]
@@ -178,6 +182,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 		public static ValidationResult ValidateVehicleData(VehicleData vehicleData, ValidationContext validationContext)
 		{
 			var mode = GetExecutionMode(validationContext);
+			var emsCycle = GetEmsMode(validationContext);
 
 			if (vehicleData.AxleData.Count < 1) {
 				return new ValidationResult("At least two axles need to be specified");
@@ -203,7 +208,9 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 
 			// total gvw is limited by max gvw (40t)
 			var gvwTotal = VectoMath.Min(vehicleData.GrossVehicleWeight + vehicleData.TrailerGrossVehicleWeight,
-				Constants.SimulationSettings.MaximumGrossVehicleWeight);
+				emsCycle
+					? Constants.SimulationSettings.MaximumGrossVehicleWeightEMS
+					: Constants.SimulationSettings.MaximumGrossVehicleWeight);
 			if (mode != ExecutionMode.Declaration) {
 				return ValidationResult.Success;
 			}
diff --git a/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs b/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs
index ac230b4cbcdefc13b77e4286f0f2c88bb61bdc15..2c372d3fa6f3aa92cf448d6e106940770dc61b29 100644
--- a/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs
+++ b/VectoCore/VectoCore/OutputData/PDF/PDFDeclarationReport.cs
@@ -152,7 +152,7 @@ namespace TUGraz.VectoCore.OutputData.PDF
 				CreateTitlePage(Missions)
 			};
 			//tasks.AddRange(
-			pages.AddRange(Missions.OrderBy(m => m.Key)
+			pages.AddRange(Missions.Where(m => !m.Key.IsEMS()).OrderBy(m => m.Key)
 				.Select((m, i) => CreateCyclePage(m.Value, i + 2, Missions.Count + 1)));
 
 			//Task.WaitAll(tasks.Cast<Task>().ToArray());
@@ -186,7 +186,7 @@ namespace TUGraz.VectoCore.OutputData.PDF
 		{
 			var stream = new MemoryStream();
 			var resourceName = string.Format("{0}.Report.title{1}CyclesTemplate.pdf",
-				DeclarationData.DeclarationDataResourcePrefix, missions.Count);
+				DeclarationData.DeclarationDataResourcePrefix, missions.Count(m => !m.Key.IsEMS()));
 			var inputStream = RessourceHelper.ReadStream(resourceName);
 			var reader = new PdfReader(inputStream);
 			var stamper = new PdfStamper(reader, stream);
@@ -208,7 +208,7 @@ namespace TUGraz.VectoCore.OutputData.PDF
 			pdfFields.SetField("PageNr", string.Format("Page {0} of {1}", 1, missions.Count + 1));
 
 			var i = 1;
-			foreach (var results in missions.Values.OrderBy(m => m.Mission.MissionType)) {
+			foreach (var results in missions.Where(m => !m.Key.IsEMS()).Select(m => m.Value).OrderBy(m => m.Mission.MissionType)) {
 				var trailerSuffix = results.Mission.Trailer.Count > 0
 					? string.Format(" with {0} Trailer",
 						string.Join(" + ", results.Mission.Trailer.Select(t => t.TrailerType.ToString())))
diff --git a/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv b/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv
index 5deb37b1014496521890ad662584aa9d2d064796..1a3ff6b7f80bafa2442de6d1a6946cba11c271be 100644
--- a/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv
+++ b/VectoCore/VectoCore/Resources/Declaration/SegmentTable.csv
@@ -14,7 +14,7 @@ Valid,Vehicle Category,Axle Conf.,GVW_Min,GVW_Max,HDV class,Body,Trailer,EMS
 1    ,RigidTruck      ,6x2       ,0      ,99     ,9        ,B5  ,T2     ,D+ST1  ,Truck.vacc,RigidTrailer                     ,RigidSolo                    ,20/30/15               ,35/40/25           ,35                       ,                     ,15/20/10                   ,17.5/20/10               ,22.5/32.5                    ,22.5/30                    ,19300    ,26500        ,7100             ,17500                ,-             ,7100             ,-           ,-          ,-    ,-       ,-         ,-     ,
 1    ,Tractor         ,6x2       ,0      ,99     ,10       ,    ,ST1    ,ST1+T2 ,Truck.vacc,TractorSemitrailer               ,TractorSemitrailer           ,15/10/20               ,20/10/20           ,55                       ,50                   ,12.5/15/10                 ,15/15/10                 ,37.5/25                      ,35/25                      ,19300    ,26500        ,12900            ,17500                ,-             ,-                ,-           ,-          ,-    ,-       ,-         ,-     ,
 1    ,RigidTruck      ,6x4       ,0      ,99     ,11       ,B5  ,T2     ,D+ST1  ,Truck.vacc,RigidTrailer                     ,RigidSolo                    ,20/22.5/22.5           ,35/35/30           ,35                       ,                     ,15/20/10                   ,17.5/20/10               ,22.5/32.5                    ,22.5/30                    ,19300    ,26500        ,7100             ,17500                ,-             ,7100             ,7100        ,-          ,-    ,-       ,-         ,-     ,8.5
-1    ,Tractor         ,6x4       ,0      ,99     ,12       ,    ,ST1    ,ST1+T2 ,Truck.vacc,TractorSemitrailer               ,TractorSemitrailer           ,15/15/15               ,20/15/15           ,55                       ,50                   ,12.5/15/10                 ,15/15/10                 ,37.5/25                      ,35/25                      ,19300    ,26500        ,12900            ,17500                ,-             ,                 ,12900       ,-          ,-    ,-       ,-         ,-     ,8.8
+1    ,Tractor         ,6x4       ,0      ,99     ,12       ,    ,ST1    ,ST1+T2 ,Truck.vacc,TractorSemitrailer               ,TractorSemitrailer           ,15/15/15               ,20/15/15           ,55                       ,50                   ,12.5/15/10                 ,15/15/10                 ,37.5/25                      ,35/25                      ,19300    ,26500        ,12900            ,17500                ,-             ,-                 ,12900       ,-          ,-    ,-       ,-         ,-     ,8.8
 0    ,RigidTruck      ,6x6       ,0      ,99     ,13       ,    ,       ,       ,Truck.vacc,                                 ,RigidSolo                    ,                       ,                   ,                         ,                     ,                           ,                         ,                             ,                           ,-        ,-            ,-                ,-                    ,-             ,-                ,???         ,-          ,-    ,-       ,-         ,-     ,
 0    ,Tractor         ,6x6       ,0      ,99     ,14       ,    ,       ,       ,Truck.vacc,                                 ,TractorSemitrailer           ,                       ,                   ,                         ,                     ,                           ,                         ,                             ,                           ,-        ,-            ,-                ,-                    ,-             ,-                ,???         ,-          ,-    ,-       ,-         ,-     ,
 0    ,RigidTruck      ,8x2       ,0      ,99     ,15       ,    ,       ,       ,Truck.vacc,                                 ,RigidSolo                    ,                       ,                   ,                         ,                     ,                           ,                         ,                             ,                           ,-        ,-            ,???              ,-                    ,-             ,-                ,-           ,-          ,-    ,-       ,-         ,-     ,
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
index fa53eeaeb56113ab2ce419f1a4a8e4b67d4a8aa6..f47fb44a2e292b754dca61595672b9119ac5b739 100644
--- a/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
+++ b/VectoCore/VectoCoreTest/Models/Declaration/DeclarationDataTest.cs
@@ -568,7 +568,7 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 		TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_6x4, 40000, 0, VehicleClass.Class11,
 			new[] { 101.4, 142.9, 51.9, 142.9, 51.9, 51.9 }),
 		TestCase(VehicleCategory.Tractor, AxleConfiguration.AxleConfig_6x4, 99000, 0, VehicleClass.Class12,
-			new[] { 91.0, 140.5, 91.0, 140.5, 91.0, 91.0 }),
+			new[] { 91.0, 140.5, 91.0, 140.5, 91.0 }),
 		TestCase(VehicleCategory.RigidTruck, AxleConfiguration.AxleConfig_8x4, 99000, 0, VehicleClass.Class16,
 			new[] { 0.0 })
 		]
@@ -836,26 +836,26 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			Assert.AreEqual(4, segment.Missions.Length);
 
 			AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.25 },
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.1, 0.2 },
 				trailerAxleWeightDistribution: new[] { 0.55 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 19300,
 				trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000);
 
 			AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.LongHaulEMS,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.2 },
-				trailerAxleWeightDistribution: new[] { 0.40, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.125, 0.15, 0.1 },
+				trailerAxleWeightDistribution: new[] { 0.375, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0,
 				refLoad: 26500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true);
 
 			AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.25, 0.25 },
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.1, 0.2 },
 				trailerAxleWeightDistribution: new[] { 0.5 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 12900,
 				trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000);
 
 			AssertMission(segment.Missions[3], vehicleData: vehicleData, missionType: MissionType.RegionalDeliveryEMS,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.175, 0.25 },
-				trailerAxleWeightDistribution: new[] { 0.35, 0.225 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.15, 0.1 },
+				trailerAxleWeightDistribution: new[] { 0.35, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0,
 				refLoad: 17500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true);
 		}
@@ -921,14 +921,14 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 		}
 
 		/// <summary>
-		/// Segment 9: fixed reference weight, trailer always used
+		/// Segment 10: fixed reference weight, trailer always used
 		/// </summary>
 		[TestCase]
-		public void Segment16Test()
+		public void Segment12Test()
 		{
 			var vehicleData = new {
 				VehicleCategory = VehicleCategory.Tractor,
-				AxleConfiguration = AxleConfiguration.AxleConfig_4x2,
+				AxleConfiguration = AxleConfiguration.AxleConfig_6x4,
 				GrossVehicleMassRating = 18000.SI<Kilogram>(),
 				CurbWeight = 7500.SI<Kilogram>()
 			};
@@ -936,38 +936,68 @@ namespace TUGraz.VectoCore.Tests.Models.Declaration
 			var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration,
 				vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight);
 
-			Assert.AreEqual(VehicleClass.Class5, segment.VehicleClass);
+			Assert.AreEqual(VehicleClass.Class12, segment.VehicleClass);
 
 			var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile);
 			TestAcceleration(data);
 
-			Assert.AreEqual(4, segment.Missions.Length);
+			Assert.AreEqual(5, segment.Missions.Length);
 
 			AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.LongHaul,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.25 },
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.15, 0.15 },
 				trailerAxleWeightDistribution: new[] { 0.55 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 19300,
 				trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000);
 
 			AssertMission(segment.Missions[1], vehicleData: vehicleData, missionType: MissionType.LongHaulEMS,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.2 },
-				trailerAxleWeightDistribution: new[] { 0.40, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.125, 0.15, 0.1 },
+				trailerAxleWeightDistribution: new[] { 0.375, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0,
 				refLoad: 26500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true);
 
 			AssertMission(segment.Missions[2], vehicleData: vehicleData, missionType: MissionType.RegionalDelivery,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.25, 0.25 },
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.2, 0.15, 0.15 },
 				trailerAxleWeightDistribution: new[] { 0.5 }, trailerAxleCount: new[] { 3 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0 }, trailerType: new[] { TrailerType.ST1 }, minLoad: 0, refLoad: 12900,
 				trailerGrossVehicleWeight: new[] { 24000.0 }, deltaCdA: 0, maxLoad: 25000);
 
 			AssertMission(segment.Missions[3], vehicleData: vehicleData, missionType: MissionType.RegionalDeliveryEMS,
-				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.175, 0.25 },
-				trailerAxleWeightDistribution: new[] { 0.35, 0.225 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
+				cosswindCorrection: "TractorSemitrailer", axleWeightDistribution: new[] { 0.15, 0.15, 0.1 },
+				trailerAxleWeightDistribution: new[] { 0.35, 0.25 }, trailerAxleCount: new[] { 3, 2 }, bodyCurbWeight: 0,
 				trailerCurbWeight: new[] { 7500.0, 5400 }, trailerType: new[] { TrailerType.ST1, TrailerType.T2 }, minLoad: 0,
 				refLoad: 17500, trailerGrossVehicleWeight: new[] { 24000.0, 18000 }, deltaCdA: 0.6, maxLoad: 39600, ems: true);
 		}
 
+		/// <summary>
+		/// Segment 9: fixed reference weight, trailer always used
+		/// </summary>
+		[TestCase]
+		public void Segment16Test()
+		{
+			var vehicleData = new {
+				VehicleCategory = VehicleCategory.RigidTruck,
+				AxleConfiguration = AxleConfiguration.AxleConfig_8x4,
+				GrossVehicleMassRating = 24000.SI<Kilogram>(),
+				CurbWeight = 7500.SI<Kilogram>()
+			};
+
+			var segment = DeclarationData.Segments.Lookup(vehicleData.VehicleCategory, vehicleData.AxleConfiguration,
+				vehicleData.GrossVehicleMassRating, vehicleData.CurbWeight);
+
+			Assert.AreEqual(VehicleClass.Class16, segment.VehicleClass);
+
+			var data = AccelerationCurveReader.ReadFromStream(segment.AccelerationFile);
+			TestAcceleration(data);
+
+			Assert.AreEqual(1, segment.Missions.Length);
+
+			AssertMission(segment.Missions[0], vehicleData: vehicleData, missionType: MissionType.Construction,
+				cosswindCorrection: "RigidSolo", axleWeightDistribution: new[] { 0.25, 0.25, 0.25, 0.25 },
+				trailerAxleWeightDistribution: new double[] { }, trailerAxleCount: new int[] { }, bodyCurbWeight: 0,
+				trailerCurbWeight: new double[] { }, trailerType: new TrailerType[] { }, minLoad: 0, refLoad: 12900,
+				trailerGrossVehicleWeight: new double[] { }, deltaCdA: 0, maxLoad: 16500);
+		}
+
 		public static void AssertMission(Mission m, dynamic vehicleData, MissionType missionType, string cosswindCorrection,
 			double[] axleWeightDistribution, double[] trailerAxleWeightDistribution, int[] trailerAxleCount,
 			double bodyCurbWeight,
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
index 02fa155a51be0e1bb66f478da39ba3cdd739cd7f..4b58e14ce017623ed4685fa598d5cd2a8ec072ca 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
@@ -138,7 +138,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
 			var axleGearData = MockSimulationDataFactory.CreateAxleGearDataFromFile(AxleGearValidRangeDataFile);
 			var axleGear = new AxleGear(vehicle, axleGearData);
-			Assert.AreEqual(0, axleGear.Validate(ExecutionMode.Declaration, null).Count);
+			Assert.AreEqual(0, axleGear.Validate(ExecutionMode.Declaration, null, false).Count);
 		}
 
 		[TestCase]
@@ -147,7 +147,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 			var vehicle = new VehicleContainer(ExecutionMode.Engineering);
 			var axleGearData = MockSimulationDataFactory.CreateAxleGearDataFromFile(AxleGearInvalidRangeDataFile);
 			var axleGear = new AxleGear(vehicle, axleGearData);
-			var errors = axleGear.Validate(ExecutionMode.Declaration, null);
+			var errors = axleGear.Validate(ExecutionMode.Declaration, null, false);
 			Assert.AreEqual(1, errors.Count);
 		}
 
diff --git a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
index 16c38c5376f75249f64844e5781c99deddeabe9a..321fbc7cfebf534b6fed750d60474558e27d0780 100644
--- a/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
+++ b/VectoCore/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
@@ -94,7 +94,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			};
 			data.FullLoadCurve.EngineData = data;
 
-			var results = data.Validate(ExecutionMode.Declaration, null);
+			var results = data.Validate(ExecutionMode.Declaration, null, false);
 			Assert.IsFalse(results.Any(), "Validation Failed: " + string.Join("; ", results.Select(r => r.ErrorMessage)));
 			Assert.IsTrue(data.IsValid());
 		}
@@ -129,7 +129,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 
 			var engineData = dao.CreateEngineData(data, null);
 
-			var results = engineData.Validate(ExecutionMode.Declaration, null);
+			var results = engineData.Validate(ExecutionMode.Declaration, null, false);
 			Assert.IsFalse(results.Any(), "Validation failed: " + string.Join("; ", results.Select(r => r.ErrorMessage)));
 			Assert.IsTrue(engineData.IsValid());
 		}
@@ -167,7 +167,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 
 			var engineData = dao.CreateEngineData(data, GearboxType.AMT);
 
-			var results = engineData.Validate(ExecutionMode.Declaration, null);
+			var results = engineData.Validate(ExecutionMode.Declaration, null, false);
 			Assert.IsFalse(results.Any(), "Validation failed: " + string.Join("; ", results.Select(r => r.ErrorMessage)));
 
 			Assert.IsTrue(engineData.IsValid());
@@ -206,10 +206,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 					},
 				}
 			};
-			var result = vehicleData.Validate(ExecutionMode.Engineering, null);
+			var result = vehicleData.Validate(ExecutionMode.Engineering, null, false);
 			Assert.IsTrue(!result.Any(), "validation should have succeded but failed." + string.Concat(result));
 
-			result = vehicleData.Validate(ExecutionMode.Declaration, null);
+			result = vehicleData.Validate(ExecutionMode.Declaration, null, false);
 			Assert.IsTrue(result.Any(), "validation should have failed, but succeeded.");
 		}
 
@@ -276,10 +276,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 				AxleGearData = axleGearData
 			};
 
-			var results = data.Validate(ExecutionMode.Declaration, null);
+			var results = data.Validate(ExecutionMode.Declaration, null, false);
 			Assert.IsTrue(results.Any(), "Validation should have failed, but succeded.");
 
-			results = vehicleData.Validate(ExecutionMode.Engineering, null);
+			results = vehicleData.Validate(ExecutionMode.Engineering, null, false);
 			Assert.IsTrue(!results.Any());
 		}
 
@@ -315,7 +315,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 				AxleGearData = axleGearData
 			};
 
-			var results = data.Validate(ExecutionMode.Declaration, null);
+			var results = data.Validate(ExecutionMode.Declaration, null, false);
 			Assert.IsTrue(results.Any(), "Validation should have failed, but succeded.");
 		}
 
@@ -325,7 +325,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 		[TestMethod]
 		public void Validation_Test()
 		{
-			var results = new DataObject().Validate(ExecutionMode.Declaration, null);
+			var results = new DataObject().Validate(ExecutionMode.Declaration, null, false);
 
 			// every field and property should be tested except private parent fields and properties and 
 			// (4*4+1) * 2 = 17*2= 34 - 4 private parent fields (+2 public field and property which are tested twice) = 32
@@ -343,7 +343,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 				}
 			};
 
-			var results = container.Validate(ExecutionMode.Declaration, null);
+			var results = container.Validate(ExecutionMode.Declaration, null, false);
 			Assert.AreEqual(1, results.Count);
 		}
 
@@ -366,7 +366,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 					VectoCSVFile.ReadStream(
 						InputDataHelper.InputDataAsStream("engine torque,downshift rpm [rpm],upshift rpm [rpm]	", vgbs)));
 
-			var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT);
+			var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT, false);
 			Assert.IsFalse(results.Any());
 
 			// change columns
@@ -375,7 +375,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 					VectoCSVFile.ReadStream(
 						InputDataHelper.InputDataAsStream("engine torque,upshift rpm [rpm], downshift rpm [rpm]	", vgbs)));
 
-			results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT);
+			results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.MT, false);
 			Assert.IsTrue(results.Any());
 		}
 
@@ -395,7 +395,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 					VectoCSVFile.ReadStream(
 						InputDataHelper.InputDataAsStream("engine torque,downshift rpm [rpm],upshift rpm [rpm]	", vgbs)));
 
-			var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial);
+			var results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial, false);
 			Assert.IsFalse(results.Any());
 
 			// change columns
@@ -404,7 +404,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 					VectoCSVFile.ReadStream(
 						InputDataHelper.InputDataAsStream("engine torque,upshift rpm [rpm], downshift rpm [rpm]	", vgbs)));
 
-			results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial);
+			results = shiftPolygon.Validate(ExecutionMode.Declaration, GearboxType.ATSerial, false);
 			Assert.IsFalse(results.Any());
 		}