diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs
index f6c4aadbdf60637d2438a93888e85717588384e6..8a91493c767b504df40ed4a44273c8754fd6ab6a 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs
@@ -38,7 +38,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries {
 
 		//IFuelConsumptionMap FuelMap { get; }
 
-		ISignals Signals { get; }
+		//ISignals Signals { get; }
 
 		// Persistance Functions
 			//bool Save(string filePath);
diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs
index 3ed13166bf000735cc5ba47c1c6f1cb869a83cef..57e7b1470ba6e612818a68e00a5aa411e4454185 100644
--- a/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs
+++ b/VectoCommon/VectoCommon/BusAuxiliaries/IElectricsUserInputsConfig.cs
@@ -93,5 +93,9 @@ namespace TUGraz.VectoCommon.BusAuxiliaries
 		/// 	<returns>Stored Energy Efficiency</returns>
 		/// 	<remarks></remarks>
 		double StoredEnergyEfficiency { get; }
+
+		Watt MaxAlternatorPower { get; }
+
+		WattSecond ElectricStorageCapacity { get; }
 	}
 }
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 4bcbfa8db4e81d15e3b44ce09fd3be8af03ffc46..7a6f4467fe902268d7d7258ef6805f03cc36c0b6 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -965,4 +965,40 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		#endregion
 	}
+
+
+	public class JSONInputDataSingleBusV6 : JSONFile, ISingleBusInputDataProvider
+	{
+		private readonly IXMLInputDataReader _xmlInputReader;
+
+		public JSONInputDataSingleBusV6(JObject data, string filename, bool tolerateMissing = false) : base(
+			data, filename, tolerateMissing)
+		{
+			var kernel = new StandardKernel(new VectoNinjectModule());
+			_xmlInputReader = kernel.Get<IXMLInputDataReader>();
+
+			var primaryInputData = Path.Combine(BasePath,  Body.GetEx<string>("PrimaryVehicle"));
+			var completedInputData = Path.Combine(BasePath,  Body.GetEx<string>("CompletedVehicle"));
+
+			PrimaryVehicle = CreateReader(primaryInputData);
+			CompletedVehidle = CreateReader(completedInputData);
+		}
+
+		private IVehicleDeclarationInputData CreateReader(string vehicleFileName)
+		{
+			if (Path.GetExtension(vehicleFileName) != ".xml") {
+				throw new VectoException("unsupported vehicle file format {0}", vehicleFileName);
+			}
+
+			return _xmlInputReader.CreateDeclaration(vehicleFileName).JobInputData.Vehicle;
+
+		}
+
+		#region Implementation of ISingleBusInputDataProvider
+
+		public IVehicleDeclarationInputData PrimaryVehicle { get; }
+		public IVehicleDeclarationInputData CompletedVehidle { get; }
+
+		#endregion
+	}
 }
diff --git a/VectoCore/VectoCore/InputData/Impl/InputData.cs b/VectoCore/VectoCore/InputData/Impl/InputData.cs
index c943212056662cd3b6c18df1b40ef5997caa69ce..fa2a078cc3637deabe9875a5d1f9e4c3589b56ad 100644
--- a/VectoCore/VectoCore/InputData/Impl/InputData.cs
+++ b/VectoCore/VectoCore/InputData/Impl/InputData.cs
@@ -205,14 +205,7 @@ namespace TUGraz.VectoCore.InputData.Impl
 		#endregion
 	}
 
