diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
index 29c5840b343aae89e852eeee13dbb4efb18726b6..dceb6d9d50d113abc5435f8fa5a104d33fa6fed1 100644
--- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationVehicleDataProvider.cs
@@ -817,7 +817,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider
 
 		public override TankSystem? TankSystem
 		{
-			get { return GetString(XMLNames.Vehicle_NgTankSystem).ParseEnum<TankSystem>(); }
+			get { return ElementExists(XMLNames.Vehicle_NgTankSystem) ? GetString(XMLNames.Vehicle_NgTankSystem).ParseEnum<TankSystem>() : (TankSystem?)null; }
 		}
 
 		public override int NumberOfPassengersLowerDeck
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
index eb60207f4049016ee70dbdfd06c8794d5272729f..830ca75cd998b320297dd374373aec0cda4bf5a3 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
@@ -286,7 +286,11 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 							? M7.SmartElectricalAndPneumaticAuxAltPowerGenAtCrank
 							: M7.SmartElectricalOnlyAuxAltPowerGenAtCrank) * M0.AlternatorsEfficiency *
 						auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency;
-					ElectricStorage.Request((generatedElPower - ElectricPowerConsumerSum) * essFactor, seconds);
+					var energy = (generatedElPower - ElectricPowerConsumerSum) * essFactor * seconds;
+					var maxCharge = (ElectricStorage.SOC - 1) * ElectricStorage.Capacity;
+					var maxDischarge = ElectricStorage.SOC * ElectricStorage.Capacity;
+					var batEnergy = energy.LimitTo(maxCharge, maxDischarge);
+					ElectricStorage.Request(batEnergy);
 				}
 				Signals.CurrentCycleTimeInSeconds += seconds.Value();
 			} catch (Exception ex) {
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs
index 2353d3424cd040ec5d31fe1aa2fcf6a5681c6704..a7b5b9fc981d6b79a5c8a25736ce51e396d87420 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs
@@ -1,9 +1,10 @@
-using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics;
 
 namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics
 {
-	public class SimpleBattery : ISimpleBattery
+	public class SimpleBattery : LoggingObject, ISimpleBattery
 	{
 		public SimpleBattery(WattSecond capacity, double soc = 0.9)
 		{
@@ -18,9 +19,17 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric
 
 		#endregion
 
-		public void Request(Watt watt, Second seconds)
+		public void Request(WattSecond energy)
 		{
-			SOC += watt * seconds / Capacity;
+			SOC += energy / Capacity;
+			if (SOC > 1) {
+				Log.Warn("SOC > 1!");
+				SOC = 1;
+			}
+			if (SOC < 0) {
+				Log.Warn("SOC < 0!");
+				SOC = 0;
+			}
 		}
 	}
 }
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs
index 8bb6bf9eb9c03fe36827705cb5ac241cb3dfe2c9..c33d28d8f08fdd26bccfd74a604c548d2b1ffe09 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs
@@ -4,6 +4,6 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.El
 	public interface ISimpleBattery {
 		double SOC { get; }
 		WattSecond Capacity { get; }
-		void Request(Watt watt, Second seconds);
+		void Request(WattSecond energy);
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
index 3d83f90df5bec6c576ee1c445c06fafdface4cce..0212cc41b9c1760bee98f058cd6c5e4bfca10285 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
@@ -54,6 +54,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		private double EngineStopStartUtilityFactor;
 		private bool SmartElectricSystem;
+		private IAuxiliaryConfig AuxCfg;
 
 		//private readonly FuelConsumptionAdapter _fcMapAdapter;
 
@@ -67,7 +68,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			PreviousState = new BusAuxState { AngularSpeed = container.EngineIdleSpeed };
 
 			AdditionalAux = additionalAux;
-
+			AuxCfg = auxiliaryConfig;
 			DataBus = container;
 
 			var tmpAux = new BusAuxiliaries.BusAuxiliaries(container.ModalData);
@@ -123,7 +124,20 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			var signals = Auxiliaries.Signals;
 			signals.EngineStopped = false; 
 			signals.VehicleStopped = false;
-			return GetBusAuxPowerDemand(time, simulationInterval, 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>(), engineSpeed, true);
+			var retVal =  GetBusAuxPowerDemand(time, simulationInterval, 0.SI<NewtonMeter>(), 0.SI<NewtonMeter>(), engineSpeed, true);
+
+			if (!SmartElectricSystem) {
+				return retVal;
+			}
+
+			var batteryPwr = Auxiliaries.BatterySOC * AuxCfg.ElectricalUserInputsConfig.ElectricStorageCapacity / simulationInterval;
+			var esSum = Auxiliaries.ElectricPowerConsumerSum;
+			//if (batteryPwr < esSum) {
+				retVal += (esSum ) / AuxCfg.ElectricalUserInputsConfig.AlternatorGearEfficiency /
+						AuxCfg.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>());
+			//}
+
+			return retVal;
 		}
 
 		public Watt PowerDemandEngineOff(Second absTime, Second dt)
@@ -145,7 +159,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			CurrentState.PowerDemand = ((AdditionalAux?.PowerDemandEngineOn(absTime, dt, DataBus.EngineIdleSpeed) ?? 0.SI<Watt>()) +
 										busAuxPowerDemand) * (1 - EngineStopStartUtilityFactor);
-
+			//CurrentState.ESPowerGeneratedICE_On = Auxiliaries.ElectricPowerGenerated;
+			//CurrentState.ESPowerMech = Auxiliaries.ElectricPowerDemandMech;
 			// 
 			signals.EngineStopped = !DataBus.IgnitionOn;
 			signals.VehicleStopped = DataBus.VehicleStopped;
@@ -158,15 +173,21 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		}
 
 
-		protected internal virtual void DoWriteModalResults(IModalDataContainer container)
+		protected internal virtual void DoWriteModalResults(Second absTime, Second dt, IModalDataContainer container)
 		{
 			var essUtilityFactor = 1.0;
 			if (!DataBus.IgnitionOn) {
 				essUtilityFactor = 1 - EngineStopStartUtilityFactor;
 			}
 
+			//var signals = Auxiliaries.Signals;
+			//signals.EngineStopped = !DataBus.IgnitionOn;
+			//signals.VehicleStopped = DataBus.VehicleStopped;
+
 			// cycleStep has to be called here and not in DoCommit, write is called before Commit!
-			Auxiliaries.CycleStep(CurrentState.dt, essUtilityFactor);
+			var oldSOC = Auxiliaries.BatterySOC;
+			Auxiliaries.CycleStep(CurrentState.dt, EngineStopStartUtilityFactor);
+			var newSOC = Auxiliaries.BatterySOC;
 
 			//CurrentState.TotalFuelConsumption = Auxiliaries.TotalFuel;
 			container[ModalResultField.P_aux] = CurrentState.PowerDemand;
@@ -179,6 +200,16 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 			if (SmartElectricSystem) {
 				container[ModalResultField.BatterySOC] = Auxiliaries.BatterySOC * 100.0;
+
+				container[ModalResultField.P_busAux_ES_generated] = essUtilityFactor * Auxiliaries.ElectricPowerConsumerSum;
+				container[ModalResultField.P_busAux_ES_sum_mech] = essUtilityFactor * Auxiliaries.ElectricPowerConsumerSum /
+																	AuxCfg.ElectricalUserInputsConfig.AlternatorGearEfficiency /
+																	AuxCfg.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>());
+				
+				var batteryPwr = (oldSOC - newSOC) * AuxCfg.ElectricalUserInputsConfig.ElectricStorageCapacity / dt;
+				if (batteryPwr.IsSmaller(Auxiliaries.ElectricPowerConsumerSum * EngineStopStartUtilityFactor)) {
+					// add to P_aux_ES
+				}
 			}
 
 			container[ModalResultField.Nl_busAux_PS_consumer] = Auxiliaries.PSDemandConsumer;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
