From 21f7ff1dc1bc4334ccf300527d7e307c4a643ff3 Mon Sep 17 00:00:00 2001
From: "Burns, Terry" <Terry.Burns@ricardo.com>
Date: Thu, 27 Nov 2014 14:27:38 +0000
Subject: [PATCH] Added In Dashboard to VectoAuxiliaries from Harness and
 removed undeeded code. Compiles and can be Shown from a launcheer in Harness

git-tfs-id: [http://tfs00.element.root.com:8080/tfs/TFSCollection]$/VECTO;C1690
---
 VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb  |  409 ++++++
 .../VectoAuxiliaries/DownstreamModules/M13.vb |    2 +-
 .../Pneumatics/PneumaticUserInputsConfig.vb   |    2 +-
 .../VectoAuxiliaries/UI/Dashboard.Designer.vb | 1259 +++++++++++++++++
 VECTOAux/VectoAuxiliaries/UI/Dashboard.resx   |  132 ++
 VECTOAux/VectoAuxiliaries/UI/Dashboard.vb     | 1048 ++++++++++++++
 .../VectoAuxiliaries/UI/FB_Dialog.designer.vb |  379 +++++
 VECTOAux/VectoAuxiliaries/UI/FB_Dialog.resx   |  129 ++
 VECTOAux/VectoAuxiliaries/UI/FB_Dialog.vb     | 1010 +++++++++++++
 .../UI/FB_FavDlog.designer.vb                 |  122 ++
 VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.resx  |  120 ++
 VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.vb    |   67 +
 VECTOAux/VectoAuxiliaries/UI/FB_Global.vb     |  176 +++
 VECTOAux/VectoAuxiliaries/UI/VECTO_Types.vb   |  181 +++
 VECTOAux/VectoAuxiliaries/UI/cFileBrowser.vb  |  161 +++
 .../VectoAuxiliaries/VectoAuxiliaries.vbproj  |   36 +-
 16 files changed, 5228 insertions(+), 5 deletions(-)
 create mode 100644 VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/Dashboard.Designer.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/Dashboard.resx
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/Dashboard.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_Dialog.designer.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_Dialog.resx
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_Dialog.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.designer.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.resx
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/FB_Global.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/VECTO_Types.vb
 create mode 100644 VECTOAux/VectoAuxiliaries/UI/cFileBrowser.vb

diff --git a/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb b/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb
new file mode 100644
index 0000000000..b4f97eff97
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/AuxiliaryConfig.vb
@@ -0,0 +1,409 @@
+Imports VectoAuxiliaries.Electrics
+Imports VectoAuxiliaries.Pneumatics
+Imports VectoAuxiliaries.Hvac
+Imports System.IO
+Imports VectoAuxiliaries.DownstreamModules
+Imports System.Windows.Forms
+Imports Newtonsoft.Json
+
+
+<Serializable()>
+Public Class AuxiliaryConfig
+
+ 'Vecto
+ Public Property VectoInputs As IVectoInputs
+  
+ 'Electrical
+ Public property ElectricalUserInputsConfig As IElectricsUserInputsConfig
+
+
+ 'Pneumatics
+ public Property PneumaticUserInputsConfig As IPneumaticUserInputsConfig
+ public Property PneumaticAuxillariesConfig As IPneumaticsAuxilliariesConfig
+
+ 'Hvac
+ Public Property  HvacUserInputsConfig As IHVACUserInputsConfig
+
+ 'Vecto Signals
+ public Property Signals As ISignals
+
+
+ 
+ Sub new()
+
+   Call Me.New("EMPTY")
+
+ End Sub
+
+Public Sub new(auxConfigFile As String)
+
+'Special Condid
+If auxConfigFile="EMPTY" then 
+    ElectricalUserInputsConfig = New  ElectricsUserInputsConfig() With { .PowerNetVoltage= 26.3}
+    ElectricalUserInputsConfig.ElectricalConsumers= New ElectricalConsumerList(26.3,0.096,false)
+    ElectricalUserInputsConfig.ResultCardIdle = new ResultCard( New List(Of SmartResult ))
+    ElectricalUserInputsConfig.ResultCardOverrun= new ResultCard( New List(Of SmartResult ))
+    ElectricalUserInputsConfig.ResultCardTraction= new ResultCard( New List(Of SmartResult ))
+    PneumaticAuxillariesConfig= New PneumaticsAuxilliariesConfig(False)
+    PneumaticUserInputsConfig= New PneumaticUserInputsConfig(False)
+    HvacUserInputsConfig = New HVACUserInputsConfig(New HVACSteadyStateModel())
+Exit sub
+
+End If
+
+If auxConfigFile is Nothing orelse auxConfigFile.Trim().Length=0 orelse Not FILE.Exists(auxConfigFile)  then
+
+    setdefaults()
+
+    Else
+    
+    setDefaults()
+    'ElectricalUserInputsConfig.ElectricalConsumers.Items.Clear
+    If Not Load(auxConfigFile)
+      MessageBox.Show(String.Format("Unable to load file  {0}", auxConfigFile))
+    End If
+
+End If
+
+End Sub
+
+Private Sub setDefaults()
+
+
+
+ VectoInputs = New VectoInputs With {.Cycle="Urban", .VehicleWeightKG=16500, .PowerNetVoltage=26.3, .CycleDurationMinutes=51.9,.FuelMap="testFuelGoodMap.vmap"}
+ 
+ 'Pneumatics
+ PneumaticUserInputsConfig  = New PneumaticUserInputsConfig(true) 
+ PneumaticAuxillariesConfig = New PneumaticsAuxilliariesConfig(true)
+
+
+
+
+ ElectricalUserInputsConfig = New  ElectricsUserInputsConfig() With {.DoorActuationTimeSecond=4, 
+                                                                     .AlternatorGearEfficiency=0.8,
+                                                                     .PowerNetVoltage= VectoInputs.PowerNetVoltage,
+                                                                     .ResultCardIdle= New  ResultCard( New List(Of SmartResult)),
+                                                                     .ResultCardOverrun= New ResultCard(New List(Of SmartResult)),
+                                                                     .ResultCardTraction=New  ResultCard(New List(Of SmartResult)),
+                                                                     .SmartElectrical=True,
+                                                                     .AlternatorMap="testAlternatorMap.aalt"
+                                                                     }
+
+ HvacUserInputsConfig = New HVACUserInputsConfig( New HVACSteadyStateModel(100,100,100))
+
+
+ Signals = New Signals With { .EngineSpeed=2000, .TotalCycleTimeSeconds=3114, .ClutchEngaged=False}
+
+
+ ElectricalUserInputsConfig.ElectricalConsumers= New ElectricalConsumerList(26.3,0.096,true)
+
+
+
+
+End Sub
+
+
+Private Function GetDoorActuationTimeFraction()As Single
+
+ Dim actuationsMap as PneumaticActuationsMAP = New PneumaticActuationsMAP( PneumaticUserInputsConfig.ActuationsMap )
+ Dim actuationsKey As ActuationsKey = New ActuationsKey( "Park brake + 2 doors",VectoInputs.Cycle)
+
+ Dim numActuations       as single = actuationsMap.GetNumActuations( actuationsKey)
+ Dim secondsPerActuation As single = ElectricalUserInputsConfig.DoorActuationTimeSecond
+
+ Dim doorDutyCycleFraction as Single = (numActuations * secondsPerActuation)/Signals.TotalCycleTimeSeconds
+
+ Return doorDutyCycleFraction
+
+End Function
+
+
+#Region "Comparison"
+
+Private function CompareElectricalConfiguration( other as AuxiliaryConfig) as boolean
+
+'AlternatorGearEfficiency
+If Me.ElectricalUserInputsConfig.AlternatorGearEfficiency<> other.ElectricalUserInputsConfig.AlternatorGearEfficiency  then return false
+
+'AlternatorMap
+If Me.ElectricalUserInputsConfig.AlternatorMap<> other.ElectricalUserInputsConfig.AlternatorMap  then return false
+
+'DoorActuationTimeSecond
+If Me.ElectricalUserInputsConfig.DoorActuationTimeSecond<> other.ElectricalUserInputsConfig.DoorActuationTimeSecond  then return false
+
+
+'Consumer list
+If Me.ElectricalUserInputsConfig.ElectricalConsumers.Items.Count<> other.ElectricalUserInputsConfig.ElectricalConsumers.Items.count  then return false
+Dim i As integer
+For i=0 to Me.ElectricalUserInputsConfig.ElectricalConsumers.Items.Count-1
+       Dim thisConsumer, otherConsumer As IElectricalConsumer
+       thisConsumer = Me.ElectricalUserInputsConfig.ElectricalConsumers.Items(i)
+       otherConsumer = other.ElectricalUserInputsConfig.ElectricalConsumers.Items(i)
+
+       If  thisConsumer.AvgConsumptionAmps         <> otherConsumer.AvgConsumptionAmps             OrElse _
+           thisConsumer.BaseVehicle                <> otherConsumer.BaseVehicle                    OrElse _
+           thisConsumer.Category                   <> otherConsumer.Category                       OrElse _
+           thisConsumer.ConsumerName               <> otherConsumer.ConsumerName                   OrElse _
+           thisConsumer.NominalConsumptionAmps     <> otherConsumer.NominalConsumptionAmps         OrElse _
+           thisConsumer.NumberInActualVehicle      <> otherConsumer.NumberInActualVehicle          OrElse _ 
+           thisConsumer.PhaseIdle_TractionOn       <> otherConsumer.PhaseIdle_TractionOn           OrElse _
+           thisConsumer.TotalAvgConsumptionInWatts <> otherConsumer.TotalAvgConsumptionInWatts     OrElse _
+           thisConsumer.TotalAvgConumptionAmps     <> otherConsumer.TotalAvgConumptionAmps         Then Return False  
+
+Next
+
+'PowerNetVoltage
+If Me.ElectricalUserInputsConfig.PowerNetVoltage <> other.ElectricalUserInputsConfig.PowerNetVoltage then Return False
+
+'ResultCardIdle
+If  Me.ElectricalUserInputsConfig.ResultCardIdle.Results.count <> other.ElectricalUserInputsConfig.ResultCardIdle.Results.Count then Return False
+For i = 0 to Me.ElectricalUserInputsConfig.ResultCardIdle.Results.Count-1
+       If Me.ElectricalUserInputsConfig.ResultCardIdle.Results(i).Amps      <> other .ElectricalUserInputsConfig.ResultCardIdle.Results(i).Amps       OrElse _
+          Me.ElectricalUserInputsConfig.ResultCardIdle.Results(i).SmartAmps <> other .ElectricalUserInputsConfig.ResultCardIdle.Results(i).SmartAmps  Then Return False        
+Next
+
+'ResultCardOverrun
+If  Me.ElectricalUserInputsConfig.ResultCardOverrun.Results.count <> other.ElectricalUserInputsConfig.ResultCardOverrun.Results.Count then Return False
+For i = 0 to Me.ElectricalUserInputsConfig.ResultCardOverrun.Results.Count-1
+       If Me.ElectricalUserInputsConfig.ResultCardOverrun.Results(i).Amps      <> other .ElectricalUserInputsConfig.ResultCardOverrun.Results(i).Amps       OrElse _
+          Me.ElectricalUserInputsConfig.ResultCardOverrun.Results(i).SmartAmps <> other .ElectricalUserInputsConfig.ResultCardOverrun.Results(i).SmartAmps  Then Return False        
+Next
+
+
+'ResultCardTraction
+If  Me.ElectricalUserInputsConfig.ResultCardTraction.Results.count <> other.ElectricalUserInputsConfig.ResultCardTraction.Results.Count then Return False
+For i = 0 to Me.ElectricalUserInputsConfig.ResultCardTraction.Results.Count-1
+       If Me.ElectricalUserInputsConfig.ResultCardTraction.Results(i).Amps      <> other .ElectricalUserInputsConfig.ResultCardTraction.Results(i).Amps       OrElse _
+          Me.ElectricalUserInputsConfig.ResultCardTraction.Results(i).SmartAmps <> other .ElectricalUserInputsConfig.ResultCardTraction.Results(i).SmartAmps  Then Return False        
+Next
+
+'SmartElectrical
+If Me.ElectricalUserInputsConfig.SmartElectrical <> other.ElectricalUserInputsConfig.SmartElectrical then Return False
+
+
+Return true
+
+
+End Function
+Private Function ComparePneumaticAuxiliariesConfig( other As AuxiliaryConfig ) As Boolean
+
+ If Me.PneumaticAuxillariesConfig.AdBlueNIperMinute <> other.PneumaticAuxillariesConfig.AdBlueNIperMinute then Return False
+ If Me.PneumaticAuxillariesConfig.AirControlledSuspensionNIperMinute <> other.PneumaticAuxillariesConfig.AirControlledSuspensionNIperMinute then Return False 
+ If Me.PneumaticAuxillariesConfig.BrakingNoRetarderNIperKG <> other.PneumaticAuxillariesConfig.BrakingNoRetarderNIperKG then Return False
+ If Me.PneumaticAuxillariesConfig.BrakingWithRetarderNIperKG <> other.PneumaticAuxillariesConfig.BrakingWithRetarderNIperKG then Return False
+ If Me.PneumaticAuxillariesConfig.BreakingPerKneelingNIperKGinMM <> other.PneumaticAuxillariesConfig.BreakingPerKneelingNIperKGinMM then Return False
+ If Me.PneumaticAuxillariesConfig.DeadVolBlowOutsPerLitresperHour <> other.PneumaticAuxillariesConfig.DeadVolBlowOutsPerLitresperHour then Return False
+ If Me.PneumaticAuxillariesConfig.DeadVolumeLitres <> other.PneumaticAuxillariesConfig.DeadVolumeLitres then Return False
+ If Me.PneumaticAuxillariesConfig.NonSmartRegenFractionTotalAirDemand <> other.PneumaticAuxillariesConfig.NonSmartRegenFractionTotalAirDemand then Return False
+ If Me.PneumaticAuxillariesConfig.PerDoorOpeningNI <> other.PneumaticAuxillariesConfig.PerDoorOpeningNI then Return False
+ If Me.PneumaticAuxillariesConfig.PerStopBrakeActuationNIperKG <> other.PneumaticAuxillariesConfig.PerStopBrakeActuationNIperKG then Return False
+ If Me.PneumaticAuxillariesConfig.SmartRegenFractionTotalAirDemand <> other.PneumaticAuxillariesConfig.SmartRegenFractionTotalAirDemand then Return False
+ If Me.PneumaticAuxillariesConfig.OverrunUtilisationForCompressionFraction <> other.PneumaticAuxillariesConfig.OverrunUtilisationForCompressionFraction then Return False
+
+ Return true
+
+End Function
+Private Function ComparePneumaticUserConfig( other As AuxiliaryConfig ) As Boolean
+
+ If Me.PneumaticUserInputsConfig.ActuationsMap <> other.PneumaticUserInputsConfig.ActuationsMap then Return False
+ If Me.PneumaticUserInputsConfig.AdBlueDosing <> other.PneumaticUserInputsConfig.AdBlueDosing then Return False 
+ If Me.PneumaticUserInputsConfig.AirSuspensionControl <> other.PneumaticUserInputsConfig.AirSuspensionControl then Return False
+ If Me.PneumaticUserInputsConfig.CompressorGearEfficiency <> other.PneumaticUserInputsConfig.CompressorGearEfficiency then Return False
+ If Me.PneumaticUserInputsConfig.CompressorGearRatio <> other.PneumaticUserInputsConfig.CompressorGearRatio then Return False
+ If Me.PneumaticUserInputsConfig.CompressorMap <> other.PneumaticUserInputsConfig.CompressorMap then Return False
+ If Me.PneumaticUserInputsConfig.Doors <> other.PneumaticUserInputsConfig.Doors then Return False
+ If Me.PneumaticUserInputsConfig.KneelingHeightMillimeters <> other.PneumaticUserInputsConfig.KneelingHeightMillimeters then Return False
+ If Me.PneumaticUserInputsConfig.RetarderBrake <> other.PneumaticUserInputsConfig.RetarderBrake then Return False
+ If Me.PneumaticUserInputsConfig.SmartAirCompression <> other.PneumaticUserInputsConfig.SmartAirCompression then Return False
+ If Me.PneumaticUserInputsConfig.SmartRegeneration <> other.PneumaticUserInputsConfig.SmartRegeneration then Return False
+
+
+ Return true
+
+End Function
+Private Function CompareHVACConfig( other As AuxiliaryConfig) As Boolean
+
+  If Me.HvacUserInputsConfig.SteadyStateModel.HVACElectricalLoadPowerWatts <> other.HvacUserInputsConfig.SteadyStateModel.HVACElectricalLoadPowerWatts then Return false
+  If Me.HvacUserInputsConfig.SteadyStateModel.HVACFuellingLitresPerHour <> other.HvacUserInputsConfig.SteadyStateModel.HVACFuellingLitresPerHour then Return false
+  If Me.HvacUserInputsConfig.SteadyStateModel.HVACMechanicalLoadPowerWatts <> other.HvacUserInputsConfig.SteadyStateModel.HVACMechanicalLoadPowerWatts then Return false
+
+  Return true
+
+End Function
+
+Public Function ConfigValuesAreTheSameAs( other As AuxiliaryConfig) As Boolean
+
+   If Not CompareElectricalConfiguration     ( other ) then Return False
+   If Not ComparePneumaticAuxiliariesConfig ( other ) then Return False
+   If Not ComparePneumaticUserConfig        ( other ) then Return False
+   If Not CompareHVACConfig                 ( other ) then Return False
+      
+   Return true
+
+End Function
+
+
+#End Region
+
+#Region "Persistance"
+
+
+'Persistance Functions
+Public Function Save(  filePath As String ) As Boolean
+
+
+  Dim returnValue As Boolean = true
+  Dim settings As JsonSerializerSettings = new JsonSerializerSettings()
+  settings.TypeNameHandling = TypeNameHandling.Objects
+
+ 'JSON METHOD
+ try
+
+  Dim  output As string = JsonConvert.SerializeObject(me, Formatting.Indented, settings)
+
+  File.WriteAllText(filePath, output)
+
+  Catch ex as Exception
+  
+    'TODO:Do something meaningfull here perhaps logging
+
+  
+     returnValue= False
+  End Try
+  
+  Return returnValue
+
+End Function
+Public Function Load(  filePath As String  ) As Boolean
+
+  Dim returnValue As Boolean = true
+  Dim settings As JsonSerializerSettings = new JsonSerializerSettings()
+  Dim tmpAux As AuxiliaryConfig
+
+  settings.TypeNameHandling = TypeNameHandling.Objects
+
+ 'JSON METHOD
+ try
+
+
+   Dim output As String  = File.ReadAllText(filePath)
+
+   tmpAux =  JsonConvert.DeserializeObject( Of AuxiliaryConfig)(output,settings)
+
+   'This is where we Assume values of loaded( Deserialized ) object.
+   AssumeValuesOfOther( tmpAux ) 
+
+  Catch ex as Exception
+  
+    'TODO:Do something meaningfull here perhaps logging
+  
+     returnValue= False
+  End Try
+  
+  Return returnValue
+
+End Function
+
+'Persistance Helpers
+Private sub AssumeValuesOfOther( other As AuxiliaryConfig )
+
+   CloneElectricaConfiguration( other )
+   ClonePneumaticsAuxiliariesConfig( other )
+   ClonePneumaticsUserInputsConfig(other)
+   CloneHVAC(other)
+
+End sub
+Private sub CloneElectricaConfiguration( other as AuxiliaryConfig) 
+
+'AlternatorGearEfficiency
+me.ElectricalUserInputsConfig.AlternatorGearEfficiency  =  other.ElectricalUserInputsConfig.AlternatorGearEfficiency
+'AlternatorMap
+me.ElectricalUserInputsConfig.AlternatorMap             = other.ElectricalUserInputsConfig.AlternatorMap
+'DoorActuationTimeSecond
+me.ElectricalUserInputsConfig.DoorActuationTimeSecond   = other.ElectricalUserInputsConfig.DoorActuationTimeSecond
+
+'Electrical Consumer list
+Me.ElectricalUserInputsConfig.ElectricalConsumers.Items.Clear
+For  Each otherConsumer As IElectricalConsumer In other.ElectricalUserInputsConfig.ElectricalConsumers.Items    
+  
+      Dim  newConsumer  As ElectricalConsumer = New ElectricalConsumer( otherConsumer.BaseVehicle,            _
+                                                                        otherConsumer.Category,               _
+                                                                        otherConsumer.ConsumerName,           _
+                                                                        otherConsumer.NominalConsumptionAmps, _
+                                                                        otherConsumer.PhaseIdle_TractionOn,   _
+                                                                        otherConsumer.PowerNetVoltage,        _
+                                                                        otherConsumer.NumberInActualVehicle   )
+       
+      Me.ElectricalUserInputsConfig.ElectricalConsumers.Items.Add( newConsumer )
+
+Next
+
+'PowerNetVoltage
+other.ElectricalUserInputsConfig.PowerNetVoltage = other.ElectricalUserInputsConfig.PowerNetVoltage 
+'ResultCardIdle
+Me.ElectricalUserInputsConfig.ResultCardIdle.Results.Clear
+For each result As SmartResult In other.ElectricalUserInputsConfig.ResultCardIdle.Results
+       Me.ElectricalUserInputsConfig.ResultCardIdle.Results.Add( New SmartResult(result.Amps,result.SmartAmps))    
+Next
+'ResultCardOverrun
+For each result As SmartResult In other.ElectricalUserInputsConfig.ResultCardOverrun.Results
+        Me.ElectricalUserInputsConfig.ResultCardOverrun.Results.Add( New SmartResult(result.Amps,result.SmartAmps))       
+Next
+'ResultCardTraction
+For each result As SmartResult In other.ElectricalUserInputsConfig.ResultCardTraction.Results
+        Me.ElectricalUserInputsConfig.ResultCardTraction.Results.Add( New SmartResult(result.Amps,result.SmartAmps))          
+Next
+'SmartElectrical
+Me.ElectricalUserInputsConfig.SmartElectrical = other.ElectricalUserInputsConfig.SmartElectrical 
+
+End Sub
+Private sub ClonePneumaticsAuxiliariesConfig( other as AuxiliaryConfig) 
+
+ Me.PneumaticAuxillariesConfig.AdBlueNIperMinute                        =other.PneumaticAuxillariesConfig.AdBlueNIperMinute 
+ Me.PneumaticAuxillariesConfig.AirControlledSuspensionNIperMinute       =other.PneumaticAuxillariesConfig.AirControlledSuspensionNIperMinute 
+ Me.PneumaticAuxillariesConfig.BrakingNoRetarderNIperKG                 =other.PneumaticAuxillariesConfig.BrakingNoRetarderNIperKG 
+ Me.PneumaticAuxillariesConfig.BrakingWithRetarderNIperKG               =other.PneumaticAuxillariesConfig.BrakingWithRetarderNIperKG 
+ Me.PneumaticAuxillariesConfig.BreakingPerKneelingNIperKGinMM           =other.PneumaticAuxillariesConfig.BreakingPerKneelingNIperKGinMM 
+ Me.PneumaticAuxillariesConfig.DeadVolBlowOutsPerLitresperHour          =other.PneumaticAuxillariesConfig.DeadVolBlowOutsPerLitresperHour 
+ Me.PneumaticAuxillariesConfig.DeadVolumeLitres                         =other.PneumaticAuxillariesConfig.DeadVolumeLitres 
+ Me.PneumaticAuxillariesConfig.NonSmartRegenFractionTotalAirDemand      =other.PneumaticAuxillariesConfig.NonSmartRegenFractionTotalAirDemand 
+ Me.PneumaticAuxillariesConfig.PerDoorOpeningNI                         =other.PneumaticAuxillariesConfig.PerDoorOpeningNI 
+ Me.PneumaticAuxillariesConfig.PerStopBrakeActuationNIperKG             =other.PneumaticAuxillariesConfig.PerStopBrakeActuationNIperKG 
+ Me.PneumaticAuxillariesConfig.SmartRegenFractionTotalAirDemand         =other.PneumaticAuxillariesConfig.SmartRegenFractionTotalAirDemand 
+ Me.PneumaticAuxillariesConfig.OverrunUtilisationForCompressionFraction =other.PneumaticAuxillariesConfig.OverrunUtilisationForCompressionFraction 
+
+End Sub
+Private Sub ClonePneumaticsUserInputsConfig ( other As AuxiliaryConfig )
+
+  Me.PneumaticUserInputsConfig.ActuationsMap = other.PneumaticUserInputsConfig.ActuationsMap 
+  Me.PneumaticUserInputsConfig.AdBlueDosing = other.PneumaticUserInputsConfig.AdBlueDosing 
+  Me.PneumaticUserInputsConfig.AirSuspensionControl = other.PneumaticUserInputsConfig.AirSuspensionControl 
+  Me.PneumaticUserInputsConfig.CompressorGearEfficiency = other.PneumaticUserInputsConfig.CompressorGearEfficiency
+  Me.PneumaticUserInputsConfig.CompressorGearRatio = other.PneumaticUserInputsConfig.CompressorGearRatio 
+  Me.PneumaticUserInputsConfig.CompressorMap = other.PneumaticUserInputsConfig.CompressorMap 
+  Me.PneumaticUserInputsConfig.Doors = other.PneumaticUserInputsConfig.Doors 
+  Me.PneumaticUserInputsConfig.KneelingHeightMillimeters = other.PneumaticUserInputsConfig.KneelingHeightMillimeters 
+  Me.PneumaticUserInputsConfig.RetarderBrake = other.PneumaticUserInputsConfig.RetarderBrake 
+  Me.PneumaticUserInputsConfig.SmartAirCompression = other.PneumaticUserInputsConfig.SmartAirCompression 
+  Me.PneumaticUserInputsConfig.SmartRegeneration = other.PneumaticUserInputsConfig.SmartRegeneration 
+
+
+End Sub
+Private Sub CloneHVAC( other As AuxiliaryConfig)
+
+  Me.HvacUserInputsConfig.SteadyStateModel.HVACElectricalLoadPowerWatts = other.HvacUserInputsConfig.SteadyStateModel.HVACElectricalLoadPowerWatts 
+  Me.HvacUserInputsConfig.SteadyStateModel.HVACFuellingLitresPerHour    = other.HvacUserInputsConfig.SteadyStateModel.HVACFuellingLitresPerHour 
+  Me.HvacUserInputsConfig.SteadyStateModel.HVACMechanicalLoadPowerWatts = other.HvacUserInputsConfig.SteadyStateModel.HVACMechanicalLoadPowerWatts 
+
+
+End Sub
+
+
+
+
+#End Region
+
+
+End Class
+
diff --git a/VECTOAux/VectoAuxiliaries/DownstreamModules/M13.vb b/VECTOAux/VectoAuxiliaries/DownstreamModules/M13.vb
index 812d571a24..2d6b5ffa3c 100644
--- a/VECTOAux/VectoAuxiliaries/DownstreamModules/M13.vb
+++ b/VECTOAux/VectoAuxiliaries/DownstreamModules/M13.vb
@@ -37,7 +37,7 @@ Private readonly Property Sum4 As Single
 End Property
 Private readonly Property Sum5 As Single
     Get
-     Return  m1.HVACFuelingLitresPerHour * FUEL_DENSITY_L3
+     Return  ( m1.HVACFuelingLitresPerHour * ( signals.TotalCycleTimeSeconds/3600)) * FUEL_DENSITY_L3
     End Get
 End Property
 Private ReadOnly Property Sum6 As Single
diff --git a/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticUserInputsConfig.vb b/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticUserInputsConfig.vb
index 761d9d6e33..e6cc148e99 100644
--- a/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticUserInputsConfig.vb
+++ b/VECTOAux/VectoAuxiliaries/Pneumatics/PneumaticUserInputsConfig.vb
@@ -37,7 +37,7 @@ End Sub
 Public sub SetPropertiesToDefaults()
 
 
-            ActuationsMap=""
+            ActuationsMap="testPneumaticActuationsMap_GOODMAP.apac"
             AdBlueDosing="Pneumatic"
             AirSuspensionControl="Electrically"
             CompressorGearEfficiency=0.8
diff --git a/VECTOAux/VectoAuxiliaries/UI/Dashboard.Designer.vb b/VECTOAux/VectoAuxiliaries/UI/Dashboard.Designer.vb
new file mode 100644
index 0000000000..0f9e292b68
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/Dashboard.Designer.vb
@@ -0,0 +1,1259 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class Dashboard
+    Inherits System.Windows.Forms.Form
+
+    'Form overrides dispose to clean up the component list.
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Required by the Windows Form Designer
+    Private components As System.ComponentModel.IContainer
+
+    'NOTE: The following procedure is required by the Windows Form Designer
+    'It can be modified using the Windows Form Designer.  
+    'Do not modify it using the code editor.
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.components = New System.ComponentModel.Container()
+        Dim DataGridViewCellStyle13 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle14 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle15 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle16 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle17 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle18 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle19 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle20 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle21 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle22 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle23 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Dim DataGridViewCellStyle24 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
+        Me.pnlMain = New System.Windows.Forms.Panel()
+        Me.btnLoad = New System.Windows.Forms.Button()
+        Me.btnCancel = New System.Windows.Forms.Button()
+        Me.btnSave = New System.Windows.Forms.Button()
+        Me.tabMain = New System.Windows.Forms.TabControl()
+        Me.tabElectricalConfig = New System.Windows.Forms.TabPage()
+        Me.btnAlternatorMapPath = New System.Windows.Forms.Button()
+        Me.gvResultsCardOverrun = New System.Windows.Forms.DataGridView()
+        Me.gvResultsCardTraction = New System.Windows.Forms.DataGridView()
+        Me.gvResultsCardIdle = New System.Windows.Forms.DataGridView()
+        Me.lblResultsOverrun = New System.Windows.Forms.Label()
+        Me.lblResultsTractionOn = New System.Windows.Forms.Label()
+        Me.lblResultsIdle = New System.Windows.Forms.Label()
+        Me.chkSmartElectricals = New System.Windows.Forms.CheckBox()
+        Me.lblElectricalConsumables = New System.Windows.Forms.Label()
+        Me.gvElectricalConsumables = New System.Windows.Forms.DataGridView()
+        Me.txtDoorActuationTimeSeconds = New System.Windows.Forms.TextBox()
+        Me.txtAlternatorGearEfficiency = New System.Windows.Forms.TextBox()
+        Me.txtAlternatorMapPath = New System.Windows.Forms.TextBox()
+        Me.txtPowernetVoltage = New System.Windows.Forms.TextBox()
+        Me.lblDoorActuationTimeSeconds = New System.Windows.Forms.Label()
+        Me.lblAlternatorGearEfficiency = New System.Windows.Forms.Label()
+        Me.lblAlternatormapPath = New System.Windows.Forms.Label()
+        Me.lblPowerNetVoltage = New System.Windows.Forms.Label()
+        Me.tabPneumaticConfig = New System.Windows.Forms.TabPage()
+        Me.pnlPneumaticsUserInput = New System.Windows.Forms.Panel()
+        Me.btnActuationsMap = New System.Windows.Forms.Button()
+        Me.btnCompressorMap = New System.Windows.Forms.Button()
+        Me.lblPneumaticsVariablesTitle = New System.Windows.Forms.Label()
+        Me.lblActuationsMap = New System.Windows.Forms.Label()
+        Me.chkSmartAirCompression = New System.Windows.Forms.CheckBox()
+        Me.chkSmartRegeneration = New System.Windows.Forms.CheckBox()
+        Me.lblAdBlueDosing = New System.Windows.Forms.Label()
+        Me.chkRetarderBrake = New System.Windows.Forms.CheckBox()
+        Me.txtKneelingHeightMillimeters = New System.Windows.Forms.TextBox()
+        Me.lblAirSuspensionControl = New System.Windows.Forms.Label()
+        Me.cboDoors = New System.Windows.Forms.ComboBox()
+        Me.txtCompressorMap = New System.Windows.Forms.TextBox()
+        Me.lblCompressorGearEfficiency = New System.Windows.Forms.Label()
+        Me.txtCompressorGearRatio = New System.Windows.Forms.TextBox()
+        Me.lblCompressorGearRatio = New System.Windows.Forms.Label()
+        Me.txtCompressorGearEfficiency = New System.Windows.Forms.TextBox()
+        Me.lblCompressorMap = New System.Windows.Forms.Label()
+        Me.cboAirSuspensionControl = New System.Windows.Forms.ComboBox()
+        Me.lblDoors = New System.Windows.Forms.Label()
+        Me.cboAdBlueDosing = New System.Windows.Forms.ComboBox()
+        Me.lblKneelingHeightMillimeters = New System.Windows.Forms.Label()
+        Me.txtActuationsMap = New System.Windows.Forms.TextBox()
+        Me.pnlPneumaticAuxillaries = New System.Windows.Forms.Panel()
+        Me.lblPneumaticAuxillariesTitle = New System.Windows.Forms.Label()
+        Me.lblAdBlueNIperMinute = New System.Windows.Forms.Label()
+        Me.lblAirControlledSuspensionNIperMinute = New System.Windows.Forms.Label()
+        Me.lblBrakingNoRetarderNIperKG = New System.Windows.Forms.Label()
+        Me.lblBrakingWithRetarderNIperKG = New System.Windows.Forms.Label()
+        Me.lblBreakingPerKneelingNIperKGinMM = New System.Windows.Forms.Label()
+        Me.lblDeadVolBlowOutsPerLitresperHour = New System.Windows.Forms.Label()
+        Me.lblDeadVolumeLitres = New System.Windows.Forms.Label()
+        Me.lblNonSmartRegenFractionTotalAirDemand = New System.Windows.Forms.Label()
+        Me.lblOverrunUtilisationForCompressionFraction = New System.Windows.Forms.Label()
+        Me.lblPerDoorOpeningNI = New System.Windows.Forms.Label()
+        Me.lblPerStopBrakeActuationNIperKG = New System.Windows.Forms.Label()
+        Me.lblSmartRegenFractionTotalAirDemand = New System.Windows.Forms.Label()
+        Me.txtAdBlueNIperMinute = New System.Windows.Forms.TextBox()
+        Me.txtAirControlledSuspensionNIperMinute = New System.Windows.Forms.TextBox()
+        Me.txtBrakingNoRetarderNIperKG = New System.Windows.Forms.TextBox()
+        Me.txtBrakingWithRetarderNIperKG = New System.Windows.Forms.TextBox()
+        Me.txtBreakingPerKneelingNIperKGinMM = New System.Windows.Forms.TextBox()
+        Me.txtDeadVolBlowOutsPerLitresperHour = New System.Windows.Forms.TextBox()
+        Me.txtDeadVolumeLitres = New System.Windows.Forms.TextBox()
+        Me.txtNonSmartRegenFractionTotalAirDemand = New System.Windows.Forms.TextBox()
+        Me.txtOverrunUtilisationForCompressionFraction = New System.Windows.Forms.TextBox()
+        Me.txtPerDoorOpeningNI = New System.Windows.Forms.TextBox()
+        Me.txtPerStopBrakeActuationNIperKG = New System.Windows.Forms.TextBox()
+        Me.txtSmartRegenFractionTotalAirDemand = New System.Windows.Forms.TextBox()
+        Me.tabHVACConfig = New System.Windows.Forms.TabPage()
+        Me.lblHVACTitle = New System.Windows.Forms.Label()
+        Me.txtHVACFuellingLitresPerHour = New System.Windows.Forms.TextBox()
+        Me.lblHVACFuellingLitresPerHour = New System.Windows.Forms.Label()
+        Me.txtHVACMechanicalLoadPowerWatts = New System.Windows.Forms.TextBox()
+        Me.lblHVACMechanicalLoadPowerWatts = New System.Windows.Forms.Label()
+        Me.txtHVACElectricalLoadPowerWatts = New System.Windows.Forms.TextBox()
+        Me.lblHVACElectricalLoadPowerWatts = New System.Windows.Forms.Label()
+        Me.resultCardContextMenu = New System.Windows.Forms.ContextMenuStrip(Me.components)
+        Me.DeleteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.ErrorProvider = New System.Windows.Forms.ErrorProvider(Me.components)
+        Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
+        Me.txtVehicleWeightKG = New System.Windows.Forms.TextBox()
+        Me.lblVehiceWeight = New System.Windows.Forms.Label()
+        Me.lblCycle = New System.Windows.Forms.Label()
+        Me.cboCycle = New System.Windows.Forms.ComboBox()
+        Me.txtFuelMap = New System.Windows.Forms.TextBox()
+        Me.lblFuelMap = New System.Windows.Forms.Label()
+        Me.btnFuelMap = New System.Windows.Forms.Button()
+        Me.tabGeneralConfig = New System.Windows.Forms.TabPage()
+        Me.pnlMain.SuspendLayout
+        Me.tabMain.SuspendLayout
+        Me.tabElectricalConfig.SuspendLayout
+        CType(Me.gvResultsCardOverrun,System.ComponentModel.ISupportInitialize).BeginInit
+        CType(Me.gvResultsCardTraction,System.ComponentModel.ISupportInitialize).BeginInit
+        CType(Me.gvResultsCardIdle,System.ComponentModel.ISupportInitialize).BeginInit
+        CType(Me.gvElectricalConsumables,System.ComponentModel.ISupportInitialize).BeginInit
+        Me.tabPneumaticConfig.SuspendLayout
+        Me.pnlPneumaticsUserInput.SuspendLayout
+        Me.pnlPneumaticAuxillaries.SuspendLayout
+        Me.tabHVACConfig.SuspendLayout
+        Me.resultCardContextMenu.SuspendLayout
+        CType(Me.ErrorProvider,System.ComponentModel.ISupportInitialize).BeginInit
+        Me.tabGeneralConfig.SuspendLayout
+        Me.SuspendLayout
+        '
+        'pnlMain
+        '
+        Me.pnlMain.Controls.Add(Me.btnLoad)
+        Me.pnlMain.Controls.Add(Me.btnCancel)
+        Me.pnlMain.Controls.Add(Me.btnSave)
+        Me.pnlMain.Controls.Add(Me.tabMain)
+        Me.pnlMain.Dock = System.Windows.Forms.DockStyle.Fill
+        Me.pnlMain.Location = New System.Drawing.Point(0, 0)
+        Me.pnlMain.Name = "pnlMain"
+        Me.pnlMain.Size = New System.Drawing.Size(1502, 794)
+        Me.pnlMain.TabIndex = 1
+        '
+        'btnLoad
+        '
+        Me.btnLoad.Location = New System.Drawing.Point(946, 749)
+        Me.btnLoad.Name = "btnLoad"
+        Me.btnLoad.Size = New System.Drawing.Size(78, 25)
+        Me.btnLoad.TabIndex = 11
+        Me.btnLoad.Text = "Load"
+        Me.btnLoad.UseVisualStyleBackColor = true
+        '
+        'btnCancel
+        '
+        Me.btnCancel.Location = New System.Drawing.Point(1156, 749)
+        Me.btnCancel.Name = "btnCancel"
+        Me.btnCancel.Size = New System.Drawing.Size(75, 23)
+        Me.btnCancel.TabIndex = 5
+        Me.btnCancel.Text = "Cancel"
+        Me.btnCancel.UseVisualStyleBackColor = true
+        '
+        'btnSave
+        '
+        Me.btnSave.Location = New System.Drawing.Point(842, 749)
+        Me.btnSave.Name = "btnSave"
+        Me.btnSave.Size = New System.Drawing.Size(85, 25)
+        Me.btnSave.TabIndex = 10
+        Me.btnSave.Text = "Save"
+        Me.btnSave.UseVisualStyleBackColor = true
+        '
+        'tabMain
+        '
+        Me.tabMain.AccessibleDescription = ""
+        Me.tabMain.Controls.Add(Me.tabGeneralConfig)
+        Me.tabMain.Controls.Add(Me.tabElectricalConfig)
+        Me.tabMain.Controls.Add(Me.tabPneumaticConfig)
+        Me.tabMain.Controls.Add(Me.tabHVACConfig)
+        Me.tabMain.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed
+        Me.tabMain.Location = New System.Drawing.Point(12, 12)
+        Me.tabMain.Name = "tabMain"
+        Me.tabMain.SelectedIndex = 0
+        Me.tabMain.Size = New System.Drawing.Size(1478, 730)
+        Me.tabMain.TabIndex = 0
+        Me.tabMain.Tag = ""
+        '
+        'tabElectricalConfig
+        '
+        Me.tabElectricalConfig.Controls.Add(Me.btnAlternatorMapPath)
+        Me.tabElectricalConfig.Controls.Add(Me.gvResultsCardOverrun)
+        Me.tabElectricalConfig.Controls.Add(Me.gvResultsCardTraction)
+        Me.tabElectricalConfig.Controls.Add(Me.gvResultsCardIdle)
+        Me.tabElectricalConfig.Controls.Add(Me.lblResultsOverrun)
+        Me.tabElectricalConfig.Controls.Add(Me.lblResultsTractionOn)
+        Me.tabElectricalConfig.Controls.Add(Me.lblResultsIdle)
+        Me.tabElectricalConfig.Controls.Add(Me.chkSmartElectricals)
+        Me.tabElectricalConfig.Controls.Add(Me.lblElectricalConsumables)
+        Me.tabElectricalConfig.Controls.Add(Me.gvElectricalConsumables)
+        Me.tabElectricalConfig.Controls.Add(Me.txtDoorActuationTimeSeconds)
+        Me.tabElectricalConfig.Controls.Add(Me.txtAlternatorGearEfficiency)
+        Me.tabElectricalConfig.Controls.Add(Me.txtAlternatorMapPath)
+        Me.tabElectricalConfig.Controls.Add(Me.txtPowernetVoltage)
+        Me.tabElectricalConfig.Controls.Add(Me.lblDoorActuationTimeSeconds)
+        Me.tabElectricalConfig.Controls.Add(Me.lblAlternatorGearEfficiency)
+        Me.tabElectricalConfig.Controls.Add(Me.lblAlternatormapPath)
+        Me.tabElectricalConfig.Controls.Add(Me.lblPowerNetVoltage)
+        Me.tabElectricalConfig.Location = New System.Drawing.Point(4, 22)
+        Me.tabElectricalConfig.Name = "tabElectricalConfig"
+        Me.tabElectricalConfig.Padding = New System.Windows.Forms.Padding(3)
+        Me.tabElectricalConfig.Size = New System.Drawing.Size(1470, 704)
+        Me.tabElectricalConfig.TabIndex = 1
+        Me.tabElectricalConfig.Text = "Electrics"
+        Me.tabElectricalConfig.UseVisualStyleBackColor = true
+        '
+        'btnAlternatorMapPath
+        '
+        Me.btnAlternatorMapPath.Location = New System.Drawing.Point(497, 43)
+        Me.btnAlternatorMapPath.Name = "btnAlternatorMapPath"
+        Me.btnAlternatorMapPath.Size = New System.Drawing.Size(38, 20)
+        Me.btnAlternatorMapPath.TabIndex = 19
+        Me.btnAlternatorMapPath.Text = ". . ."
+        Me.btnAlternatorMapPath.UseVisualStyleBackColor = true
+        '
+        'gvResultsCardOverrun
+        '
+        DataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle13.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvResultsCardOverrun.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle13
+        Me.gvResultsCardOverrun.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
+        DataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle14.BackColor = System.Drawing.SystemColors.Window
+        DataGridViewCellStyle14.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle14.ForeColor = System.Drawing.SystemColors.ControlText
+        DataGridViewCellStyle14.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle14.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
+        Me.gvResultsCardOverrun.DefaultCellStyle = DataGridViewCellStyle14
+        Me.gvResultsCardOverrun.Location = New System.Drawing.Point(590, 451)
+        Me.gvResultsCardOverrun.Name = "gvResultsCardOverrun"
+        DataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle15.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle15.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle15.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle15.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle15.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvResultsCardOverrun.RowHeadersDefaultCellStyle = DataGridViewCellStyle15
+        Me.gvResultsCardOverrun.Size = New System.Drawing.Size(246, 125)
+        Me.gvResultsCardOverrun.TabIndex = 18
+        '
+        'gvResultsCardTraction
+        '
+        DataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle16.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle16.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle16.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle16.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle16.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvResultsCardTraction.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle16
+        Me.gvResultsCardTraction.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
+        DataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle17.BackColor = System.Drawing.SystemColors.Window
+        DataGridViewCellStyle17.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle17.ForeColor = System.Drawing.SystemColors.ControlText
+        DataGridViewCellStyle17.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle17.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle17.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
+        Me.gvResultsCardTraction.DefaultCellStyle = DataGridViewCellStyle17
+        Me.gvResultsCardTraction.Location = New System.Drawing.Point(311, 451)
+        Me.gvResultsCardTraction.Name = "gvResultsCardTraction"
+        DataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle18.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvResultsCardTraction.RowHeadersDefaultCellStyle = DataGridViewCellStyle18
+        Me.gvResultsCardTraction.Size = New System.Drawing.Size(258, 125)
+        Me.gvResultsCardTraction.TabIndex = 17
+        '
+        'gvResultsCardIdle
+        '
+        DataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle19.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle19.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle19.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle19.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvResultsCardIdle.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle19
+        Me.gvResultsCardIdle.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
+        DataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle20.BackColor = System.Drawing.SystemColors.Window
+        DataGridViewCellStyle20.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle20.ForeColor = System.Drawing.SystemColors.ControlText
+        DataGridViewCellStyle20.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle20.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle20.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
+        Me.gvResultsCardIdle.DefaultCellStyle = DataGridViewCellStyle20
+        Me.gvResultsCardIdle.Location = New System.Drawing.Point(35, 451)
+        Me.gvResultsCardIdle.Name = "gvResultsCardIdle"
+        DataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle21.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle21.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle21.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle21.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle21.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvResultsCardIdle.RowHeadersDefaultCellStyle = DataGridViewCellStyle21
+        Me.gvResultsCardIdle.Size = New System.Drawing.Size(256, 125)
+        Me.gvResultsCardIdle.TabIndex = 16
+        '
+        'lblResultsOverrun
+        '
+        Me.lblResultsOverrun.AutoSize = true
+        Me.lblResultsOverrun.Location = New System.Drawing.Point(587, 435)
+        Me.lblResultsOverrun.Name = "lblResultsOverrun"
+        Me.lblResultsOverrun.Size = New System.Drawing.Size(109, 13)
+        Me.lblResultsOverrun.TabIndex = 15
+        Me.lblResultsOverrun.Text = "Result Card : Overrun"
+        '
+        'lblResultsTractionOn
+        '
+        Me.lblResultsTractionOn.AutoSize = true
+        Me.lblResultsTractionOn.Location = New System.Drawing.Point(308, 435)
+        Me.lblResultsTractionOn.Name = "lblResultsTractionOn"
+        Me.lblResultsTractionOn.Size = New System.Drawing.Size(124, 13)
+        Me.lblResultsTractionOn.TabIndex = 14
+        Me.lblResultsTractionOn.Text = "Result Card : TractionOn"
+        '
+        'lblResultsIdle
+        '
+        Me.lblResultsIdle.AutoSize = true
+        Me.lblResultsIdle.Location = New System.Drawing.Point(33, 435)
+        Me.lblResultsIdle.Name = "lblResultsIdle"
+        Me.lblResultsIdle.Size = New System.Drawing.Size(91, 13)
+        Me.lblResultsIdle.TabIndex = 13
+        Me.lblResultsIdle.Text = "Result Card :  Idle"
+        '
+        'chkSmartElectricals
+        '
+        Me.chkSmartElectricals.AutoSize = true
+        Me.chkSmartElectricals.Location = New System.Drawing.Point(162, 132)
+        Me.chkSmartElectricals.Name = "chkSmartElectricals"
+        Me.chkSmartElectricals.Size = New System.Drawing.Size(96, 17)
+        Me.chkSmartElectricals.TabIndex = 12
+        Me.chkSmartElectricals.Text = "Smart Electrics"
+        Me.chkSmartElectricals.UseVisualStyleBackColor = true
+        '
+        'lblElectricalConsumables
+        '
+        Me.lblElectricalConsumables.AutoSize = true
+        Me.lblElectricalConsumables.Location = New System.Drawing.Point(34, 154)
+        Me.lblElectricalConsumables.Name = "lblElectricalConsumables"
+        Me.lblElectricalConsumables.Size = New System.Drawing.Size(116, 13)
+        Me.lblElectricalConsumables.TabIndex = 11
+        Me.lblElectricalConsumables.Text = "Electrical Consumables"
+        '
+        'gvElectricalConsumables
+        '
+        DataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle22.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle22.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle22.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle22.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle22.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle22.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvElectricalConsumables.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle22
+        Me.gvElectricalConsumables.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
+        DataGridViewCellStyle23.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle23.BackColor = System.Drawing.SystemColors.Window
+        DataGridViewCellStyle23.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle23.ForeColor = System.Drawing.SystemColors.ControlText
+        DataGridViewCellStyle23.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle23.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle23.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
+        Me.gvElectricalConsumables.DefaultCellStyle = DataGridViewCellStyle23
+        Me.gvElectricalConsumables.Location = New System.Drawing.Point(33, 170)
+        Me.gvElectricalConsumables.Name = "gvElectricalConsumables"
+        DataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft
+        DataGridViewCellStyle24.BackColor = System.Drawing.SystemColors.Control
+        DataGridViewCellStyle24.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        DataGridViewCellStyle24.ForeColor = System.Drawing.SystemColors.WindowText
+        DataGridViewCellStyle24.SelectionBackColor = System.Drawing.SystemColors.Highlight
+        DataGridViewCellStyle24.SelectionForeColor = System.Drawing.SystemColors.HighlightText
+        DataGridViewCellStyle24.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
+        Me.gvElectricalConsumables.RowHeadersDefaultCellStyle = DataGridViewCellStyle24
+        Me.gvElectricalConsumables.Size = New System.Drawing.Size(803, 250)
+        Me.gvElectricalConsumables.TabIndex = 10
+        '
+        'txtDoorActuationTimeSeconds
+        '
+        Me.txtDoorActuationTimeSeconds.Location = New System.Drawing.Point(162, 101)
+        Me.txtDoorActuationTimeSeconds.Name = "txtDoorActuationTimeSeconds"
+        Me.txtDoorActuationTimeSeconds.Size = New System.Drawing.Size(100, 20)
+        Me.txtDoorActuationTimeSeconds.TabIndex = 9
+        '
+        'txtAlternatorGearEfficiency
+        '
+        Me.txtAlternatorGearEfficiency.Location = New System.Drawing.Point(162, 71)
+        Me.txtAlternatorGearEfficiency.Name = "txtAlternatorGearEfficiency"
+        Me.txtAlternatorGearEfficiency.Size = New System.Drawing.Size(100, 20)
+        Me.txtAlternatorGearEfficiency.TabIndex = 6
+        '
+        'txtAlternatorMapPath
+        '
+        Me.txtAlternatorMapPath.Location = New System.Drawing.Point(162, 43)
+        Me.txtAlternatorMapPath.Name = "txtAlternatorMapPath"
+        Me.txtAlternatorMapPath.Size = New System.Drawing.Size(319, 20)
+        Me.txtAlternatorMapPath.TabIndex = 4
+        '
+        'txtPowernetVoltage
+        '
+        Me.txtPowernetVoltage.Location = New System.Drawing.Point(162, 16)
+        Me.txtPowernetVoltage.Name = "txtPowernetVoltage"
+        Me.txtPowernetVoltage.Size = New System.Drawing.Size(100, 20)
+        Me.txtPowernetVoltage.TabIndex = 2
+        '
+        'lblDoorActuationTimeSeconds
+        '
+        Me.lblDoorActuationTimeSeconds.AutoSize = true
+        Me.lblDoorActuationTimeSeconds.Location = New System.Drawing.Point(30, 105)
+        Me.lblDoorActuationTimeSeconds.Name = "lblDoorActuationTimeSeconds"
+        Me.lblDoorActuationTimeSeconds.Size = New System.Drawing.Size(114, 13)
+        Me.lblDoorActuationTimeSeconds.TabIndex = 8
+        Me.lblDoorActuationTimeSeconds.Text = "Door ActuationTime(S)"
+        '
+        'lblAlternatorGearEfficiency
+        '
+        Me.lblAlternatorGearEfficiency.AutoSize = true
+        Me.lblAlternatorGearEfficiency.Location = New System.Drawing.Point(30, 75)
+        Me.lblAlternatorGearEfficiency.Name = "lblAlternatorGearEfficiency"
+        Me.lblAlternatorGearEfficiency.Size = New System.Drawing.Size(132, 13)
+        Me.lblAlternatorGearEfficiency.TabIndex = 7
+        Me.lblAlternatorGearEfficiency.Text = "Alternator Pulley Efficiency"
+        '
+        'lblAlternatormapPath
+        '
+        Me.lblAlternatormapPath.AutoSize = true
+        Me.lblAlternatormapPath.Location = New System.Drawing.Point(30, 47)
+        Me.lblAlternatormapPath.Name = "lblAlternatormapPath"
+        Me.lblAlternatormapPath.Size = New System.Drawing.Size(76, 13)
+        Me.lblAlternatormapPath.TabIndex = 5
+        Me.lblAlternatormapPath.Text = "Alternator Map"
+        '
+        'lblPowerNetVoltage
+        '
+        Me.lblPowerNetVoltage.AutoSize = true
+        Me.lblPowerNetVoltage.Location = New System.Drawing.Point(30, 20)
+        Me.lblPowerNetVoltage.Name = "lblPowerNetVoltage"
+        Me.lblPowerNetVoltage.Size = New System.Drawing.Size(91, 13)
+        Me.lblPowerNetVoltage.TabIndex = 3
+        Me.lblPowerNetVoltage.Text = "Powernet Voltage"
+        '
+        'tabPneumaticConfig
+        '
+        Me.tabPneumaticConfig.Controls.Add(Me.pnlPneumaticsUserInput)
+        Me.tabPneumaticConfig.Controls.Add(Me.pnlPneumaticAuxillaries)
+        Me.tabPneumaticConfig.Location = New System.Drawing.Point(4, 22)
+        Me.tabPneumaticConfig.Name = "tabPneumaticConfig"
+        Me.tabPneumaticConfig.Size = New System.Drawing.Size(1470, 704)
+        Me.tabPneumaticConfig.TabIndex = 2
+        Me.tabPneumaticConfig.Text = "Pneumatics"
+        Me.tabPneumaticConfig.UseVisualStyleBackColor = true
+        '
+        'pnlPneumaticsUserInput
+        '
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.btnActuationsMap)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.btnCompressorMap)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblPneumaticsVariablesTitle)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblActuationsMap)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.chkSmartAirCompression)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.chkSmartRegeneration)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblAdBlueDosing)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.chkRetarderBrake)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.txtKneelingHeightMillimeters)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblAirSuspensionControl)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.cboDoors)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.txtCompressorMap)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblCompressorGearEfficiency)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.txtCompressorGearRatio)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblCompressorGearRatio)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.txtCompressorGearEfficiency)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblCompressorMap)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.cboAirSuspensionControl)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblDoors)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.cboAdBlueDosing)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.lblKneelingHeightMillimeters)
+        Me.pnlPneumaticsUserInput.Controls.Add(Me.txtActuationsMap)
+        Me.pnlPneumaticsUserInput.Location = New System.Drawing.Point(403, 17)
+        Me.pnlPneumaticsUserInput.Name = "pnlPneumaticsUserInput"
+        Me.pnlPneumaticsUserInput.Size = New System.Drawing.Size(491, 576)
+        Me.pnlPneumaticsUserInput.TabIndex = 53
+        '
+        'btnActuationsMap
+        '
+        Me.btnActuationsMap.Location = New System.Drawing.Point(449, 343)
+        Me.btnActuationsMap.Name = "btnActuationsMap"
+        Me.btnActuationsMap.Size = New System.Drawing.Size(35, 23)
+        Me.btnActuationsMap.TabIndex = 21
+        Me.btnActuationsMap.Text = ". . ."
+        Me.btnActuationsMap.UseVisualStyleBackColor = true
+        '
+        'btnCompressorMap
+        '
+        Me.btnCompressorMap.Location = New System.Drawing.Point(450, 58)
+        Me.btnCompressorMap.Name = "btnCompressorMap"
+        Me.btnCompressorMap.Size = New System.Drawing.Size(35, 23)
+        Me.btnCompressorMap.TabIndex = 13
+        Me.btnCompressorMap.Text = ". . ."
+        Me.btnCompressorMap.UseVisualStyleBackColor = true
+        '
+        'lblPneumaticsVariablesTitle
+        '
+        Me.lblPneumaticsVariablesTitle.AutoSize = true
+        Me.lblPneumaticsVariablesTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        Me.lblPneumaticsVariablesTitle.ForeColor = System.Drawing.SystemColors.MenuHighlight
+        Me.lblPneumaticsVariablesTitle.Location = New System.Drawing.Point(20, 18)
+        Me.lblPneumaticsVariablesTitle.Name = "lblPneumaticsVariablesTitle"
+        Me.lblPneumaticsVariablesTitle.Size = New System.Drawing.Size(122, 13)
+        Me.lblPneumaticsVariablesTitle.TabIndex = 52
+        Me.lblPneumaticsVariablesTitle.Text = "Pneumatic Variables"
+        '
+        'lblActuationsMap
+        '
+        Me.lblActuationsMap.AutoSize = true
+        Me.lblActuationsMap.Location = New System.Drawing.Point(13, 348)
+        Me.lblActuationsMap.Name = "lblActuationsMap"
+        Me.lblActuationsMap.Size = New System.Drawing.Size(81, 13)
+        Me.lblActuationsMap.TabIndex = 25
+        Me.lblActuationsMap.Text = "Actuations Map"
+        '
+        'chkSmartAirCompression
+        '
+        Me.chkSmartAirCompression.CheckAlign = System.Drawing.ContentAlignment.MiddleRight
+        Me.chkSmartAirCompression.FlatStyle = System.Windows.Forms.FlatStyle.System
+        Me.chkSmartAirCompression.Location = New System.Drawing.Point(16, 430)
+        Me.chkSmartAirCompression.MinimumSize = New System.Drawing.Size(150, 0)
+        Me.chkSmartAirCompression.Name = "chkSmartAirCompression"
+        Me.chkSmartAirCompression.Size = New System.Drawing.Size(153, 22)
+        Me.chkSmartAirCompression.TabIndex = 23
+        Me.chkSmartAirCompression.Text = "Smart Pneumatics"
+        Me.chkSmartAirCompression.UseVisualStyleBackColor = true
+        '
+        'chkSmartRegeneration
+        '
+        Me.chkSmartRegeneration.CheckAlign = System.Drawing.ContentAlignment.BottomRight
+        Me.chkSmartRegeneration.FlatStyle = System.Windows.Forms.FlatStyle.System
+        Me.chkSmartRegeneration.Location = New System.Drawing.Point(16, 469)
+        Me.chkSmartRegeneration.MinimumSize = New System.Drawing.Size(150, 0)
+        Me.chkSmartRegeneration.Name = "chkSmartRegeneration"
+        Me.chkSmartRegeneration.Size = New System.Drawing.Size(153, 22)
+        Me.chkSmartRegeneration.TabIndex = 24
+        Me.chkSmartRegeneration.Text = "Smart Regeneration"
+        Me.chkSmartRegeneration.UseVisualStyleBackColor = true
+        '
+        'lblAdBlueDosing
+        '
+        Me.lblAdBlueDosing.AutoSize = true
+        Me.lblAdBlueDosing.Location = New System.Drawing.Point(13, 184)
+        Me.lblAdBlueDosing.Name = "lblAdBlueDosing"
+        Me.lblAdBlueDosing.Size = New System.Drawing.Size(77, 13)
+        Me.lblAdBlueDosing.TabIndex = 26
+        Me.lblAdBlueDosing.Text = "AdBlue Dosing"
+        '
+        'chkRetarderBrake
+        '
+        Me.chkRetarderBrake.CheckAlign = System.Drawing.ContentAlignment.MiddleRight
+        Me.chkRetarderBrake.FlatStyle = System.Windows.Forms.FlatStyle.System
+        Me.chkRetarderBrake.Location = New System.Drawing.Point(16, 389)
+        Me.chkRetarderBrake.MinimumSize = New System.Drawing.Size(150, 0)
+        Me.chkRetarderBrake.Name = "chkRetarderBrake"
+        Me.chkRetarderBrake.Size = New System.Drawing.Size(153, 22)
+        Me.chkRetarderBrake.TabIndex = 22
+        Me.chkRetarderBrake.TabStop = false
+        Me.chkRetarderBrake.Text = "Retarder Brake"
+        Me.chkRetarderBrake.UseVisualStyleBackColor = true
+        '
+        'txtKneelingHeightMillimeters
+        '
+        Me.txtKneelingHeightMillimeters.Location = New System.Drawing.Point(156, 304)
+        Me.txtKneelingHeightMillimeters.Name = "txtKneelingHeightMillimeters"
+        Me.txtKneelingHeightMillimeters.Size = New System.Drawing.Size(120, 20)
+        Me.txtKneelingHeightMillimeters.TabIndex = 19
+        '
+        'lblAirSuspensionControl
+        '
+        Me.lblAirSuspensionControl.AutoSize = true
+        Me.lblAirSuspensionControl.Location = New System.Drawing.Point(13, 225)
+        Me.lblAirSuspensionControl.Name = "lblAirSuspensionControl"
+        Me.lblAirSuspensionControl.Size = New System.Drawing.Size(113, 13)
+        Me.lblAirSuspensionControl.TabIndex = 29
+        Me.lblAirSuspensionControl.Text = "Air Suspension Control"
+        '
+        'cboDoors
+        '
+        Me.cboDoors.FormattingEnabled = true
+        Me.cboDoors.Items.AddRange(New Object() {"<Select>", "Pneumatic", "Electric"})
+        Me.cboDoors.Location = New System.Drawing.Point(156, 262)
+        Me.cboDoors.Name = "cboDoors"
+        Me.cboDoors.Size = New System.Drawing.Size(121, 21)
+        Me.cboDoors.TabIndex = 18
+        '
+        'txtCompressorMap
+        '
+        Me.txtCompressorMap.Location = New System.Drawing.Point(156, 60)
+        Me.txtCompressorMap.Name = "txtCompressorMap"
+        Me.txtCompressorMap.Size = New System.Drawing.Size(275, 20)
+        Me.txtCompressorMap.TabIndex = 12
+        '
+        'lblCompressorGearEfficiency
+        '
+        Me.lblCompressorGearEfficiency.AutoSize = true
+        Me.lblCompressorGearEfficiency.Location = New System.Drawing.Point(13, 142)
+        Me.lblCompressorGearEfficiency.Name = "lblCompressorGearEfficiency"
+        Me.lblCompressorGearEfficiency.Size = New System.Drawing.Size(137, 13)
+        Me.lblCompressorGearEfficiency.TabIndex = 30
+        Me.lblCompressorGearEfficiency.Text = "Compressor Gear Efficiency"
+        '
+        'txtCompressorGearRatio
+        '
+        Me.txtCompressorGearRatio.ForeColor = System.Drawing.Color.Black
+        Me.txtCompressorGearRatio.Location = New System.Drawing.Point(156, 98)
+        Me.txtCompressorGearRatio.Name = "txtCompressorGearRatio"
+        Me.txtCompressorGearRatio.Size = New System.Drawing.Size(121, 20)
+        Me.txtCompressorGearRatio.TabIndex = 14
+        '
+        'lblCompressorGearRatio
+        '
+        Me.lblCompressorGearRatio.AutoSize = true
+        Me.lblCompressorGearRatio.Location = New System.Drawing.Point(13, 99)
+        Me.lblCompressorGearRatio.Name = "lblCompressorGearRatio"
+        Me.lblCompressorGearRatio.Size = New System.Drawing.Size(116, 13)
+        Me.lblCompressorGearRatio.TabIndex = 14
+        Me.lblCompressorGearRatio.Text = "Compressor Gear Ratio"
+        '
+        'txtCompressorGearEfficiency
+        '
+        Me.txtCompressorGearEfficiency.Location = New System.Drawing.Point(156, 139)
+        Me.txtCompressorGearEfficiency.Name = "txtCompressorGearEfficiency"
+        Me.txtCompressorGearEfficiency.Size = New System.Drawing.Size(121, 20)
+        Me.txtCompressorGearEfficiency.TabIndex = 15
+        '
+        'lblCompressorMap
+        '
+        Me.lblCompressorMap.AutoSize = true
+        Me.lblCompressorMap.Location = New System.Drawing.Point(13, 60)
+        Me.lblCompressorMap.Name = "lblCompressorMap"
+        Me.lblCompressorMap.Size = New System.Drawing.Size(86, 13)
+        Me.lblCompressorMap.TabIndex = 32
+        Me.lblCompressorMap.Text = "Compressor Map"
+        '
+        'cboAirSuspensionControl
+        '
+        Me.cboAirSuspensionControl.FormattingEnabled = true
+        Me.cboAirSuspensionControl.Items.AddRange(New Object() {"<Select>", "Mechanically", "Electrically"})
+        Me.cboAirSuspensionControl.Location = New System.Drawing.Point(156, 220)
+        Me.cboAirSuspensionControl.Name = "cboAirSuspensionControl"
+        Me.cboAirSuspensionControl.Size = New System.Drawing.Size(121, 21)
+        Me.cboAirSuspensionControl.TabIndex = 17
+        '
+        'lblDoors
+        '
+        Me.lblDoors.AutoSize = true
+        Me.lblDoors.Location = New System.Drawing.Point(13, 266)
+        Me.lblDoors.Name = "lblDoors"
+        Me.lblDoors.Size = New System.Drawing.Size(79, 13)
+        Me.lblDoors.TabIndex = 34
+        Me.lblDoors.Text = "Door Operation"
+        '
+        'cboAdBlueDosing
+        '
+        Me.cboAdBlueDosing.FormattingEnabled = true
+        Me.cboAdBlueDosing.Items.AddRange(New Object() {"<Select>", "Pneumatic", "Electric"})
+        Me.cboAdBlueDosing.Location = New System.Drawing.Point(156, 180)
+        Me.cboAdBlueDosing.Name = "cboAdBlueDosing"
+        Me.cboAdBlueDosing.Size = New System.Drawing.Size(121, 21)
+        Me.cboAdBlueDosing.TabIndex = 16
+        '
+        'lblKneelingHeightMillimeters
+        '
+        Me.lblKneelingHeightMillimeters.AutoSize = true
+        Me.lblKneelingHeightMillimeters.Location = New System.Drawing.Point(13, 308)
+        Me.lblKneelingHeightMillimeters.Name = "lblKneelingHeightMillimeters"
+        Me.lblKneelingHeightMillimeters.Size = New System.Drawing.Size(133, 13)
+        Me.lblKneelingHeightMillimeters.TabIndex = 35
+        Me.lblKneelingHeightMillimeters.Text = "Kneeling Height Millimeters"
+        '
+        'txtActuationsMap
+        '
+        Me.txtActuationsMap.Location = New System.Drawing.Point(156, 345)
+        Me.txtActuationsMap.Name = "txtActuationsMap"
+        Me.txtActuationsMap.Size = New System.Drawing.Size(275, 20)
+        Me.txtActuationsMap.TabIndex = 20
+        '
+        'pnlPneumaticAuxillaries
+        '
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblPneumaticAuxillariesTitle)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblAdBlueNIperMinute)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblAirControlledSuspensionNIperMinute)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblBrakingNoRetarderNIperKG)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblBrakingWithRetarderNIperKG)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblBreakingPerKneelingNIperKGinMM)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblDeadVolBlowOutsPerLitresperHour)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblDeadVolumeLitres)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblNonSmartRegenFractionTotalAirDemand)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblOverrunUtilisationForCompressionFraction)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblPerDoorOpeningNI)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblPerStopBrakeActuationNIperKG)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.lblSmartRegenFractionTotalAirDemand)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtAdBlueNIperMinute)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtAirControlledSuspensionNIperMinute)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtBrakingNoRetarderNIperKG)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtBrakingWithRetarderNIperKG)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtBreakingPerKneelingNIperKGinMM)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtDeadVolBlowOutsPerLitresperHour)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtDeadVolumeLitres)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtNonSmartRegenFractionTotalAirDemand)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtOverrunUtilisationForCompressionFraction)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtPerDoorOpeningNI)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtPerStopBrakeActuationNIperKG)
+        Me.pnlPneumaticAuxillaries.Controls.Add(Me.txtSmartRegenFractionTotalAirDemand)
+        Me.pnlPneumaticAuxillaries.Location = New System.Drawing.Point(20, 17)
+        Me.pnlPneumaticAuxillaries.Name = "pnlPneumaticAuxillaries"
+        Me.pnlPneumaticAuxillaries.Size = New System.Drawing.Size(363, 576)
+        Me.pnlPneumaticAuxillaries.TabIndex = 52
+        '
+        'lblPneumaticAuxillariesTitle
+        '
+        Me.lblPneumaticAuxillariesTitle.AutoSize = true
+        Me.lblPneumaticAuxillariesTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        Me.lblPneumaticAuxillariesTitle.ForeColor = System.Drawing.SystemColors.MenuHighlight
+        Me.lblPneumaticAuxillariesTitle.Location = New System.Drawing.Point(23, 18)
+        Me.lblPneumaticAuxillariesTitle.Name = "lblPneumaticAuxillariesTitle"
+        Me.lblPneumaticAuxillariesTitle.Size = New System.Drawing.Size(158, 13)
+        Me.lblPneumaticAuxillariesTitle.TabIndex = 24
+        Me.lblPneumaticAuxillariesTitle.Text = "Pneumatic Auxiliaries Data"
+        '
+        'lblAdBlueNIperMinute
+        '
+        Me.lblAdBlueNIperMinute.AutoSize = true
+        Me.lblAdBlueNIperMinute.Location = New System.Drawing.Point(20, 60)
+        Me.lblAdBlueNIperMinute.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblAdBlueNIperMinute.Name = "lblAdBlueNIperMinute"
+        Me.lblAdBlueNIperMinute.Size = New System.Drawing.Size(120, 13)
+        Me.lblAdBlueNIperMinute.TabIndex = 12
+        Me.lblAdBlueNIperMinute.Text = "AdBlue NI per Minute "
+        '
+        'lblAirControlledSuspensionNIperMinute
+        '
+        Me.lblAirControlledSuspensionNIperMinute.AutoSize = true
+        Me.lblAirControlledSuspensionNIperMinute.Location = New System.Drawing.Point(20, 99)
+        Me.lblAirControlledSuspensionNIperMinute.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblAirControlledSuspensionNIperMinute.Name = "lblAirControlledSuspensionNIperMinute"
+        Me.lblAirControlledSuspensionNIperMinute.Size = New System.Drawing.Size(184, 13)
+        Me.lblAirControlledSuspensionNIperMinute.TabIndex = 13
+        Me.lblAirControlledSuspensionNIperMinute.Text = "Air Controlled Suspension NI / Minute"
+        '
+        'lblBrakingNoRetarderNIperKG
+        '
+        Me.lblBrakingNoRetarderNIperKG.AutoSize = true
+        Me.lblBrakingNoRetarderNIperKG.Location = New System.Drawing.Point(20, 140)
+        Me.lblBrakingNoRetarderNIperKG.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblBrakingNoRetarderNIperKG.Name = "lblBrakingNoRetarderNIperKG"
+        Me.lblBrakingNoRetarderNIperKG.Size = New System.Drawing.Size(138, 13)
+        Me.lblBrakingNoRetarderNIperKG.TabIndex = 14
+        Me.lblBrakingNoRetarderNIperKG.Text = "Braking No Retarder NI/KG"
+        '
+        'lblBrakingWithRetarderNIperKG
+        '
+        Me.lblBrakingWithRetarderNIperKG.AutoSize = true
+        Me.lblBrakingWithRetarderNIperKG.Location = New System.Drawing.Point(20, 183)
+        Me.lblBrakingWithRetarderNIperKG.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblBrakingWithRetarderNIperKG.Name = "lblBrakingWithRetarderNIperKG"
+        Me.lblBrakingWithRetarderNIperKG.Size = New System.Drawing.Size(146, 13)
+        Me.lblBrakingWithRetarderNIperKG.TabIndex = 15
+        Me.lblBrakingWithRetarderNIperKG.Text = "Braking With Retarder NI/KG"
+        '
+        'lblBreakingPerKneelingNIperKGinMM
+        '
+        Me.lblBreakingPerKneelingNIperKGinMM.AutoSize = true
+        Me.lblBreakingPerKneelingNIperKGinMM.Location = New System.Drawing.Point(20, 222)
+        Me.lblBreakingPerKneelingNIperKGinMM.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblBreakingPerKneelingNIperKGinMM.Name = "lblBreakingPerKneelingNIperKGinMM"
+        Me.lblBreakingPerKneelingNIperKGinMM.Size = New System.Drawing.Size(178, 13)
+        Me.lblBreakingPerKneelingNIperKGinMM.TabIndex = 16
+        Me.lblBreakingPerKneelingNIperKGinMM.Text = "Breaking Per Kneeling NI/KG in MM"
+        '
+        'lblDeadVolBlowOutsPerLitresperHour
+        '
+        Me.lblDeadVolBlowOutsPerLitresperHour.AutoSize = true
+        Me.lblDeadVolBlowOutsPerLitresperHour.Location = New System.Drawing.Point(20, 263)
+        Me.lblDeadVolBlowOutsPerLitresperHour.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblDeadVolBlowOutsPerLitresperHour.Name = "lblDeadVolBlowOutsPerLitresperHour"
+        Me.lblDeadVolBlowOutsPerLitresperHour.Size = New System.Drawing.Size(148, 13)
+        Me.lblDeadVolBlowOutsPerLitresperHour.TabIndex = 17
+        Me.lblDeadVolBlowOutsPerLitresperHour.Text = "Dead Vol Blowouts /L / Hour "
+        '
+        'lblDeadVolumeLitres
+        '
+        Me.lblDeadVolumeLitres.AutoSize = true
+        Me.lblDeadVolumeLitres.Location = New System.Drawing.Point(20, 303)
+        Me.lblDeadVolumeLitres.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblDeadVolumeLitres.Name = "lblDeadVolumeLitres"
+        Me.lblDeadVolumeLitres.Size = New System.Drawing.Size(120, 13)
+        Me.lblDeadVolumeLitres.TabIndex = 18
+        Me.lblDeadVolumeLitres.Text = "Dead Volume Litres"
+        '
+        'lblNonSmartRegenFractionTotalAirDemand
+        '
+        Me.lblNonSmartRegenFractionTotalAirDemand.AutoSize = true
+        Me.lblNonSmartRegenFractionTotalAirDemand.Location = New System.Drawing.Point(20, 346)
+        Me.lblNonSmartRegenFractionTotalAirDemand.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblNonSmartRegenFractionTotalAirDemand.Name = "lblNonSmartRegenFractionTotalAirDemand"
+        Me.lblNonSmartRegenFractionTotalAirDemand.Size = New System.Drawing.Size(218, 13)
+        Me.lblNonSmartRegenFractionTotalAirDemand.TabIndex = 19
+        Me.lblNonSmartRegenFractionTotalAirDemand.Text = "Non Smart Regen Fraction Total Air Demand"
+        '
+        'lblOverrunUtilisationForCompressionFraction
+        '
+        Me.lblOverrunUtilisationForCompressionFraction.AutoSize = true
+        Me.lblOverrunUtilisationForCompressionFraction.Location = New System.Drawing.Point(20, 388)
+        Me.lblOverrunUtilisationForCompressionFraction.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblOverrunUtilisationForCompressionFraction.Name = "lblOverrunUtilisationForCompressionFraction"
+        Me.lblOverrunUtilisationForCompressionFraction.Size = New System.Drawing.Size(215, 13)
+        Me.lblOverrunUtilisationForCompressionFraction.TabIndex = 20
+        Me.lblOverrunUtilisationForCompressionFraction.Text = "Overrun Utilisation For Compression Fraction"
+        '
+        'lblPerDoorOpeningNI
+        '
+        Me.lblPerDoorOpeningNI.AutoSize = true
+        Me.lblPerDoorOpeningNI.Location = New System.Drawing.Point(20, 427)
+        Me.lblPerDoorOpeningNI.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblPerDoorOpeningNI.Name = "lblPerDoorOpeningNI"
+        Me.lblPerDoorOpeningNI.Size = New System.Drawing.Size(120, 13)
+        Me.lblPerDoorOpeningNI.TabIndex = 21
+        Me.lblPerDoorOpeningNI.Text = "Per Door Opening NI"
+        '
+        'lblPerStopBrakeActuationNIperKG
+        '
+        Me.lblPerStopBrakeActuationNIperKG.AutoSize = true
+        Me.lblPerStopBrakeActuationNIperKG.Location = New System.Drawing.Point(20, 469)
+        Me.lblPerStopBrakeActuationNIperKG.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblPerStopBrakeActuationNIperKG.Name = "lblPerStopBrakeActuationNIperKG"
+        Me.lblPerStopBrakeActuationNIperKG.Size = New System.Drawing.Size(161, 13)
+        Me.lblPerStopBrakeActuationNIperKG.TabIndex = 22
+        Me.lblPerStopBrakeActuationNIperKG.Text = "Per Stop Brake Actuation NI/KG"
+        '
+        'lblSmartRegenFractionTotalAirDemand
+        '
+        Me.lblSmartRegenFractionTotalAirDemand.AutoSize = true
+        Me.lblSmartRegenFractionTotalAirDemand.Location = New System.Drawing.Point(20, 510)
+        Me.lblSmartRegenFractionTotalAirDemand.MinimumSize = New System.Drawing.Size(120, 0)
+        Me.lblSmartRegenFractionTotalAirDemand.Name = "lblSmartRegenFractionTotalAirDemand"
+        Me.lblSmartRegenFractionTotalAirDemand.Size = New System.Drawing.Size(195, 13)
+        Me.lblSmartRegenFractionTotalAirDemand.TabIndex = 23
+        Me.lblSmartRegenFractionTotalAirDemand.Text = "Smart Regen Fraction Total Air Demand"
+        '
+        'txtAdBlueNIperMinute
+        '
+        Me.txtAdBlueNIperMinute.Location = New System.Drawing.Point(242, 60)
+        Me.txtAdBlueNIperMinute.Name = "txtAdBlueNIperMinute"
+        Me.txtAdBlueNIperMinute.Size = New System.Drawing.Size(100, 20)
+        Me.txtAdBlueNIperMinute.TabIndex = 0
+        '
+        'txtAirControlledSuspensionNIperMinute
+        '
+        Me.txtAirControlledSuspensionNIperMinute.Location = New System.Drawing.Point(242, 98)
+        Me.txtAirControlledSuspensionNIperMinute.Name = "txtAirControlledSuspensionNIperMinute"
+        Me.txtAirControlledSuspensionNIperMinute.Size = New System.Drawing.Size(100, 20)
+        Me.txtAirControlledSuspensionNIperMinute.TabIndex = 1
+        '
+        'txtBrakingNoRetarderNIperKG
+        '
+        Me.txtBrakingNoRetarderNIperKG.Location = New System.Drawing.Point(242, 139)
+        Me.txtBrakingNoRetarderNIperKG.Name = "txtBrakingNoRetarderNIperKG"
+        Me.txtBrakingNoRetarderNIperKG.Size = New System.Drawing.Size(100, 20)
+        Me.txtBrakingNoRetarderNIperKG.TabIndex = 2
+        '
+        'txtBrakingWithRetarderNIperKG
+        '
+        Me.txtBrakingWithRetarderNIperKG.Location = New System.Drawing.Point(242, 180)
+        Me.txtBrakingWithRetarderNIperKG.Name = "txtBrakingWithRetarderNIperKG"
+        Me.txtBrakingWithRetarderNIperKG.Size = New System.Drawing.Size(100, 20)
+        Me.txtBrakingWithRetarderNIperKG.TabIndex = 3
+        '
+        'txtBreakingPerKneelingNIperKGinMM
+        '
+        Me.txtBreakingPerKneelingNIperKGinMM.Location = New System.Drawing.Point(242, 221)
+        Me.txtBreakingPerKneelingNIperKGinMM.Name = "txtBreakingPerKneelingNIperKGinMM"
+        Me.txtBreakingPerKneelingNIperKGinMM.Size = New System.Drawing.Size(100, 20)
+        Me.txtBreakingPerKneelingNIperKGinMM.TabIndex = 4
+        '
+        'txtDeadVolBlowOutsPerLitresperHour
+        '
+        Me.txtDeadVolBlowOutsPerLitresperHour.Location = New System.Drawing.Point(242, 262)
+        Me.txtDeadVolBlowOutsPerLitresperHour.Name = "txtDeadVolBlowOutsPerLitresperHour"
+        Me.txtDeadVolBlowOutsPerLitresperHour.Size = New System.Drawing.Size(100, 20)
+        Me.txtDeadVolBlowOutsPerLitresperHour.TabIndex = 5
+        '
+        'txtDeadVolumeLitres
+        '
+        Me.txtDeadVolumeLitres.Location = New System.Drawing.Point(242, 303)
+        Me.txtDeadVolumeLitres.Name = "txtDeadVolumeLitres"
+        Me.txtDeadVolumeLitres.Size = New System.Drawing.Size(100, 20)
+        Me.txtDeadVolumeLitres.TabIndex = 6
+        '
+        'txtNonSmartRegenFractionTotalAirDemand
+        '
+        Me.txtNonSmartRegenFractionTotalAirDemand.Location = New System.Drawing.Point(242, 344)
+        Me.txtNonSmartRegenFractionTotalAirDemand.Name = "txtNonSmartRegenFractionTotalAirDemand"
+        Me.txtNonSmartRegenFractionTotalAirDemand.Size = New System.Drawing.Size(100, 20)
+        Me.txtNonSmartRegenFractionTotalAirDemand.TabIndex = 7
+        '
+        'txtOverrunUtilisationForCompressionFraction
+        '
+        Me.txtOverrunUtilisationForCompressionFraction.Location = New System.Drawing.Point(242, 385)
+        Me.txtOverrunUtilisationForCompressionFraction.Name = "txtOverrunUtilisationForCompressionFraction"
+        Me.txtOverrunUtilisationForCompressionFraction.Size = New System.Drawing.Size(100, 20)
+        Me.txtOverrunUtilisationForCompressionFraction.TabIndex = 8
+        '
+        'txtPerDoorOpeningNI
+        '
+        Me.txtPerDoorOpeningNI.Location = New System.Drawing.Point(242, 426)
+        Me.txtPerDoorOpeningNI.Name = "txtPerDoorOpeningNI"
+        Me.txtPerDoorOpeningNI.Size = New System.Drawing.Size(100, 20)
+        Me.txtPerDoorOpeningNI.TabIndex = 9
+        '
+        'txtPerStopBrakeActuationNIperKG
+        '
+        Me.txtPerStopBrakeActuationNIperKG.Location = New System.Drawing.Point(242, 467)
+        Me.txtPerStopBrakeActuationNIperKG.Name = "txtPerStopBrakeActuationNIperKG"
+        Me.txtPerStopBrakeActuationNIperKG.Size = New System.Drawing.Size(100, 20)
+        Me.txtPerStopBrakeActuationNIperKG.TabIndex = 10
+        '
+        'txtSmartRegenFractionTotalAirDemand
+        '
+        Me.txtSmartRegenFractionTotalAirDemand.Location = New System.Drawing.Point(242, 508)
+        Me.txtSmartRegenFractionTotalAirDemand.Name = "txtSmartRegenFractionTotalAirDemand"
+        Me.txtSmartRegenFractionTotalAirDemand.Size = New System.Drawing.Size(100, 20)
+        Me.txtSmartRegenFractionTotalAirDemand.TabIndex = 11
+        '
+        'tabHVACConfig
+        '
+        Me.tabHVACConfig.Controls.Add(Me.lblHVACTitle)
+        Me.tabHVACConfig.Controls.Add(Me.txtHVACFuellingLitresPerHour)
+        Me.tabHVACConfig.Controls.Add(Me.lblHVACFuellingLitresPerHour)
+        Me.tabHVACConfig.Controls.Add(Me.txtHVACMechanicalLoadPowerWatts)
+        Me.tabHVACConfig.Controls.Add(Me.lblHVACMechanicalLoadPowerWatts)
+        Me.tabHVACConfig.Controls.Add(Me.txtHVACElectricalLoadPowerWatts)
+        Me.tabHVACConfig.Controls.Add(Me.lblHVACElectricalLoadPowerWatts)
+        Me.tabHVACConfig.Location = New System.Drawing.Point(4, 22)
+        Me.tabHVACConfig.Name = "tabHVACConfig"
+        Me.tabHVACConfig.Size = New System.Drawing.Size(1470, 704)
+        Me.tabHVACConfig.TabIndex = 3
+        Me.tabHVACConfig.Text = "HVAC"
+        Me.tabHVACConfig.UseVisualStyleBackColor = true
+        '
+        'lblHVACTitle
+        '
+        Me.lblHVACTitle.AutoSize = true
+        Me.lblHVACTitle.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0,Byte))
+        Me.lblHVACTitle.ForeColor = System.Drawing.SystemColors.MenuHighlight
+        Me.lblHVACTitle.Location = New System.Drawing.Point(31, 37)
+        Me.lblHVACTitle.Name = "lblHVACTitle"
+        Me.lblHVACTitle.Size = New System.Drawing.Size(164, 13)
+        Me.lblHVACTitle.TabIndex = 25
+        Me.lblHVACTitle.Text = "Steady State Output Values"
+        '
+        'txtHVACFuellingLitresPerHour
+        '
+        Me.txtHVACFuellingLitresPerHour.Location = New System.Drawing.Point(192, 189)
+        Me.txtHVACFuellingLitresPerHour.Name = "txtHVACFuellingLitresPerHour"
+        Me.txtHVACFuellingLitresPerHour.Size = New System.Drawing.Size(100, 20)
+        Me.txtHVACFuellingLitresPerHour.TabIndex = 5
+        '
+        'lblHVACFuellingLitresPerHour
+        '
+        Me.lblHVACFuellingLitresPerHour.AutoSize = true
+        Me.lblHVACFuellingLitresPerHour.Location = New System.Drawing.Point(31, 193)
+        Me.lblHVACFuellingLitresPerHour.Name = "lblHVACFuellingLitresPerHour"
+        Me.lblHVACFuellingLitresPerHour.Size = New System.Drawing.Size(116, 13)
+        Me.lblHVACFuellingLitresPerHour.TabIndex = 4
+        Me.lblHVACFuellingLitresPerHour.Text = "Fuelling Litres Per Hour"
+        '
+        'txtHVACMechanicalLoadPowerWatts
+        '
+        Me.txtHVACMechanicalLoadPowerWatts.Location = New System.Drawing.Point(192, 137)
+        Me.txtHVACMechanicalLoadPowerWatts.Name = "txtHVACMechanicalLoadPowerWatts"
+        Me.txtHVACMechanicalLoadPowerWatts.Size = New System.Drawing.Size(100, 20)
+        Me.txtHVACMechanicalLoadPowerWatts.TabIndex = 3
+        '
+        'lblHVACMechanicalLoadPowerWatts
+        '
+        Me.lblHVACMechanicalLoadPowerWatts.AutoSize = true
+        Me.lblHVACMechanicalLoadPowerWatts.Location = New System.Drawing.Point(31, 141)
+        Me.lblHVACMechanicalLoadPowerWatts.Name = "lblHVACMechanicalLoadPowerWatts"
+        Me.lblHVACMechanicalLoadPowerWatts.Size = New System.Drawing.Size(153, 13)
+        Me.lblHVACMechanicalLoadPowerWatts.TabIndex = 2
+        Me.lblHVACMechanicalLoadPowerWatts.Text = "Mechanical Load Power Watts"
+        '
+        'txtHVACElectricalLoadPowerWatts
+        '
+        Me.txtHVACElectricalLoadPowerWatts.Location = New System.Drawing.Point(192, 85)
+        Me.txtHVACElectricalLoadPowerWatts.Name = "txtHVACElectricalLoadPowerWatts"
+        Me.txtHVACElectricalLoadPowerWatts.Size = New System.Drawing.Size(100, 20)
+        Me.txtHVACElectricalLoadPowerWatts.TabIndex = 1
+        '
+        'lblHVACElectricalLoadPowerWatts
+        '
+        Me.lblHVACElectricalLoadPowerWatts.AutoSize = true
+        Me.lblHVACElectricalLoadPowerWatts.Location = New System.Drawing.Point(31, 89)
+        Me.lblHVACElectricalLoadPowerWatts.Name = "lblHVACElectricalLoadPowerWatts"
+        Me.lblHVACElectricalLoadPowerWatts.Size = New System.Drawing.Size(141, 13)
+        Me.lblHVACElectricalLoadPowerWatts.TabIndex = 0
+        Me.lblHVACElectricalLoadPowerWatts.Text = "Electrical Load Power Watts"
+        '
+        'resultCardContextMenu
+        '
+        Me.resultCardContextMenu.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DeleteToolStripMenuItem})
+        Me.resultCardContextMenu.Name = "resultCardContextMenu"
+        Me.resultCardContextMenu.Size = New System.Drawing.Size(108, 26)
+        '
+        'DeleteToolStripMenuItem
+        '
+        Me.DeleteToolStripMenuItem.Name = "DeleteToolStripMenuItem"
+        Me.DeleteToolStripMenuItem.Size = New System.Drawing.Size(107, 22)
+        Me.DeleteToolStripMenuItem.Text = "Delete"
+        '
+        'ErrorProvider
+        '
+        Me.ErrorProvider.ContainerControl = Me
+        '
+        'Timer1
+        '
+        Me.Timer1.Interval = 1000
+        '
+        'txtVehicleWeightKG
+        '
+        Me.txtVehicleWeightKG.Location = New System.Drawing.Point(123, 34)
+        Me.txtVehicleWeightKG.Name = "txtVehicleWeightKG"
+        Me.txtVehicleWeightKG.Size = New System.Drawing.Size(100, 20)
+        Me.txtVehicleWeightKG.TabIndex = 2
+        '
+        'lblVehiceWeight
+        '
+        Me.lblVehiceWeight.AutoSize = true
+        Me.lblVehiceWeight.Location = New System.Drawing.Point(31, 38)
+        Me.lblVehiceWeight.Name = "lblVehiceWeight"
+        Me.lblVehiceWeight.Size = New System.Drawing.Size(0, 13)
+        Me.lblVehiceWeight.TabIndex = 3
+        '
+        'lblCycle
+        '
+        Me.lblCycle.AutoSize = true
+        Me.lblCycle.Location = New System.Drawing.Point(31, 82)
+        Me.lblCycle.Name = "lblCycle"
+        Me.lblCycle.Size = New System.Drawing.Size(0, 13)
+        Me.lblCycle.TabIndex = 5
+        '
+        'cboCycle
+        '
+        Me.cboCycle.FormattingEnabled = true
+        Me.cboCycle.Items.AddRange(New Object() {"Urban", "Heavy urban", "Suburban", "Interurban", "Coach"})
+        Me.cboCycle.Location = New System.Drawing.Point(123, 78)
+        Me.cboCycle.Name = "cboCycle"
+        Me.cboCycle.Size = New System.Drawing.Size(121, 21)
+        Me.cboCycle.TabIndex = 6
+        '
+        'txtFuelMap
+        '
+        Me.txtFuelMap.Location = New System.Drawing.Point(123, 127)
+        Me.txtFuelMap.Name = "txtFuelMap"
+        Me.txtFuelMap.Size = New System.Drawing.Size(649, 20)
+        Me.txtFuelMap.TabIndex = 7
+        '
+        'lblFuelMap
+        '
+        Me.lblFuelMap.AutoSize = true
+        Me.lblFuelMap.Location = New System.Drawing.Point(31, 131)
+        Me.lblFuelMap.Name = "lblFuelMap"
+        Me.lblFuelMap.Size = New System.Drawing.Size(0, 13)
+        Me.lblFuelMap.TabIndex = 8
+        '
+        'btnFuelMap
+        '
+        Me.btnFuelMap.Location = New System.Drawing.Point(778, 126)
+        Me.btnFuelMap.Name = "btnFuelMap"
+        Me.btnFuelMap.Size = New System.Drawing.Size(38, 23)
+        Me.btnFuelMap.TabIndex = 9
+        Me.btnFuelMap.Text = ". . . "
+        Me.btnFuelMap.UseVisualStyleBackColor = true
+        '
+        'tabGeneralConfig
+        '
+        Me.tabGeneralConfig.Controls.Add(Me.btnFuelMap)
+        Me.tabGeneralConfig.Controls.Add(Me.lblFuelMap)
+        Me.tabGeneralConfig.Controls.Add(Me.txtFuelMap)
+        Me.tabGeneralConfig.Controls.Add(Me.cboCycle)
+        Me.tabGeneralConfig.Controls.Add(Me.lblCycle)
+        Me.tabGeneralConfig.Controls.Add(Me.lblVehiceWeight)
+        Me.tabGeneralConfig.Controls.Add(Me.txtVehicleWeightKG)
+        Me.tabGeneralConfig.Location = New System.Drawing.Point(4, 22)
+        Me.tabGeneralConfig.Name = "tabGeneralConfig"
+        Me.tabGeneralConfig.Padding = New System.Windows.Forms.Padding(3)
+        Me.tabGeneralConfig.Size = New System.Drawing.Size(1470, 704)
+        Me.tabGeneralConfig.TabIndex = 0
+        Me.tabGeneralConfig.Text = "General"
+        Me.tabGeneralConfig.UseVisualStyleBackColor = true
+        '
+        'Dashboard
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.AutoValidate = System.Windows.Forms.AutoValidate.EnableAllowFocusChange
+        Me.ClientSize = New System.Drawing.Size(1502, 794)
+        Me.Controls.Add(Me.pnlMain)
+        Me.Name = "Dashboard"
+        Me.Text = "Auxiliaries Configuration"
+        Me.pnlMain.ResumeLayout(false)
+        Me.tabMain.ResumeLayout(false)
+        Me.tabElectricalConfig.ResumeLayout(false)
+        Me.tabElectricalConfig.PerformLayout
+        CType(Me.gvResultsCardOverrun,System.ComponentModel.ISupportInitialize).EndInit
+        CType(Me.gvResultsCardTraction,System.ComponentModel.ISupportInitialize).EndInit
+        CType(Me.gvResultsCardIdle,System.ComponentModel.ISupportInitialize).EndInit
+        CType(Me.gvElectricalConsumables,System.ComponentModel.ISupportInitialize).EndInit
+        Me.tabPneumaticConfig.ResumeLayout(false)
+        Me.pnlPneumaticsUserInput.ResumeLayout(false)
+        Me.pnlPneumaticsUserInput.PerformLayout
+        Me.pnlPneumaticAuxillaries.ResumeLayout(false)
+        Me.pnlPneumaticAuxillaries.PerformLayout
+        Me.tabHVACConfig.ResumeLayout(false)
+        Me.tabHVACConfig.PerformLayout
+        Me.resultCardContextMenu.ResumeLayout(false)
+        CType(Me.ErrorProvider,System.ComponentModel.ISupportInitialize).EndInit
+        Me.tabGeneralConfig.ResumeLayout(false)
+        Me.tabGeneralConfig.PerformLayout
+        Me.ResumeLayout(false)
+
+End Sub
+    Friend WithEvents pnlMain As System.Windows.Forms.Panel
+    Friend WithEvents btnCancel As System.Windows.Forms.Button
+    Friend WithEvents resultCardContextMenu As System.Windows.Forms.ContextMenuStrip
+    Friend WithEvents DeleteToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents ErrorProvider As System.Windows.Forms.ErrorProvider
+    Friend WithEvents tabMain As System.Windows.Forms.TabControl
+    Friend WithEvents tabElectricalConfig As System.Windows.Forms.TabPage
+    Friend WithEvents gvResultsCardOverrun As System.Windows.Forms.DataGridView
+    Friend WithEvents gvResultsCardTraction As System.Windows.Forms.DataGridView
+    Friend WithEvents lblResultsOverrun As System.Windows.Forms.Label
+    Friend WithEvents lblResultsTractionOn As System.Windows.Forms.Label
+    Friend WithEvents lblResultsIdle As System.Windows.Forms.Label
+    Friend WithEvents chkSmartElectricals As System.Windows.Forms.CheckBox
+    Friend WithEvents lblElectricalConsumables As System.Windows.Forms.Label
+    Friend WithEvents gvElectricalConsumables As System.Windows.Forms.DataGridView
+    Friend WithEvents txtDoorActuationTimeSeconds As System.Windows.Forms.TextBox
+    Friend WithEvents txtAlternatorGearEfficiency As System.Windows.Forms.TextBox
+    Friend WithEvents txtAlternatorMapPath As System.Windows.Forms.TextBox
+    Friend WithEvents txtPowernetVoltage As System.Windows.Forms.TextBox
+    Friend WithEvents lblDoorActuationTimeSeconds As System.Windows.Forms.Label
+    Friend WithEvents lblAlternatorGearEfficiency As System.Windows.Forms.Label
+    Friend WithEvents lblAlternatormapPath As System.Windows.Forms.Label
+    Friend WithEvents lblPowerNetVoltage As System.Windows.Forms.Label
+    Friend WithEvents tabPneumaticConfig As System.Windows.Forms.TabPage
+    Friend WithEvents pnlPneumaticsUserInput As System.Windows.Forms.Panel
+    Friend WithEvents btnActuationsMap As System.Windows.Forms.Button
+    Friend WithEvents btnCompressorMap As System.Windows.Forms.Button
+    Friend WithEvents lblPneumaticsVariablesTitle As System.Windows.Forms.Label
+    Friend WithEvents lblActuationsMap As System.Windows.Forms.Label
+    Friend WithEvents chkSmartAirCompression As System.Windows.Forms.CheckBox
+    Friend WithEvents chkSmartRegeneration As System.Windows.Forms.CheckBox
+    Friend WithEvents lblAdBlueDosing As System.Windows.Forms.Label
+    Friend WithEvents chkRetarderBrake As System.Windows.Forms.CheckBox
+    Friend WithEvents txtKneelingHeightMillimeters As System.Windows.Forms.TextBox
+    Friend WithEvents lblAirSuspensionControl As System.Windows.Forms.Label
+    Friend WithEvents cboDoors As System.Windows.Forms.ComboBox
+    Friend WithEvents txtCompressorMap As System.Windows.Forms.TextBox
+    Friend WithEvents lblCompressorGearEfficiency As System.Windows.Forms.Label
+    Friend WithEvents txtCompressorGearRatio As System.Windows.Forms.TextBox
+    Friend WithEvents lblCompressorGearRatio As System.Windows.Forms.Label
+    Friend WithEvents txtCompressorGearEfficiency As System.Windows.Forms.TextBox
+    Friend WithEvents lblCompressorMap As System.Windows.Forms.Label
+    Friend WithEvents cboAirSuspensionControl As System.Windows.Forms.ComboBox
+    Friend WithEvents lblDoors As System.Windows.Forms.Label
+    Friend WithEvents cboAdBlueDosing As System.Windows.Forms.ComboBox
+    Friend WithEvents lblKneelingHeightMillimeters As System.Windows.Forms.Label
+    Friend WithEvents txtActuationsMap As System.Windows.Forms.TextBox
+    Friend WithEvents pnlPneumaticAuxillaries As System.Windows.Forms.Panel
+    Friend WithEvents lblPneumaticAuxillariesTitle As System.Windows.Forms.Label
+    Friend WithEvents lblAdBlueNIperMinute As System.Windows.Forms.Label
+    Friend WithEvents lblAirControlledSuspensionNIperMinute As System.Windows.Forms.Label
+    Friend WithEvents lblBrakingNoRetarderNIperKG As System.Windows.Forms.Label
+    Friend WithEvents lblBrakingWithRetarderNIperKG As System.Windows.Forms.Label
+    Friend WithEvents lblBreakingPerKneelingNIperKGinMM As System.Windows.Forms.Label
+    Friend WithEvents lblDeadVolBlowOutsPerLitresperHour As System.Windows.Forms.Label
+    Friend WithEvents lblDeadVolumeLitres As System.Windows.Forms.Label
+    Friend WithEvents lblNonSmartRegenFractionTotalAirDemand As System.Windows.Forms.Label
+    Friend WithEvents lblOverrunUtilisationForCompressionFraction As System.Windows.Forms.Label
+    Friend WithEvents lblPerDoorOpeningNI As System.Windows.Forms.Label
+    Friend WithEvents lblPerStopBrakeActuationNIperKG As System.Windows.Forms.Label
+    Friend WithEvents lblSmartRegenFractionTotalAirDemand As System.Windows.Forms.Label
+    Friend WithEvents txtAdBlueNIperMinute As System.Windows.Forms.TextBox
+    Friend WithEvents txtAirControlledSuspensionNIperMinute As System.Windows.Forms.TextBox
+    Friend WithEvents txtBrakingNoRetarderNIperKG As System.Windows.Forms.TextBox
+    Friend WithEvents txtBrakingWithRetarderNIperKG As System.Windows.Forms.TextBox
+    Friend WithEvents txtBreakingPerKneelingNIperKGinMM As System.Windows.Forms.TextBox
+    Friend WithEvents txtDeadVolBlowOutsPerLitresperHour As System.Windows.Forms.TextBox
+    Friend WithEvents txtDeadVolumeLitres As System.Windows.Forms.TextBox
+    Friend WithEvents txtNonSmartRegenFractionTotalAirDemand As System.Windows.Forms.TextBox
+    Friend WithEvents txtOverrunUtilisationForCompressionFraction As System.Windows.Forms.TextBox
+    Friend WithEvents txtPerDoorOpeningNI As System.Windows.Forms.TextBox
+    Friend WithEvents txtPerStopBrakeActuationNIperKG As System.Windows.Forms.TextBox
+    Friend WithEvents txtSmartRegenFractionTotalAirDemand As System.Windows.Forms.TextBox
+    Friend WithEvents tabHVACConfig As System.Windows.Forms.TabPage
+    Friend WithEvents btnAlternatorMapPath As System.Windows.Forms.Button
+    Friend WithEvents gvResultsCardIdle As System.Windows.Forms.DataGridView
+    Friend WithEvents txtHVACFuellingLitresPerHour As System.Windows.Forms.TextBox
+    Friend WithEvents lblHVACFuellingLitresPerHour As System.Windows.Forms.Label
+    Friend WithEvents txtHVACMechanicalLoadPowerWatts As System.Windows.Forms.TextBox
+    Friend WithEvents lblHVACMechanicalLoadPowerWatts As System.Windows.Forms.Label
+    Friend WithEvents txtHVACElectricalLoadPowerWatts As System.Windows.Forms.TextBox
+    Friend WithEvents lblHVACElectricalLoadPowerWatts As System.Windows.Forms.Label
+    Friend WithEvents lblHVACTitle As System.Windows.Forms.Label
+    Friend WithEvents Timer1 As System.Windows.Forms.Timer
+    Friend WithEvents btnLoad As System.Windows.Forms.Button
+    Friend WithEvents btnSave As System.Windows.Forms.Button
+    Friend WithEvents tabGeneralConfig As System.Windows.Forms.TabPage
+    Friend WithEvents btnFuelMap As System.Windows.Forms.Button
+    Friend WithEvents lblFuelMap As System.Windows.Forms.Label
+    Friend WithEvents txtFuelMap As System.Windows.Forms.TextBox
+    Friend WithEvents cboCycle As System.Windows.Forms.ComboBox
+    Friend WithEvents lblCycle As System.Windows.Forms.Label
+    Friend WithEvents lblVehiceWeight As System.Windows.Forms.Label
+    Friend WithEvents txtVehicleWeightKG As System.Windows.Forms.TextBox
+
+End Class
diff --git a/VECTOAux/VectoAuxiliaries/UI/Dashboard.resx b/VECTOAux/VectoAuxiliaries/UI/Dashboard.resx
new file mode 100644
index 0000000000..9591f90d7f
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/Dashboard.resx
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="resultCardContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>362, 19</value>
+  </metadata>
+  <metadata name="ErrorProvider.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>168, 17</value>
+  </metadata>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>25</value>
+  </metadata>
+  <metadata name="Timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>543, 19</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/VECTOAux/VectoAuxiliaries/UI/Dashboard.vb b/VECTOAux/VectoAuxiliaries/UI/Dashboard.vb
new file mode 100644
index 0000000000..a60d734189
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/Dashboard.vb
@@ -0,0 +1,1048 @@
+Imports VectoAuxiliaries
+Imports VectoAuxiliaries.Electrics
+Imports VectoAuxiliaries.Pneumatics
+Imports System.ComponentModel
+Imports System.Windows.Forms
+Imports System.Drawing
+
+Public Class Dashboard
+
+#Region "Fields"
+
+Public auxEnvironment As New AuxiliaryConfig("")
+Private TabColors As Dictionary(Of TabPage, Color) = New Dictionary(Of TabPage, Color)()
+Private processing As Boolean = False
+Private SecondsIntoCycle As Integer = 0
+
+Private vectoFile As String = "C:\Users\tb28\Source\Workspaces\VECTO\AuxillaryTestHarness\bin\Debug\vectopath.vecto"
+
+#End Region
+
+
+Private Sub SetupControls()
+
+
+      Dim cIndex As Integer = 0
+
+      gvElectricalConsumables.AutoGenerateColumns = False
+
+     'ElectricalConsumerGrid 
+     'Columns
+     cIndex = gvElectricalConsumables.Columns.Add("Category", "Category")
+     gvElectricalConsumables.Columns(cIndex).DataPropertyName = "Category"
+     gvElectricalConsumables.Columns(cIndex).MinimumWidth = 150
+     gvElectricalConsumables.Columns(cIndex).ReadOnly = True
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Padding = New Padding(1, 2, 1, 1)
+
+     cIndex = gvElectricalConsumables.Columns.Add("ConsumerName", "Name")
+
+     gvElectricalConsumables.Columns(cIndex).DataPropertyName = "ConsumerName"
+     gvElectricalConsumables.Columns(cIndex).MinimumWidth = 308
+     gvElectricalConsumables.Columns(cIndex).ReadOnly = True
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Padding = New Padding(1, 2, 1, 1)
+
+     Dim baseVehicle As New DataGridViewCheckBoxColumn(False)
+     baseVehicle.HeaderText = "Base Vehicle"
+     cIndex = gvElectricalConsumables.Columns.Add(baseVehicle)
+     gvElectricalConsumables.Columns(cIndex).DataPropertyName = "BaseVehicle"
+     gvElectricalConsumables.Columns(cIndex).Width = 75
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Padding = New Padding(1, 2, 1, 1)
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.ToolTipText = "Energy included in the calculations of base vehicle"
+
+     cIndex = gvElectricalConsumables.Columns.Add("NominalConsumptionAmps", "Nominal Amps")
+     gvElectricalConsumables.Columns(cIndex).DataPropertyName = "NominalConsumptionAmps"
+     gvElectricalConsumables.Columns(cIndex).Width = 70
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Padding = New Padding(1, 2, 1, 1)
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.ToolTipText = "Nominal consumption in AMPS"
+
+     cIndex = gvElectricalConsumables.Columns.Add("PhaseIdle_TractionOn", "PhaseIdle/ TractionOn")
+     gvElectricalConsumables.Columns(cIndex).DataPropertyName = "PhaseIdle_TractionOn"
+     gvElectricalConsumables.Columns(cIndex).Width = 70
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Padding = New Padding(1, 2, 1, 1)
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.ToolTipText = "Represents the amount of time (during engine fueling) as " & vbCrLf & "percentage that the consumer is active during the cycle."
+
+     cIndex = gvElectricalConsumables.Columns.Add("NumberInActualVehicle", "Num in Vehicle")
+     gvElectricalConsumables.Columns(cIndex).DataPropertyName = "NumberInActualVehicle"
+     gvElectricalConsumables.Columns(cIndex).Width = 70
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Alignment = DataGridViewContentAlignment.TopCenter
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.Style.Padding = New Padding(1, 2, 1, 1)
+     gvElectricalConsumables.Columns(cIndex).HeaderCell.ToolTipText = "Number of consumables of this" & vbCrLf & "type installed on the vehicle."
+
+     'ResultCard Grids
+
+     'Handler for deleting rows.
+
+
+     'IDLE
+
+     cIndex = gvResultsCardIdle.Columns.Add("Amps", "Amps")
+     gvResultsCardIdle.Columns(cIndex).DataPropertyName = "Amps"
+     gvResultsCardIdle.Columns(cIndex).Width = 65
+
+     cIndex = gvResultsCardIdle.Columns.Add("SmartAmps", "SmartAmps")
+     gvResultsCardIdle.Columns(cIndex).DataPropertyName = "SmartAmps"
+     gvResultsCardIdle.Columns(cIndex).Width = 65
+
+     'TRACTION
+     cIndex = gvResultsCardTraction.Columns.Add("Amps", "Amps")
+     gvResultsCardTraction.Columns(cIndex).DataPropertyName = "Amps"
+     gvResultsCardTraction.Columns(cIndex).Width = 65
+
+     cIndex = gvResultsCardTraction.Columns.Add("SmartAmps", "SmartAmps")
+     gvResultsCardTraction.Columns(cIndex).DataPropertyName = "SmartAmps"
+     gvResultsCardTraction.Columns(cIndex).Width = 65
+
+     'OVERRUN
+     cIndex = gvResultsCardOverrun.Columns.Add("Amps", "Amps")
+     gvResultsCardOverrun.Columns(cIndex).DataPropertyName = "Amps"
+     gvResultsCardOverrun.Columns(cIndex).Width = 65
+
+     cIndex = gvResultsCardOverrun.Columns.Add("SmartAmps", "SmartAmps")
+     gvResultsCardOverrun.Columns(cIndex).DataPropertyName = "SmartAmps"
+     gvResultsCardOverrun.Columns(cIndex).Width = 65
+
+
+
+
+End Sub
+#Region "Binding Control"
+
+
+Private Sub CreateBindings()
+
+     'AuxEnvironment.Vecto Bindings
+     txtPowernetVoltage.DataBindings.Add("Text", auxEnvironment.ElectricalUserInputsConfig, "PowerNetVoltage")
+     txtVehicleWeightKG.DataBindings.Add("Text", auxEnvironment.VectoInputs, "VehicleWeightKG")
+     cboCycle.DataBindings.Add("Text", auxEnvironment.VectoInputs, "Cycle")
+     txtFuelMap.DataBindings.Add("Text", auxEnvironment.VectoInputs, "FuelMap")
+
+     'Electricals General
+     txtAlternatorMapPath.DataBindings.Add("Text", auxEnvironment.ElectricalUserInputsConfig, "AlternatorMap")
+     txtAlternatorGearEfficiency.DataBindings.Add("Text", auxEnvironment.ElectricalUserInputsConfig, "AlternatorGearEfficiency")
+     txtDoorActuationTimeSeconds.DataBindings.Add("Text", auxEnvironment.ElectricalUserInputsConfig, "DoorActuationTimeSecond")
+     chkSmartElectricals.DataBindings.Add("Checked", auxEnvironment.ElectricalUserInputsConfig, "SmartElectrical", False, DataSourceUpdateMode.OnPropertyChanged)
+
+
+     'Electrical ConsumablesGrid
+     Dim electricalConsumerBinding As New BindingList(Of IElectricalConsumer)(auxEnvironment.ElectricalUserInputsConfig.ElectricalConsumers.Items)
+     gvElectricalConsumables.DataSource = electricalConsumerBinding
+
+
+
+     'ResultCards
+
+         'IDLE
+         Dim idleBinding = New BindingList(Of SmartResult)
+         idleBinding = New BindingList(Of SmartResult)(auxEnvironment.ElectricalUserInputsConfig.ResultCardIdle.Results)
+         idleBinding.AllowNew = True
+         idleBinding.AllowRemove = True
+         gvResultsCardIdle.DataSource = idleBinding
+
+         'TRACTION
+         Dim tractionBinding As BindingList(Of SmartResult)
+         tractionBinding = New BindingList(Of SmartResult)(auxEnvironment.ElectricalUserInputsConfig.ResultCardTraction.Results)
+         tractionBinding.AllowNew = True
+         tractionBinding.AllowRemove = True
+         gvResultsCardTraction.DataSource = tractionBinding
+
+         'OVERRUN
+         Dim overrunBinding As BindingList(Of SmartResult)
+         overrunBinding = New BindingList(Of SmartResult)(auxEnvironment.ElectricalUserInputsConfig.ResultCardOverrun.Results)
+         overrunBinding.AllowNew = True
+         overrunBinding.AllowRemove = True
+         gvResultsCardOverrun.DataSource = overrunBinding
+
+
+        'Pneumatic Auxillaries Binding
+        txtAdBlueNIperMinute.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "AdBlueNIperMinute")
+
+        txtOverrunUtilisationForCompressionFraction.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "OverrunUtilisationForCompressionFraction")
+        txtBrakingWithRetarderNIperKG.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "BrakingWithRetarderNIperKG")
+        txtBrakingNoRetarderNIperKG.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "BrakingNoRetarderNIperKG")
+        txtBreakingPerKneelingNIperKGinMM.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "BreakingPerKneelingNIperKGinMM", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "0.########")
+        txtPerDoorOpeningNI.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "PerDoorOpeningNI")
+        txtPerStopBrakeActuationNIperKG.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "PerStopBrakeActuationNIperKG")
+        txtAirControlledSuspensionNIperMinute.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "AirControlledSuspensionNIperMinute")
+        txtNonSmartRegenFractionTotalAirDemand.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "NonSmartRegenFractionTotalAirDemand")
+        txtSmartRegenFractionTotalAirDemand.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "SmartRegenFractionTotalAirDemand")
+        txtDeadVolumeLitres.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "DeadVolumeLitres")
+        txtDeadVolBlowOutsPerLitresperHour.DataBindings.Add("Text", auxEnvironment.PneumaticAuxillariesConfig, "DeadVolBlowOutsPerLitresperHour")
+
+        'Pneumatic UserInputsConfig Binding    
+        txtCompressorMap.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "CompressorMap")
+        txtCompressorGearEfficiency.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "CompressorGearEfficiency")
+        txtCompressorGearRatio.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "CompressorGearRatio")
+        txtActuationsMap.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "ActuationsMap")
+        chkSmartAirCompression.DataBindings.Add("Checked", auxEnvironment.PneumaticUserInputsConfig, "SmartAirCompression", False, DataSourceUpdateMode.OnPropertyChanged)
+
+
+
+
+        chkSmartRegeneration.DataBindings.Add("Checked", auxEnvironment.PneumaticUserInputsConfig, "SmartRegeneration", False, DataSourceUpdateMode.OnPropertyChanged)
+        chkRetarderBrake.DataBindings.Add("Checked", auxEnvironment.PneumaticUserInputsConfig, "RetarderBrake")
+        txtKneelingHeightMillimeters.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "KneelingHeightMillimeters")
+        cboAirSuspensionControl.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "AirSuspensionControl", False)
+        cboAdBlueDosing.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "AdBlueDosing")
+        cboDoors.DataBindings.Add("Text", auxEnvironment.PneumaticUserInputsConfig, "Doors")
+
+        'HVAC Bindings     
+        txtHVACElectricalLoadPowerWatts.DataBindings.Add("Text", auxEnvironment.HvacUserInputsConfig.SteadyStateModel, "HVACElectricalLoadPowerWatts")
+        txtHVACFuellingLitresPerHour.DataBindings.Add("Text", auxEnvironment.HvacUserInputsConfig.SteadyStateModel, "HVACFuellingLitresPerHour")
+        txtHVACMechanicalLoadPowerWatts.DataBindings.Add("Text", auxEnvironment.HvacUserInputsConfig.SteadyStateModel, "HVACMechanicalLoadPowerWatts")
+
+        'Signals
+
+
+
+End Sub
+
+Private Sub EnsureBinding()
+        With tabMain
+            Dim lastSelectedTabIndex As Integer = .SelectedIndex
+            If lastSelectedTabIndex < 0 OrElse lastSelectedTabIndex > .TabCount Then lastSelectedTabIndex = 0
+            For currentTab As Integer = 0 To .TabCount - 1
+                .SelectedIndex = currentTab
+            Next
+            .SelectedIndex = 0
+        End With
+    End Sub
+
+
+#End Region
+
+
+'Validation
+#Region "Validation Helpers"
+
+
+Public Function IsPostiveNumber(ByVal test As String) As Boolean
+
+     'Is this numeric sanity check.
+     If Not IsNumeric(test) Then Return False
+
+     Dim number As Single
+
+     If Not Single.TryParse(test, number) Then Return False
+
+     If number <= 0 Then Return False
+
+
+     Return True
+
+End Function
+
+Public Function IsZeroOrPostiveNumber(ByVal test As String) As Boolean
+
+     'Is this numeric sanity check.
+     If Not IsNumeric(test) Then Return False
+
+     Dim number As Single
+
+     If Not Single.TryParse(test, number) Then Return False
+
+     If number < 0 Then Return False
+
+
+     Return True
+
+End Function
+
+Public Function IsNumberBetweenZeroandOne(test As String)
+
+     'Is this numeric sanity check.
+     If Not IsNumeric(test) Then Return False
+
+     Dim number As Single
+
+     If Not Single.TryParse(test, number) Then Return False
+
+     If number < 0 OrElse number > 1 Then Return False
+
+     Return True
+
+End Function
+
+Public Function IsIntegerZeroOrPositiveNumber(test As String)
+
+     'Is this numeric sanity check.
+     If Not IsNumeric(test) Then Return False
+
+     'if not integer then return false
+
+     Dim number As Integer
+
+     If Not Integer.TryParse(test, number) Then Return False
+
+     If number < 0 Then Return False
+
+     Return True
+
+
+End Function
+
+#End Region
+#Region "Validation Control"
+
+
+'****** PNEUMATIC VALIDATION
+Public Sub Validating_PneumaticHandler(sender As Object, e As CancelEventArgs) Handles txtAdBlueNIperMinute.Validating, txtBrakingWithRetarderNIperKG.Validating, txtBrakingNoRetarderNIperKG.Validating, txtAirControlledSuspensionNIperMinute.Validating, txtBreakingPerKneelingNIperKGinMM.Validating, txtSmartRegenFractionTotalAirDemand.Validating, txtPerStopBrakeActuationNIperKG.Validating, txtPerDoorOpeningNI.Validating, txtOverrunUtilisationForCompressionFraction.Validating, txtNonSmartRegenFractionTotalAirDemand.Validating, txtDeadVolumeLitres.Validating, txtDeadVolBlowOutsPerLitresperHour.Validating, txtKneelingHeightMillimeters.Validating, txtCompressorMap.Validating, txtCompressorGearRatio.Validating, txtCompressorGearEfficiency.Validating, txtActuationsMap.Validating, cboDoors.Validating, cboAirSuspensionControl.Validating, cboAdBlueDosing.Validating
+
+    e.Cancel = Not Validate_Pneumatics()
+
+End Sub
+Public Function Validate_Pneumatics() As Boolean
+
+       Dim result As Boolean = True
+
+       'PNEUMATIC AUXILLARIES PART
+       '***************************
+
+
+       'AdBlue NI per Minute : txtAdBlueNIperMinute
+       If Not IsZeroOrPostiveNumber(txtAdBlueNIperMinute.Text) Then
+         ErrorProvider.SetError(txtAdBlueNIperMinute, "Please provide a non negative number.")
+         result = False
+       Else
+          ErrorProvider.SetError(txtAdBlueNIperMinute, String.Empty)
+       End If
+
+       'Overrun Utilisation For Compression Fraction : txtOverrunUtilisationForCompressionFraction
+       If Not IsNumberBetweenZeroandOne(txtOverrunUtilisationForCompressionFraction.Text) Then
+         ErrorProvider.SetError(txtOverrunUtilisationForCompressionFraction, "Please provide a non negative between 0 and 1.")
+         result = False
+         Else
+         ErrorProvider.SetError(txtOverrunUtilisationForCompressionFraction, String.Empty)
+       End If
+
+       'Braking With Retarder NI per KG : txtBrakingWithRetarderNIperKG
+       If Not IsZeroOrPostiveNumber(txtBrakingWithRetarderNIperKG.Text) Then
+         ErrorProvider.SetError(txtBrakingWithRetarderNIperKG, "Please provide a non negative number.")
+         result = False
+        Else
+         ErrorProvider.SetError(txtBrakingWithRetarderNIperKG, String.Empty)
+       End If
+
+       'Braking No Retarder NI per KG : txtBrakingNoRetarderNIperKG
+       If Not IsZeroOrPostiveNumber(txtBrakingNoRetarderNIperKG.Text) Then
+         ErrorProvider.SetError(txtBrakingNoRetarderNIperKG, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtBrakingNoRetarderNIperKG, String.Empty)
+       End If
+
+       'Breaking Per Kneeling NI per KG in MM : txtBreakingPerKneelingNIperKGinMM
+       If Not IsZeroOrPostiveNumber(txtBreakingPerKneelingNIperKGinMM.Text) Then
+         ErrorProvider.SetError(txtBreakingPerKneelingNIperKGinMM, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtBreakingPerKneelingNIperKGinMM, String.Empty)
+       End If
+
+       'Per Door Opening NI : txtPerDoorOpeningNI
+       If Not IsZeroOrPostiveNumber(txtPerDoorOpeningNI.Text) Then
+         ErrorProvider.SetError(txtPerDoorOpeningNI, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtPerDoorOpeningNI, String.Empty)
+       End If
+
+       'Per Stop Brake Actuation NI per KG : txtPerStopBrakeActuationNIperKG
+       If Not IsZeroOrPostiveNumber(txtPerStopBrakeActuationNIperKG.Text) Then
+         ErrorProvider.SetError(txtPerStopBrakeActuationNIperKG, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtPerStopBrakeActuationNIperKG, String.Empty)
+       End If
+
+       'Air Controlled Suspension NI per Minute : txtAirControlledSuspensionNIperMinute
+       If Not IsZeroOrPostiveNumber(txtAirControlledSuspensionNIperMinute.Text) Then
+         ErrorProvider.SetError(txtAirControlledSuspensionNIperMinute, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtAirControlledSuspensionNIperMinute, String.Empty)
+       End If
+
+       'Non Smart Regen Fraction Total Air Demand : txtNonSmartRegenFractionTotalAirDemand
+       If Not IsZeroOrPostiveNumber(txtNonSmartRegenFractionTotalAirDemand.Text) Then
+         ErrorProvider.SetError(txtNonSmartRegenFractionTotalAirDemand, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtNonSmartRegenFractionTotalAirDemand, String.Empty)
+       End If
+
+       'Smart Regen Fraction Total Air Demand : txtSmartRegenFractionTotalAirDemand
+       If Not IsNumberBetweenZeroandOne(txtSmartRegenFractionTotalAirDemand.Text) Then
+         ErrorProvider.SetError(txtSmartRegenFractionTotalAirDemand, "Please provide a non negative between 0 and 1.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtSmartRegenFractionTotalAirDemand, String.Empty)
+       End If
+
+
+       'Dead Volume Litres : txtDeadVolumeLitres
+       If Not IsZeroOrPostiveNumber(txtDeadVolumeLitres.Text) Then
+         ErrorProvider.SetError(txtDeadVolumeLitres, "Please provide a non negative number.")
+         result = False
+       Else
+         ErrorProvider.SetError(txtDeadVolumeLitres, String.Empty)
+       End If
+
+
+       'Dead Vol BlowOuts Per Litresper Hour : txtDeadVolBlowOutsPerLitresperHour
+       If Not IsZeroOrPostiveNumber(txtDeadVolBlowOutsPerLitresperHour.Text) Then
+         ErrorProvider.SetError(txtDeadVolBlowOutsPerLitresperHour, "Please provide a non negative number.")
+         result = False
+        Else
+         ErrorProvider.SetError(txtDeadVolBlowOutsPerLitresperHour, String.Empty)
+       End If
+
+
+       'USER CONFIG PART 
+       '*****************************************************************************************
+        'Compressor Map path : txtCompressorMap
+        'Test for empty after trim
+        If txtCompressorMap.Text.Trim.Length = 0 Then
+         ErrorProvider.SetError(txtCompressorMap, "Please enter the localtion of a valid compressor map.")
+         result = False
+        Else
+         ErrorProvider.SetError(txtCompressorMap, String.Empty)
+        End If
+        'Test File is valid
+        Dim comp As CompressorMap
+        Try
+
+        comp = New CompressorMap(txtCompressorMap.Text)
+        comp.Initialise()
+         ErrorProvider.SetError(txtCompressorMap, String.Empty)
+        Catch ex As Exception
+         ErrorProvider.SetError(txtCompressorMap, "Error : map is invalid or cannot be found, please select a Cvalid compressor map")
+         result = False
+        End Try
+
+        'Compressor Gear Efficiency : txtCompressorGearEfficiency"
+        If Not IsNumberBetweenZeroandOne(txtCompressorGearEfficiency.Text) Then
+          ErrorProvider.SetError(txtCompressorGearEfficiency, "Please enter a number between 0 and 1")
+          result = False
+        Else
+          ErrorProvider.SetError(txtCompressorGearEfficiency, String.Empty)
+        End If
+
+        'Compressor Gear Ratio : txtCompressorGearRatio
+        If Not IsPostiveNumber(txtCompressorGearRatio.Text) Then
+          ErrorProvider.SetError(txtCompressorGearRatio, "Please enter a number greater than 0.")
+          result = False
+        Else
+          ErrorProvider.SetError(txtCompressorGearRatio, String.Empty)
+        End If
+
+
+        'Actuations Map : txtActuationsMap
+        If txtActuationsMap.Text.Trim.Length = 0 Then
+         ErrorProvider.SetError(txtActuationsMap, "Please enter the localtion of a valid Pneumatic Actuations map.")
+         result = False
+        Else
+         ErrorProvider.SetError(txtActuationsMap, String.Empty)
+        End If
+        'Test File is valid
+        Dim actuations As PneumaticActuationsMAP
+        Try
+
+        actuations = New PneumaticActuationsMAP(txtActuationsMap.Text)
+         actuations.Initialise()
+         ErrorProvider.SetError(txtActuationsMap, String.Empty)
+        Catch ex As Exception
+         ErrorProvider.SetError(txtActuationsMap, "Error : Pneumatic Actuations map is invalid or cannot be found, please select a valid map")
+         result = False
+        End Try
+
+
+
+        'NOT Required but included here so readers can see this is a positive ommission
+        '******************************************************************************
+        'Smart Air Compression : chkSmartAirCompression
+        'Smart Regeneration : chkSmartRegeneration
+        'Retarder Brake : chkRetarderBrake
+
+        'txtKneelingHeightMillimeters : txtKneelingHeightMillimeters
+        If Not IsPostiveNumber(txtKneelingHeightMillimeters.Text) Then
+          ErrorProvider.SetError(txtKneelingHeightMillimeters, "Please enter a number greater than 0.")
+          result = False
+        Else
+          ErrorProvider.SetError(txtKneelingHeightMillimeters, String.Empty)
+        End If
+
+        'cboAirSuspensionControl : cboAirSuspensionControl
+        If cboAirSuspensionControl.SelectedIndex < 1 Then
+          ErrorProvider.SetError(cboAirSuspensionControl, "Please make a selection.")
+          result = False
+        Else
+          ErrorProvider.SetError(cboAirSuspensionControl, String.Empty)
+        End If
+
+        'cboAdBlueDosing : cboAdBlueDosing
+        If cboAdBlueDosing.SelectedIndex < 1 Then
+          ErrorProvider.SetError(cboAdBlueDosing, "Please make a selection.")
+          result = False
+        Else
+          ErrorProvider.SetError(cboAdBlueDosing, String.Empty)
+        End If
+
+        'cboDoors : cboDoors
+        If cboDoors.SelectedIndex < 1 Then
+          ErrorProvider.SetError(cboDoors, "Please make a selection.")
+          result = False
+        Else
+          ErrorProvider.SetError(cboDoors, String.Empty)
+        End If
+
+
+        'Set Tab Color
+
+        UpdateTabStatus("tabPneumaticConfig", result)
+
+
+
+
+Return result
+
+
+End Function
+
+'*****  ELECTRICAL VALIDATION
+Public Sub Validating_ElectricsHandler(sender As Object, e As CancelEventArgs) Handles txtPowernetVoltage.Validating, txtAlternatorMapPath.Validating, txtAlternatorGearEfficiency.Validating, txtDoorActuationTimeSeconds.Validating
+
+    e.Cancel = Not Validate_Electrics()
+
+End Sub
+Public Function Validate_Electrics() As Boolean
+
+Dim result As Boolean = True
+
+
+       'Powernet Voltage : txtPowernetVoltage
+       If Not IsPostiveNumber(txtPowernetVoltage.Text) Then
+         ErrorProvider.SetError(txtPowernetVoltage, "Please provide a non negative number.")
+         result = False
+       Else
+          ErrorProvider.SetError(txtPowernetVoltage, String.Empty)
+       End If
+
+
+        'Alternator Map  path : txtAlternatorMapPath
+        'Test for empty after trim
+        If txtAlternatorMapPath.Text.Trim.Length = 0 Then
+         ErrorProvider.SetError(txtAlternatorMapPath, "Please enter the localtion of a valid alternator map.")
+         result = False
+        Else
+         ErrorProvider.SetError(txtAlternatorMapPath, String.Empty)
+        End If
+
+        'Test File is valid
+        Dim alt As AlternatorMap
+        Try
+        alt = New AlternatorMap(txtAlternatorMapPath.Text)
+        alt.Initialise()
+         ErrorProvider.SetError(txtAlternatorMapPath, String.Empty)
+        Catch ex As Exception
+         ErrorProvider.SetError(txtAlternatorMapPath, "Error : map is invalid or cannot be found, please select a valid alternator map")
+         result = False
+        End Try
+
+
+        'Alternator Gear Efficiency : txtAlternatorGearEfficiency
+        If Not IsNumberBetweenZeroandOne(txtAlternatorGearEfficiency.Text) Then
+         ErrorProvider.SetError(txtAlternatorGearEfficiency, "Please enter a number between 0 an 1")
+         result = False
+        Else
+         ErrorProvider.SetError(txtAlternatorGearEfficiency, String.Empty)
+        End If
+
+
+       'Door Action Time : txtDoorActuationTimeSeconds
+       If Not IsPostiveNumber(txtDoorActuationTimeSeconds.Text) Then
+         ErrorProvider.SetError(txtDoorActuationTimeSeconds, "Please provide a non negative number.")
+         result = False
+       Else
+          ErrorProvider.SetError(txtDoorActuationTimeSeconds, String.Empty)
+       End If
+
+
+               UpdateTabStatus("tabElectricalConfig", result)
+
+
+       Return result
+
+
+End Function
+
+'****** HVAC VALIDATION
+Public Sub Validating_HVACHandler(sender As Object, e As CancelEventArgs) Handles txtHVACMechanicalLoadPowerWatts.Validating, txtHVACFuellingLitresPerHour.Validating, txtHVACElectricalLoadPowerWatts.Validating
+
+    e.Cancel = Not Validate_HVAC()
+
+End Sub
+Public Function Validate_HVAC() As Boolean
+
+Dim result As Boolean = True
+
+
+       'HVAC Electrical Load Power Watts : txtHVACElectricalLoadPowerWatts
+       If Not IsZeroOrPostiveNumber(txtHVACElectricalLoadPowerWatts.Text) Then
+         ErrorProvider.SetError(txtHVACElectricalLoadPowerWatts, "Please provide a non negative number.")
+         result = False
+       Else
+          ErrorProvider.SetError(txtHVACElectricalLoadPowerWatts, String.Empty)
+       End If
+
+       'HVAC Mechanical Load Power Watts : txtHVACMechanicalLoadPowerWatts
+       If Not IsZeroOrPostiveNumber(txtHVACMechanicalLoadPowerWatts.Text) Then
+         ErrorProvider.SetError(txtHVACMechanicalLoadPowerWatts, "Please provide a non negative number.")
+         result = False
+       Else
+          ErrorProvider.SetError(txtHVACMechanicalLoadPowerWatts, String.Empty)
+       End If
+
+
+       'HVAC Fuelling Litres Per Hour : txtHVACFuellingLitresPerHour
+       If Not IsZeroOrPostiveNumber(txtHVACFuellingLitresPerHour.Text) Then
+         ErrorProvider.SetError(txtHVACFuellingLitresPerHour, "Please provide a non negative number.")
+         result = False
+       Else
+          ErrorProvider.SetError(txtHVACFuellingLitresPerHour, String.Empty)
+       End If
+
+       UpdateTabStatus("tabHVACConfig", result)
+
+
+   Return result
+
+
+End Function
+
+
+Public Function ValidateAll() As Boolean
+
+  If Validate_Pneumatics() = False OrElse Validate_Electrics() = False OrElse Validate_Pneumatics() = False Then
+
+  Return False
+
+  End If
+
+  Return True
+
+End Function
+
+'*****  IMPUTS VALIDATION
+
+#End Region
+
+
+'Form Controls & Events
+Private Sub Dashboard_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+
+  'Required for OwnerDraw, this is required in order to color the tabs when a validation error occurs to draw
+  'The attention of the user to the fact that attention is required on a particlar tab.
+  TabColors.Add(tabGeneralConfig, Control.DefaultBackColor)
+  TabColors.Add(tabElectricalConfig, Control.DefaultBackColor)
+  TabColors.Add(tabPneumaticConfig, Control.DefaultBackColor)
+  TabColors.Add(tabHVACConfig, Control.DefaultBackColor)
+
+
+  'This is here only for testing purposes, the actual cycle will be a result of Vecto input.
+  cboCycle.SelectedIndex = 0
+
+  'General Setup of all controls 
+  SetupControls()
+
+  'Binding Values in Aux environment to the input controls on relevent tabs in the form.
+  CreateBindings()
+
+  'This function is neccesary because binding does not occur when the page is invisible, so a track across all of them
+  'Is required in order to set the binding. This only needs to be done once at at setup time. after values are set in the
+  'Aux environment either by setting defaults of reading and setting from the Auxillaries persistance file.
+  EnsureBinding()
+
+
+  'Additional atatched events
+  'For Tab Coloring, this is the place where the background will get filled on the tab when attention is required.
+  AddHandler tabMain.DrawItem, New System.Windows.Forms.DrawItemEventHandler(AddressOf tabMain_DrawItem)
+
+
+
+End Sub
+
+#Region "Tab Header Color Change"
+
+Private Sub UpdateTabStatus(pageName As String, resultGood As Boolean)
+
+
+       Dim page As TabPage = tabMain.TabPages(pageName)
+
+           If Not resultGood Then
+
+       SetTabHeader(page, Color.Red)
+
+       Else
+              SetTabHeader(page, Control.DefaultBackColor)
+
+       End If
+
+
+
+
+End Sub
+
+Private Sub SetTabHeader(page As TabPage, color As Color)
+
+    TabColors(page) = color
+    tabMain.Invalidate()
+
+End Sub
+
+Private Sub tabMain_DrawItem(sender As Object, e As DrawItemEventArgs)
+
+    Dim br As Brush = New SolidBrush(TabColors(tabMain.TabPages(e.Index)))
+
+
+    Using (br)
+
+        e.Graphics.FillRectangle(br, e.Bounds)
+        Dim sz As SizeF = e.Graphics.MeasureString(tabMain.TabPages(e.Index).Text, e.Font)
+        e.Graphics.DrawString(tabMain.TabPages(e.Index).Text, e.Font, Brushes.Black, e.Bounds.Left + (e.Bounds.Width - sz.Width) / 2, e.Bounds.Top + (e.Bounds.Height - sz.Height) / 2 + 1)
+
+        Dim rect As Rectangle = e.Bounds
+        rect.Offset(-1, -1)
+        rect.Inflate(1, 1)
+       ' e.Graphics.DrawRectangle(Pens.DarkGray, rect)
+        'e.DrawFocusRectangle()
+
+    End Using
+
+
+
+
+End Sub
+
+
+#End Region
+
+#Region "GridHandlers"
+
+Private Sub gvElectricalConsumables_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles gvElectricalConsumables.CellValidating
+
+   Dim column As DataGridViewColumn = gvElectricalConsumables.Columns(e.ColumnIndex)
+   Dim s As Single
+
+
+   If e.ColumnIndex = -1 Then
+
+   e.Cancel = True
+   Exit Sub
+
+   End If
+
+
+
+   If column.ReadOnly Then Return
+
+
+
+
+    Select Case column.Name
+
+     Case "NominalConsumptionAmps"
+           If Not IsNumeric(e.FormattedValue) Then
+             MessageBox.Show("This value must be numeric")
+             e.Cancel = True
+          End If
+
+     Case "NumberInActualVehicle"
+           If Not IsNumeric(e.FormattedValue) Then
+             MessageBox.Show("This value must be numeric")
+            e.Cancel = True
+          Else
+            s = Single.Parse(e.FormattedValue)
+           End If
+           If s Mod 1 > 0 OrElse s < 0 Then
+              MessageBox.Show("This value must be a positive whole number ( Integer ) ")
+             e.Cancel = True
+           End If
+
+
+     Case "PhaseIdle_TractionOn"
+           If Not IsNumeric(e.FormattedValue) Then
+             MessageBox.Show("This value must be numeric")
+             e.Cancel = True
+           Else
+            s = Single.Parse(e.FormattedValue)
+           End If
+           If s < 0 OrElse s > 1 Then
+              MessageBox.Show("This must be a value between 0 and 1 ")
+              e.Cancel = True
+           End If
+
+
+    End Select
+
+End Sub
+Private Sub SmartResult_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles gvResultsCardIdle.CellValidating, gvResultsCardTraction.CellValidating, gvResultsCardOverrun.CellValidating
+
+   Dim column As DataGridViewColumn = gvElectricalConsumables.Columns(e.ColumnIndex)
+
+   If Not IsNumeric(e.FormattedValue) Then
+       MessageBox.Show("This value must be numeric")
+       e.Cancel = True
+   End If
+
+End Sub
+Private Sub resultCard_CellMouseUp(sender As Object, e As DataGridViewCellMouseEventArgs) Handles gvResultsCardIdle.CellMouseUp, gvResultsCardTraction.CellMouseUp, gvResultsCardOverrun.CellMouseUp
+
+      Dim dgv As DataGridView = CType(sender, DataGridView)
+
+
+        If e.Button = MouseButtons.Right Then
+
+            resultCardContextMenu.Show(dgv, e.Location)
+            resultCardContextMenu.Show(Cursor.Position)
+
+        End If
+
+
+    End Sub
+Private Sub resultCardContextMenu_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles resultCardContextMenu.ItemClicked
+
+      Dim menu As ContextMenuStrip = CType(sender, ContextMenuStrip)
+
+      Dim grid As DataGridView = DirectCast(menu.SourceControl, DataGridView)
+
+      Select Case e.ClickedItem.Text
+
+
+      Case "Delete"
+
+         For Each selectedRow As DataGridViewRow In grid.SelectedRows
+
+            If Not selectedRow.IsNewRow Then
+
+                grid.Rows.RemoveAt(selectedRow.Index)
+
+            End If
+
+         Next
+
+      Case "Insert"
+
+
+      End Select
+
+
+
+
+
+
+
+
+
+End Sub
+Private Sub gvElectricalConsumables_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles gvElectricalConsumables.CellFormatting
+
+
+    If e.ColumnIndex = 4 AndAlso e.RowIndex = 0 Then
+
+       e.CellStyle.BackColor = Color.LightGray
+       e.CellStyle.ForeColor = Color.LightGray
+
+
+    End If
+
+
+
+End Sub
+Private Sub gvElectricalConsumables_CellBeginEdit(sender As Object, e As DataGridViewCellCancelEventArgs) Handles gvElectricalConsumables.CellBeginEdit
+
+    If e.ColumnIndex = 4 AndAlso e.RowIndex = 0 Then
+
+     MessageBox.Show("This cell is calculated and cannot be edited")
+     e.Cancel = True
+
+    End If
+
+
+
+
+End Sub
+
+#End Region
+
+#Region "Button Handlers"
+
+
+
+
+Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
+
+
+  auxEnvironment.Save("TESTHARNESCONFIG.Json")
+
+
+
+End Sub
+Private Sub btnLoad_Click(sender As Object, e As EventArgs) Handles btnLoad.Click
+
+  'JSON METHOD
+  'Release existing databindings
+  UnbindAllControls(Me)
+
+
+  auxEnvironment.Load("TESTHARNESCONFIG.Json")
+
+  CreateBindings()
+
+End Sub
+
+
+
+Private Sub btnFuelMap_Click(sender As Object, e As EventArgs) Handles btnFuelMap.Click
+
+               Dim fbAux As New cFileBrowser(True, False)
+
+
+
+              ' Dim vectoFile As String = "C:\Users\tb28\Source\Workspaces\VECTO\AuxillaryTestHarness\bin\Debug\vectopath.vecto"
+               Dim fname As String = fFILE(vectoFile, True)
+
+                fbAux.Extensions = New String() {"vmap"}
+              '  If fbAux.OpenDialog(fFileRepl(fname, fPATH(VECTOfile))) Then 
+               If fbAux.OpenDialog(fPATH(vectoFile)) Then
+
+                 txtFuelMap.Text = fFileWoDir(fbAux.Files(0), fPATH(vectoFile))
+
+                End If
+
+
+End Sub
+Private Sub btnAlternatorMapPath_Click(sender As Object, e As EventArgs) Handles btnAlternatorMapPath.Click
+
+
+
+               Dim fbAux As New cFileBrowser(True, False)
+
+
+
+              ' Dim vectoFile As String = "C:\Users\tb28\Source\Workspaces\VECTO\AuxillaryTestHarness\bin\Debug\vectopath.vecto"
+               Dim fname As String = fFILE(vectoFile, True)
+
+                fbAux.Extensions = New String() {"AALT"}
+                If fbAux.OpenDialog(fPATH(vectoFile)) Then
+
+                 txtAlternatorMapPath.Text = fFileWoDir(fbAux.Files(0), fPATH(vectoFile))
+
+               End If
+
+               Validate_Electrics()
+
+               'Causes Binding to fire
+               txtAlternatorMapPath.Focus()
+
+End Sub
+Private Sub btnCompressorMap_Click(sender As Object, e As EventArgs) Handles btnCompressorMap.Click
+
+
+               Dim fbAux As New cFileBrowser(True, False)
+
+
+
+              ' Dim vectoFile As String = "C:\Users\tb28\Source\Workspaces\VECTO\AuxillaryTestHarness\bin\Debug\vectopath.vecto"
+               Dim fname As String = fFILE(vectoFile, True)
+
+                fbAux.Extensions = New String() {"ACMP"}
+                If fbAux.OpenDialog(fPATH(vectoFile)) Then
+
+                 txtCompressorMap.Text = fFileWoDir(fbAux.Files(0), fPATH(vectoFile))
+
+               End If
+
+               Validate_Pneumatics()
+
+               'Causes binding to fire
+               txtCompressorMap.Focus()
+
+
+End Sub
+Private Sub btnActuationsMap_Click(sender As Object, e As EventArgs) Handles btnActuationsMap.Click
+
+               Dim fbAux As New cFileBrowser(True, False)
+
+              ' Dim vectoFile As String = "C:\Users\tb28\Source\Workspaces\VECTO\AuxillaryTestHarness\bin\Debug\vectopath.vecto"
+               Dim fname As String = fFILE(vectoFile, True)
+
+                fbAux.Extensions = New String() {"APAC"}
+                If fbAux.OpenDialog(fPATH(vectoFile)) Then
+
+                 txtActuationsMap.Text = fFileWoDir(fbAux.Files(0), fPATH(vectoFile))
+
+                End If
+
+                Validate_Pneumatics()
+
+                'Causes Binding to fire.
+                txtActuationsMap.Focus()
+
+End Sub
+
+
+
+#End Region
+
+
+
+
+
+'Form Overrides
+Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
+
+        If keyData = Keys.Enter AndAlso Me.AcceptButton Is Nothing Then
+        Dim box As TextBoxBase = CType(Me.ActiveControl, TextBoxBase)
+
+        If box Is Nothing OrElse Not box.Multiline Then
+
+          Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
+          Return True
+
+       End If
+
+       End If
+
+
+       Return MyBase.ProcessCmdKey(msg, keyData)
+
+
+
+    End Function
+
+
+
+Public Sub UnbindAllControls(ByRef container As Control)
+  'Clear all of the controls within the container object
+  'If "Recurse" is true, then also clear controls within any sub-containers
+  Dim ctrl As Control = Nothing
+
+  For Each ctrl In container.Controls
+
+           ctrl.DataBindings.Clear()
+
+           If ctrl.HasChildren Then
+              UnbindAllControls(ctrl)
+           End If
+
+  Next
+
+End Sub
+
+
+End Class
\ No newline at end of file
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.designer.vb b/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.designer.vb
new file mode 100644
index 0000000000..0ae8e30332
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.designer.vb
@@ -0,0 +1,379 @@
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class FB_Dialog
+    Inherits System.Windows.Forms.Form
+
+    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Wird vom Windows Form-Designer benötigt.
+    Private components As System.ComponentModel.IContainer
+
+    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.components = New System.ComponentModel.Container()
+        Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
+        Me.ButtonNewDir = New System.Windows.Forms.Button()
+        Me.ButtonDesktop = New System.Windows.Forms.Button()
+        Me.ButtonHisFolder = New System.Windows.Forms.Button()
+        Me.ButtonFolderBack = New System.Windows.Forms.Button()
+        Me.TextBoxSearchFolder = New System.Windows.Forms.TextBox()
+        Me.ListViewFolder = New System.Windows.Forms.ListView()
+        Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.ComboBoxDrive = New System.Windows.Forms.ComboBox()
+        Me.ButtonAll = New System.Windows.Forms.Button()
+        Me.LabelFileAnz = New System.Windows.Forms.Label()
+        Me.ComboBoxExt = New System.Windows.Forms.ComboBox()
+        Me.ButtonHisFile = New System.Windows.Forms.Button()
+        Me.TextBoxSearchFile = New System.Windows.Forms.TextBox()
+        Me.ListViewFiles = New System.Windows.Forms.ListView()
+        Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.ContextMenuFile = New System.Windows.Forms.ContextMenuStrip(Me.components)
+        Me.RenameFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.DeleteFileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.TextBoxPath = New System.Windows.Forms.TextBox()
+        Me.ContextMenuHisFolder = New System.Windows.Forms.ContextMenuStrip(Me.components)
+        Me.ContextMenuHisFile = New System.Windows.Forms.ContextMenuStrip(Me.components)
+        Me.ButtonOK = New System.Windows.Forms.Button()
+        Me.ButtonCancel = New System.Windows.Forms.Button()
+        Me.TextBoxCurrent = New System.Windows.Forms.TextBox()
+        CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).BeginInit()
+        Me.SplitContainer1.Panel1.SuspendLayout()
+        Me.SplitContainer1.Panel2.SuspendLayout()
+        Me.SplitContainer1.SuspendLayout()
+        Me.ContextMenuFile.SuspendLayout()
+        Me.SuspendLayout()
+        '
+        'SplitContainer1
+        '
+        Me.SplitContainer1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
+            Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.SplitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D
+        Me.SplitContainer1.Location = New System.Drawing.Point(12, 36)
+        Me.SplitContainer1.Name = "SplitContainer1"
+        '
+        'SplitContainer1.Panel1
+        '
+        Me.SplitContainer1.Panel1.Controls.Add(Me.ButtonNewDir)
+        Me.SplitContainer1.Panel1.Controls.Add(Me.ButtonDesktop)
+        Me.SplitContainer1.Panel1.Controls.Add(Me.ButtonHisFolder)
+        Me.SplitContainer1.Panel1.Controls.Add(Me.ButtonFolderBack)
+        Me.SplitContainer1.Panel1.Controls.Add(Me.TextBoxSearchFolder)
+        Me.SplitContainer1.Panel1.Controls.Add(Me.ListViewFolder)
+        Me.SplitContainer1.Panel1.Controls.Add(Me.ComboBoxDrive)
+        '
+        'SplitContainer1.Panel2
+        '
+        Me.SplitContainer1.Panel2.Controls.Add(Me.ButtonAll)
+        Me.SplitContainer1.Panel2.Controls.Add(Me.LabelFileAnz)
+        Me.SplitContainer1.Panel2.Controls.Add(Me.ComboBoxExt)
+        Me.SplitContainer1.Panel2.Controls.Add(Me.ButtonHisFile)
+        Me.SplitContainer1.Panel2.Controls.Add(Me.TextBoxSearchFile)
+        Me.SplitContainer1.Panel2.Controls.Add(Me.ListViewFiles)
+        Me.SplitContainer1.Size = New System.Drawing.Size(764, 293)
+        Me.SplitContainer1.SplitterDistance = 382
+        Me.SplitContainer1.TabIndex = 5
+        Me.SplitContainer1.TabStop = False
+        '
+        'ButtonNewDir
+        '
+        Me.ButtonNewDir.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonNewDir.Location = New System.Drawing.Point(202, 3)
+        Me.ButtonNewDir.Name = "ButtonNewDir"
+        Me.ButtonNewDir.Size = New System.Drawing.Size(38, 21)
+        Me.ButtonNewDir.TabIndex = 21
+        Me.ButtonNewDir.TabStop = False
+        Me.ButtonNewDir.Text = "New"
+        Me.ButtonNewDir.UseVisualStyleBackColor = True
+        '
+        'ButtonDesktop
+        '
+        Me.ButtonDesktop.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonDesktop.Location = New System.Drawing.Point(246, 3)
+        Me.ButtonDesktop.Name = "ButtonDesktop"
+        Me.ButtonDesktop.Size = New System.Drawing.Size(57, 21)
+        Me.ButtonDesktop.TabIndex = 22
+        Me.ButtonDesktop.TabStop = False
+        Me.ButtonDesktop.Text = "Desktop"
+        Me.ButtonDesktop.UseVisualStyleBackColor = True
+        '
+        'ButtonHisFolder
+        '
+        Me.ButtonHisFolder.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonHisFolder.Location = New System.Drawing.Point(309, 3)
+        Me.ButtonHisFolder.Name = "ButtonHisFolder"
+        Me.ButtonHisFolder.Size = New System.Drawing.Size(68, 21)
+        Me.ButtonHisFolder.TabIndex = 24
+        Me.ButtonHisFolder.TabStop = False
+        Me.ButtonHisFolder.Text = "His / Fav"
+        Me.ButtonHisFolder.UseVisualStyleBackColor = True
+        '
+        'ButtonFolderBack
+        '
+        Me.ButtonFolderBack.Location = New System.Drawing.Point(63, 3)
+        Me.ButtonFolderBack.Name = "ButtonFolderBack"
+        Me.ButtonFolderBack.Size = New System.Drawing.Size(28, 21)
+        Me.ButtonFolderBack.TabIndex = 20
+        Me.ButtonFolderBack.TabStop = False
+        Me.ButtonFolderBack.Text = "<"
+        Me.ButtonFolderBack.UseVisualStyleBackColor = True
+        '
+        'TextBoxSearchFolder
+        '
+        Me.TextBoxSearchFolder.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.TextBoxSearchFolder.Location = New System.Drawing.Point(3, 266)
+        Me.TextBoxSearchFolder.Name = "TextBoxSearchFolder"
+        Me.TextBoxSearchFolder.Size = New System.Drawing.Size(374, 20)
+        Me.TextBoxSearchFolder.TabIndex = 15
+        '
+        'ListViewFolder
+        '
+        Me.ListViewFolder.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
+            Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ListViewFolder.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader3})
+        Me.ListViewFolder.FullRowSelect = True
+        Me.ListViewFolder.GridLines = True
+        Me.ListViewFolder.HideSelection = False
+        Me.ListViewFolder.Location = New System.Drawing.Point(3, 30)
+        Me.ListViewFolder.MultiSelect = False
+        Me.ListViewFolder.Name = "ListViewFolder"
+        Me.ListViewFolder.Size = New System.Drawing.Size(374, 230)
+        Me.ListViewFolder.TabIndex = 10
+        Me.ListViewFolder.UseCompatibleStateImageBehavior = False
+        Me.ListViewFolder.View = System.Windows.Forms.View.Details
+        '
+        'ColumnHeader3
+        '
+        Me.ColumnHeader3.Text = "Directory"
+        '
+        'ComboBoxDrive
+        '
+        Me.ComboBoxDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
+        Me.ComboBoxDrive.FormattingEnabled = True
+        Me.ComboBoxDrive.Location = New System.Drawing.Point(3, 3)
+        Me.ComboBoxDrive.Name = "ComboBoxDrive"
+        Me.ComboBoxDrive.Size = New System.Drawing.Size(54, 21)
+        Me.ComboBoxDrive.TabIndex = 5
+        '
+        'ButtonAll
+        '
+        Me.ButtonAll.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonAll.Location = New System.Drawing.Point(239, 3)
+        Me.ButtonAll.Name = "ButtonAll"
+        Me.ButtonAll.Size = New System.Drawing.Size(71, 21)
+        Me.ButtonAll.TabIndex = 19
+        Me.ButtonAll.Text = "Select All"
+        Me.ButtonAll.UseVisualStyleBackColor = True
+        '
+        'LabelFileAnz
+        '
+        Me.LabelFileAnz.AutoSize = True
+        Me.LabelFileAnz.Location = New System.Drawing.Point(3, 7)
+        Me.LabelFileAnz.Name = "LabelFileAnz"
+        Me.LabelFileAnz.Size = New System.Drawing.Size(37, 13)
+        Me.LabelFileAnz.TabIndex = 7
+        Me.LabelFileAnz.Text = "0 Files"
+        '
+        'ComboBoxExt
+        '
+        Me.ComboBoxExt.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ComboBoxExt.FormattingEnabled = True
+        Me.ComboBoxExt.Location = New System.Drawing.Point(291, 266)
+        Me.ComboBoxExt.Name = "ComboBoxExt"
+        Me.ComboBoxExt.Size = New System.Drawing.Size(82, 21)
+        Me.ComboBoxExt.TabIndex = 20
+        '
+        'ButtonHisFile
+        '
+        Me.ButtonHisFile.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonHisFile.Location = New System.Drawing.Point(316, 3)
+        Me.ButtonHisFile.Name = "ButtonHisFile"
+        Me.ButtonHisFile.Size = New System.Drawing.Size(57, 21)
+        Me.ButtonHisFile.TabIndex = 24
+        Me.ButtonHisFile.TabStop = False
+        Me.ButtonHisFile.Text = "History"
+        Me.ButtonHisFile.UseVisualStyleBackColor = True
+        '
+        'TextBoxSearchFile
+        '
+        Me.TextBoxSearchFile.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.TextBoxSearchFile.Location = New System.Drawing.Point(3, 266)
+        Me.TextBoxSearchFile.Name = "TextBoxSearchFile"
+        Me.TextBoxSearchFile.Size = New System.Drawing.Size(282, 20)
+        Me.TextBoxSearchFile.TabIndex = 15
+        '
+        'ListViewFiles
+        '
+        Me.ListViewFiles.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
+            Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ListViewFiles.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1})
+        Me.ListViewFiles.ContextMenuStrip = Me.ContextMenuFile
+        Me.ListViewFiles.FullRowSelect = True
+        Me.ListViewFiles.GridLines = True
+        Me.ListViewFiles.HideSelection = False
+        Me.ListViewFiles.Location = New System.Drawing.Point(3, 30)
+        Me.ListViewFiles.Name = "ListViewFiles"
+        Me.ListViewFiles.Size = New System.Drawing.Size(370, 230)
+        Me.ListViewFiles.TabIndex = 10
+        Me.ListViewFiles.UseCompatibleStateImageBehavior = False
+        Me.ListViewFiles.View = System.Windows.Forms.View.Details
+        '
+        'ColumnHeader1
+        '
+        Me.ColumnHeader1.Text = "Filename"
+        Me.ColumnHeader1.Width = 251
+        '
+        'ContextMenuFile
+        '
+        Me.ContextMenuFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.RenameFileToolStripMenuItem, Me.DeleteFileToolStripMenuItem})
+        Me.ContextMenuFile.Name = "ContextMenuFile"
+        Me.ContextMenuFile.Size = New System.Drawing.Size(148, 48)
+        '
+        'RenameFileToolStripMenuItem
+        '
+        Me.RenameFileToolStripMenuItem.Name = "RenameFileToolStripMenuItem"
+        Me.RenameFileToolStripMenuItem.Size = New System.Drawing.Size(147, 22)
+        Me.RenameFileToolStripMenuItem.Text = "Rename File..."
+        '
+        'DeleteFileToolStripMenuItem
+        '
+        Me.DeleteFileToolStripMenuItem.Name = "DeleteFileToolStripMenuItem"
+        Me.DeleteFileToolStripMenuItem.Size = New System.Drawing.Size(147, 22)
+        Me.DeleteFileToolStripMenuItem.Text = "Delete File..."
+        '
+        'TextBoxPath
+        '
+        Me.TextBoxPath.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.TextBoxPath.Location = New System.Drawing.Point(12, 335)
+        Me.TextBoxPath.Name = "TextBoxPath"
+        Me.TextBoxPath.Size = New System.Drawing.Size(764, 20)
+        Me.TextBoxPath.TabIndex = 15
+        '
+        'ContextMenuHisFolder
+        '
+        Me.ContextMenuHisFolder.Name = "ContextMenuFolderHis"
+        Me.ContextMenuHisFolder.Size = New System.Drawing.Size(61, 4)
+        '
+        'ContextMenuHisFile
+        '
+        Me.ContextMenuHisFile.Name = "ContextMenuFileHis"
+        Me.ContextMenuHisFile.Size = New System.Drawing.Size(61, 4)
+        '
+        'ButtonOK
+        '
+        Me.ButtonOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonOK.DialogResult = System.Windows.Forms.DialogResult.OK
+        Me.ButtonOK.Location = New System.Drawing.Point(620, 361)
+        Me.ButtonOK.Name = "ButtonOK"
+        Me.ButtonOK.Size = New System.Drawing.Size(75, 23)
+        Me.ButtonOK.TabIndex = 20
+        Me.ButtonOK.TabStop = False
+        Me.ButtonOK.Text = "OK"
+        Me.ButtonOK.UseVisualStyleBackColor = True
+        '
+        'ButtonCancel
+        '
+        Me.ButtonCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.ButtonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
+        Me.ButtonCancel.Location = New System.Drawing.Point(701, 361)
+        Me.ButtonCancel.Name = "ButtonCancel"
+        Me.ButtonCancel.Size = New System.Drawing.Size(75, 23)
+        Me.ButtonCancel.TabIndex = 25
+        Me.ButtonCancel.TabStop = False
+        Me.ButtonCancel.Text = "Cancel"
+        Me.ButtonCancel.UseVisualStyleBackColor = True
+        '
+        'TextBoxCurrent
+        '
+        Me.TextBoxCurrent.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+            Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.TextBoxCurrent.Cursor = System.Windows.Forms.Cursors.Hand
+        Me.TextBoxCurrent.Location = New System.Drawing.Point(12, 14)
+        Me.TextBoxCurrent.Name = "TextBoxCurrent"
+        Me.TextBoxCurrent.ReadOnly = True
+        Me.TextBoxCurrent.Size = New System.Drawing.Size(764, 20)
+        Me.TextBoxCurrent.TabIndex = 0
+        Me.TextBoxCurrent.TabStop = False
+        '
+        'FB_Dialog
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.CancelButton = Me.ButtonCancel
+        Me.ClientSize = New System.Drawing.Size(788, 391)
+        Me.Controls.Add(Me.TextBoxCurrent)
+        Me.Controls.Add(Me.ButtonCancel)
+        Me.Controls.Add(Me.ButtonOK)
+        Me.Controls.Add(Me.TextBoxPath)
+        Me.Controls.Add(Me.SplitContainer1)
+        Me.MaximizeBox = False
+        Me.MinimizeBox = False
+        Me.Name = "FB_Dialog"
+        Me.ShowIcon = False
+        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
+        Me.Text = "File Browser"
+        Me.SplitContainer1.Panel1.ResumeLayout(False)
+        Me.SplitContainer1.Panel1.PerformLayout()
+        Me.SplitContainer1.Panel2.ResumeLayout(False)
+        Me.SplitContainer1.Panel2.PerformLayout()
+        CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).EndInit()
+        Me.SplitContainer1.ResumeLayout(False)
+        Me.ContextMenuFile.ResumeLayout(False)
+        Me.ResumeLayout(False)
+        Me.PerformLayout()
+
+    End Sub
+    Friend WithEvents SplitContainer1 As System.Windows.Forms.SplitContainer
+    Friend WithEvents ComboBoxDrive As System.Windows.Forms.ComboBox
+    Friend WithEvents ListViewFolder As System.Windows.Forms.ListView
+    Friend WithEvents ListViewFiles As System.Windows.Forms.ListView
+    Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
+    Friend WithEvents TextBoxSearchFolder As System.Windows.Forms.TextBox
+    Friend WithEvents TextBoxSearchFile As System.Windows.Forms.TextBox
+    Friend WithEvents TextBoxPath As System.Windows.Forms.TextBox
+    Friend WithEvents ButtonFolderBack As System.Windows.Forms.Button
+    Friend WithEvents ContextMenuHisFolder As System.Windows.Forms.ContextMenuStrip
+    Friend WithEvents ContextMenuHisFile As System.Windows.Forms.ContextMenuStrip
+    Friend WithEvents ButtonHisFolder As System.Windows.Forms.Button
+    Friend WithEvents ButtonHisFile As System.Windows.Forms.Button
+    Friend WithEvents ButtonOK As System.Windows.Forms.Button
+    Friend WithEvents ButtonCancel As System.Windows.Forms.Button
+    Friend WithEvents ComboBoxExt As System.Windows.Forms.ComboBox
+    Friend WithEvents TextBoxCurrent As System.Windows.Forms.TextBox
+    Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader
+    Friend WithEvents LabelFileAnz As System.Windows.Forms.Label
+    Friend WithEvents ButtonDesktop As System.Windows.Forms.Button
+    Friend WithEvents ContextMenuFile As System.Windows.Forms.ContextMenuStrip
+    Friend WithEvents RenameFileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents DeleteFileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents ButtonNewDir As System.Windows.Forms.Button
+    Friend WithEvents ButtonAll As System.Windows.Forms.Button
+
+End Class
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.resx b/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.resx
new file mode 100644
index 0000000000..1e27a48028
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.resx
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ContextMenuFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>329, 17</value>
+  </metadata>
+  <metadata name="ContextMenuHisFolder.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="ContextMenuHisFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>180, 17</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.vb b/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.vb
new file mode 100644
index 0000000000..d8ff644dce
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_Dialog.vb
@@ -0,0 +1,1010 @@
+Imports System.Windows.Forms
+
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+
+''' <summary>
+''' File Browser dialog. Entirely controlled by cFilebrowser class.
+''' </summary>
+''' <remarks></remarks>
+Public Class FB_Dialog
+
+    Private MyFolder As String
+    Private MyFiles() As String
+    Private MyDrive As String
+    Private UpdateLock As Boolean
+    Private Initialized As Boolean
+    Private MyID As String
+    Private MyExt() As String
+    Private LastFile As String
+    Private bFileMustExist As Boolean
+    Private bOverwriteCheck As Boolean
+    Private bMultiFiles As Boolean
+    Private NoExt As Boolean
+    Private bBrowseFolder As Boolean
+    Private bForceExt As Boolean
+    Private ExtListSingle As ArrayList
+    Private ExtListMulti As ArrayList
+    Private LastExt As String
+    Private bLightMode As Boolean
+
+    Private Const FavText As String = "Edit Favorites..."
+    Private Const EmptyText As String = " "
+    Private Const NoFavString As String = "<undefined>"
+
+    'New
+    Public Sub New(ByVal LightMode As Boolean)
+        ' This call is required by the Windows Form Designer.
+        InitializeComponent()
+        ' Append any initialization after the InitializeComponent() call.
+        MyID = "Default"
+        UpdateLock = False
+        Initialized = False
+        MyFolder = ""
+        MyDrive = ""
+        LastFile = ""
+        bOverwriteCheck = False
+        bFileMustExist = False
+        bMultiFiles = False
+        NoExt = True
+        bBrowseFolder = False
+        bLightMode = LightMode
+        Me.ButtonHisFile.Enabled = Not bLightMode
+    End Sub
+
+    'Resize
+    Private Sub FB_Dialog_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
+        Resized()
+    End Sub
+
+    'Shown
+    Private Sub FileBrowser_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
+        Resized()
+        Me.TextBoxPath.Focus()
+        Me.TextBoxPath.SelectAll()
+    End Sub
+
+    'Resized ListView Format
+    Private Sub Resized()
+        Me.ListViewFolder.Columns(0).Width = -2
+        Me.ListViewFiles.Columns(0).Width = -2
+    End Sub
+
+    'SplitterMoved
+    Private Sub SplitContainer1_SplitterMoved(ByVal sender As System.Object, ByVal e As System.Windows.Forms.SplitterEventArgs) Handles SplitContainer1.SplitterMoved
+        If Initialized Then Resized()
+    End Sub
+
+    'Closing (Overwrite-Check etc)
+    Private Sub FileBrowser_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
+        Dim x As Int32
+        Dim path As String
+        Dim Ext As String
+        Dim HasExt As Boolean
+        HasExt = False
+        If Me.DialogResult = Windows.Forms.DialogResult.OK Then
+            If bBrowseFolder Then
+                path = Trim(Me.TextBoxPath.Text)
+                'If empty path: use the Current-folder(MyFolder)
+                If path = "" Then
+                    path = MyFolder
+                Else
+                    If Microsoft.VisualBasic.Mid(path, 2, 1) <> ":" Then path = MyFolder & path
+                End If
+                If Not IO.Directory.Exists(path) Then
+                    MsgBox("Directory " & path & " does not exist!", MsgBoxStyle.Critical)
+                    e.Cancel = True
+                    Exit Sub
+                End If
+                If Microsoft.VisualBasic.Right(path, 1) <> "\" Then path &= "\"
+                ReDim MyFiles(0)
+                MyFiles(0) = path
+            Else
+                'Stop if empty path
+                If Trim(Me.TextBoxPath.Text) = "" Then
+                    e.Cancel = True
+                    Exit Sub
+                End If
+                LastExt = Trim(Me.ComboBoxExt.Text)
+                'Assume Files in array
+                If Microsoft.VisualBasic.Left(Me.TextBoxPath.Text, 1) = "<" And Me.ListViewFiles.SelectedItems.Count > 0 Then
+                    'Multiple files selected
+                    ReDim MyFiles(Me.ListViewFiles.SelectedItems.Count - 1)
+                    x = -1
+                    For Each lv0 As ListViewItem In Me.ListViewFiles.Items
+                        If lv0.Selected Then
+                            x += 1
+                            MyFiles(x) = MyFolder & lv0.SubItems(0).Text
+                        End If
+                    Next
+                    bMultiFiles = True
+                Else
+                    'Single File
+                    path = Trim(Me.TextBoxPath.Text)
+                    'Primary extension (eg for bForceExt)
+                    Ext = Trim(Me.ComboBoxExt.Text.Split(",")(0))
+                    'If file without path then append path
+                    If Microsoft.VisualBasic.Mid(path, 2, 1) <> ":" Then path = MyFolder & path
+                    'If instead of File a Folder is entered: Switch to Folder and Abort
+                    If IO.Directory.Exists(path) Then
+                        SetFolder(path)
+                        e.Cancel = True
+                        Exit Sub
+                    End If
+                    'Force Extension
+                    If bForceExt Then
+                        If UCase(IO.Path.GetExtension(path)) <> "." & UCase(Ext) Then path &= "." & Ext
+                        HasExt = True
+                    Else
+                        'Check whether specified a File with Ext
+                        HasExt = (Microsoft.VisualBasic.Len(IO.Path.GetExtension(path)) > 1)
+                    End If
+                    'If File without Extension (after bForceExt question) and it does not exist, then add primary Extension
+                    If Not HasExt Then
+                        If Ext <> "*" And Ext <> "" Then
+                            If Not IO.File.Exists(path) Then path &= "." & Ext
+                        End If
+                    End If
+                    'Check that File exists
+                    If IO.File.Exists(path) Then
+                        'Yes: when bOverwriteCheck, check for Overwrite
+                        If bOverwriteCheck Then
+                            If MsgBox("Overwrite " & path & " ?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then
+                                e.Cancel = True
+                                Exit Sub
+                            End If
+                        End If
+                    Else
+                        'No: abort if bFileMustExist
+                        If bFileMustExist Then
+                            MsgBox("The file " & path & " does not exist!", MsgBoxStyle.Critical)
+                            e.Cancel = True
+                            Exit Sub
+                        End If
+                    End If
+                    'Define MyFiles
+                    ReDim MyFiles(0)
+                    MyFiles(0) = path
+                    bMultiFiles = False
+                End If
+            End If
+        End If
+    End Sub
+
+    'Browse - Custom Dialog
+    Public Function Browse(ByVal path As String, ByVal FileMustExist As Boolean, ByVal OverwriteCheck As Boolean, ByVal ExtMode As tFbExtMode, ByVal MultiFile As Boolean, ByVal Ext As String, ByVal Title As String) As Boolean
+        Dim x As Int16
+
+        If Not Initialized Then Init()
+
+        'Load Folder History ContextMenu
+        For x = 0 To 9
+            Me.ContextMenuHisFolder.Items(x).Text = FB_FolderHistory(x)
+        Next
+        For x = 10 To 19
+            Me.ContextMenuHisFolder.Items(x + 1).Text = FB_FolderHistory(x)
+        Next
+
+        'Options
+        bOverwriteCheck = OverwriteCheck
+        bFileMustExist = FileMustExist
+        bForceExt = (ExtMode = tFbExtMode.ForceExt)
+
+        'Form Config
+        Me.ListViewFiles.MultiSelect = MultiFile
+        Me.ButtonAll.Visible = MultiFile
+        Me.Text = Title
+
+        'Ext-Combobox
+        Me.ComboBoxExt.Items.Clear()
+        If NoExt Then
+            Me.ComboBoxExt.Items.Add("*")
+            Me.ComboBoxExt.SelectedIndex = 0
+        Else
+            Select Case ExtMode
+                Case tFbExtMode.ForceExt
+                    If Ext = "" Then Ext = ExtListSingle(0).ToString
+                    Me.ComboBoxExt.Items.AddRange(ExtListSingle.ToArray)
+                    Me.ComboBoxExt.Text = Ext
+                    Me.ComboBoxExt.Enabled = False
+                Case tFbExtMode.MultiExt, tFbExtMode.SingleExt
+                    If ExtMode = tFbExtMode.MultiExt Then
+                        Me.ComboBoxExt.Items.AddRange(ExtListMulti.ToArray)
+                    Else
+                        Me.ComboBoxExt.Items.AddRange(ExtListSingle.ToArray)
+                    End If
+                    If Ext <> "" Then
+                        Me.ComboBoxExt.Text = Ext
+                    Else
+                        Me.ComboBoxExt.Text = LastExt
+                    End If
+                    Me.ComboBoxExt.Enabled = True
+            End Select
+        End If
+
+
+        'Define Path
+        '   If no path is specified: Last folder, no file name
+        If path = "" Then path = FB_FolderHistory(0)
+
+        '   If path-length too small  (Path is invalid): Last File
+        If path.Length < 2 Then path = LastFile
+
+        'Open Folder - If no folder in the path: Last folder
+        If fPATH(path) = "" Then
+            'If given a file without path
+            If Trim(FB_FolderHistory(0)) = "" Then
+                SetFolder("C:\")
+            Else
+                SetFolder(FB_FolderHistory(0))
+            End If
+        Else
+            '...Otherwise:
+            SetFolder(fPATH(path))
+        End If
+        If bBrowseFolder Then
+            FolderUp()
+            Me.TextBoxPath.Text = path
+        Else
+            Me.TextBoxPath.Text = IO.Path.GetFileName(path)
+        End If
+
+        'Show form ------------------------------------------------ ----
+        Me.ShowDialog()
+        If Me.DialogResult = Windows.Forms.DialogResult.OK Then
+            'File / Folder History
+            If bMultiFiles Then
+                LastFile = MyFolder
+                UpdateHisFolder(MyFolder)
+            Else
+                LastFile = MyFiles(0)
+                UpdateHisFolder(fPATH(LastFile))
+                If Not bBrowseFolder Then UpdateHisFile(LastFile)
+            End If
+            'Update Global History Folder
+            For x = 0 To 9
+                FB_FolderHistory(x) = Me.ContextMenuHisFolder.Items(x).Text
+            Next
+            For x = 10 To 19
+                FB_FolderHistory(x) = Me.ContextMenuHisFolder.Items(x + 1).Text
+            Next
+            Return True
+        Else
+            Return False
+        End If
+    End Function
+
+    'Close and save File / Folder History
+    Public Sub SaveAndClose()
+        Dim f As System.IO.StreamWriter
+        Dim x As Int16
+        'Folder History
+        If FB_Init Then
+            Try
+                f = My.Computer.FileSystem.OpenTextFileWriter(FB_FilHisDir & "Directories.txt", False, System.Text.Encoding.UTF8)
+                For x = 0 To 19
+                    f.WriteLine(FB_FolderHistory(x))
+                Next
+                f.Close()
+                f.Dispose()
+            Catch ex As Exception
+            End Try
+            FB_Init = False
+        End If
+        'File History
+        If Initialized And Not bLightMode Then
+            If Not bBrowseFolder Then
+                Try
+                    f = My.Computer.FileSystem.OpenTextFileWriter(FB_FilHisDir & MyID & ".txt", False, System.Text.Encoding.UTF8)
+                    For x = 0 To 9
+                        f.WriteLine(Me.ContextMenuHisFile.Items(x).Text)
+                    Next
+                    f.Close()
+                    f.Dispose()
+                Catch ex As Exception
+                End Try
+            End If
+            Initialized = False
+        End If
+        f = Nothing
+        'Close
+        Me.Close()
+    End Sub
+
+    'Switching to FolderBrowser
+    Public Sub SetFolderBrowser()
+        If Initialized Then Exit Sub
+        bBrowseFolder = True
+        Me.Width = 500
+        Me.ListViewFiles.Enabled = False
+        Me.ButtonHisFile.Enabled = False
+        Me.TextBoxSearchFile.Enabled = False
+        Me.SplitContainer1.Panel2Collapsed = True
+        Me.Text = "Directory Browser"
+    End Sub
+
+    'Initialize
+    Private Sub Init()
+        Dim x As Int16
+        Dim line As String
+        Dim f As System.IO.StreamReader
+
+        UpdateLock = True
+
+        'Initialization for Global File Browser
+        If Not FB_Init Then GlobalInit()
+
+        'Load Drive ComboBox
+        For x = 0 To UBound(FB_Drives)
+            Me.ComboBoxDrive.Items.Add(FB_Drives(x))
+        Next
+
+        'FolderHistory ContextMenu
+        Me.ContextMenuHisFolder.Items.Clear()
+        For x = 0 To 9
+            Me.ContextMenuHisFolder.Items.Add("")
+        Next
+        Me.ContextMenuHisFolder.Items.Add("-")
+        For x = 10 To 19
+            Me.ContextMenuHisFolder.Items.Add("")
+        Next
+        Me.ContextMenuHisFolder.Items.Add("-")
+        Me.ContextMenuHisFolder.Items.Add(FavText)
+
+        'FileHistory ContextMenu
+        If bBrowseFolder Then
+            LastFile = FB_FolderHistory(0)
+        ElseIf Not bLightMode Then
+            For x = 0 To 9
+                Me.ContextMenuHisFile.Items.Add("")
+            Next
+            If IO.File.Exists(FB_FilHisDir & MyID & ".txt") Then
+                f = New System.IO.StreamReader(FB_FilHisDir & MyID & ".txt")
+                x = -1
+                Do While Not f.EndOfStream And x < 9
+                    x += 1
+                    line = f.ReadLine
+                    Me.ContextMenuHisFile.Items(x).Text = line
+                    If x = 0 Then LastFile = line
+                Loop
+                f.Close()
+                f.Dispose()
+            End If
+        End If
+
+        'Extension-ComboBox
+        If Not NoExt Then
+            ExtListSingle = New ArrayList
+            ExtListMulti = New ArrayList
+            For x = 0 To UBound(MyExt)
+                ExtListMulti.Add(MyExt(x))
+                For Each line In MyExt(x).Split(",")
+                    ExtListSingle.Add(Trim(line))
+                Next
+            Next
+            ExtListMulti.Add("*")
+            ExtListSingle.Add("*")
+        End If
+
+        Initialized = True
+        f = Nothing
+        UpdateLock = False
+    End Sub
+
+    Private Sub GlobalInit()
+        Dim drive As String
+        Dim x As Int16
+
+        Dim f As System.IO.StreamReader
+
+        'Create Drive List
+        ReDim FB_Drives(UBound(IO.Directory.GetLogicalDrives()))
+        x = -1
+        For Each drive In IO.Directory.GetLogicalDrives()
+            x += 1
+            FB_Drives(x) = Microsoft.VisualBasic.Left(drive, 2)
+        Next
+
+        'Read Folder History
+        For x = 0 To 19
+            FB_FolderHistory(x) = EmptyText
+        Next
+        If IO.File.Exists(FB_FilHisDir & "Directories.txt") Then
+            f = New System.IO.StreamReader(FB_FilHisDir & "Directories.txt")
+            x = -1
+            Do While Not f.EndOfStream And x < 19
+                x += 1
+                FB_FolderHistory(x) = f.ReadLine()
+            Loop
+            f.Dispose()
+            f.Close()
+        End If
+
+        FB_Init = True
+
+        f = Nothing
+    End Sub
+
+    'ComboBoxDrive_SelectedIndexChanged
+    Private Sub ComboBoxDrive_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxDrive.SelectedIndexChanged
+        If Not UpdateLock Then SetFolder(Me.ComboBoxDrive.SelectedItem.ToString)
+    End Sub
+
+
+    'ButtonFolderBack_Click
+    Private Sub ButtonFolderBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonFolderBack.Click
+        FolderUp()
+    End Sub
+
+    'TextBoxPath_KeyDown (ENTER)
+    Private Sub TextBoxPath_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBoxPath.KeyDown
+        Dim path As String
+        If e.KeyCode = Keys.Enter Then
+            path = Me.TextBoxPath.Text
+            If IO.Directory.Exists(path) Then
+                If bBrowseFolder Then
+                    Me.DialogResult = Windows.Forms.DialogResult.OK
+                    Me.Close()
+                Else
+                    SetFolder(path)
+                End If
+            Else
+                Me.DialogResult = Windows.Forms.DialogResult.OK
+                Me.Close()
+            End If
+        End If
+    End Sub
+
+    'ListViewFolder_SelectedIndexChanged
+    Private Sub ListViewFolder_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListViewFolder.SelectedIndexChanged
+        If bBrowseFolder Then
+            UpdateLock = True
+            If Me.ListViewFolder.SelectedItems.Count > 0 Then
+                Me.TextBoxPath.Text = Me.ListViewFolder.SelectedItems.Item(0).Text & "\"
+            End If
+            UpdateLock = False
+        End If
+    End Sub
+
+    'ListViewFolder_MouseDoubleClick
+    Private Sub ListViewFolder_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListViewFolder.MouseDoubleClick
+        If Me.ListViewFolder.SelectedItems.Count = 0 Then Exit Sub
+        SetFolder(MyFolder & Me.ListViewFolder.SelectedItems.Item(0).Text)
+    End Sub
+
+    'ListViewFolder_KeyDown
+    Private Sub ListViewFolder_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ListViewFolder.KeyDown
+        If e.KeyCode = Keys.Enter Then
+            If Me.ListViewFolder.SelectedItems.Count = 0 Then Exit Sub
+            SetFolder(MyFolder & Me.ListViewFolder.SelectedItems.Item(0).Text)
+        End If
+    End Sub
+
+    ''<SORTER>
+    ''Private Sub ListViewFiles_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListViewFiles.ColumnClick
+    ''    ' Determine if the clicked column is already the column that is 
+    ''    ' being sorted.
+    ''    If (e.Column = lvwColumnSorter.SortColumn) Then
+    ''        ' Reverse the current sort direction for this column.
+    ''        If (lvwColumnSorter.Order = SortOrder.Ascending) Then
+    ''            lvwColumnSorter.Order = SortOrder.Descending
+    ''        Else
+    ''            lvwColumnSorter.Order = SortOrder.Ascending
+    ''        End If
+    ''    Else
+    ''        ' Set the column number that is to be sorted; default to ascending.
+    ''        lvwColumnSorter.SortColumn = e.Column
+    ''        lvwColumnSorter.Order = SortOrder.Ascending
+    ''    End If
+
+    ''    ' Perform the sort with these new sort options.
+    ''    Me.ListViewFiles.Sort()
+
+    ''End Sub
+
+    'ListViewFiles_SelectedIndexChanged
+    Private Sub ListViewFiles_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListViewFiles.SelectedIndexChanged
+        UpdateLock = True
+        If Me.ListViewFiles.SelectedItems.Count = 0 Then
+            Me.TextBoxPath.Text = ""
+        Else
+            If Me.ListViewFiles.SelectedItems.Count > 1 Then
+                Me.TextBoxPath.Text = "<" & Me.ListViewFiles.SelectedItems.Count & " Files selected>"
+            Else
+                Me.TextBoxPath.Text = Me.ListViewFiles.SelectedItems.Item(0).Text
+                Me.TextBoxPath.SelectionStart = Me.TextBoxPath.Text.Length
+            End If
+        End If
+        UpdateLock = False
+    End Sub
+
+    'ListViewFiles_MouseDoubleClick
+    Private Sub ListViewFiles_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListViewFiles.MouseDoubleClick
+        If Me.ListViewFiles.SelectedItems.Count = 0 Then Exit Sub
+        Me.DialogResult = Windows.Forms.DialogResult.OK
+        Me.Close()
+    End Sub
+
+    'ListViewFiles_KeyDown
+    Private Sub ListViewFiles_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ListViewFiles.KeyDown
+        If e.KeyCode = Keys.Enter Then
+            If Me.ListViewFiles.SelectedItems.Count = 0 Then Exit Sub
+            Me.DialogResult = Windows.Forms.DialogResult.OK
+            Me.Close()
+        End If
+    End Sub
+
+    'TextBoxSearchFolder_KeyDown
+    Private Sub TextBoxSearchFolder_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBoxSearchFolder.KeyDown
+        Dim ItemCount As Int32
+        Dim SelIndex As Int32
+        Dim NoItem As Boolean
+        ItemCount = Me.ListViewFolder.Items.Count
+        NoItem = (ItemCount = 0)
+        If Not NoItem Then
+            If Me.ListViewFolder.SelectedItems.Count = 0 Then
+                SelIndex = -1
+            Else
+                SelIndex = Me.ListViewFolder.SelectedIndices(0)
+            End If
+        End If
+        Select Case e.KeyCode
+            Case Keys.Enter
+                If NoItem Then Exit Sub
+                If Me.ListViewFolder.SelectedItems.Count = 0 Then Me.ListViewFolder.SelectedIndices.Add(0)
+                SetFolder(MyFolder & Me.ListViewFolder.SelectedItems.Item(0).Text)
+            Case Keys.Up
+                If Not NoItem Then
+                    If SelIndex < 1 Then
+                        SelIndex = 1
+                    Else
+                        Me.ListViewFolder.Items(SelIndex).Selected = False
+                    End If
+                    Me.ListViewFolder.Items(SelIndex - 1).Selected = True
+                    Me.ListViewFolder.Items(SelIndex - 1).EnsureVisible()
+                End If
+            Case Keys.Down
+                If Not NoItem And SelIndex < ItemCount - 1 Then
+                    If Not SelIndex = -1 Then Me.ListViewFolder.Items(SelIndex).Selected = False
+                    Me.ListViewFolder.Items(SelIndex + 1).Selected = True
+                    Me.ListViewFolder.Items(SelIndex + 1).EnsureVisible()
+                End If
+            Case Keys.Back
+                If Me.TextBoxSearchFolder.Text = "" Then FolderUp()
+        End Select
+    End Sub
+
+    'TextBoxSearchFolder_TextChanged
+    Private Sub TextBoxSearchFolder_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxSearchFolder.TextChanged
+        If Not UpdateLock Then LoadListFolder()
+    End Sub
+
+    'TextBoxSearchFile_KeyDown
+    Private Sub TextBoxSearchFile_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBoxSearchFile.KeyDown
+        Dim ItemCount As Int32
+        Dim SelIndex As Int32
+        Dim NoItem As Boolean
+        ItemCount = Me.ListViewFiles.Items.Count
+        NoItem = (ItemCount = 0)
+        If Not NoItem Then
+            If Me.ListViewFiles.SelectedItems.Count = 0 Then
+                SelIndex = -1
+            Else
+                SelIndex = Me.ListViewFiles.SelectedIndices(0)
+            End If
+        End If
+        Select Case e.KeyCode
+            Case Keys.Enter
+                If NoItem Then Exit Sub
+                If Me.ListViewFiles.SelectedItems.Count = 0 Then Me.ListViewFiles.SelectedIndices.Add(0)
+                Me.DialogResult = Windows.Forms.DialogResult.OK
+                Me.Close()
+            Case Keys.Up
+                If Not NoItem Then
+                    If SelIndex < 1 Then
+                        SelIndex = 1
+                    Else
+                        Me.ListViewFiles.Items(SelIndex).Selected = False
+                    End If
+                    Me.ListViewFiles.Items(SelIndex - 1).Selected = True
+                    Me.ListViewFiles.Items(SelIndex - 1).EnsureVisible()
+                End If
+            Case Keys.Down
+                If Not NoItem And SelIndex < ItemCount - 1 Then
+                    If Not SelIndex = -1 Then Me.ListViewFiles.Items(SelIndex).Selected = False
+                    Me.ListViewFiles.Items(SelIndex + 1).Selected = True
+                    Me.ListViewFiles.Items(SelIndex + 1).EnsureVisible()
+                End If
+        End Select
+    End Sub
+
+    'TextBoxSearchFile_TextChanged
+    Private Sub TextBoxSearchFile_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBoxSearchFile.TextChanged
+        If Not UpdateLock Then LoadListFiles()
+    End Sub
+
+    'ComboBoxExt_TextChanged
+    Private Sub ComboBoxExt_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBoxExt.TextChanged
+        If Not UpdateLock Then LoadListFiles()
+    End Sub
+
+    'ButtonHisFolder_Click
+    Private Sub ButtonHisFolder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonHisFolder.Click
+        Me.ContextMenuHisFolder.Show(Control.MousePosition)
+    End Sub
+
+    'ButtonHisFile_Click
+    Private Sub ButtonHisFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonHisFile.Click
+        Me.ContextMenuHisFile.Show(Control.MousePosition)
+    End Sub
+
+    'Select All - Click
+    Private Sub ButtonAll_Click(sender As System.Object, e As System.EventArgs) Handles ButtonAll.Click
+        Dim i As Integer
+        Me.ListViewFiles.BeginUpdate()
+        For i = 0 To Me.ListViewFiles.Items.Count - 1
+            Me.ListViewFiles.Items(i).Selected = True
+        Next
+        Me.ListViewFiles.EndUpdate()
+    End Sub
+
+    'ContextMenuHisFile_ItemClicked
+    Private Sub ContextMenuHisFile_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ContextMenuHisFile.ItemClicked
+        Dim path As String
+
+        path = e.ClickedItem.Text.ToString
+
+        If path = EmptyText Then Exit Sub
+
+        SetFolder(fPATH(path))
+
+        Me.TextBoxPath.Text = IO.Path.GetFileName(path)
+
+    End Sub
+
+    'ContextMenuHisFolder_ItemClicked
+    Private Sub ContextMenuHisFolder_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles ContextMenuHisFolder.ItemClicked
+        Dim path As String
+        Dim favdlog As FB_FavDlog
+        Dim x As Integer
+
+        path = e.ClickedItem.Text.ToString
+
+        If path = EmptyText Then Exit Sub
+
+        If path = FavText Then
+            favdlog = New FB_FavDlog
+            If favdlog.ShowDialog = Windows.Forms.DialogResult.OK Then
+                For x = 10 To 19
+                    path = favdlog.ListBox1.Items(x - 10)
+                    If path = NoFavString Then
+                        FB_FolderHistory(x) = EmptyText
+                    Else
+                        FB_FolderHistory(x) = path
+                    End If
+                    Me.ContextMenuHisFolder.Items(x + 1).Text = FB_FolderHistory(x)
+                Next
+            End If
+        Else
+            SetFolder(path)
+        End If
+
+    End Sub
+
+    'TextBoxCurrent_MouseClick
+    Private Sub TextBoxCurrent_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBoxCurrent.MouseClick
+        Dim x As Int32
+        Dim x1 As Int32
+        Dim path As String
+        Dim newpath As String
+        newpath = ""
+        x = Me.TextBoxCurrent.SelectionStart
+        path = Me.TextBoxCurrent.Text
+        x1 = path.Length
+        If x = x1 Then Exit Sub
+        If x < 4 Then
+            SetFolder(Microsoft.VisualBasic.Left(path, 2))
+            Exit Sub
+        End If
+        Do While x1 > x
+            newpath = path
+            'path = Microsoft.VisualBasic.Left(path, x1 - 1)
+            path = Microsoft.VisualBasic.Left(path, path.LastIndexOf("\"))
+            x1 = path.Length
+        Loop
+        SetFolder(newpath)
+    End Sub
+
+    'ButtonDesktop_Click
+    Private Sub ButtonDesktop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonDesktop.Click
+        SetFolder(FileIO.SpecialDirectories.Desktop.ToString)
+    End Sub
+
+    'Context Menu Update
+    Private Sub UpdateHisFile(ByVal path As String)
+        Dim x As Int16
+        Dim y As Int16
+        If bLightMode Then Exit Sub
+        'Sort Context Menu
+        For x = 0 To 8
+            If UCase(Me.ContextMenuHisFile.Items(x).Text.ToString) = UCase(path) Then Exit For
+        Next
+        For y = x To 1 Step -1
+            Me.ContextMenuHisFile.Items(y).Text = Me.ContextMenuHisFile.Items(y - 1).Text
+        Next
+        Me.ContextMenuHisFile.Items(0).Text = path
+    End Sub
+    Private Sub UpdateHisFolder(ByVal path As String)
+        Dim x As Int16
+        Dim y As Int16
+
+        'Sort Context Menu
+        For x = 0 To 8
+            If UCase(Me.ContextMenuHisFolder.Items(x).Text.ToString) = UCase(path) Then Exit For
+        Next
+
+        For y = x To 1 Step -1
+            Me.ContextMenuHisFolder.Items(y).Text = Me.ContextMenuHisFolder.Items(y - 1).Text
+        Next
+
+        Me.ContextMenuHisFolder.Items(0).Text = path
+
+    End Sub
+
+    'Manuelles History-Update
+    Public Sub UpdateHistory(ByVal path As String)
+        Dim x As Int16
+        Dim y As Int16
+        'Init
+        If Not Initialized Then Init()
+        'Files
+        UpdateHisFile(path)
+        'Folder
+        path = fPATH(path)
+        For x = 0 To 8
+            If UCase(FB_FolderHistory(x)) = UCase(path) Then Exit For
+        Next
+        For y = x To 1 Step -1
+            FB_FolderHistory(y) = FB_FolderHistory(y - 1)
+        Next
+        FB_FolderHistory(0) = path
+    End Sub
+
+    'Change folder
+    Private Sub SetFolder(ByVal Path As String)
+
+        'Abort if no drive specified
+        If Microsoft.VisualBasic.Mid(Path, 2, 1) <> ":" Then Exit Sub
+
+        UpdateLock = True
+
+        'Delete Search-fields
+        Me.TextBoxSearchFile.Text = ""
+        Me.TextBoxSearchFolder.Text = ""
+
+        'Set Drive
+        If MyDrive <> Microsoft.VisualBasic.Left(Path, 2) Then
+            MyDrive = UCase(Microsoft.VisualBasic.Left(Path, 2))
+            Me.ComboBoxDrive.SelectedItem = MyDrive
+        End If
+
+        'Set Folder
+        MyFolder = Path
+        If Microsoft.VisualBasic.Right(MyFolder, 1) <> "\" Then MyFolder &= "\"
+        LoadListFolder()
+        LoadListFiles()
+
+        If bBrowseFolder Then Me.TextBoxPath.Text = ""
+
+        Me.TextBoxCurrent.Text = MyFolder
+
+        'Me.TextBoxPath.SelectionStart = Me.TextBoxPath.Text.Length
+        UpdateLock = False
+
+    End Sub
+
+    'Folder one level up
+    Private Sub FolderUp()
+        Dim path As String
+        Dim x As Int32
+        If MyFolder <> "" Then
+            path = Microsoft.VisualBasic.Left(MyFolder, MyFolder.Length - 1)
+            x = path.LastIndexOf("\")
+            If x > 0 Then SetFolder(Microsoft.VisualBasic.Left(path, x))
+        End If
+    End Sub
+
+    'Load Folder-List
+    Private Sub LoadListFolder()
+        Dim SearchPat As String
+        'Delete Folder-List
+        Me.ListViewFolder.Items.Clear()
+        SearchPat = "*" & Me.TextBoxSearchFolder.Text & "*"
+        Try
+            'Add Folder
+            Dim di As New IO.DirectoryInfo(MyFolder)
+            Dim aryFi As IO.DirectoryInfo()
+            Dim fi As IO.DirectoryInfo
+            aryFi = di.GetDirectories(SearchPat)
+            For Each fi In aryFi
+                Me.ListViewFolder.Items.Add(fi.ToString)
+            Next
+        Catch ex As Exception
+            Me.ListViewFolder.Items.Add("<ERROR: " & ex.Message.ToString & ">")
+        End Try
+    End Sub
+
+    'Load File-list
+    Private Sub LoadListFiles()
+        Dim x As Int32
+        Dim SearchPat As String
+        Dim SearchFile As String
+        Dim SearchExt As String
+        Dim ExtStr As String()
+
+        'Abort if bBrowseFolder
+        If bBrowseFolder Then Exit Sub
+
+        Me.LabelFileAnz.Text = "0 Files"
+        'Define Extension-filter
+        If Trim(Me.ComboBoxExt.Text.ToString) = "" Then
+            ExtStr = New String() {"*"}
+        Else
+            ExtStr = Me.ComboBoxExt.Text.ToString.Split(",")
+        End If
+
+        'Delete File-List
+        Me.ListViewFiles.Items.Clear()
+
+        SearchFile = Me.TextBoxSearchFile.Text
+
+        Me.ListViewFiles.BeginUpdate()
+        Try
+            'Add Folder
+            Dim di As New IO.DirectoryInfo(MyFolder)
+            Dim aryFi As IO.FileInfo()
+            Dim fi As IO.FileInfo
+            x = -1
+            For Each SearchExt In ExtStr
+                SearchPat = "*" & Trim(SearchFile) & "*." & Trim(SearchExt)
+                aryFi = di.GetFiles(SearchPat)
+                For Each fi In aryFi
+                    x += 1
+                    Me.ListViewFiles.Items.Add(fi.ToString)
+                Next
+            Next
+            If x = 0 Then
+                Me.LabelFileAnz.Text = "1 File"
+            Else
+                Me.LabelFileAnz.Text = x + 1 & " Files"
+            End If
+        Catch ex As Exception
+            Me.ListViewFiles.Items.Add("<ERROR: " & ex.Message.ToString & ">")
+        End Try
+
+        Me.ListViewFiles.EndUpdate()
+
+    End Sub
+
+    'Rename File
+    Private Sub RenameFileToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RenameFileToolStripMenuItem.Click
+        Dim file0 As String
+        Dim file As String
+        If Me.ListViewFiles.SelectedItems.Count = 1 Then
+            file0 = Me.ListViewFiles.SelectedItems(0).Text
+            file = file0
+lb1:
+            file = InputBox("New Filename", "Rename " & file0, file)
+            If file <> "" Then
+                If IO.File.Exists(MyFolder & file) Then
+                    MsgBox("File " & file & " already exists!")
+                    GoTo lb1
+                End If
+                Try
+                    My.Computer.FileSystem.RenameFile(MyFolder & file0, file)
+                    LoadListFiles()
+                Catch ex As Exception
+                    MsgBox("Cannot rename " & file0 & "!")
+                End Try
+            End If
+        End If
+    End Sub
+
+    'Delete File
+    Private Sub DeleteFileToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DeleteFileToolStripMenuItem.Click
+        Dim x As Int32
+        Dim c As Int32
+        c = Me.ListViewFiles.SelectedItems.Count
+        If c > 0 Then
+            If c = 1 Then
+                If MsgBox("Delete " & MyFolder & Me.ListViewFiles.SelectedItems(0).Text & "?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub
+            Else
+                If MsgBox("Delete " & c & " files?", MsgBoxStyle.YesNo) = MsgBoxResult.No Then Exit Sub
+            End If
+            For x = 0 To c - 1
+                Try
+                    IO.File.Delete(MyFolder & Me.ListViewFiles.SelectedItems(x).Text)
+                Catch ex As Exception
+                End Try
+            Next
+            LoadListFiles()
+        End If
+    End Sub
+
+    'Neuer Ordner
+    Private Sub ButtonNewDir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNewDir.Click
+        Dim f As String
+        f = "New Folder"
+lb10:
+        f = InputBox("Create New Folder", "New Folder", f)
+        If f <> "" Then
+            If IO.Directory.Exists(MyFolder & f) Then
+                MsgBox("Folder " & MyFolder & f & " already exists!")
+                GoTo lb10
+            End If
+            Try
+                IO.Directory.CreateDirectory(MyFolder & f)
+                SetFolder(MyFolder & f)
+            Catch ex As Exception
+                MsgBox("Cannot create " & f & "!")
+            End Try
+        End If
+    End Sub
+
+    ''Private Function fTimeString(ByVal T As Date) As String
+    ''    Return T.Year & "-" & T.Month.ToString("00") & "-" & T.Day.ToString("00") & " " & T.Hour.ToString("00") & ":" & T.Minute.ToString("00") & ":" & T.Second.ToString("00")
+    ''End Function
+
+
+    Private Function fPATH(ByVal Pfad As String) As String
+        Dim x As Int16
+        x = Pfad.LastIndexOf("\")
+        If x = -1 Then
+            Return Microsoft.VisualBasic.Left(Pfad, 0)
+        Else
+            Return Microsoft.VisualBasic.Left(Pfad, x + 1)
+        End If
+    End Function
+
+    Public ReadOnly Property Folder() As String
+        Get
+            Return MyFolder
+        End Get
+    End Property
+
+    Public ReadOnly Property Files() As String()
+        Get
+            Return MyFiles
+        End Get
+    End Property
+
+    Public Property ID() As String
+        Get
+            Return MyID
+        End Get
+        Set(ByVal value As String)
+            MyID = value
+        End Set
+    End Property
+
+    Public Property Extensions() As String()
+        Get
+            Return MyExt
+        End Get
+        Set(ByVal value As String())
+            MyExt = value
+            LastExt = MyExt(0)
+            NoExt = False
+        End Set
+    End Property
+
+
+End Class
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.designer.vb b/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.designer.vb
new file mode 100644
index 0000000000..f411d717e7
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.designer.vb
@@ -0,0 +1,122 @@
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class FB_FavDlog
+    Inherits System.Windows.Forms.Form
+
+    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Wird vom Windows Form-Designer benötigt.
+    Private components As System.ComponentModel.IContainer
+
+    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.  
+    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
+        Me.OK_Button = New System.Windows.Forms.Button()
+        Me.Cancel_Button = New System.Windows.Forms.Button()
+        Me.ListBox1 = New System.Windows.Forms.ListBox()
+        Me.Label1 = New System.Windows.Forms.Label()
+        Me.TableLayoutPanel1.SuspendLayout()
+        Me.SuspendLayout()
+        '
+        'TableLayoutPanel1
+        '
+        Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+        Me.TableLayoutPanel1.ColumnCount = 2
+        Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
+        Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
+        Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0)
+        Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0)
+        Me.TableLayoutPanel1.Location = New System.Drawing.Point(277, 155)
+        Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
+        Me.TableLayoutPanel1.RowCount = 1
+        Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
+        Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29)
+        Me.TableLayoutPanel1.TabIndex = 0
+        '
+        'OK_Button
+        '
+        Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None
+        Me.OK_Button.Location = New System.Drawing.Point(3, 3)
+        Me.OK_Button.Name = "OK_Button"
+        Me.OK_Button.Size = New System.Drawing.Size(67, 23)
+        Me.OK_Button.TabIndex = 0
+        Me.OK_Button.Text = "OK"
+        '
+        'Cancel_Button
+        '
+        Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None
+        Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel
+        Me.Cancel_Button.Location = New System.Drawing.Point(76, 3)
+        Me.Cancel_Button.Name = "Cancel_Button"
+        Me.Cancel_Button.Size = New System.Drawing.Size(67, 23)
+        Me.Cancel_Button.TabIndex = 1
+        Me.Cancel_Button.Text = "Cancel"
+        '
+        'ListBox1
+        '
+        Me.ListBox1.FormattingEnabled = True
+        Me.ListBox1.Location = New System.Drawing.Point(12, 12)
+        Me.ListBox1.Name = "ListBox1"
+        Me.ListBox1.Size = New System.Drawing.Size(411, 134)
+        Me.ListBox1.TabIndex = 1
+        '
+        'Label1
+        '
+        Me.Label1.AutoSize = True
+        Me.Label1.Location = New System.Drawing.Point(12, 163)
+        Me.Label1.Name = "Label1"
+        Me.Label1.Size = New System.Drawing.Size(119, 13)
+        Me.Label1.TabIndex = 2
+        Me.Label1.Text = "Doubleclick Item to Edit"
+        '
+        'FB_FavDlog
+        '
+        Me.AcceptButton = Me.OK_Button
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.CancelButton = Me.Cancel_Button
+        Me.ClientSize = New System.Drawing.Size(435, 196)
+        Me.Controls.Add(Me.Label1)
+        Me.Controls.Add(Me.ListBox1)
+        Me.Controls.Add(Me.TableLayoutPanel1)
+        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
+        Me.MaximizeBox = False
+        Me.MinimizeBox = False
+        Me.Name = "FB_FavDlog"
+        Me.ShowInTaskbar = False
+        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
+        Me.Text = "Edit Favorites"
+        Me.TableLayoutPanel1.ResumeLayout(False)
+        Me.ResumeLayout(False)
+        Me.PerformLayout()
+
+    End Sub
+    Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel
+    Friend WithEvents OK_Button As System.Windows.Forms.Button
+    Friend WithEvents Cancel_Button As System.Windows.Forms.Button
+    Friend WithEvents ListBox1 As System.Windows.Forms.ListBox
+    Friend WithEvents Label1 As System.Windows.Forms.Label
+
+End Class
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.resx b/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.resx
new file mode 100644
index 0000000000..7080a7d118
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.vb b/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.vb
new file mode 100644
index 0000000000..a153ed545c
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_FavDlog.vb
@@ -0,0 +1,67 @@
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+Imports System.Windows.Forms
+
+''' <summary>
+''' Sub-dialog for File Browser. Entirely controlled by cFilebrowser class (via FB_Dialog).
+''' </summary>
+''' <remarks></remarks>
+Public Class FB_FavDlog
+
+    Private Const NoFavString As String = "<undefined>"
+    Private Const EmptyText As String = " "
+
+    Private Sub FB_FavDlog_Load(sender As Object, e As System.EventArgs) Handles Me.Load
+        Dim x As Integer
+        Dim txt As String
+        For x = 10 To 19
+            txt = FB_FolderHistory(x)
+            If txt = EmptyText Then
+                Me.ListBox1.Items.Add(NoFavString)
+            Else
+                Me.ListBox1.Items.Add(txt)
+            End If
+        Next
+    End Sub
+
+    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
+        Me.DialogResult = System.Windows.Forms.DialogResult.OK
+        Me.Close()
+    End Sub
+
+    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
+        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
+        Me.Close()
+    End Sub
+
+    Private Sub ListBox1_MouseDoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDoubleClick
+        Dim i As Integer
+        Dim txt As String
+        Dim fb As cFileBrowser
+
+        i = Me.ListBox1.SelectedIndex
+
+        txt = Me.ListBox1.Items(i).ToString
+
+        If txt = NoFavString Then txt = ""
+
+        fb = New cFileBrowser("DirBr", True, True)
+
+        If fb.OpenDialog(txt) Then
+            txt = fb.Files(0)
+            Me.ListBox1.Items.Insert(i, txt)
+            Me.ListBox1.Items.RemoveAt(i + 1)
+        End If
+
+    End Sub
+
+
+End Class
diff --git a/VECTOAux/VectoAuxiliaries/UI/FB_Global.vb b/VECTOAux/VectoAuxiliaries/UI/FB_Global.vb
new file mode 100644
index 0000000000..80f51fe3e3
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/FB_Global.vb
@@ -0,0 +1,176 @@
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+
+''' <summary>
+''' Global File Brower properties and cFilebrowser instances.
+''' </summary>
+''' <remarks></remarks>
+Module FB_Global
+
+    Public FB_FolderHistory(19) As String
+    Public FB_Drives() As String
+    Public FB_Init As Boolean
+    Public FB_FilHisDir As String
+    '-----------------------------
+    Public fbFolder As cFileBrowser
+    Public fbVECTO As cFileBrowser
+    Public fbFileLists As cFileBrowser
+    Public fbVEH As cFileBrowser
+    Public fbDRI As cFileBrowser
+    Public fbMAP As cFileBrowser
+    Public fbFLD As cFileBrowser
+
+    Public fbENG As cFileBrowser
+    Public fbGBX As cFileBrowser
+    Public fbACC As cFileBrowser
+    Public fbAUX As cFileBrowser
+
+    Public fbGBS As cFileBrowser
+    Public fbTLM As cFileBrowser
+    Public fbRLM As cFileBrowser
+    Public fbTCC As cFileBrowser
+    Public fbCDx As cFileBrowser
+
+    Public fbVMOD As cFileBrowser
+
+                'Paths
+    private        MyAppPath = My.Application.Info.DirectoryPath & "\"
+    private        MyConfPath = MyAppPath & "Config\"
+    private        MyDeclPath = MyAppPath & "Declaration\"
+    'private        FB_FilHisDir = MyConfPath & "FileHistory\"
+    private        HomePath As String = "<HOME>"
+    private        JobPath As String = "<JOBPATH>"
+    private        DefVehPath As String = "<VEHDIR>"
+    private        NoFile As String = "<NOFILE>"
+    private        EmptyString As String = "<EMPTYSTRING>"
+    private        Break As String = "<//>"
+    
+    private        Normed As String = "NORM"
+   
+    private        PauxSply As String = "<AUX_"
+   
+    private        EngDrag As String = "<DRAG>"
+    
+#Region "File path functions"
+
+    'When no path is specified, then insert either HomeDir or MainDir   Special-folders
+    Public Function fFileRepl(ByVal file As String, Optional ByVal MainDir As String = "") As String
+
+        Dim ReplPath As String
+
+        'Trim Path
+        file = Trim(file)
+
+        'If empty file => Abort
+        If file = "" Then Return ""
+
+        'Replace sKeys
+        file = Microsoft.VisualBasic.Strings.Replace(file, DefVehPath & "\", MyAppPath & "Default Vehicles\", 1, -1, CompareMethod.Text)
+        file = Microsoft.VisualBasic.Strings.Replace(file, DefVehPath & "\", MyAppPath, 1, -1, CompareMethod.Text)
+
+        'Replace - Determine folder
+        If MainDir = "" Then
+            ReplPath = MyAppPath
+        Else
+            ReplPath = MainDir
+        End If
+
+        ' "..\" => One folder-level up
+        Do While ReplPath.Length > 0 AndAlso Left(file, 3) = "..\"
+            ReplPath = fPathUp(ReplPath)
+            file = file.Substring(3)
+        Loop
+
+
+        'Supplement Path, if not available
+        If fPATH(file) = "" Then
+
+            Return ReplPath & file
+
+        Else
+            Return file
+        End If
+
+    End Function
+
+    'Path one-level-up      "C:\temp\ordner1\"  >>  "C:\temp\"
+    Private Function fPathUp(ByVal Pfad As String) As String
+        Dim x As Int16
+
+        Pfad = Pfad.Substring(0, Pfad.Length - 1)
+
+        x = Pfad.LastIndexOf("\")
+
+        If x = -1 Then Return ""
+
+        Return Pfad.Substring(0, x + 1)
+
+    End Function
+
+    'File name without the path    "C:\temp\TEST.txt"  >>  "TEST.txt" oder "TEST"
+    Public Function fFILE(ByVal Pfad As String, ByVal MitEndung As Boolean) As String
+        Dim x As Int16
+        x = Pfad.LastIndexOf("\") + 1
+        Pfad = Microsoft.VisualBasic.Right(Pfad, Microsoft.VisualBasic.Len(Pfad) - x)
+        If Not MitEndung Then
+            x = Pfad.LastIndexOf(".")
+            If x > 0 Then Pfad = Microsoft.VisualBasic.Left(Pfad, x)
+        End If
+        Return Pfad
+    End Function
+
+    'Filename without extension   "C:\temp\TEST.txt" >> "C:\temp\TEST"
+    Public Function fFileWoExt(ByVal Path As String) As String
+        Return fPATH(Path) & fFILE(Path, False)
+    End Function
+
+    'Filename without path if Path = WorkDir or MainDir
+    Public Function fFileWoDir(ByVal file As String, Optional ByVal MainDir As String = "") As String
+        Dim path As String
+
+        If MainDir = "" Then
+            path = MyAppPath
+        Else
+            path = MainDir
+        End If
+
+        If UCase(fPATH(file)) = UCase(path) Then file = fFILE(file, True)
+
+        Return file
+
+    End Function
+
+    'Path alone        "C:\temp\TEST.txt"  >>  "C:\temp\"
+    '                   "TEST.txt"          >>  ""
+    Public Function fPATH(ByVal Pfad As String) As String
+        Dim x As Int16
+        If Pfad Is Nothing OrElse Pfad.Length < 3 OrElse Pfad.Substring(1, 2) <> ":\" Then Return ""
+        x = Pfad.LastIndexOf("\")
+        Return Microsoft.VisualBasic.Left(Pfad, x + 1)
+    End Function
+
+    'Extension alone      "C:\temp\TEST.txt" >> ".txt"
+    Public Function fEXT(ByVal Pfad As String) As String
+        Dim x As Int16
+        x = Pfad.LastIndexOf(".")
+        If x = -1 Then
+            Return ""
+        Else
+            Return Microsoft.VisualBasic.Right(Pfad, Microsoft.VisualBasic.Len(Pfad) - x)
+        End If
+    End Function
+
+
+#End Region
+
+
+End Module
+
diff --git a/VECTOAux/VectoAuxiliaries/UI/VECTO_Types.vb b/VECTOAux/VectoAuxiliaries/UI/VECTO_Types.vb
new file mode 100644
index 0000000000..b4b115e507
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/VECTO_Types.vb
@@ -0,0 +1,181 @@
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+
+''' <summary>
+''' Determines how file extensions are set in the File Browser
+''' </summary>
+''' <remarks></remarks>
+Public Enum tFbExtMode As Integer
+    ForceExt = 0
+    MultiExt = 1
+    SingleExt = 2
+End Enum
+
+Public Enum tWorkMsgType
+    StatusBar
+    StatusListBox
+    ProgBars
+    JobStatus
+    CycleStatus
+    InitProgBar
+    Abort
+End Enum
+
+Public Enum tMsgID
+    NewJob
+    Normal
+    Warn
+    Err
+End Enum
+
+
+Public Enum tCalcResult
+    Err
+    Abort
+    Done
+End Enum
+
+Public Enum tJobStatus
+    Running
+    Queued
+    OK
+    Err
+    Warn
+    Undef
+End Enum
+
+Public Enum tDriComp
+    t
+    V
+    Grad
+    Alt
+    nU
+    Gears
+    Padd
+    Pe
+    VairVres
+    VairBeta
+    Undefined
+    s
+    StopTime
+    Torque
+End Enum
+
+Public Enum tVehState
+    Cruise
+    Acc
+    Dec
+    Stopped
+End Enum
+
+Public Enum tEngState
+    Idle
+    Drag
+    FullDrag
+    Load
+    FullLoad
+    Stopped
+    Undef
+End Enum
+
+Public Enum tEngClutch
+    Closed
+    Opened
+    Slipping
+End Enum
+
+Public Enum tAuxComp
+    Psupply
+    Undefined
+End Enum
+
+Public Enum tCdMode
+    ConstCd0 = 0
+    CdOfV = 1
+    CdOfBeta = 2
+End Enum
+
+Public Enum tRtType
+    None = 0
+    Primary = 1
+    Secondary = 2
+End Enum
+
+Public Enum tGearbox
+    Manual = 0
+    SemiAutomatic = 1
+    Automatic = 2
+    Custom = 3
+End Enum
+
+Public Enum tVehCat As Integer
+    Undef = 0
+    RigidTruck = 1
+    Tractor = 2
+    Citybus = 3
+    InterurbanBus = 4
+    Coach = 5
+End Enum
+
+Public Enum tAxleConf As Integer
+    Undef = 0
+    a4x2 = 1
+    a4x4 = 2
+    a6x2 = 3
+    a6x4 = 4
+    a6x6 = 5
+    a8x2 = 6
+    a8x4 = 7
+    a8x6 = 8
+    a8x8 = 9
+End Enum
+
+Public Enum tLoading
+    FullLoaded
+    EmptyLoaded
+    RefLoaded
+    UserDefLoaded
+End Enum
+
+Public Enum tMission
+    LongHaul
+    RegionalDelivery
+    UrbanDelivery
+    MunicipalUtility
+    Construction
+    HeavyUrban
+    Urban
+    Suburban
+    Interurban
+    Coach
+    Undef
+End Enum
+
+Public Enum tWHTCpart
+    Urban
+    Rural
+    Motorway
+End Enum
+
+Public Enum tAux
+    Fan
+    SteerPump
+    HVAC
+    ElectricSys
+    PneumSys
+End Enum
+
+
+
+
+
+
+
diff --git a/VECTOAux/VectoAuxiliaries/UI/cFileBrowser.vb b/VECTOAux/VectoAuxiliaries/UI/cFileBrowser.vb
new file mode 100644
index 0000000000..c6122de067
--- /dev/null
+++ b/VECTOAux/VectoAuxiliaries/UI/cFileBrowser.vb
@@ -0,0 +1,161 @@
+' Copyright 2014 European Union.
+' Licensed under the EUPL (the 'Licence');
+'
+' * You may not use this work except in compliance with the Licence.
+' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl
+' * Unless required by applicable law or agreed to in writing,
+'   software distributed under the Licence is distributed on an "AS IS" basis,
+'   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+'
+' See the LICENSE.txt for the specific language governing permissions and limitations.
+Imports System.Collections
+
+''' <summary>
+''' File Browser for Open/Save File dialogs and Folder Browser. Features File History and Favorite Folders.
+''' </summary>
+''' <remarks>
+''' Usage:
+'''  1. Create new instance, preferably in FB_Global, e.g. fbTXT = New cFileBrowser("txt")
+'''  2. Define extensions, e.g.  fbTXT.Extensions = New String() {"txt","log"}
+'''  3. Use OpenDialog, SaveDialog, etc.
+'''  4. Call Close method when closing application to write file history, e.g. fbTXT.Close 
+''' File history is unique for each ID. Folder history is global.
+''' </remarks>
+Public Class cFileBrowser
+
+    Private Initialized As Boolean
+    Private MyID As String
+    Private MyExt As String()
+    Private Dlog As FB_Dialog
+    Private NoExt As Boolean
+    Private bFolderBrowser As Boolean
+    Private bLightMode As Boolean
+
+    ''' <summary>
+    ''' New cFileBrowser instance
+    ''' </summary>
+    ''' <param name="ID">Needed to save the file history when not using LightMode.</param>
+    ''' <param name="FolderBrowser">Browse folders instead of files.</param>
+    ''' <param name="LightMode">If enabled file history is not saved.</param>
+    ''' <remarks></remarks>
+    Public Sub New(ByVal ID As String, Optional ByVal FolderBrowser As Boolean = False, Optional ByVal LightMode As Boolean = False)
+        Initialized = False
+        MyID = ID
+        NoExt = True
+        bFolderBrowser = FolderBrowser
+        bLightMode = LightMode
+    End Sub
+
+    ''' <summary>
+    ''' Opens dialog for OPENING files. Selected file must exist. Returns False if cancelled by user, else True.
+    ''' </summary>
+    ''' <param name="path">Initial selected file. If empty the last selected file is used. If file without directoy the last directory will be used.</param>
+    ''' <param name="MultiFile">Allow selecting multiple files.</param>
+    ''' <param name="Ext">Set extension. If not defined the first predefined extension is used.</param>
+    ''' <returns></returns>
+    ''' <remarks></remarks>
+    Public Function OpenDialog(ByVal path As String, Optional ByVal MultiFile As Boolean = False, Optional ByVal Ext As String = "") As Boolean
+        Return CustomDialog(path, True, False, tFbExtMode.MultiExt, MultiFile, Ext, "Open")
+    End Function
+
+    ''' <summary>
+    ''' Opens dialog for SAVING files. If file already exists user will be asked to overwrite. Returns False if cancelled by user, else True.
+    ''' </summary>
+    ''' <param name="path">Initial selected file. If empty the last selected file is used. If file without directoy the last directory will be used.</param>
+    ''' <param name="ForceExt">Force predefined file extension.</param>
+    ''' <param name="Ext">Set extension. If not defined the first predefined extension is used.</param>
+    ''' <returns></returns>
+    ''' <remarks></remarks>
+    Public Function SaveDialog(ByVal path As String, Optional ByVal ForceExt As Boolean = True, Optional ByVal Ext As String = "") As Boolean
+        Dim x As tFbExtMode
+        If ForceExt Then
+            x = tFbExtMode.ForceExt
+        Else
+            x = tFbExtMode.SingleExt
+        End If
+        Return CustomDialog(path, False, True, x, False, Ext, "Save As")
+    End Function
+
+    ''' <summary>
+    ''' Custom open/save dialog. Returns False if cancelled by user, else True.
+    ''' </summary>
+    ''' <param name="path">Initial selected file. If empty the last selected file is used. If file without directoy the last directory will be used.</param>
+    ''' <param name="FileMustExist">Selected file must exist.</param>
+    ''' <param name="OverwriteCheck">If file already exists user will be asked to overwrite.</param>
+    ''' <param name="ExtMode">ForceExt= First predefined extension (or Ext parameter) will be forced (Default for SaveDialog), MultiExt= All files with predefined extensions are shown (Default for OpenDialog), SingleExt= All files with the first predefined extension will be shown.</param>
+    ''' <param name="MultiFile">Allow to select multiple files.</param>       
+    ''' <param name="Ext">Set extension. If not defined the first predefined extension is used.</param>            
+    ''' <param name="Title">Dialog title.</param>
+    ''' <returns></returns>
+    ''' <remarks></remarks>
+    Public Function CustomDialog(ByVal path As String, ByVal FileMustExist As Boolean, ByVal OverwriteCheck As Boolean, ByVal ExtMode As tFbExtMode, ByVal MultiFile As Boolean, ByVal Ext As String, Optional Title As String = "File Browser") As Boolean
+        If Not Initialized Then Init()
+        Return Dlog.Browse(path, FileMustExist, OverwriteCheck, ExtMode, MultiFile, Ext, Title)
+    End Function
+
+    'Manually update File History
+    ''' <summary>
+    ''' Add file to file history.
+    ''' </summary>
+    ''' <param name="Path">File to be added to file history.</param>
+    ''' <remarks></remarks>
+    Public Sub UpdateHistory(ByVal Path As String)
+        If Not Initialized Then Init()
+        Dlog.UpdateHistory(Path)
+    End Sub
+
+    ''' <summary>
+    ''' Save file history (if not LightMode) and global folder history.
+    ''' </summary>
+    ''' <remarks></remarks>
+    Public Sub Close()
+        If Initialized Then
+            Dlog.SaveAndClose()
+            Initialized = False
+        End If
+        Dlog = Nothing
+    End Sub
+
+    Private Sub Init()
+        Dlog = New FB_Dialog(bLightMode)
+        Dlog.ID = MyID
+        If Not NoExt Then Dlog.Extensions = MyExt
+        If bFolderBrowser Then Dlog.SetFolderBrowser()
+        Initialized = True
+    End Sub
+
+    ''' <summary>
+    ''' Predefined file extensions. Must be set before Open/Save dialog is used for the first time.
+    ''' </summary>
+    ''' <value></value>
+    ''' <returns></returns>
+    ''' <remarks></remarks>
+    Public Property Extensions() As String()
+        Get
+            Return MyExt
+        End Get
+        Set(ByVal value As String())
+            MyExt = value
+            NoExt = False
+        End Set
+    End Property
+
+    ''' <summary>
+    ''' Selected file(s) oder folder (if FolderBrowser)
+    ''' </summary>
+    ''' <value></value>
+    ''' <returns></returns>
+    ''' <remarks></remarks>
+    Public ReadOnly Property Files() As String()
+        Get
+            If Initialized Then
+                Return Dlog.Files
+            Else
+                Return New String() {""}
+            End If
+        End Get
+    End Property
+
+End Class
+
+
diff --git a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
index 8da559b248..2a468990cb 100644
--- a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
+++ b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
@@ -76,6 +76,7 @@
     <Import Include="System.Threading.Tasks" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AuxiliaryConfig.vb" />
     <Compile Include="AuxillaryEnvironment.vb" />
     <Compile Include="DownstreamModules\cDelaunayMap.vb" />
     <Compile Include="DownstreamModules\cFile V3.vb" />
@@ -162,6 +163,27 @@
     <Compile Include="Pneumatics\PneumaticsAuxilliariesConfig.vb" />
     <Compile Include="Pneumatics\PneumaticUserInputsConfig.vb" />
     <Compile Include="Signals.vb" />
+    <Compile Include="UI\cFileBrowser.vb" />
+    <Compile Include="UI\Dashboard.Designer.vb">
+      <DependentUpon>Dashboard.vb</DependentUpon>
+    </Compile>
+    <Compile Include="UI\Dashboard.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\FB_Dialog.designer.vb">
+      <DependentUpon>FB_Dialog.vb</DependentUpon>
+    </Compile>
+    <Compile Include="UI\FB_Dialog.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\FB_FavDlog.designer.vb">
+      <DependentUpon>FB_FavDlog.vb</DependentUpon>
+    </Compile>
+    <Compile Include="UI\FB_FavDlog.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\FB_Global.vb" />
+    <Compile Include="UI\VECTO_Types.vb" />
     <Compile Include="VectoInputs.vb" />
   </ItemGroup>
   <ItemGroup>
@@ -171,6 +193,16 @@
       <CustomToolNamespace>My.Resources</CustomToolNamespace>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="UI\Dashboard.resx">
+      <DependentUpon>Dashboard.vb</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\FB_Dialog.resx">
+      <DependentUpon>FB_Dialog.vb</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\FB_FavDlog.resx">
+      <DependentUpon>FB_FavDlog.vb</DependentUpon>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
     <None Include="My Project\Application.myapp">
@@ -184,9 +216,7 @@
     </None>
     <None Include="packages.config" />
   </ItemGroup>
-  <ItemGroup>
-    <Folder Include="UI\" />
-  </ItemGroup>
+  <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
-- 
GitLab