-	public class ResultCardDeclarationInputData : IResultCardDeclarationInputData
-	{
-		public IList<IResultCardEntry> Idle { get; internal set; }
-		public IList<IResultCardEntry> Traction { get; internal set; }
-		public IList<IResultCardEntry> Overrun { get; internal set; }
-	}
-
-
+	
 	public class ResultInputData : IResultsInputData
 	{
 		public string Status { get; internal set; }
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
index 71b4b48708608c9273037df31ebc7938e62eab0d..327f954329b4326c88470921412be568e4d94aa1 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs
@@ -110,6 +110,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
 				ResultCardOverrun = new DummyResultCard(),
 				ResultCardTraction = new DummyResultCard(),
 				AlternatorGearEfficiency = Constants.BusAuxiliaries.ElectricSystem.AlternatorGearEfficiency,
+				MaxAlternatorPower = busAux.ElectricSupply.MaxAlternatorPower,
+				ElectricStorageCapacity = busAux.ElectricSupply.ElectricStorageCapacity
 			};
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs
new file mode 100644
index 0000000000000000000000000000000000000000..20b224d8c6b9a5a78b859e676cb1b20883415c84
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs
@@ -0,0 +1,89 @@
+using System;
+using System.Collections.Generic;
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+
+namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter {
+	public class DeclarationDataAdapterSingleBus : IDeclarationDataAdapter {
+
+
+		#region Implementation of IDeclarationDataAdapter
+
+		public DriverData CreateDriverData()
+		{
+			throw new NotImplementedException();
+		}
+
+		public VehicleData CreateVehicleData(IVehicleDeclarationInputData vehicle, Mission mission, Kilogram loading)
+		{
+			throw new NotImplementedException();
+		}
+
+		public AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragData, Mission mission, Segment segment)
+		{
+			throw new NotImplementedException();
+		}
+
+		public AxleGearData CreateAxleGearData(IAxleGearInputData axlegearData)
+		{
+			throw new NotImplementedException();
+		}
+
+		public AngledriveData CreateAngledriveData(IAngledriveInputData angledriveData)
+		{
+			throw new NotImplementedException();
+		}
+
+		public CombustionEngineData CreateEngineData(
+			IVehicleDeclarationInputData vehicle, IEngineModeDeclarationInputData engineMode, Mission mission)
+		{
+			throw new NotImplementedException();
+		}
+
+		public GearboxData CreateGearboxData(
+			IVehicleDeclarationInputData inputData, VectoRunData runData, IShiftPolygonCalculator shiftPolygonCalc)
+		{
+			throw new NotImplementedException();
+		}
+
+		public ShiftStrategyParameters CreateGearshiftData(GearboxData gbx, double axleRatio, PerSecond engineIdlingSpeed)
+		{
+			throw new NotImplementedException();
+		}
+
+		public RetarderData CreateRetarderData(IRetarderInputData retarderData)
+		{
+			throw new NotImplementedException();
+		}
+
+		public PTOData CreatePTOTransmissionData(IPTOTransmissionInputData ptoData)
+		{
+			throw new NotImplementedException();
+		}
+
+		public IList<VectoRunData.AuxData> CreateAuxiliaryData(
+			IAuxiliariesDeclarationInputData auxData, IBusAuxiliariesDeclarationData busAuxData, MissionType missionType,
+			VehicleClass vehicleClass, Meter vehicleLength)
+		{
+			throw new NotImplementedException();
+		}
+
+		public AxleGearData CreateDummyAxleGearData(IGearboxDeclarationInputData gbxData)
+		{
+			throw new NotImplementedException();
+		}
+
+		#endregion
+
+		public IAuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, IVehicleDeclarationInputData completedVehicle, VectoRunData runData)
+		{
+			throw new NotImplementedException();
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs
new file mode 100644
index 0000000000000000000000000000000000000000..842ce0c36661ec3598391a5b94e532977071d843
--- /dev/null
+++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeSingleBusVectoRunDataFactory.cs
@@ -0,0 +1,75 @@
+using System.Collections.Generic;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Models;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter;
+using TUGraz.VectoCore.InputData.Reader.Impl;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.OutputData;
+
+namespace TUGraz.VectoCore.Models.Simulation.Impl {
+	internal class DeclarationModeSingleBusVectoRunDataFactory : DeclarationModeBusVectoRunDataFactory
+	{
+		protected new DeclarationDataAdapterSingleBus _dao = new DeclarationDataAdapterSingleBus();
+		private ISingleBusInputDataProvider _singleBusInputData;
+
+		public DeclarationModeSingleBusVectoRunDataFactory(ISingleBusInputDataProvider singleBusInputData, IDeclarationReport report) : base(singleBusInputData, report)
+		{
+			_singleBusInputData = singleBusInputData;
+		}
+
+		#region Implementation of IVectoRunDataFactory
+
+		protected override IDeclarationDataAdapter DataAdapter { get { return _dao; } }
+
+
+		protected override VectoRunData CreateVectoRunData(IVehicleDeclarationInputData vehicle, int modeIdx, Mission mission, KeyValuePair<LoadingType, Kilogram> loading)
+		{
+			var engine = vehicle.Components.EngineInputData;
+			var engineModes = engine.EngineModes;
+			var engineMode = engineModes[modeIdx];
+			DrivingCycleData cycle;
+			lock (CyclesCacheLock) {
+				if (CyclesCache.ContainsKey(mission.MissionType)) {
+					cycle = CyclesCache[mission.MissionType];
+				} else {
+					cycle = DrivingCycleDataReader.ReadFromStream(mission.CycleFile, CycleType.DistanceBased, "", false);
+					CyclesCache.Add(mission.MissionType, cycle);
+				}
+			}
+			var simulationRunData = new VectoRunData {
+				Loading = loading.Key,
+				VehicleData = DataAdapter.CreateVehicleData(vehicle, mission, loading.Value),
+				AirdragData = _dao.CreateAirdragData(_singleBusInputData.CompletedVehicle.Components.AirdragInputData, mission, new Segment()),
+				EngineData = DataAdapter.CreateEngineData(InputDataProvider.JobInputData.Vehicle, engineMode, mission),
+				GearboxData = _gearboxData,
+				AxleGearData = _axlegearData,
+				AngledriveData = _angledriveData,
+				Aux = DataAdapter.CreateAuxiliaryData(vehicle.Components.AuxiliaryInputData,
+													vehicle.Components.BusAuxiliaries, mission.MissionType, _segment.VehicleClass, vehicle.Length ?? mission.BusParameter.VehicleLength),
+				Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()),
+				Retarder = _retarderData,
+				DriverData = _driverdata,
+				ExecutionMode = ExecutionMode.Declaration,
+				JobName = InputDataProvider.JobInputData.JobName,
+				ModFileSuffix = (engineModes.Count > 1 ? string.Format("_EngineMode{0}_", modeIdx) : "") + loading.Key.ToString(),
+				Report = Report,
+				Mission = mission,
+				InputDataHash = InputDataProvider.XMLHash,
+				SimulationType = SimulationType.DistanceCycle,
+				GearshiftParameters = _gearshiftData,
+				ShiftStrategy = InputDataProvider.JobInputData.ShiftStrategy
+			};
+			simulationRunData.EngineData.FuelMode = modeIdx;
+			simulationRunData.VehicleData.VehicleClass = _segment.VehicleClass;
+			simulationRunData.BusAuxiliaries = _dao.CreateBusAuxiliariesData(mission, _singleBusInputData.PrimaryVehicle, _singleBusInputData.CompletedVehicle, simulationRunData);
+			return simulationRunData;
+		}
+	}
+
+	#endregion
+}
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
index cddcc893d694ec12e667436a70ee1a27dc18f895..588955d56fb1964b3ec286e487578755184481cd 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs
@@ -19,6 +19,7 @@ using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC;
 using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics;
 using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces;
 using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules;