index aec905d30536b4a0e08f12dc5b76485911c2f0e9..88a9cc41e2a67fcdb0a232c0c6f3083e50a1be20 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/CombustionEngine.cs
@@ -423,7 +423,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 				//var fcAAUX = fcWHTC;
 				var advancedAux = EngineAux as BusAuxiliariesAdapter;
 				if (advancedAux != null) {
-					advancedAux.DoWriteModalResults(container);
+					advancedAux.DoWriteModalResults(time, simulationInterval ,container);
 					//fcAAUX = advancedAux.AAuxFuelConsumption;
 				}
 				var fcFinal = fcWHTC; // fcAAUX;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs
index 3d042f6bb016631f7d1cb413b6c09aed6693347e..d26d5089cd27d6db016407427d55941fac91c8a8 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/StopStartCombustionEngine.cs
@@ -127,7 +127,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl {
 				var advancedAux = EngineAux as BusAuxiliariesAdapter;
 				if (advancedAux != null) {
 					//throw new VectoException("Engine Stop/Start with advanced auxiliaries not supported!");
-					advancedAux.DoWriteModalResults(container);
+					advancedAux.DoWriteModalResults(time, simulationInterval, container);
 					//fcAAUX = advancedAux.AAuxFuelConsumption;
 				}
 
diff --git a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs
index 8bc8e3596668b96c8e83b01acb576df910f64f80..b48074fe15e729b86a70a0b7fd8c28de8ef569dd 100644
--- a/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs
+++ b/VectoCore/VectoCoreTest/Integration/BusAuxiliaries/AuxDemandTest.cs
@@ -97,7 +97,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries
 				var torque = busAux.TorqueDemand(0.SI<Second>(), 1.SI<Second>(), engineDrivelinePower / engineSpeed,
 					(internalPower * 1000).SI<Watt>() / engineSpeed, engineSpeed);
 				Assert.AreEqual(6087.03221, (torque * engineSpeed).Value(), 1e-3);
-				busAux.DoWriteModalResults(modalData);
+				busAux.DoWriteModalResults(0.SI<Second>(), 1.SI<Second>(), modalData);
 				busAux.DoCommitSimulationStep();
 			}
 
@@ -110,7 +110,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries
 				var torque = busAux.TorqueDemand(0.SI<Second>(), 1.SI<Second>(), engineDrivelinePower / engineSpeed,
 					(internalPower * 1000).SI<Watt>() / engineSpeed, engineSpeed);
 				Assert.AreEqual(8954.1429, (torque * engineSpeed).Value(), 1e-3);
-				busAux.DoWriteModalResults(modalData);
+				busAux.DoWriteModalResults(0.SI<Second>(), 1.SI<Second>(), modalData);
 				busAux.DoCommitSimulationStep();
 			}
 
@@ -123,7 +123,7 @@ namespace TUGraz.VectoCore.Tests.Integration.BusAuxiliaries
 				var torque = busAux.TorqueDemand(0.SI<Second>(), 1.SI<Second>(), engineDrivelinePower / engineSpeed,
 					(internalPower * 1000).SI<Watt>() / engineSpeed, engineSpeed);
 				Assert.AreEqual(6087.03221, (torque * engineSpeed).Value(), 1e-3);
-				busAux.DoWriteModalResults(modalData);
+				busAux.DoWriteModalResults(0.SI<Second>(), 1.SI<Second>(), modalData);
 				busAux.DoCommitSimulationStep();
 			}