+using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics;
 using TUGraz.VectoCore.Models.BusAuxiliaries.Util;
 
 namespace TUGraz.VectoCore.Models.BusAuxiliaries
@@ -54,6 +55,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 		private IM6 M6;
 		private IM7 M7;
 		private IM8 M8;
+
+		private ISimpleBattery ElectricStorage;
+
 		//private IM9 M9;
 		//private IM10 M10;
 		//private IM11 M11;
@@ -79,9 +83,11 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 			//var BusDatabase = FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.HvacUserInputsConfig.BusDatabasePath);
 			var ssmTool = new SSMTOOL(auxConfig.SSMInputs);
 			
+			ElectricStorage = new SimpleBattery(auxCfg.ElectricalUserInputsConfig.ElectricStorageCapacity);
 
 			M0 = new M00Impl(auxConfig.ElectricalUserInputsConfig, Signals, ssmTool.ElectricalWAdjusted);
 
+
 			M0_5 = new M0_5Impl(
 				M0, auxConfig.ElectricalUserInputsConfig, Signals);
 
@@ -95,11 +101,13 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 			M4 = new M04Impl(
 				compressorMap, auxConfig.PneumaticUserInputsConfig.CompressorGearRatio,
 				auxConfig.PneumaticUserInputsConfig.CompressorGearEfficiency, Signals);
-			M5 = new M05Impl(
-				M0_5, auxConfig.ElectricalUserInputsConfig.PowerNetVoltage,
-				auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency);
+			//M5 = new M05Impl(
+			//	M0_5, auxConfig.ElectricalUserInputsConfig.PowerNetVoltage,
+			//	auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency);
+			M5 = new M05Impl_P0(M0, M1, M2, ElectricStorage, auxCfg.ElectricalUserInputsConfig, Signals);
 			M6 = new M06Impl(auxCfg.ElectricalUserInputsConfig, M1, M2, M3, M4, M5, Signals);
-			M7 = new M07Impl(M5, M6, Signals);
+			M7 = new M07Impl(
+				M0, M1, M2, M5, M6, ElectricStorage, auxCfg.ElectricalUserInputsConfig.AlternatorGearEfficiency, Signals);
 			M8 = new M08Impl(auxConfig, M1, M6, M7, Signals);
 
 			//M9 = new M09Impl(M1, M4, M6, M8, fuelMap, auxConfig.PneumaticAuxillariesConfig, Signals);
@@ -142,16 +150,14 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 		public Watt ElectricPowerGenerated
 		{
 			get {
-				if (!auxConfig.ElectricalUserInputsConfig.SmartElectrical) {
-					return ElectricPowerConsumerSum;
+				if (auxConfig.ElectricalUserInputsConfig.SmartElectrical) {
+					var retVal = auxConfig.PneumaticUserInputsConfig.SmartAirCompression
+						? M7.SmartElectricalAndPneumaticAuxAltPowerGenAtCrank
+						: M7.SmartElectricalOnlyAuxAltPowerGenAtCrank;
+					return retVal * M0.AlternatorsEfficiency * auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency;
 				}
 
-				var inIdle = Signals.Idle && (!Signals.ClutchEngaged || Signals.InNeutral);
-				return
-					(M6.OverrunFlag && Signals.ClutchEngaged && !Signals.InNeutral ? M6.SmartElecOnlyAltPowerGenAtCrank : 0.SI<Watt>())
-					+ (inIdle ? M5.AlternatorsGenerationPowerAtCrankIdle() : M5.AlternatorsGenerationPowerAtCrankTractionOn()) *
-					auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency *
-					auxConfig.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(Signals.EngineSpeed, 0.SI<Ampere>());
+				return M1.AveragePowerDemandAtAlternatorFromHVACElectrics + M2.AveragePowerDemandAtAlternatorFromElectrics;
 			}
 		}
 
@@ -225,7 +231,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 			get { return M1.AveragePowerDemandAtCrankFromHVACMechanicals; }
 		}
 
-		
+		public double BatterySOC { get { return ElectricStorage.SOC; } }
+
 
 		public string AuxiliaryName
 		{
@@ -249,6 +256,12 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries
 				//M9.CycleStep(seconds);
 				//M10.CycleStep(seconds);
 				//M11.CycleStep(seconds);
+				var generatedElPower =
+					(auxConfig.ElectricalUserInputsConfig.SmartElectrical && auxConfig.PneumaticUserInputsConfig.SmartAirCompression
+						? M7.SmartElectricalAndPneumaticAuxAltPowerGenAtCrank
+						: M7.SmartElectricalOnlyAuxAltPowerGenAtCrank) * M0.AlternatorsEfficiency *
+					auxConfig.ElectricalUserInputsConfig.AlternatorGearEfficiency;
+				ElectricStorage.Request(generatedElPower - ElectricPowerConsumerSum, seconds);
 
 				Signals.CurrentCycleTimeInSeconds += seconds.Value();
 			} catch (Exception ex) {
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs
index 82086e36c6fd4dbc29f89a849007304b277b29ce..cbd78ef7a77c71d1939417fd0605bc5942f28471 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/ElectricsUserInputsConfig.cs
@@ -33,7 +33,8 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electric
 		public Ampere AverageCurrentDemandInclBaseLoad { get; set; }
 		
 		public Ampere AverageCurrentDemandWithoutBaseLoad { get; set; }
-
+		public Watt MaxAlternatorPower { get; set; }
+		public WattSecond ElectricStorageCapacity { get; set; }
 	}
 
 }
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M05Impl_P0.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M05Impl_P0.cs
new file mode 100644
index 0000000000000000000000000000000000000000..c6b904127488d87e120a82588bdee2844dbf55af
--- /dev/null
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/M05Impl_P0.cs
@@ -0,0 +1,72 @@
+using TUGraz.VectoCommon.BusAuxiliaries;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules;
+using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics;
+
+namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics
+{
+	public class M05Impl_P0 : IM5_SmartAlternatorSetGeneration
+	{
+		private IM2_AverageElectricalLoadDemand _m02;
+		private IM1_AverageHVACLoadDemand _m01;
+		private ISimpleBattery _bat;
+		private IM0_NonSmart_AlternatorsSetEfficiency _m00;
+		private ISignals _signals;
+		private double _alternatorGearEfficiency;
+		private Watt _maxAlternatorPower;
+
+		public M05Impl_P0(IM0_NonSmart_AlternatorsSetEfficiency m0, IM1_AverageHVACLoadDemand m01, IM2_AverageElectricalLoadDemand m02, ISimpleBattery bat, IElectricsUserInputsConfig elCfg, ISignals signals)
+		{
+			_m00 = m0;
+			_m01 = m01;
+			_m02 = m02;
+			_bat = bat;
+			_maxAlternatorPower = elCfg.MaxAlternatorPower;
+			_alternatorGearEfficiency = elCfg.AlternatorGearEfficiency;
+			_signals = signals;
+		}
+
+		#region Implementation of IAbstractModule
+
+		public void ResetCalculations()
+		{
+			
+		}
+
+		#endregion
+
+		#region Implementation of IM5_SmartAlternatorSetGeneration
+
+		public Watt AlternatorsGenerationPowerAtCrankIdle()
+		{
+			return (_m02.GetAveragePowerAtCrankFromElectrics() + _m01.AveragePowerDemandAtCrankFromHVACElectrics).LimitTo(
+				0.SI<Watt>(), MaxAlternatorPowerAtCrank);
+		}
+
+		public Watt AlternatorsGenerationPowerAtCrankTractionOn()
+		{
+			return (_m02.GetAveragePowerAtCrankFromElectrics() + _m01.AveragePowerDemandAtCrankFromHVACElectrics).LimitTo(
+				0.SI<Watt>(), MaxAlternatorPowerAtCrank);
+		}
+
+		public Watt AlternatorsGenerationPowerAtCrankOverrun()
+		{
+			return (_maxAlternatorPower / _m00.AlternatorsEfficiency / _alternatorGearEfficiency).LimitTo(
+				0.SI<Watt>(), MaxAlternatorPowerAtCrank);
+		}
+
+		#endregion
+
+		private Watt MaxAlternatorPowerAtCrank
+		{
+			get {
+				var electricConsumer = _m01.AveragePowerDemandAtAlternatorFromHVACElectrics +
+										_m02.AveragePowerDemandAtAlternatorFromElectrics;
+				var maxBatChargePower = (1 - _bat.SOC) * _bat.Capacity / _signals.SimulationInterval + electricConsumer;
+
+				return maxBatChargePower.LimitTo(0.SI<Watt>(), _maxAlternatorPower) / _m00.AlternatorsEfficiency /
+						_alternatorGearEfficiency;
+			}
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2353d3424cd040ec5d31fe1aa2fcf6a5681c6704
--- /dev/null
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/Electrics/SimpleBattery.cs
@@ -0,0 +1,26 @@
+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 SimpleBattery(WattSecond capacity, double soc = 0.9)
+		{
+			Capacity = capacity;
+			SOC = soc;
+		}
+
+		#region Implementation of ISimpleBattery
+
+		public double SOC { get; private set; }
+		public WattSecond Capacity { get; }
+
+		#endregion
+
+		public void Request(Watt watt, Second seconds)
+		{
+			SOC += watt * seconds / Capacity;
+		}
+	}
+}
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M07Impl.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M07Impl.cs
index cdaf1bad9eca6907fef0f806f08dfd48056d6bf3..9b4989b4af8a1ea937eb563fcf5db149cae1e094 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M07Impl.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/M07Impl.cs
@@ -1,6 +1,7 @@
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Utils;
 using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules;
+using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics;
 
 namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl
 {
@@ -14,22 +15,40 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl
 		protected IM5_SmartAlternatorSetGeneration _m5;
 		protected IM6 _m6;
 		protected readonly ISignals _signals;
+		private ISimpleBattery _bat;
+		private IM2_AverageElectricalLoadDemand _m2;
+		private IM1_AverageHVACLoadDemand _m1;
+		private IM0_NonSmart_AlternatorsSetEfficiency _m0;
+		private double _alternatorGearEfficiency;
 
-		public M07Impl(IM5_SmartAlternatorSetGeneration m5, IM6 m6, ISignals signals)
+		public M07Impl(IM0_NonSmart_AlternatorsSetEfficiency m0, IM1_AverageHVACLoadDemand m1, IM2_AverageElectricalLoadDemand m2, IM5_SmartAlternatorSetGeneration m5, IM6 m6, ISimpleBattery bat, double alternatorGearEfficiency, ISignals signals)
 		{
 			_m5 = m5;
 			_m6 = m6;
 			_signals = signals;
+			_bat = bat;
+			_m0 = m0;
+			_m1 = m1;
+			_m2 = m2;
+			_alternatorGearEfficiency = alternatorGearEfficiency;
 		}
 
 		protected override void DoCalculate()
 		{
-			var idle = _signals.EngineSpeed <= _signals.EngineIdleSpeed &&
-						(!_signals.ClutchEngaged || _signals.InNeutral);
+			//var idle = _signals.EngineSpeed <= _signals.EngineIdleSpeed &&
+			//			(!_signals.ClutchEngaged || _signals.InNeutral);
 
-			var sw1 = idle
-				? _m5.AlternatorsGenerationPowerAtCrankIdle()
-				: _m5.AlternatorsGenerationPowerAtCrankTractionOn();
+			//var sw1 = idle
+			//	? _m5.AlternatorsGenerationPowerAtCrankIdle()
+			//	: _m5.AlternatorsGenerationPowerAtCrankTractionOn();
+
+			var maxBatPower = _bat.SOC * _bat.Capacity / _signals.SimulationInterval;
+			var elConsumerPower = _m1.AveragePowerDemandAtAlternatorFromHVACElectrics +
+								_m2.AveragePowerDemandAtAlternatorFromElectrics;
+
+			var sw1 = maxBatPower > elConsumerPower
+				? 0.SI<Watt>()
+				: (elConsumerPower - maxBatPower) / _m0.AlternatorsEfficiency / _alternatorGearEfficiency;
 
 			var c1 = _m6.OverrunFlag && _signals.ClutchEngaged && _signals.InNeutral == false;
 			var sw2 = c1 ? _m6.SmartElecAndPneumaticAltPowerGenAtCrank : sw1;
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs
new file mode 100644
index 0000000000000000000000000000000000000000..8bb6bf9eb9c03fe36827705cb5ac241cb3dfe2c9
--- /dev/null
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/DownstreamModules/Electrics/ISimpleBattery.cs
@@ -0,0 +1,9 @@
+using TUGraz.VectoCommon.Utils;
+
+namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics {
+	public interface ISimpleBattery {
+		double SOC { get; }
+		WattSecond Capacity { get; }
+		void Request(Watt watt, Second seconds);
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs
index 249e1764b70808c21216020144e03b768370165a..154801d4f23549de3cfba6e5b27b9f6e5a0dd482 100644
--- a/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs
+++ b/VectoCore/VectoCore/Models/BusAuxiliaries/Interfaces/IBusAuxiliaries.cs
@@ -11,6 +11,7 @@
 
 using TUGraz.VectoCommon.BusAuxiliaries;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Models.Simulation.Data;
 
 namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces
 {
@@ -104,6 +105,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces
 		Watt PSPowerCompressorDragOnly { get; }
 		Watt HVACMechanicalPowerConsumer { get; }
 		Watt HVACMechanicalPowerGenerated { get; }
+		double BatterySOC { get; }
 
 
 		///// <summary>
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
index a5ea09d349c669398aefaa7c981a3a0ab22165d0..d335e24b54c4b6d59bcdf673f1b261576c463568 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/ModalResultField.cs
@@ -288,6 +288,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 
 		[ModalResultField(typeof(SI), caption: "P_busAux_HVACmech_gen [kW]", outputFactor: 1e-3)] P_busAux_HVACmech_gen,
 
+		[ModalResultField(typeof(double), caption:"Battery SoC")] BatterySOC,
+
+
 		/// <summary>
 		///		[-]  true/false  indicate whether torque converter is locked or not (only applicable for gears with TC)
 		/// </summary>
@@ -364,7 +367,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 		[ModalResultField(typeof(SI), "P_WHR_el [kW]", outputFactor:1e-3)] P_WHR_el_map,
 		[ModalResultField(typeof(SI), "P_WHR_el_corr [kW]", outputFactor: 1e-3)] P_WHR_el_corr,
 		[ModalResultField(typeof(SI), "P_WHR_mech [kW]", outputFactor: 1e-3)] P_WHR_mech_map,
-		[ModalResultField(typeof(SI), "P_WHR_mech_corr [kW]", outputFactor: 1e-3)] P_WHR_mech_corr
+		[ModalResultField(typeof(SI), "P_WHR_mech_corr [kW]", outputFactor: 1e-3)] P_WHR_mech_corr,
 	}
 
 	[AttributeUsage(AttributeTargets.Field)]
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
index a9bdd2c1e85dc8f105decb3bebf950a0572f97cc..f3d397b1a38fb7e9f2addef2065481abdf83392c 100644
--- a/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Impl/BusAuxiliariesAdapter.cs
@@ -160,6 +160,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 			container[ModalResultField.P_busAux_ES_generated] = Auxiliaries.ElectricPowerGenerated;
 			container[ModalResultField.P_busAux_ES_sum_mech] = Auxiliaries.ElectricPowerDemandMech;
 
+			container[ModalResultField.BatterySOC] = Auxiliaries.BatterySOC * 100.0;
+
 			container[ModalResultField.Nl_busAux_PS_consumer] = Auxiliaries.PSDemandConsumer;
 			container[ModalResultField.Nl_busAux_PS_generated] = Auxiliaries.PSAirGenerated;
 			container[ModalResultField.Nl_busAux_PS_generated_alwaysOn] = Auxiliaries.PSAirGeneratedAlwaysOn;
diff --git a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
index edc47df58c33ece71acac1a12c79cac43d095d89..4f57ddf918968d7fe0dfea3b1cd24b5d228543d5 100644
--- a/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/ModalDataContainer.cs
@@ -404,6 +404,7 @@ namespace TUGraz.VectoCore.OutputData
 							ModalResultField.P_busAux_ES_consumer_sum,
 							ModalResultField.P_busAux_ES_sum_mech,
 							ModalResultField.P_busAux_ES_generated,
+							ModalResultField.BatterySOC,
 							ModalResultField.P_busAux_HVACmech_consumer,
 							ModalResultField.P_busAux_HVACmech_gen,
 							ModalResultField.Nl_busAux_PS_consumer,
diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj
index 0c2b8ef23b2395234a8fe8164a1395c7e0cdd3c5..7cecd0a652b6825ba85aedd0a64a3025a1c4ee2b 100644
--- a/VectoCore/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore/VectoCore.csproj
@@ -275,6 +275,9 @@
     <Compile Include="InputData\FileIO\XML\Declaration\IXMLDeclarationInputDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\IXMLInputDataReader.cs" />
     <Compile Include="InputData\FileIO\XML\XMLInputDataNinjectModule.cs" />
+    <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\SimpleBattery.cs" />
+    <Compile Include="Models\BusAuxiliaries\Interfaces\DownstreamModules\Electrics\ISimpleBattery.cs" />
+    <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\M05Impl_P0.cs" />
     <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\Electrics\SimpleAlternator.cs" />
     <Compile Include="Models\BusAuxiliaries\DownstreamModules\Impl\HVAC\TechnologyBenefits.cs" />
     <Compile Include="Models\Declaration\ADASCombination.cs" />
diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/vecto_vehicle-primary_heavyBus.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/vecto_vehicle-primary_heavyBus.xml
index e4a6d99d426647add3978e1b34e6667846d4fa50..d081ce1d2fefbcf295858909d41688071b5065a0 100644
--- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/vecto_vehicle-primary_heavyBus.xml
+++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/vecto_vehicle-primary_heavyBus.xml
@@ -3265,9 +3265,9 @@
 					</SteeringPump>
 					<ElectricSystem>
 						<AlternatorTechnology ratio="1.000">default</AlternatorTechnology>
-						<SmartElectrics>false</SmartElectrics>
-						<MaxAlternatorPower>10000</MaxAlternatorPower>
-						<ElectricStorageCapacity>800</ElectricStorageCapacity>
+						<SmartElectrics>true</SmartElectrics>
+						<MaxAlternatorPower>15000</MaxAlternatorPower>
+						<ElectricStorageCapacity>50</ElectricStorageCapacity>
 					</ElectricSystem>
 					<PneumaticSystem>
 						<SizeOfAirSupply>Large Supply 2-stage</SizeOfAirSupply>