diff --git a/VECTO Changelog.txt b/VECTO Changelog.txt
index c87911b5f0e7da81724507af466f73e42404251a..3948498c454982c6b6009f303c656ea835d3642d 100644
--- a/VECTO Changelog.txt	
+++ b/VECTO Changelog.txt	
@@ -1,8 +1,14 @@
-VECTO ?.? (future release)
-- User Manual: "Don't use secondary retarder if retarder losses are already defined in transmission loss maps"
+VECTO ?.? (future release) TODO
+- User Manual:
+	"Don't use secondary retarder if retarder losses are already defined in transmission loss maps"
+	Engine/FLD Editor
+	New Eco Roll
+	GBX
+	<DRAG>
 - Gearbox Rules must be set when loading .gbx file to aviod invalid settings (e.g. AT with Skip Gears)
 - Correct Pg and Proll calculation (Road gradient)??
 
+
 VECTO x.x (current source - next release)
 - Bugfix: FC interpolation failed when load points matched map points exactly.
 - Bugfix: Invalid "FC= -10000!" errors when outside of FC-Map
@@ -16,13 +22,24 @@ VECTO x.x (current source - next release)
 	o New: Tq_drag = drag torque
 	o Removed: Pe_norm, n_norm	
 - No abortion if transmission output and input torque have different signs (In>0, Out<0). (Caused "Transmission Loss Map invalid" error messages)
-- Bugfix: Error if Look-Ahead Coasting was disabled.
+- Bugfix: Random crashes if Look-Ahead Coasting was disabled.
 - Eco-Roll revised:
 	o Engages if Pwheel < 0
 	o Disengages if Underspeed is reached.
-- Improved gear shift model for torque converter
-- Updates in torque converter [IN DEVELOPMENT]
 - Look-Ahead Coasting now uses real coasting also if road gradient > 0 which means the coasting deceleration can be so high that no braking is necessary. In this case the braking phase will be ommitted and the total deceleration time can be shorter than expected by the given target coasting deceleration.
+- Bugfix: Error if Look-Ahead Coasting was disabled.
+- Eco-Roll revised (see changelog)
+- Removed "IgnoreFCextrapol" form DEV-Options
+- Bugfix: Distance Correction didn't work right with Look Ahead Coasting. Now distance error is acceptable but at the cost of partly interrupted coasting phases. Should be revised in future updates.
+- Major update in Gearbox/Toque Converter:
+	o Torque converter can be defined in multiple gears
+	o Same gear numbers in output as in GBX file, i.e. first gear with TC is not "TC" or "0.5" but simply "1"
+	o "Minimum time between two gear shifts" now also limits torque converter shifts
+	o Unlimited number of gears and new gear list in GUI without fixed gear number
+	o Improved gear shift model for torque converter
+	o Driving Cycle Preprocessing and Gear Shift Model now use approximated efficiency values based in the transmission loss maps. Reduces calculation time significantly with little to no impact on fuel consumption.
+- Engine Only Mode: Engine motoring points can be defined explicitly in load cycle with "<DRAG>"
+- Updated some error messages (units)
 	
 	
 	
diff --git a/VECTO Release Checklist.txt b/VECTO Release Checklist.txt
new file mode 100644
index 0000000000000000000000000000000000000000..99b5df1d907ab50bee1004b0f0bca33fe77699a0
--- /dev/null
+++ b/VECTO Release Checklist.txt	
@@ -0,0 +1,8 @@
+~ VECTO Release Checklist ~
+
+- vectolic.dll (check for right version!! Source is currently in beta for file signing features)
+- User Manual (dir)
+- User Manual\Update Notes.pdf
+- GRAPHi (dir)
+- GRAPHi\config\settings.cfg >>>> Set default separators to Comma/Point!!
+- GRAPHi\config\ColorScale.csv >>>>> New format since V5.1.3!!
diff --git a/VECTO/GUI/F_ENG.Designer.vb b/VECTO/GUI/F_ENG.Designer.vb
index 2c6145be92caaeb86160e269c81b5c8180b644f1..61860504b9e27057a9f98440032dc47867e0d80d 100644
--- a/VECTO/GUI/F_ENG.Designer.vb
+++ b/VECTO/GUI/F_ENG.Designer.vb
@@ -54,9 +54,6 @@ Partial Class F_ENG
         Me.TbDispl = New System.Windows.Forms.TextBox()
         Me.TbName = New System.Windows.Forms.TextBox()
         Me.Label3 = New System.Windows.Forms.Label()
-        Me.Label4 = New System.Windows.Forms.Label()
-        Me.TbFLD = New System.Windows.Forms.TextBox()
-        Me.BtFLD = New System.Windows.Forms.Button()
         Me.TbMAP = New System.Windows.Forms.TextBox()
         Me.Label6 = New System.Windows.Forms.Label()
         Me.BtMAP = New System.Windows.Forms.Button()
@@ -68,12 +65,18 @@ Partial Class F_ENG
         Me.OpenWithGRAPHiToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
         Me.OpenWithToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
         Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
-        Me.BtFLDOpen = New System.Windows.Forms.Button()
         Me.BtMAPopen = New System.Windows.Forms.Button()
+        Me.BtAddFLD = New System.Windows.Forms.Button()
+        Me.BtRemFLD = New System.Windows.Forms.Button()
+        Me.LvFLDs = New System.Windows.Forms.ListView()
+        Me.ColumnHeader0 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.GroupBox1 = New System.Windows.Forms.GroupBox()
         Me.ToolStrip1.SuspendLayout()
         Me.StatusStrip1.SuspendLayout()
         CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
         Me.CmOpenFile.SuspendLayout()
+        Me.GroupBox1.SuspendLayout()
         Me.SuspendLayout()
         '
         'TbNleerl
@@ -180,7 +183,7 @@ Partial Class F_ENG
         '
         Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
         Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
-        Me.ButCancel.Location = New System.Drawing.Point(418, 360)
+        Me.ButCancel.Location = New System.Drawing.Point(418, 473)
         Me.ButCancel.Name = "ButCancel"
         Me.ButCancel.Size = New System.Drawing.Size(75, 23)
         Me.ButCancel.TabIndex = 13
@@ -190,7 +193,7 @@ Partial Class F_ENG
         'ButOK
         '
         Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
-        Me.ButOK.Location = New System.Drawing.Point(337, 360)
+        Me.ButOK.Location = New System.Drawing.Point(337, 473)
         Me.ButOK.Name = "ButOK"
         Me.ButOK.Size = New System.Drawing.Size(75, 23)
         Me.ButOK.TabIndex = 12
@@ -279,7 +282,7 @@ Partial Class F_ENG
         'StatusStrip1
         '
         Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.LbStatus})
-        Me.StatusStrip1.Location = New System.Drawing.Point(0, 386)
+        Me.StatusStrip1.Location = New System.Drawing.Point(0, 499)
         Me.StatusStrip1.Name = "StatusStrip1"
         Me.StatusStrip1.Size = New System.Drawing.Size(505, 22)
         Me.StatusStrip1.SizingGrip = False
@@ -333,35 +336,9 @@ Partial Class F_ENG
         Me.Label3.TabIndex = 11
         Me.Label3.Text = "Make and Model"
         '
-        'Label4
-        '
-        Me.Label4.AutoSize = True
-        Me.Label4.Location = New System.Drawing.Point(12, 205)
-        Me.Label4.Name = "Label4"
-        Me.Label4.Size = New System.Drawing.Size(128, 13)
-        Me.Label4.TabIndex = 38
-        Me.Label4.Text = "Full Load and Drag Curve"
-        '
-        'TbFLD
-        '
-        Me.TbFLD.Location = New System.Drawing.Point(12, 221)
-        Me.TbFLD.Name = "TbFLD"
-        Me.TbFLD.Size = New System.Drawing.Size(418, 20)
-        Me.TbFLD.TabIndex = 6
-        '
-        'BtFLD
-        '
-        Me.BtFLD.Location = New System.Drawing.Point(436, 219)
-        Me.BtFLD.Name = "BtFLD"
-        Me.BtFLD.Size = New System.Drawing.Size(28, 23)
-        Me.BtFLD.TabIndex = 7
-        Me.BtFLD.TabStop = False
-        Me.BtFLD.Text = "..."
-        Me.BtFLD.UseVisualStyleBackColor = True
-        '
         'TbMAP
         '
-        Me.TbMAP.Location = New System.Drawing.Point(12, 271)
+        Me.TbMAP.Location = New System.Drawing.Point(12, 388)
         Me.TbMAP.Name = "TbMAP"
         Me.TbMAP.Size = New System.Drawing.Size(418, 20)
         Me.TbMAP.TabIndex = 8
@@ -369,7 +346,7 @@ Partial Class F_ENG
         'Label6
         '
         Me.Label6.AutoSize = True
-        Me.Label6.Location = New System.Drawing.Point(12, 255)
+        Me.Label6.Location = New System.Drawing.Point(12, 372)
         Me.Label6.Name = "Label6"
         Me.Label6.Size = New System.Drawing.Size(115, 13)
         Me.Label6.TabIndex = 38
@@ -377,7 +354,7 @@ Partial Class F_ENG
         '
         'BtMAP
         '
-        Me.BtMAP.Location = New System.Drawing.Point(436, 269)
+        Me.BtMAP.Location = New System.Drawing.Point(436, 386)
         Me.BtMAP.Name = "BtMAP"
         Me.BtMAP.Size = New System.Drawing.Size(28, 23)
         Me.BtMAP.TabIndex = 9
@@ -388,7 +365,7 @@ Partial Class F_ENG
         'TbWHTC
         '
         Me.TbWHTC.Enabled = False
-        Me.TbWHTC.Location = New System.Drawing.Point(12, 321)
+        Me.TbWHTC.Location = New System.Drawing.Point(12, 438)
         Me.TbWHTC.Name = "TbWHTC"
         Me.TbWHTC.Size = New System.Drawing.Size(447, 20)
         Me.TbWHTC.TabIndex = 10
@@ -397,7 +374,7 @@ Partial Class F_ENG
         '
         Me.Label7.AutoSize = True
         Me.Label7.Enabled = False
-        Me.Label7.Location = New System.Drawing.Point(12, 305)
+        Me.Label7.Location = New System.Drawing.Point(12, 422)
         Me.Label7.Name = "Label7"
         Me.Label7.Size = New System.Drawing.Size(109, 13)
         Me.Label7.TabIndex = 38
@@ -406,7 +383,7 @@ Partial Class F_ENG
         'BtWHTC
         '
         Me.BtWHTC.Enabled = False
-        Me.BtWHTC.Location = New System.Drawing.Point(465, 319)
+        Me.BtWHTC.Location = New System.Drawing.Point(465, 436)
         Me.BtWHTC.Name = "BtWHTC"
         Me.BtWHTC.Size = New System.Drawing.Size(28, 23)
         Me.BtWHTC.TabIndex = 11
@@ -448,42 +425,85 @@ Partial Class F_ENG
         Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
         Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder"
         '
-        'BtFLDOpen
-        '
-        Me.BtFLDOpen.Image = Global.VECTO.My.Resources.Resources.application_export_icon_small
-        Me.BtFLDOpen.Location = New System.Drawing.Point(470, 219)
-        Me.BtFLDOpen.Name = "BtFLDOpen"
-        Me.BtFLDOpen.Size = New System.Drawing.Size(23, 23)
-        Me.BtFLDOpen.TabIndex = 40
-        Me.BtFLDOpen.TabStop = False
-        Me.BtFLDOpen.UseVisualStyleBackColor = True
-        '
         'BtMAPopen
         '
         Me.BtMAPopen.Image = Global.VECTO.My.Resources.Resources.application_export_icon_small
-        Me.BtMAPopen.Location = New System.Drawing.Point(470, 269)
+        Me.BtMAPopen.Location = New System.Drawing.Point(470, 386)
         Me.BtMAPopen.Name = "BtMAPopen"
         Me.BtMAPopen.Size = New System.Drawing.Size(23, 23)
         Me.BtMAPopen.TabIndex = 40
         Me.BtMAPopen.TabStop = False
         Me.BtMAPopen.UseVisualStyleBackColor = True
         '
+        'BtAddFLD
+        '
+        Me.BtAddFLD.Image = Global.VECTO.My.Resources.Resources.plus_circle_icon
+        Me.BtAddFLD.Location = New System.Drawing.Point(6, 133)
+        Me.BtAddFLD.Name = "BtAddFLD"
+        Me.BtAddFLD.Size = New System.Drawing.Size(29, 23)
+        Me.BtAddFLD.TabIndex = 42
+        Me.BtAddFLD.UseVisualStyleBackColor = True
+        '
+        'BtRemFLD
+        '
+        Me.BtRemFLD.Image = Global.VECTO.My.Resources.Resources.minus_circle_icon
+        Me.BtRemFLD.Location = New System.Drawing.Point(43, 133)
+        Me.BtRemFLD.Name = "BtRemFLD"
+        Me.BtRemFLD.Size = New System.Drawing.Size(29, 23)
+        Me.BtRemFLD.TabIndex = 43
+        Me.BtRemFLD.UseVisualStyleBackColor = True
+        '
+        'LvFLDs
+        '
+        Me.LvFLDs.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader0, Me.ColumnHeader1})
+        Me.LvFLDs.FullRowSelect = True
+        Me.LvFLDs.GridLines = True
+        Me.LvFLDs.HideSelection = False
+        Me.LvFLDs.Location = New System.Drawing.Point(6, 19)
+        Me.LvFLDs.MultiSelect = False
+        Me.LvFLDs.Name = "LvFLDs"
+        Me.LvFLDs.Size = New System.Drawing.Size(469, 108)
+        Me.LvFLDs.TabIndex = 41
+        Me.LvFLDs.TabStop = False
+        Me.LvFLDs.UseCompatibleStateImageBehavior = False
+        Me.LvFLDs.View = System.Windows.Forms.View.Details
+        '
+        'ColumnHeader0
+        '
+        Me.ColumnHeader0.Text = "File"
+        Me.ColumnHeader0.Width = 365
+        '
+        'ColumnHeader1
+        '
+        Me.ColumnHeader1.Text = "Assigned Gears"
+        Me.ColumnHeader1.Width = 92
+        '
+        'GroupBox1
+        '
+        Me.GroupBox1.Controls.Add(Me.LvFLDs)
+        Me.GroupBox1.Controls.Add(Me.BtRemFLD)
+        Me.GroupBox1.Controls.Add(Me.BtAddFLD)
+        Me.GroupBox1.Location = New System.Drawing.Point(12, 196)
+        Me.GroupBox1.Name = "GroupBox1"
+        Me.GroupBox1.Size = New System.Drawing.Size(481, 162)
+        Me.GroupBox1.TabIndex = 44
+        Me.GroupBox1.TabStop = False
+        Me.GroupBox1.Text = "Full Load and Drag Curves"
+        '
         'F_ENG
         '
         Me.AcceptButton = Me.ButOK
         Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
         Me.CancelButton = Me.ButCancel
-        Me.ClientSize = New System.Drawing.Size(505, 408)
+        Me.ClientSize = New System.Drawing.Size(505, 521)
+        Me.Controls.Add(Me.GroupBox1)
         Me.Controls.Add(Me.BtMAPopen)
-        Me.Controls.Add(Me.BtFLDOpen)
         Me.Controls.Add(Me.PictureBox1)
         Me.Controls.Add(Me.BtWHTC)
         Me.Controls.Add(Me.Label7)
         Me.Controls.Add(Me.BtMAP)
-        Me.Controls.Add(Me.BtFLD)
         Me.Controls.Add(Me.Label6)
-        Me.Controls.Add(Me.Label4)
         Me.Controls.Add(Me.TbNleerl)
         Me.Controls.Add(Me.StatusStrip1)
         Me.Controls.Add(Me.Label11)
@@ -493,10 +513,9 @@ Partial Class F_ENG
         Me.Controls.Add(Me.Label2)
         Me.Controls.Add(Me.ButCancel)
         Me.Controls.Add(Me.Label10)
+        Me.Controls.Add(Me.ButOK)
         Me.Controls.Add(Me.TbWHTC)
         Me.Controls.Add(Me.TbMAP)
-        Me.Controls.Add(Me.ButOK)
-        Me.Controls.Add(Me.TbFLD)
         Me.Controls.Add(Me.TbInertia)
         Me.Controls.Add(Me.Label41)
         Me.Controls.Add(Me.Label3)
@@ -520,6 +539,7 @@ Partial Class F_ENG
         Me.StatusStrip1.PerformLayout()
         CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
         Me.CmOpenFile.ResumeLayout(False)
+        Me.GroupBox1.ResumeLayout(False)
         Me.ResumeLayout(False)
         Me.PerformLayout()
 
@@ -552,9 +572,6 @@ Partial Class F_ENG
     Friend WithEvents TbDispl As System.Windows.Forms.TextBox
     Friend WithEvents TbName As System.Windows.Forms.TextBox
     Friend WithEvents Label3 As System.Windows.Forms.Label
-    Friend WithEvents Label4 As System.Windows.Forms.Label
-    Friend WithEvents TbFLD As System.Windows.Forms.TextBox
-    Friend WithEvents BtFLD As System.Windows.Forms.Button
     Friend WithEvents TbMAP As System.Windows.Forms.TextBox
     Friend WithEvents Label6 As System.Windows.Forms.Label
     Friend WithEvents BtMAP As System.Windows.Forms.Button
@@ -568,6 +585,11 @@ Partial Class F_ENG
     Friend WithEvents OpenWithGRAPHiToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
     Friend WithEvents OpenWithToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
     Friend WithEvents ShowInFolderToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
-    Friend WithEvents BtFLDOpen As System.Windows.Forms.Button
     Friend WithEvents BtMAPopen As System.Windows.Forms.Button
+    Friend WithEvents BtAddFLD As System.Windows.Forms.Button
+    Friend WithEvents BtRemFLD As System.Windows.Forms.Button
+    Friend WithEvents LvFLDs As System.Windows.Forms.ListView
+    Friend WithEvents ColumnHeader0 As System.Windows.Forms.ColumnHeader
+    Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
+    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
 End Class
diff --git a/VECTO/GUI/F_ENG.resx b/VECTO/GUI/F_ENG.resx
index 0c5aaf6911f591c954e277eab0d0a3eaa6e90651..863f211b1960271731fa71f1a31e239ad0a7e63f 100644
--- a/VECTO/GUI/F_ENG.resx
+++ b/VECTO/GUI/F_ENG.resx
@@ -124,7 +124,7 @@
     <value>114, 20</value>
   </metadata>
   <metadata name="CmOpenFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>1101, 12</value>
+    <value>226, 18</value>
   </metadata>
   <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
diff --git a/VECTO/GUI/F_ENG.vb b/VECTO/GUI/F_ENG.vb
index 0ee1df5ba172eedeff65691a8ec74376d4ba7390..83000961393894addad058a9c7bba6223ab7700f 100644
--- a/VECTO/GUI/F_ENG.vb
+++ b/VECTO/GUI/F_ENG.vb
@@ -5,6 +5,10 @@
     Public GenDir As String = ""
     Private Changed As Boolean = False
 
+    Private FLDdia As F_FLD
+
+
+
     Private Sub F_ENG_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
         If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then
             e.Cancel = ChangeCheckCancel()
@@ -12,6 +16,9 @@
     End Sub
 
     Private Sub F_ENG_Load(sender As Object, e As System.EventArgs) Handles Me.Load
+
+        FLDdia = New F_FLD
+
         Changed = False
         newENG()
     End Sub
@@ -78,7 +85,7 @@
         Me.TbInertia.Text = ""
         Me.TbNleerl.Text = ""
         Me.TbNnenn.Text = ""
-        Me.TbFLD.Text = ""
+        Me.LvFLDs.Items.Clear()
         Me.TbMAP.Text = ""
         Me.TbWHTC.Text = ""
 
@@ -92,6 +99,8 @@
 
     Public Sub openENG(ByVal file As String)
         Dim ENG0 As cENG
+        Dim i As Integer
+        Dim lv0 As ListViewItem
 
         If ChangeCheckCancel() Then Exit Sub
 
@@ -110,7 +119,14 @@
         Me.TbInertia.Text = ENG0.I_mot.ToString
         Me.TbNleerl.Text = ENG0.nleerl.ToString
         Me.TbNnenn.Text = ENG0.nnenn.ToString
-        Me.TbFLD.Text = ENG0.PathFLD(True)
+
+        Me.LvFLDs.Items.Clear()
+        For i = 0 To ENG0.fFLD.Count - 1
+            lv0 = New ListViewItem(ENG0.PathFLD(i, True))
+            lv0.SubItems.Add(ENG0.FLDgears(i))
+            Me.LvFLDs.Items.Add(lv0)
+        Next
+
         Me.TbMAP.Text = ENG0.PathMAP(True)
         Me.TbWHTC.Text = ENG0.PathWHTC(True)
 
@@ -139,6 +155,7 @@
     'Save ENG
     Private Function saveENG(ByVal file As String) As Boolean
         Dim ENG0 As cENG
+        Dim i As Int16
 
         ENG0 = New cENG
         ENG0.FilePath = file
@@ -151,7 +168,12 @@
         ENG0.nleerl = CSng(fTextboxToNumString(Me.TbNleerl.Text))
         ENG0.nnenn = CSng(fTextboxToNumString(Me.TbNnenn.Text))
 
-        ENG0.PathFLD = Me.TbFLD.Text
+        For i = 0 To Me.LvFLDs.Items.Count - 1
+            ENG0.fFLD.Add(New cSubPath)
+            ENG0.PathFLD(i) = Me.LvFLDs.Items(i).SubItems(0).Text
+            ENG0.FLDgears.Add(Me.LvFLDs.Items(i).SubItems(1).Text)
+        Next
+
         ENG0.PathMAP = Me.TbMAP.Text
         ENG0.PathWHTC = Me.TbWHTC.Text
 
@@ -232,10 +254,6 @@
         Change()
     End Sub
 
-    Private Sub TbFLD_TextChanged(sender As System.Object, e As System.EventArgs) Handles TbFLD.TextChanged
-        Change()
-    End Sub
-
     Private Sub TbMAP_TextChanged(sender As System.Object, e As System.EventArgs) Handles TbMAP.TextChanged
         Change()
     End Sub
@@ -247,14 +265,110 @@
 #End Region
 
 
+    Private Sub LvFLDs_DoubleClick(sender As Object, e As System.EventArgs) Handles LvFLDs.DoubleClick
+        EditFLD()
+    End Sub
+
+    Private Sub LvFLDs_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles LvFLDs.KeyDown
+        Select Case e.KeyCode
+            Case Keys.Delete, Keys.Back
+                RemoveFLD(False)
+            Case Keys.Enter
+                EditFLD()
+        End Select
+    End Sub
 
+    Private Sub BtAddFLD_Click(sender As System.Object, e As System.EventArgs) Handles BtAddFLD.Click
+        AddFLD()
+        Me.LvFLDs.Items(Me.LvFLDs.Items.Count - 1).Selected = True
+        EditFLD()
+    End Sub
 
-#Region "Browse Buttons"
+    Private Sub BtRemFLD_Click(sender As System.Object, e As System.EventArgs) Handles BtRemFLD.Click
+        RemoveFLD(False)
+    End Sub
+
+    Private Sub EditFLD()
+        Dim nums As String()
+
+        FLDdia.EngFile = EngFile
+        FLDdia.TbFLD.Text = Me.LvFLDs.SelectedItems(0).SubItems(0).Text
+
+        If Me.LvFLDs.SelectedItems(0).SubItems(1).Text.Contains("-") Then
+            Try
+                nums = Me.LvFLDs.SelectedItems(0).SubItems(1).Text.Replace(" ", "").Split("-")
+                FLDdia.NumGearFrom.Value = Math.Max(CInt(nums(0)), 0)
+                FLDdia.NumGearTo.Value = Math.Min(CInt(nums(1)), 99)
+            Catch ex As Exception
+                FLDdia.NumGearFrom.Value = 0
+                FLDdia.NumGearTo.Value = 99
+                MsgBox(Me.LvFLDs.SelectedItems(0).SubItems(1).Text & " is no valid range!")
+            End Try
+        Else
+            FLDdia.NumGearFrom.Value = Math.Max(CInt(Me.LvFLDs.SelectedItems(0).SubItems(1).Text), 0)
+            FLDdia.NumGearTo.Value = Math.Min(CInt(Me.LvFLDs.SelectedItems(0).SubItems(1).Text), 99)
+        End If
+
+        If FLDdia.ShowDialog = Windows.Forms.DialogResult.OK Then
+
+            Me.LvFLDs.SelectedItems(0).SubItems(0).Text = FLDdia.TbFLD.Text
+
+            If FLDdia.NumGearFrom.Value = FLDdia.NumGearTo.Value Then
+                Me.LvFLDs.SelectedItems(0).SubItems(1).Text = FLDdia.NumGearFrom.Value
+            Else
+                Me.LvFLDs.SelectedItems(0).SubItems(1).Text = FLDdia.NumGearFrom.Value & "-" & FLDdia.NumGearTo.Value
+            End If
+
+            Change()
+
+        Else
+
+            If Me.LvFLDs.SelectedItems(0).SubItems(0).Text = "" Then RemoveFLD(True)
 
-    Private Sub BtFLD_Click(sender As System.Object, e As System.EventArgs) Handles BtFLD.Click
-        If fbFLD.OpenDialog(fFileRepl(Me.TbFLD.Text, fPATH(EngFile))) Then Me.TbFLD.Text = fFileWoDir(fbFLD.Files(0), fPATH(EngFile))
+        End If
+
+
+    End Sub
+
+    Private Sub AddFLD()
+        Dim lvi As ListViewItem
+
+        lvi = New ListViewItem("")
+        lvi.SubItems.Add("0 - 99")
+        Me.LvFLDs.Items.Add(lvi)
+
+        lvi.EnsureVisible()
+
+        Me.LvFLDs.Focus()
+
+        'Change() => NO! Change
+
+    End Sub
+
+    Private Sub RemoveFLD(ByVal NoChange As Boolean)
+        Dim i0 As Int16
+
+        If Me.LvFLDs.Items.Count = 0 Then Exit Sub
+
+        If Me.LvFLDs.SelectedItems.Count = 0 Then Me.LvFLDs.Items(Me.LvFLDs.Items.Count - 1).Selected = True
+
+        i0 = Me.LvFLDs.SelectedItems(0).Index
+
+        Me.LvFLDs.SelectedItems(0).Remove()
+
+        If i0 < Me.LvFLDs.Items.Count Then
+            Me.LvFLDs.Items(i0).Selected = True
+            Me.LvFLDs.Items(i0).EnsureVisible()
+        End If
+
+        Me.LvFLDs.Focus()
+
+        If Not NoChange Then Change()
     End Sub
 
+
+#Region "Browse Buttons"
+
     Private Sub BtMAP_Click(sender As System.Object, e As System.EventArgs) Handles BtMAP.Click
         If fbMAP.OpenDialog(fFileRepl(Me.TbMAP.Text, fPATH(EngFile))) Then Me.TbMAP.Text = fFileWoDir(fbMAP.Files(0), fPATH(EngFile))
     End Sub
@@ -263,16 +377,17 @@
         If fbWHTC.OpenDialog(fFileRepl(Me.TbWHTC.Text, fPATH(EngFile))) Then Me.TbWHTC.Text = fFileWoDir(fbWHTC.Files(0), fPATH(EngFile))
     End Sub
 
-    Private Sub BtFLDOpen_Click(sender As System.Object, e As System.EventArgs) Handles BtFLDOpen.Click
-        OpenFiles(fFileRepl(Me.TbFLD.Text, fPATH(EngFile)))
-    End Sub
-
     Private Sub BtMAPopen_Click(sender As System.Object, e As System.EventArgs) Handles BtMAPopen.Click
         Dim fldfile As String
 
-        fldfile = fFileRepl(Me.TbFLD.Text, fPATH(EngFile))
+        If Me.LvFLDs.Items.Count = 1 Then
+            fldfile = fFileRepl(Me.LvFLDs.Items(0).Text, fPATH(EngFile))
+        Else
+            fldfile = sKey.NoFile
+        End If
+
 
-        If IO.File.Exists(fldfile) Then
+        If fldfile <> sKey.NoFile AndAlso IO.File.Exists(fldfile) Then
             OpenFiles(fFileRepl(Me.TbMAP.Text, fPATH(EngFile)), fldfile)
         Else
             OpenFiles(fFileRepl(Me.TbMAP.Text, fPATH(EngFile)))
@@ -291,6 +406,8 @@
         Me.Close()
     End Sub
 
+
+
 #Region "Open File Context Menu"
 
     Private CmFiles As String()
@@ -329,6 +446,8 @@
 
 #End Region
 
-    
-  
+
+
+
+
 End Class
diff --git a/VECTO/GUI/F_FLD.Designer.vb b/VECTO/GUI/F_FLD.Designer.vb
new file mode 100644
index 0000000000000000000000000000000000000000..a26afc76c0500ae8a545b3e154a6e4d7fcd2a0d2
--- /dev/null
+++ b/VECTO/GUI/F_FLD.Designer.vb
@@ -0,0 +1,249 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class F_FLD
+    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.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel()
+        Me.OK_Button = New System.Windows.Forms.Button()
+        Me.Cancel_Button = New System.Windows.Forms.Button()
+        Me.BtFLDOpen = New System.Windows.Forms.Button()
+        Me.BtFLD = New System.Windows.Forms.Button()
+        Me.TbFLD = New System.Windows.Forms.TextBox()
+        Me.CmOpenFile = New System.Windows.Forms.ContextMenuStrip(Me.components)
+        Me.OpenWithGRAPHiToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.OpenWithToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.Label4 = New System.Windows.Forms.Label()
+        Me.GroupBox1 = New System.Windows.Forms.GroupBox()
+        Me.Label2 = New System.Windows.Forms.Label()
+        Me.Label1 = New System.Windows.Forms.Label()
+        Me.NumGearTo = New System.Windows.Forms.NumericUpDown()
+        Me.NumGearFrom = New System.Windows.Forms.NumericUpDown()
+        Me.Label3 = New System.Windows.Forms.Label()
+        Me.TableLayoutPanel1.SuspendLayout()
+        Me.CmOpenFile.SuspendLayout()
+        Me.GroupBox1.SuspendLayout()
+        CType(Me.NumGearTo, System.ComponentModel.ISupportInitialize).BeginInit()
+        CType(Me.NumGearFrom, System.ComponentModel.ISupportInitialize).BeginInit()
+        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(345, 131)
+        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"
+        '
+        'BtFLDOpen
+        '
+        Me.BtFLDOpen.Image = Global.VECTO.My.Resources.Resources.application_export_icon_small
+        Me.BtFLDOpen.Location = New System.Drawing.Point(470, 23)
+        Me.BtFLDOpen.Name = "BtFLDOpen"
+        Me.BtFLDOpen.Size = New System.Drawing.Size(23, 23)
+        Me.BtFLDOpen.TabIndex = 43
+        Me.BtFLDOpen.TabStop = False
+        Me.BtFLDOpen.UseVisualStyleBackColor = True
+        '
+        'BtFLD
+        '
+        Me.BtFLD.Location = New System.Drawing.Point(436, 23)
+        Me.BtFLD.Name = "BtFLD"
+        Me.BtFLD.Size = New System.Drawing.Size(28, 23)
+        Me.BtFLD.TabIndex = 42
+        Me.BtFLD.TabStop = False
+        Me.BtFLD.Text = "..."
+        Me.BtFLD.UseVisualStyleBackColor = True
+        '
+        'TbFLD
+        '
+        Me.TbFLD.Location = New System.Drawing.Point(12, 25)
+        Me.TbFLD.Name = "TbFLD"
+        Me.TbFLD.Size = New System.Drawing.Size(418, 20)
+        Me.TbFLD.TabIndex = 41
+        '
+        'CmOpenFile
+        '
+        Me.CmOpenFile.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenWithGRAPHiToolStripMenuItem, Me.OpenWithToolStripMenuItem, Me.ShowInFolderToolStripMenuItem})
+        Me.CmOpenFile.Name = "CmOpenFile"
+        Me.CmOpenFile.Size = New System.Drawing.Size(175, 70)
+        '
+        'OpenWithGRAPHiToolStripMenuItem
+        '
+        Me.OpenWithGRAPHiToolStripMenuItem.Name = "OpenWithGRAPHiToolStripMenuItem"
+        Me.OpenWithGRAPHiToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
+        Me.OpenWithGRAPHiToolStripMenuItem.Text = "Open with GRAPHi"
+        '
+        'OpenWithToolStripMenuItem
+        '
+        Me.OpenWithToolStripMenuItem.Name = "OpenWithToolStripMenuItem"
+        Me.OpenWithToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
+        Me.OpenWithToolStripMenuItem.Text = "Open with ..."
+        '
+        'ShowInFolderToolStripMenuItem
+        '
+        Me.ShowInFolderToolStripMenuItem.Name = "ShowInFolderToolStripMenuItem"
+        Me.ShowInFolderToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
+        Me.ShowInFolderToolStripMenuItem.Text = "Show in Folder"
+        '
+        'Label4
+        '
+        Me.Label4.AutoSize = True
+        Me.Label4.Location = New System.Drawing.Point(12, 9)
+        Me.Label4.Name = "Label4"
+        Me.Label4.Size = New System.Drawing.Size(157, 13)
+        Me.Label4.TabIndex = 45
+        Me.Label4.Text = "Full Load and Drag Curve (.vfld)"
+        '
+        'GroupBox1
+        '
+        Me.GroupBox1.Controls.Add(Me.Label3)
+        Me.GroupBox1.Controls.Add(Me.Label2)
+        Me.GroupBox1.Controls.Add(Me.Label1)
+        Me.GroupBox1.Controls.Add(Me.NumGearTo)
+        Me.GroupBox1.Controls.Add(Me.NumGearFrom)
+        Me.GroupBox1.Location = New System.Drawing.Point(12, 51)
+        Me.GroupBox1.Name = "GroupBox1"
+        Me.GroupBox1.Size = New System.Drawing.Size(479, 64)
+        Me.GroupBox1.TabIndex = 46
+        Me.GroupBox1.TabStop = False
+        Me.GroupBox1.Text = "Assigned Gears"
+        '
+        'Label2
+        '
+        Me.Label2.AutoSize = True
+        Me.Label2.Location = New System.Drawing.Point(129, 31)
+        Me.Label2.Name = "Label2"
+        Me.Label2.Size = New System.Drawing.Size(20, 13)
+        Me.Label2.TabIndex = 1
+        Me.Label2.Text = "To"
+        '
+        'Label1
+        '
+        Me.Label1.AutoSize = True
+        Me.Label1.Location = New System.Drawing.Point(14, 31)
+        Me.Label1.Name = "Label1"
+        Me.Label1.Size = New System.Drawing.Size(30, 13)
+        Me.Label1.TabIndex = 1
+        Me.Label1.Text = "From"
+        '
+        'NumGearTo
+        '
+        Me.NumGearTo.Location = New System.Drawing.Point(155, 29)
+        Me.NumGearTo.Maximum = New Decimal(New Integer() {99, 0, 0, 0})
+        Me.NumGearTo.Name = "NumGearTo"
+        Me.NumGearTo.Size = New System.Drawing.Size(51, 20)
+        Me.NumGearTo.TabIndex = 0
+        '
+        'NumGearFrom
+        '
+        Me.NumGearFrom.Location = New System.Drawing.Point(50, 29)
+        Me.NumGearFrom.Maximum = New Decimal(New Integer() {99, 0, 0, 0})
+        Me.NumGearFrom.Name = "NumGearFrom"
+        Me.NumGearFrom.Size = New System.Drawing.Size(51, 20)
+        Me.NumGearFrom.TabIndex = 0
+        '
+        'Label3
+        '
+        Me.Label3.AutoSize = True
+        Me.Label3.Location = New System.Drawing.Point(225, 31)
+        Me.Label3.Name = "Label3"
+        Me.Label3.Size = New System.Drawing.Size(245, 13)
+        Me.Label3.TabIndex = 2
+        Me.Label3.Text = "Gear 0 file is used for Idling and Engine Only Mode"
+        '
+        'F_FLD
+        '
+        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(503, 172)
+        Me.Controls.Add(Me.GroupBox1)
+        Me.Controls.Add(Me.Label4)
+        Me.Controls.Add(Me.BtFLDOpen)
+        Me.Controls.Add(Me.BtFLD)
+        Me.Controls.Add(Me.TbFLD)
+        Me.Controls.Add(Me.TableLayoutPanel1)
+        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
+        Me.MaximizeBox = False
+        Me.MinimizeBox = False
+        Me.Name = "F_FLD"
+        Me.ShowInTaskbar = False
+        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent
+        Me.Text = "Full load and Drag Curve"
+        Me.TableLayoutPanel1.ResumeLayout(False)
+        Me.CmOpenFile.ResumeLayout(False)
+        Me.GroupBox1.ResumeLayout(False)
+        Me.GroupBox1.PerformLayout()
+        CType(Me.NumGearTo, System.ComponentModel.ISupportInitialize).EndInit()
+        CType(Me.NumGearFrom, System.ComponentModel.ISupportInitialize).EndInit()
+        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 BtFLDOpen As System.Windows.Forms.Button
+    Friend WithEvents BtFLD As System.Windows.Forms.Button
+    Friend WithEvents TbFLD As System.Windows.Forms.TextBox
+    Friend WithEvents CmOpenFile As System.Windows.Forms.ContextMenuStrip
+    Friend WithEvents OpenWithGRAPHiToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents OpenWithToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents ShowInFolderToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents Label4 As System.Windows.Forms.Label
+    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
+    Friend WithEvents Label2 As System.Windows.Forms.Label
+    Friend WithEvents Label1 As System.Windows.Forms.Label
+    Friend WithEvents NumGearTo As System.Windows.Forms.NumericUpDown
+    Friend WithEvents NumGearFrom As System.Windows.Forms.NumericUpDown
+    Friend WithEvents Label3 As System.Windows.Forms.Label
+
+End Class
diff --git a/VECTO/GUI/F_FLD.resx b/VECTO/GUI/F_FLD.resx
new file mode 100644
index 0000000000000000000000000000000000000000..8d65b0426f944bfb18109b2588494bb7c9af1893
--- /dev/null
+++ b/VECTO/GUI/F_FLD.resx
@@ -0,0 +1,123 @@
+<?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="CmOpenFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/VECTO/GUI/F_FLD.vb b/VECTO/GUI/F_FLD.vb
new file mode 100644
index 0000000000000000000000000000000000000000..7a74c0518a3c4925e4eb32527f506668061e2b18
--- /dev/null
+++ b/VECTO/GUI/F_FLD.vb
@@ -0,0 +1,78 @@
+Imports System.Windows.Forms
+
+Public Class F_FLD
+
+    Public EngFile As String = ""
+
+    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
+
+        If Trim(Me.TbFLD.Text) = "" Then
+            MsgBox("No file defined!")
+            Me.TbFLD.Focus()
+            Me.TbFLD.SelectAll()
+            Exit Sub
+        End If
+
+        If Me.NumGearTo.Value < Me.NumGearFrom.Value Then
+            MsgBox("Invalid gear range!")
+            Exit Sub
+        End If
+
+        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 BtFLD_Click(sender As System.Object, e As System.EventArgs) Handles BtFLD.Click
+        If fbFLD.OpenDialog(fFileRepl(Me.TbFLD.Text, fPATH(EngFile))) Then Me.TbFLD.Text = fFileWoDir(fbFLD.Files(0), fPATH(EngFile))
+    End Sub
+
+    Private Sub BtFLDOpen_Click(sender As System.Object, e As System.EventArgs) Handles BtFLDOpen.Click
+        OpenFiles(fFileRepl(Me.TbFLD.Text, fPATH(EngFile)))
+    End Sub
+
+#Region "Open File Context Menu"
+
+    Private CmFiles As String()
+
+    Private Sub OpenFiles(ParamArray files() As String)
+
+        If files.Length = 0 Then Exit Sub
+
+        CmFiles = files
+
+        OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName
+
+        CmOpenFile.Show(Cursor.Position)
+
+    End Sub
+
+    Private Sub OpenWithGRAPHiToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OpenWithGRAPHiToolStripMenuItem.Click
+        If Not FileOpenGRAPHi(CmFiles) Then MsgBox("Failed to open file!")
+    End Sub
+
+    Private Sub OpenWithToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OpenWithToolStripMenuItem.Click
+        If Not FileOpenAlt(CmFiles(0)) Then MsgBox("Failed to open file!")
+    End Sub
+
+    Private Sub ShowInFolderToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles ShowInFolderToolStripMenuItem.Click
+        If IO.File.Exists(CmFiles(0)) Then
+            Try
+                System.Diagnostics.Process.Start("explorer", "/select,""" & CmFiles(0) & "")
+            Catch ex As Exception
+                MsgBox("Failed to open file!")
+            End Try
+        Else
+            MsgBox("File not found!")
+        End If
+    End Sub
+
+#End Region
+
+
+
+End Class
diff --git a/VECTO/GUI/F_GBX.Designer.vb b/VECTO/GUI/F_GBX.Designer.vb
index 7ac6f9ecd11e6751d9f745a985e3fad566ef455b..62847682c5ac6d047f98ce7649dda7615e0cc5e9 100644
--- a/VECTO/GUI/F_GBX.Designer.vb
+++ b/VECTO/GUI/F_GBX.Designer.vb
@@ -40,6 +40,7 @@ Partial Class F_GBX
         Me.TbTracInt = New System.Windows.Forms.TextBox()
         Me.LvGears = New System.Windows.Forms.ListView()
         Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
+        Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
         Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
         Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
         Me.TBI_getr = New System.Windows.Forms.TextBox()
@@ -50,7 +51,7 @@ Partial Class F_GBX
         Me.Label3 = New System.Windows.Forms.Label()
         Me.TbName = New System.Windows.Forms.TextBox()
         Me.PictureBox1 = New System.Windows.Forms.PictureBox()
-        Me.BtClearGear = New System.Windows.Forms.Button()
+        Me.BtRemGear = New System.Windows.Forms.Button()
         Me.GroupBox1 = New System.Windows.Forms.GroupBox()
         Me.PnTorqRes = New System.Windows.Forms.Panel()
         Me.Label2 = New System.Windows.Forms.Label()
@@ -91,6 +92,7 @@ Partial Class F_GBX
         Me.ChTCon = New System.Windows.Forms.CheckBox()
         Me.Label16 = New System.Windows.Forms.Label()
         Me.CbGStype = New System.Windows.Forms.ComboBox()
+        Me.BtAddGear = New System.Windows.Forms.Button()
         Me.ToolStrip1.SuspendLayout()
         Me.StatusStrip1.SuspendLayout()
         CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -227,7 +229,7 @@ Partial Class F_GBX
         '
         'LvGears
         '
-        Me.LvGears.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3})
+        Me.LvGears.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader4, Me.ColumnHeader2, Me.ColumnHeader3})
         Me.LvGears.FullRowSelect = True
         Me.LvGears.GridLines = True
         Me.LvGears.HideSelection = False
@@ -245,15 +247,20 @@ Partial Class F_GBX
         Me.ColumnHeader1.Text = "Gear"
         Me.ColumnHeader1.Width = 40
         '
+        'ColumnHeader4
+        '
+        Me.ColumnHeader4.Text = "TC"
+        Me.ColumnHeader4.Width = 31
+        '
         'ColumnHeader2
         '
         Me.ColumnHeader2.Text = "Ratio"
-        Me.ColumnHeader2.Width = 70
+        Me.ColumnHeader2.Width = 62
         '
         'ColumnHeader3
         '
         Me.ColumnHeader3.Text = "Loss Map or Efficiency [-]"
-        Me.ColumnHeader3.Width = 304
+        Me.ColumnHeader3.Width = 275
         '
         'TBI_getr
         '
@@ -324,14 +331,14 @@ Partial Class F_GBX
         Me.PictureBox1.TabIndex = 43
         Me.PictureBox1.TabStop = False
         '
-        'BtClearGear
+        'BtRemGear
         '
-        Me.BtClearGear.Image = Global.VECTO.My.Resources.Resources.minus_circle_icon
-        Me.BtClearGear.Location = New System.Drawing.Point(12, 297)
-        Me.BtClearGear.Name = "BtClearGear"
-        Me.BtClearGear.Size = New System.Drawing.Size(29, 23)
-        Me.BtClearGear.TabIndex = 3
-        Me.BtClearGear.UseVisualStyleBackColor = True
+        Me.BtRemGear.Image = Global.VECTO.My.Resources.Resources.minus_circle_icon
+        Me.BtRemGear.Location = New System.Drawing.Point(47, 297)
+        Me.BtRemGear.Name = "BtRemGear"
+        Me.BtRemGear.Size = New System.Drawing.Size(29, 23)
+        Me.BtRemGear.TabIndex = 3
+        Me.BtRemGear.UseVisualStyleBackColor = True
         '
         'GroupBox1
         '
@@ -705,6 +712,15 @@ Partial Class F_GBX
         Me.CbGStype.Size = New System.Drawing.Size(227, 21)
         Me.CbGStype.TabIndex = 1
         '
+        'BtAddGear
+        '
+        Me.BtAddGear.Image = Global.VECTO.My.Resources.Resources.plus_circle_icon
+        Me.BtAddGear.Location = New System.Drawing.Point(12, 297)
+        Me.BtAddGear.Name = "BtAddGear"
+        Me.BtAddGear.Size = New System.Drawing.Size(29, 23)
+        Me.BtAddGear.TabIndex = 3
+        Me.BtAddGear.UseVisualStyleBackColor = True
+        '
         'F_GBX
         '
         Me.AcceptButton = Me.ButOK
@@ -719,11 +735,12 @@ Partial Class F_GBX
         Me.Controls.Add(Me.PictureBox1)
         Me.Controls.Add(Me.Label3)
         Me.Controls.Add(Me.TbName)
-        Me.Controls.Add(Me.BtClearGear)
+        Me.Controls.Add(Me.BtAddGear)
         Me.Controls.Add(Me.ButCancel)
-        Me.Controls.Add(Me.LvGears)
+        Me.Controls.Add(Me.BtRemGear)
         Me.Controls.Add(Me.TbTracInt)
         Me.Controls.Add(Me.ButOK)
+        Me.Controls.Add(Me.LvGears)
         Me.Controls.Add(Me.StatusStrip1)
         Me.Controls.Add(Me.ToolStrip1)
         Me.Controls.Add(Me.TBI_getr)
@@ -768,7 +785,7 @@ Partial Class F_GBX
     Friend WithEvents LbStatus As System.Windows.Forms.ToolStripStatusLabel
     Friend WithEvents ButCancel As System.Windows.Forms.Button
     Friend WithEvents ButOK As System.Windows.Forms.Button
-    Friend WithEvents BtClearGear As System.Windows.Forms.Button
+    Friend WithEvents BtRemGear As System.Windows.Forms.Button
     Friend WithEvents TbTracInt As System.Windows.Forms.TextBox
     Friend WithEvents LvGears As System.Windows.Forms.ListView
     Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
@@ -824,4 +841,6 @@ Partial Class F_GBX
     Friend WithEvents Label17 As System.Windows.Forms.Label
     Friend WithEvents PnTC As System.Windows.Forms.Panel
     Friend WithEvents PnTorqRes As System.Windows.Forms.Panel
+    Friend WithEvents BtAddGear As System.Windows.Forms.Button
+    Friend WithEvents ColumnHeader4 As System.Windows.Forms.ColumnHeader
 End Class
diff --git a/VECTO/GUI/F_GBX.resx b/VECTO/GUI/F_GBX.resx
index 7c2697aedb40fddb222fd2c8db453878d793ef4e..b55d85516f8b870af14eddb6f3fdc6408754f720 100644
--- a/VECTO/GUI/F_GBX.resx
+++ b/VECTO/GUI/F_GBX.resx
@@ -121,7 +121,7 @@
     <value>17, 17</value>
   </metadata>
   <metadata name="StatusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>259, 21</value>
+    <value>117, 20</value>
   </metadata>
   <metadata name="CmOpenFile.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>1101, 12</value>
diff --git a/VECTO/GUI/F_GBX.vb b/VECTO/GUI/F_GBX.vb
index e4358af04284af1a24084fb38a92ca1fb48b19be..89b0246341ca32d10ec8bbd5a4dd775b4c8f792a 100644
--- a/VECTO/GUI/F_GBX.vb
+++ b/VECTO/GUI/F_GBX.vb
@@ -16,24 +16,10 @@
     End Sub
 
     Private Sub F_GBX_Load(sender As Object, e As System.EventArgs) Handles Me.Load
-        Dim lvi As ListViewItem
-        Dim i As Short
 
         Init = False
         GearDia = New F_VEH_GearDlog
 
-        lvi = New ListViewItem("A")
-        lvi.SubItems.Add("")
-        lvi.SubItems.Add("")
-        Me.LvGears.Items.Add(lvi)
-
-        For i = 1 To 16
-            lvi = New ListViewItem(i.ToString("00"))
-            lvi.SubItems.Add("")
-            lvi.SubItems.Add("")
-            Me.LvGears.Items.Add(lvi)
-        Next
-
         Init = True
 
         Changed = False
@@ -105,11 +91,13 @@
         Me.TbTracInt.Text = ""
         Me.TBI_getr.Text = ""
 
-        For Each lvi In LvGears.Items
-            lvi.SubItems(1).Text = "0"
-            lvi.SubItems(2).Text = ""
-            lvi.ForeColor = Color.Gray
-        Next
+        Me.LvGears.Items.Clear()
+
+        lvi = New ListViewItem("Axle")
+        lvi.SubItems.Add("-")
+        lvi.SubItems.Add("0")
+        lvi.SubItems.Add("0")
+        Me.LvGears.Items.Add(lvi)
 
         Me.TbShiftPolyFile.Text = ""
         'Me.ChSkipGears.Checked = False         'set by CbGStype.SelectedIndexChanged
@@ -136,6 +124,7 @@
     Public Sub openGBX(ByVal file As String)
         Dim GBX0 As cGBX
         Dim i As Integer
+        Dim lv0 As ListViewItem
 
         If ChangeCheckCancel() Then Exit Sub
 
@@ -152,14 +141,32 @@
         Me.TbTracInt.Text = GBX0.TracIntrSi.ToString
         Me.TBI_getr.Text = GBX0.I_Getriebe.ToString
 
-        For i = 0 To 16
-            Me.LvGears.Items(i).SubItems(1).Text = GBX0.GetrI(i)
-            Me.LvGears.Items(i).SubItems(2).Text = GBX0.GetrMap(i, True)
-            If GBX0.GetrI(i) = 0 Then
-                Me.LvGears.Items(i).ForeColor = Color.Gray
+        Me.ChTCon.Checked = GBX0.TCon
+
+        Me.LvGears.Items.Clear()
+
+        For i = 0 To GBX0.GetrI.Count - 1
+
+            If i = 0 Then
+                lv0 = New ListViewItem("Axle")
+            Else
+                lv0 = New ListViewItem(i.ToString("00"))
+            End If
+
+            If Me.ChTCon.Checked And i > 0 Then
+                If GBX0.IsTCgear(i) Then
+                    lv0.SubItems.Add("on")
+                Else
+                    lv0.SubItems.Add("off")
+                End If
             Else
-                Me.LvGears.Items(i).ForeColor = Color.Black
+                lv0.SubItems.Add("-")
             End If
+            lv0.SubItems.Add(GBX0.GetrI(i))
+            lv0.SubItems.Add(GBX0.GetrMap(i, True))
+
+
+            Me.LvGears.Items.Add(lv0)
         Next
 
         Me.TbShiftPolyFile.Text = GBX0.gsFile(True)
@@ -171,7 +178,6 @@
         Me.TbStartAcc.Text = GBX0.gs_StartAcc.ToString
         Me.ChShiftInside.Checked = GBX0.gs_ShiftInside
 
-        Me.ChTCon.Checked = GBX0.TCon
         Me.TbTCfile.Text = GBX0.TCfile(True)
         Me.TbTCrefrpm.Text = GBX0.TCrefrpm
 
@@ -213,9 +219,11 @@
         GBX0.TracIntrSi = fTextboxToNumString(Me.TbTracInt.Text)
         GBX0.I_Getriebe = fTextboxToNumString(Me.TBI_getr.Text)
 
-        For i = 0 To 16
-            GBX0.GetrI(i) = CSng(Me.LvGears.Items(i).SubItems(1).Text)
-            GBX0.GetrMap(i) = Me.LvGears.Items(i).SubItems(2).Text
+        For i = 0 To Me.LvGears.Items.Count - 1
+            GBX0.IsTCgear.Add(Me.LvGears.Items(i).SubItems(1).Text = "on" And i > 0)
+            GBX0.GetrI.Add(CSng(Me.LvGears.Items(i).SubItems(2).Text))
+            GBX0.GetrMaps.Add(New cSubPath)
+            GBX0.GetrMap(i) = Me.LvGears.Items(i).SubItems(3).Text
         Next
 
         GBX0.gsFile = Me.TbShiftPolyFile.Text
@@ -231,7 +239,7 @@
 
         GBX0.TCon = Me.ChTCon.Checked
         GBX0.TCfile = Me.TbTCfile.Text
-        GBX0.TCrefrpm = Me.TbTCrefrpm.Text
+        GBX0.TCrefrpm = fTextboxToNumString(Me.TbTCrefrpm.Text)
 
 
         If Not GBX0.SaveFile Then
@@ -417,81 +425,115 @@
     Private Sub LvGears_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles LvGears.KeyDown
         Select Case e.KeyCode
             Case Keys.Delete, Keys.Back
-                ClearGear()
+                RemoveGear(False)
             Case Keys.Enter
                 EditGear()
         End Select
     End Sub
 
-    'Clear Gear Button
-    Private Sub BtClearGear_Click(sender As System.Object, e As System.EventArgs) Handles BtClearGear.Click
-        ClearGear()
+    'Remove Gear Button
+    Private Sub BtClearGear_Click(sender As System.Object, e As System.EventArgs) Handles BtRemGear.Click
+        RemoveGear(False)
+    End Sub
+
+
+    Private Sub BtAddGear_Click(sender As System.Object, e As System.EventArgs) Handles BtAddGear.Click
+        AddGear()
+        Me.LvGears.Items(Me.LvGears.Items.Count - 1).Selected = True
+        EditGear()
     End Sub
 
     'Edit Gear
     Private Sub EditGear()
 
         Do
+
+            GearDia.ChIsTCgear.Enabled = (Me.ChTCon.Checked And Me.LvGears.SelectedIndices(0) > 0)
+
             GearDia.GbxPath = fPATH(GbxFile)
             GearDia.TbGear.Text = Me.LvGears.SelectedItems(0).SubItems(0).Text
-            GearDia.TbRatio.Text = Me.LvGears.SelectedItems(0).SubItems(1).Text
-            GearDia.TbMapPath.Text = Me.LvGears.SelectedItems(0).SubItems(2).Text
-
-            GearDia.BtNext.Enabled = (Me.LvGears.SelectedIndices(0) < Me.LvGears.Items.Count - 1)
+            GearDia.ChIsTCgear.Checked = (Me.ChTCon.Checked And Me.LvGears.SelectedItems(0).SubItems(1).Text = "on")
+            GearDia.TbRatio.Text = Me.LvGears.SelectedItems(0).SubItems(2).Text
+            GearDia.TbMapPath.Text = Me.LvGears.SelectedItems(0).SubItems(3).Text
 
             If GearDia.ShowDialog = Windows.Forms.DialogResult.OK Then
-                Me.LvGears.SelectedItems(0).SubItems(1).Text = GearDia.TbRatio.Text
-                Me.LvGears.SelectedItems(0).SubItems(2).Text = GearDia.TbMapPath.Text
-                If GearDia.TbRatio.Text = "0" Then
-                    Me.LvGears.SelectedItems(0).ForeColor = Color.Gray
+
+                If GearDia.ChIsTCgear.Checked Then
+                    Me.LvGears.SelectedItems(0).SubItems(1).Text = "on"
                 Else
-                    Me.LvGears.SelectedItems(0).ForeColor = Color.Black
+                    If Me.ChTCon.Checked Then
+                        Me.LvGears.SelectedItems(0).SubItems(1).Text = "off"
+                    Else
+                        Me.LvGears.SelectedItems(0).SubItems(1).Text = "-"
+                    End If
                 End If
 
+                Me.LvGears.SelectedItems(0).SubItems(2).Text = GearDia.TbRatio.Text
+                Me.LvGears.SelectedItems(0).SubItems(3).Text = GearDia.TbMapPath.Text
+             
+
                 Change()
 
+            Else
+
+                If Me.LvGears.SelectedItems(0).SubItems(2).Text = "" Then RemoveGear(True)
+
             End If
 
-            If GearDia.NextGear Then Me.LvGears.Items(Me.LvGears.SelectedIndices(0) + 1).Selected = True
+            If GearDia.NextGear Then
+                If Me.LvGears.Items.Count - 1 = Me.LvGears.SelectedIndices(0) Then AddGear()
+
+                Me.LvGears.Items(Me.LvGears.SelectedIndices(0) + 1).Selected = True
+            End If
 
         Loop Until Not GearDia.NextGear
 
     End Sub
 
-    'Clear Gear
-    Private Sub ClearGear()
-        Dim lv0 As ListViewItem
-        Dim i0 As Int16
-        Dim i As Int16
+    'Add Gear
+    Private Sub AddGear()
+        Dim lvi As ListViewItem
 
-        If Me.LvGears.SelectedItems.Count = 0 Then Exit Sub
+        lvi = New ListViewItem(Me.LvGears.Items.Count.ToString("00"))
+        If Me.ChTCon.Checked Then
+            lvi.SubItems.Add("off")
+        Else
+            lvi.SubItems.Add("-")
+        End If
+        lvi.SubItems.Add("")
+        lvi.SubItems.Add("")
+        Me.LvGears.Items.Add(lvi)
 
-        i0 = Me.LvGears.SelectedItems(0).Index
+        lvi.EnsureVisible()
 
-        If i0 = 0 Then Exit Sub 'Must not remove axle
+        Me.LvGears.Focus()
 
-        Me.LvGears.SelectedItems(0).Remove()
+        'Change() => NO! Change() is already handled by EditGear
 
-        lv0 = New ListViewItem("")
-        lv0.SubItems.Add("0")
-        lv0.SubItems.Add("")
-        lv0.ForeColor = Color.Gray
-        Me.LvGears.Items.Add(lv0)
+    End Sub
 
-        If Me.ChTCon.Checked Then
+    'Remove Gear
+    Private Sub RemoveGear(ByVal NoChange As Boolean)
+        Dim i0 As Int16
+        Dim i As Int16
+        Dim lv0 As ListViewItem
 
-            Me.LvGears.Items(1).SubItems(0).Text = "TC"
+        If Me.LvGears.Items.Count < 2 Then Exit Sub
 
-            For i = 2 To 16
-                Me.LvGears.Items(i).SubItems(0).Text = (i - 1).ToString("00")
-            Next
+        If Me.LvGears.SelectedItems.Count = 0 Then Me.LvGears.Items(Me.LvGears.Items.Count - 1).Selected = True
 
-        Else
-            For i = 1 To 16
-                Me.LvGears.Items(i).SubItems(0).Text = i.ToString("00")
-            Next
+        i0 = Me.LvGears.SelectedItems(0).Index
 
-        End If
+        If i0 = 0 Then Exit Sub 'Must not remove axle
+
+        Me.LvGears.SelectedItems(0).Remove()
+
+        i = 0
+        For Each lv0 In Me.LvGears.Items
+            If lv0.SubItems(0).Text = "Axle" Then Continue For
+            i += 1
+            lv0.SubItems(0).Text = i.ToString("00")
+        Next
 
         If i0 < Me.LvGears.Items.Count Then
             Me.LvGears.Items(i0).Selected = True
@@ -500,7 +542,7 @@
 
         Me.LvGears.Focus()
 
-        Change()
+        If Not NoChange Then Change()
 
     End Sub
 
@@ -586,24 +628,24 @@
     End Sub
 
     Private Sub CheckGearTC()
-        Dim i As Short
+        Dim lv0 As ListViewItem
 
         If Not Init Then Exit Sub
 
-        If Me.ChTCon.Checked Then
-
-            Me.LvGears.Items(1).SubItems(0).Text = "TC"
+        For Each lv0 In Me.LvGears.Items
 
-            For i = 2 To 16
-                Me.LvGears.Items(i).SubItems(0).Text = (i - 1).ToString("00")
-            Next
+            If lv0.SubItems(0).Text = "Axle" Then Continue For
 
-        Else
-            For i = 1 To 16
-                Me.LvGears.Items(i).SubItems(0).Text = i.ToString("00")
-            Next
-
-        End If
+            If Me.ChTCon.Checked Then
+                If lv0.Index = 1 Then
+                    lv0.SubItems(1).Text = "on"
+                Else
+                    lv0.SubItems(1).Text = "off"
+                End If
+            Else
+                lv0.SubItems(1).Text = "-"
+            End If
+        Next
 
     End Sub
 
@@ -612,4 +654,5 @@
 
    
 
+
 End Class
diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb
index 872dcb878b6cacf2da8e9f451990979dca1b5647..2b5c2ec81500f8046c42aa0738e13d125941164f 100644
--- a/VECTO/GUI/F_MAINForm.vb
+++ b/VECTO/GUI/F_MAINForm.vb
@@ -2202,6 +2202,9 @@ lbFound:
                     Catch ex As Exception
                         MsgBox("Cannot open link! (-_-;)")
                     End Try
+                ElseIf Len(CStr(Me.LvMsg.SelectedItems(0).Tag)) > 5 AndAlso Microsoft.VisualBasic.Left(CStr(Me.LvMsg.SelectedItems(0).Tag), 5) = "<GUI>" Then
+                    txt = CStr(Me.LvMsg.SelectedItems(0).Tag).Replace("<GUI>", "")
+                    OpenVectoFile(txt)
                 Else
                     OpenFiles(CStr(Me.LvMsg.SelectedItems(0).Tag))
                 End If
diff --git a/VECTO/GUI/F_VEH_GearDlog.Designer.vb b/VECTO/GUI/F_VEH_GearDlog.Designer.vb
index 994876dff94f48f4532f3bc1b086ef5d00e71515..0fc8f275082961bfb26692d29a15647176b150bd 100644
--- a/VECTO/GUI/F_VEH_GearDlog.Designer.vb
+++ b/VECTO/GUI/F_VEH_GearDlog.Designer.vb
@@ -33,6 +33,7 @@ Partial Class F_VEH_GearDlog
         Me.Label3 = New System.Windows.Forms.Label()
         Me.BtBrowse = New System.Windows.Forms.Button()
         Me.BtNext = New System.Windows.Forms.Button()
+        Me.ChIsTCgear = New System.Windows.Forms.CheckBox()
         Me.TableLayoutPanel1.SuspendLayout()
         Me.SuspendLayout()
         '
@@ -44,7 +45,7 @@ Partial Class F_VEH_GearDlog
         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(287, 89)
+        Me.TableLayoutPanel1.Location = New System.Drawing.Point(380, 89)
         Me.TableLayoutPanel1.Name = "TableLayoutPanel1"
         Me.TableLayoutPanel1.RowCount = 1
         Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!))
@@ -91,7 +92,7 @@ Partial Class F_VEH_GearDlog
         'TbRatio
         '
         Me.TbRatio.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
-        Me.TbRatio.Location = New System.Drawing.Point(138, 6)
+        Me.TbRatio.Location = New System.Drawing.Point(149, 6)
         Me.TbRatio.Name = "TbRatio"
         Me.TbRatio.Size = New System.Drawing.Size(66, 20)
         Me.TbRatio.TabIndex = 3
@@ -100,7 +101,7 @@ Partial Class F_VEH_GearDlog
         '
         Me.Label2.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
         Me.Label2.AutoSize = True
-        Me.Label2.Location = New System.Drawing.Point(100, 9)
+        Me.Label2.Location = New System.Drawing.Point(111, 9)
         Me.Label2.Name = "Label2"
         Me.Label2.Size = New System.Drawing.Size(32, 13)
         Me.Label2.TabIndex = 4
@@ -110,7 +111,7 @@ Partial Class F_VEH_GearDlog
         '
         Me.TbMapPath.Location = New System.Drawing.Point(12, 61)
         Me.TbMapPath.Name = "TbMapPath"
-        Me.TbMapPath.Size = New System.Drawing.Size(383, 20)
+        Me.TbMapPath.Size = New System.Drawing.Size(476, 20)
         Me.TbMapPath.TabIndex = 5
         '
         'Label3
@@ -124,7 +125,7 @@ Partial Class F_VEH_GearDlog
         '
         'BtBrowse
         '
-        Me.BtBrowse.Location = New System.Drawing.Point(401, 59)
+        Me.BtBrowse.Location = New System.Drawing.Point(494, 59)
         Me.BtBrowse.Name = "BtBrowse"
         Me.BtBrowse.Size = New System.Drawing.Size(32, 23)
         Me.BtBrowse.TabIndex = 8
@@ -134,20 +135,31 @@ Partial Class F_VEH_GearDlog
         'BtNext
         '
         Me.BtNext.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
-        Me.BtNext.Location = New System.Drawing.Point(214, 92)
+        Me.BtNext.Location = New System.Drawing.Point(307, 92)
         Me.BtNext.Name = "BtNext"
         Me.BtNext.Size = New System.Drawing.Size(67, 23)
         Me.BtNext.TabIndex = 9
         Me.BtNext.Text = "&Next"
         Me.BtNext.UseVisualStyleBackColor = True
         '
+        'ChIsTCgear
+        '
+        Me.ChIsTCgear.AutoSize = True
+        Me.ChIsTCgear.Location = New System.Drawing.Point(236, 8)
+        Me.ChIsTCgear.Name = "ChIsTCgear"
+        Me.ChIsTCgear.Size = New System.Drawing.Size(241, 17)
+        Me.ChIsTCgear.TabIndex = 10
+        Me.ChIsTCgear.Text = "Torque Conveter active (lock-up clutch open)"
+        Me.ChIsTCgear.UseVisualStyleBackColor = True
+        '
         'F_VEH_GearDlog
         '
         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(445, 130)
+        Me.ClientSize = New System.Drawing.Size(538, 130)
+        Me.Controls.Add(Me.ChIsTCgear)
         Me.Controls.Add(Me.BtNext)
         Me.Controls.Add(Me.BtBrowse)
         Me.Controls.Add(Me.Label3)
@@ -180,5 +192,6 @@ Partial Class F_VEH_GearDlog
     Friend WithEvents Label3 As System.Windows.Forms.Label
     Friend WithEvents BtBrowse As System.Windows.Forms.Button
     Friend WithEvents BtNext As System.Windows.Forms.Button
+    Friend WithEvents ChIsTCgear As System.Windows.Forms.CheckBox
 
 End Class
diff --git a/VECTO/GUI/F_VEH_GearDlog.resx b/VECTO/GUI/F_VEH_GearDlog.resx
index 5ea0895e324fa7a86681adc56938bad2f2367ba0..29dcb1b3a353ba227f65e11fbe3d6f0766e84292 100644
--- a/VECTO/GUI/F_VEH_GearDlog.resx
+++ b/VECTO/GUI/F_VEH_GearDlog.resx
@@ -112,9 +112,9 @@
     <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>
+    <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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
 </root>
\ No newline at end of file
diff --git a/VECTO/Input Files/cDRI.vb b/VECTO/Input Files/cDRI.vb
index a6478e9075e37a35aca465dcd90347e58203660f..f4018e67fdb62439e156c24f8e73a7e278384995 100644
--- a/VECTO/Input Files/cDRI.vb	
+++ b/VECTO/Input Files/cDRI.vb	
@@ -443,6 +443,11 @@ Public Class cDRI
                 line = file.ReadLine
 
                 For Each sKV In Spalten
+
+                    If sKV.Key = tDriComp.Pe Or sKV.Key = tDriComp.Torque Then
+                        If Trim(line(sKV.Value)) = sKey.MAP.Drag Then line(sKV.Value) = -999999
+                    End If
+
                     Values(sKV.Key).Add(CDbl(line(sKV.Value)))
                 Next
 
diff --git a/VECTO/Input Files/cENG.vb b/VECTO/Input Files/cENG.vb
index 4037dc6117e08db7ab03a92ce3ca416e97a7fc75..bc6e46d463287b89d730878f199156dd604347cd 100644
--- a/VECTO/Input Files/cENG.vb	
+++ b/VECTO/Input Files/cENG.vb	
@@ -1,4 +1,6 @@
-Public Class cENG
+Imports System.Collections.Generic
+
+Public Class cENG
 
     Public ModelName As String
     Public Pnenn As Single
@@ -7,9 +9,10 @@
     Public nleerl As Single
     Public I_mot As Single
 
-    Private fFLD As cSubPath
+    Public fFLD As List(Of cSubPath)
     Private fMAP As cSubPath
     Private fWHTC As cSubPath
+    Public FLDgears As List(Of String)
 
     Private MyPath As String
     Private sFilePath As String
@@ -17,7 +20,6 @@
     Public Sub New()
         MyPath = ""
         sFilePath = ""
-        fFLD = New cSubPath
         fMAP = New cSubPath
         fWHTC = New cSubPath
         SetDefault()
@@ -30,13 +32,17 @@
         nnenn = 0
         nleerl = 0
         I_mot = 0
-        fFLD.Clear()
+
+        fFLD = New List(Of cSubPath)
+        FLDgears = New List(Of String)
+
         fMAP.Clear()
         fWHTC.Clear()
     End Sub
 
     Public Function SaveFile() As Boolean
         Dim file As cFile_V3
+        Dim i As Integer
 
         If sFilePath = "" Then Return False
 
@@ -62,8 +68,14 @@
         file.WriteLine(nleerl.ToString)
         file.WriteLine("c Inertia [kgm2]")
         file.WriteLine(I_mot.ToString)
-        file.WriteLine("c Full load curve")
-        file.WriteLine(fFLD.PathOrDummy)
+
+        file.WriteLine("c Full load curves")
+        For i = 0 To fFLD.Count - 1
+            file.WriteLine(fFLD(i).PathOrDummy, FLDgears(i))
+        Next
+
+        file.WriteLine(sKey.Break)
+
         file.WriteLine("c Fuel map")
         file.WriteLine(fMAP.PathOrDummy)
         file.WriteLine("c WHTC test results")
@@ -78,11 +90,15 @@
     Public Function ReadFile() As Boolean
         Dim MsgSrc As String
         Dim file As cFile_V3
+        Dim line() As String
+        Dim OldFile As Boolean = False
+        Dim i As Integer
 
         MsgSrc = "ENG/ReadFile"
 
         SetDefault()
 
+
         If sFilePath = "" Or Not IO.File.Exists(sFilePath) Then
             WorkerMsg(tMsgID.Err, "Engine file not found (" & sFilePath & ") !", MsgSrc)
             Return False
@@ -103,7 +119,31 @@
             nnenn = CSng(file.ReadLine(0))
             nleerl = CSng(file.ReadLine(0))
             I_mot = CSng(file.ReadLine(0))
-            fFLD.Init(MyPath, file.ReadLine(0))
+
+
+            i = -1
+            Do While Not file.EndOfFile
+
+                line = file.ReadLine
+                i += 1
+
+                If line(0) = sKey.Break Then Exit Do
+
+                If i = 0 AndAlso UBound(line) < 1 Then OldFile = True
+
+                fFLD.Add(New cSubPath)
+
+                fFLD(i).Init(MyPath, line(0))
+
+                If OldFile Then
+                    FLDgears.Add("0 - 99")
+                    Exit Do
+                Else
+                    FLDgears.Add(line(1))
+                End If
+
+            Loop
+
             fMAP.Init(MyPath, file.ReadLine(0))
             fWHTC.Init(MyPath, file.ReadLine(0))
         Catch ex As Exception
@@ -128,16 +168,16 @@
         End Set
     End Property
 
-    Public Property PathFLD(Optional ByVal Original As Boolean = False) As String
+    Public Property PathFLD(ByVal x As Short, Optional ByVal Original As Boolean = False) As String
         Get
             If Original Then
-                Return fFLD.OriginalPath
+                Return fFLD(x).OriginalPath
             Else
-                Return fFLD.FullPath
+                Return fFLD(x).FullPath
             End If
         End Get
         Set(ByVal value As String)
-            fFLD.Init(MyPath, value)
+            fFLD(x).Init(MyPath, value)
         End Set
     End Property
 
diff --git a/VECTO/Input Files/cFLD.vb b/VECTO/Input Files/cFLD.vb
index f585c23ec7055c0bd76f0d84e6ca782d9bbc0f73..39ed145df3a06d6b9d78d148d5e1d3100ec7aaca 100644
--- a/VECTO/Input Files/cFLD.vb	
+++ b/VECTO/Input Files/cFLD.vb	
@@ -435,7 +435,6 @@ lbInt:
 
     End Function
 
-
     Public Function Pfull(ByVal nnorm As Single, ByVal LastPenorm As Single) As Single
         Dim i As Int32
         Dim PfullStat As Single
diff --git a/VECTO/Input Files/cGBX.vb b/VECTO/Input Files/cGBX.vb
index 8936d6d9bd0f2e61566239f09bdbd150ee85e60b..4781cd13a9a1bd3b8f8a17433c1c9403c586efad 100644
--- a/VECTO/Input Files/cGBX.vb	
+++ b/VECTO/Input Files/cGBX.vb	
@@ -9,8 +9,9 @@ Public Class cGBX
     Public I_Getriebe As Single
     Public TracIntrSi As Single
 
-    Public GetrI(16) As Single
-    Private GetrMaps(16) As cSubPath
+    Public GetrI As List(Of Single)
+    Public GetrMaps As List(Of cSubPath)
+    Public IsTCgear As List(Of Boolean)
 
     Private iganganz As Short
 
@@ -52,26 +53,21 @@ Public Class cGBX
 
 
     Public Sub New()
-        Dim i As Short
         MyPath = ""
         sFilePath = ""
-        For i = 0 To 16
-            GetrI(i) = 0
-            GetrMaps(i) = New cSubPath
-        Next
         SetDefault()
     End Sub
 
     Private Sub SetDefault()
-        Dim i As Integer
 
         ModelName = ""
         I_Getriebe = 0
         TracIntrSi = 0
-        For i = 0 To 16
-            GetrI(i) = 0
-            GetrMaps(i).Clear()
-        Next
+
+        GetrI = New List(Of Single)
+        GetrMaps = New List(Of cSubPath)
+        IsTCgear = New List(Of Boolean)
+
         iganganz = 0
         gs_M.Clear()
         gs_nnDown.Clear()
@@ -116,11 +112,13 @@ Public Class cGBX
         file.WriteLine("c Traction Interruption")
         file.WriteLine(CStr(TracIntrSi))
 
-        file.WriteLine("c Ratio [-], Loss Map or Efficiency")
-        For i = 0 To 16
+        file.WriteLine("c Gears (0=axle)")
+        file.WriteLine("c Ratio [-], Loss Map or Efficiency, Is TC gear")
+        For i = 0 To GetrI.Count - 1
             file.WriteLine("c Gear " & i)
-            file.WriteLine(CStr(GetrI(i)), GetrMaps(i).PathOrDummy)
+            file.WriteLine(CStr(GetrI(i)), GetrMaps(i).PathOrDummy, CStr(Math.Abs(CInt(IsTCgear(i)))))
         Next
+        file.WriteLine(sKey.Break)
 
         file.WriteLine("c Gear shift polygons file")
         file.WriteLine(gs_file.PathOrDummy)
@@ -162,6 +160,7 @@ Public Class cGBX
         Dim file As cFile_V3
         Dim i As Integer
         Dim MsgSrc As String
+        Dim OldFile As Boolean = False
 
         MsgSrc = "GBX/ReadFile"
 
@@ -186,13 +185,32 @@ Public Class cGBX
             I_Getriebe = CSng(file.ReadLine(0))
             TracIntrSi = CSng(file.ReadLine(0))
 
-            iganganz = 0
-            For i = 0 To 16
+
+            i = -1
+            Do While Not file.EndOfFile
+
                 line = file.ReadLine
-                GetrI(i) = CSng(line(0))
+                i += 1
+
+                If line(0) = sKey.Break Or (OldFile And i = 16) Then Exit Do
+
+                If i = 0 AndAlso UBound(line) < 2 Then OldFile = True
+
+                If CSng(line(0)) = 0 Then Continue Do
+
+                GetrI.Add(CSng(line(0)))
+                GetrMaps.Add(New cSubPath)
                 GetrMaps(i).Init(MyPath, line(1))
-                If GetrI(i) > 0.0001 Then iganganz = i
-            Next
+                If OldFile Then
+                    IsTCgear.Add(False)
+                Else
+                    IsTCgear.Add(CBool(CInt(line(2))))
+                End If
+
+            Loop
+
+            iganganz = GetrI.Count - 1
+
 
             'Allow file end here to keep compatibility to older versions
             If Not file.EndOfFile Then
@@ -215,6 +233,8 @@ Public Class cGBX
                 gs_Type = tGearbox.Custom
             End If
 
+            If OldFile And TCon Then IsTCgear(1) = True
+
         Catch ex As Exception
             WorkerMsg(tMsgID.Err, ex.Message, MsgSrc)
             file.Close()
@@ -469,22 +489,6 @@ lbInt:
 
     End Function
 
-    Public Function fGearStr(ByVal Gear As Int16) As String
-
-        If Gear = 0 Then Return "0"
-
-        If TCon Then
-            If Gear = 1 Then
-                Return "0.5"
-            Else
-                Return CStr(Gear - 1)
-            End If
-        Else
-            Return CStr(Gear)
-        End If
-
-    End Function
-
     Public Function GSinit() As Boolean
         Dim file As cFile_V3
         Dim line As String()
diff --git a/VECTO/Input Files/cMAP.vb b/VECTO/Input Files/cMAP.vb
index 2b3f2e2b6f2e6f62e23cf4efd42f0740b888f89a..bebb0ea01d4b3801eab83ed01308cf8bb1e7074e 100644
--- a/VECTO/Input Files/cMAP.vb	
+++ b/VECTO/Input Files/cMAP.vb	
@@ -933,10 +933,6 @@ lbEr:
 
     End Sub
 
-    Public Function GetSingleValue(ByRef EmComp As tMapComp, ByVal nnorm As Single, ByVal Pnorm As Single) As Single
-        MapIntp.ShepInit(nnorm, Pnorm)
-        Return MapIntp.fIntShepDef(EmDefRef(EmComp))
-    End Function
 
     Public Sub Intp_Init(ByVal Pnorm As Single, ByVal nnorm As Single)
         MapIntp.ShepInit(Pnorm, nnorm)
@@ -1362,8 +1358,8 @@ lbEr:
 
             nnx += dnn
 
-            pf = FLD.Pfull(nnx) / VEH.Pnenn
-            pm = FLD.Pdrag(nnx) / VEH.Pnenn
+            pf = FLD(0).Pfull(nnx) / VEH.Pnenn
+            pm = FLD(0).Pdrag(nnx) / VEH.Pnenn
 
             If GEN.KFcutDrag Then
 
@@ -1419,7 +1415,7 @@ lbEr:
         nnx = 0 - dnn / 2
         Do While nnx + dnn / 2 <= 1.20001
             nnx += dnn / 2
-            LPe.Add(FLD.Pdrag(nnx) / VEH.Pnenn)
+            LPe.Add(FLD(0).Pdrag(nnx) / VEH.Pnenn)
             Lnn.Add(nnx)
             IsDrag.Add(True)
             iMapDim += 1
@@ -1454,7 +1450,7 @@ lbEr:
             dp = dp0
 
             'Drag-Power
-            pm = FLD.Pdrag(Lnn(i)) / VEH.Pnenn
+            pm = FLD(0).Pdrag(Lnn(i)) / VEH.Pnenn
 
             'Loop until enough Values found in Radius
             Do
@@ -1554,8 +1550,8 @@ lbEr:
                 If Not GEN.KFDragIntp And LPe(i) <= pm + 0.0001 Then
 
                     'If Drag-Em exists in .FLD, then use it otherwise alocate with zero
-                    If FLD.EmDef(EmKV.Key) Then
-                        EmKV.Value.RawVals.Add(FLD.EmDrag(EmKV.Key, Lnn(i)))
+                    If FLD(0).EmDef(EmKV.Key) Then
+                        EmKV.Value.RawVals.Add(FLD(0).EmDrag(EmKV.Key, Lnn(i)))
                     Else
                         EmKV.Value.RawVals.Add(0)
                     End If
@@ -1908,7 +1904,7 @@ lbEr:
 
             Pe0 = Pnorm
             n0 = (nnorm * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / VEH.nNenn
-            PeDrag = FLD.Pdrag(nnorm) / VEH.Pnenn       'Schleppkurve für die geg. Drehzahl
+            PeDrag = FLD(0).Pdrag(nnorm) / VEH.Pnenn       'Schleppkurve für die geg. Drehzahl
 
             ReDim ab0(iMapDim)
 
diff --git a/VECTO/Input Files/cVEH.vb b/VECTO/Input Files/cVEH.vb
index 9127552f3247ee11d01cec7caa7cf02c8f2dfa4a..4b6a758e4df7217b9153b2f14617d2dd216dde4e 100644
--- a/VECTO/Input Files/cVEH.vb	
+++ b/VECTO/Input Files/cVEH.vb	
@@ -37,11 +37,12 @@ Public Class cVEH
     Private CdY As List(Of Single)
     Private CdDim As Integer
 
-    Private siGetrI(16) As Single
-    Public GetrMap(16) As cSubPath
+    Public siGetrI As List(Of Single)
+    Public GetrMap As List(Of cSubPath)
     Private MyGBmaps As List(Of cDelaunayMap)
-    Public GetrEffDef(16) As Boolean
-    Public GetrEff(16) As Single
+    Public GetrEffDef As List(Of Boolean)
+    Public GetrEff As List(Of Single)
+    Public IsTCgear As List(Of Boolean)
 
     Private iganganz As Short
 
@@ -73,12 +74,8 @@ Public Class cVEH
     End Class
 
     Public Sub New()
-        Dim i As Short
         MyPath = ""
         sFilePath = ""
-        For i = 0 To 16
-            GetrMap(i) = New cSubPath
-        Next
         CdFile = New cSubPath
         CdX = New List(Of Single)
         CdY = New List(Of Single)
@@ -90,7 +87,6 @@ Public Class cVEH
     End Sub
 
     Private Sub SetDefault()
-        Dim i As Short
         siMass = 0
         MassExtra = 0
         siLoading = 0
@@ -121,12 +117,13 @@ Public Class cVEH
         silhinunter = 0
         sipspar = 0
         sipmodell = 0
-        For i = 0 To 16
-            siGetrI(i) = 0
-            GetrMap(i).Clear()
-            GetrEffDef(i) = False
-            GetrEff(i) = 0
-        Next
+
+        siGetrI = New List(Of Single)
+        GetrEffDef = New List(Of Boolean)
+        GetrEff = New List(Of Single)
+        GetrMap = New List(Of cSubPath)
+        IsTCgear = New List(Of Boolean)
+
         MyGBmaps = Nothing
         iganganz = 0
         AuxPaths = New Dictionary(Of String, cAuxEntry)
@@ -501,6 +498,16 @@ lbError:
         Dim M_loss As Double
         Dim M_out As Double
 
+        Dim dnU As Single
+        Dim nn As Single
+        Dim dM As Single
+        Dim P_In As Single
+        Dim P_Loss As Single
+        Dim EffSum As Single
+        Dim Anz As Integer
+        Dim EffDiffSum As Single = 0
+        Dim AnzDiff As Integer = 0
+
         Dim MsgSrc As String
 
         MyGBmaps = New List(Of cDelaunayMap)
@@ -579,15 +586,75 @@ lbError:
 
                 MyGBmaps.Add(GBmap0)
 
+                'Calculate average efficiency for fast approx. calculation
+          
+
+
+                If i > 0 Then
+
+                    EffSum = 0
+                    Anz = 0
+
+                    dnU = (2 / 3) * (VEH.nNenn - VEH.nLeerl) / 10
+                    nU = VEH.nLeerl + dnU
+
+                    Do While nU <= nNenn
+                        nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl)
+
+                        dM = nPeToM(nU, (2 / 3) * FLD(i).Pfull(nn) / 10)
+                        M_in = nPeToM(nU, (1 / 3) * FLD(i).Pfull(nn))
+
+                        Do While M_in <= nPeToM(nU, FLD(i).Pfull(nn))
+
+                            P_In = nMtoPe(nU, M_in)
+
+                            P_Loss = IntpolPeLossFwd(i, nU, P_In, False)
+
+                            EffSum += (P_In - P_Loss) / P_In
+                            Anz += 1
+
+                            'Axle
+                            P_In -= P_Loss
+                            P_Loss = IntpolPeLossFwd(0, nU / VEH.Igetr(i), P_In, False)
+                            EffDiffSum += (P_In - P_Loss) / P_In
+                            AnzDiff += 1
+
+                            M_in += dM
+                        Loop
+
+
+                        nU += dnU
+                    Loop
+
+                    If MODdata.ModErrors.TrLossMapExtr <> "" Then
+                        WorkerMsg(tMsgID.Err, "Transmission loss map does not cover full engine range! File: " & path, MsgSrc, path)
+                        Return False
+                    End If
+
+                    If Anz = 0 Then
+                        WorkerMsg(tMsgID.Err, "Failed to calculate approx. transmission losses!", MsgSrc)
+                        Return False
+                    End If
+
+                    GetrEff(i) = EffSum / Anz
+
+                End If
+
+
             End If
 
         Next
 
+        If Not GetrEffDef(0) Then
+            GetrEff(0) = EffDiffSum / AnzDiff
+        End If
+
+
         Return True
 
     End Function
 
-    Public Function IntpolPeLoss(ByVal Gear As Integer, ByVal nU As Double, ByVal PeOut As Double) As Double
+    Public Function IntpolPeLoss(ByVal Gear As Integer, ByVal nU As Double, ByVal PeOut As Double, ByVal Approx As Boolean) As Double
 
         Dim PeIn As Double
         Dim WG As Double
@@ -606,18 +673,10 @@ lbError:
         If Gear = 0 Then
             GrTxt = "A"
         Else
-            If GBX.TCon Then
-                If Gear = 1 Then
-                    GrTxt = "TC"
-                Else
-                    GrTxt = (Gear - 1).ToString
-                End If
-            Else
-                GrTxt = Gear.ToString
-            End If
+            GrTxt = Gear.ToString
         End If
 
-        If GetrEffDef(Gear) Then
+        If GetrEffDef(Gear) Or (Approx And DEV.AllowAprxTrLoss) Then
 
             If PeOut > 0 Then
                 PeIn = PeOut / GetrEff(Gear)
@@ -701,7 +760,7 @@ lbError:
 
     End Function
 
-    Public Function IntpolPeLossFwd(ByVal Gear As Integer, ByVal nU As Double, ByVal PeIn As Double) As Double
+    Public Function IntpolPeLossFwd(ByVal Gear As Integer, ByVal nU As Double, ByVal PeIn As Double, ByVal Approx As Boolean) As Double
 
         Dim PeOut As Double
         Dim WG As Double
@@ -720,18 +779,10 @@ lbError:
         If Gear = 0 Then
             GrTxt = "A"
         Else
-            If GBX.TCon Then
-                If Gear = 1 Then
-                    GrTxt = "TC"
-                Else
-                    GrTxt = (Gear - 1).ToString
-                End If
-            Else
-                GrTxt = Gear.ToString
-            End If
+            GrTxt = Gear.ToString
         End If
 
-        If GetrEffDef(Gear) Then
+        If GetrEffDef(Gear) Or (Approx And DEV.AllowAprxTrLoss) Then
 
             If PeIn > 0 Then
                 PeOut = PeIn * GetrEff(Gear)
@@ -1170,13 +1221,10 @@ lbInt:
         End Set
     End Property
 
-    Public Property Igetr(ByVal x As Short) As Single
+    Public ReadOnly Property Igetr(ByVal x As Short) As Single
         Get
             Return siGetrI(x)
         End Get
-        Set(ByVal value As Single)
-            siGetrI(x) = value
-        End Set
     End Property
 
     Public Property Mass As Single
diff --git a/VECTO/MODcalc/cMOD.vb b/VECTO/MODcalc/cMOD.vb
index 0f86bbb0020993495dddba75f848b05fb49dd91b..f4171e9452dc4e8443505099c8d13353fd84ebd8 100644
--- a/VECTO/MODcalc/cMOD.vb
+++ b/VECTO/MODcalc/cMOD.vb
@@ -324,6 +324,8 @@ Public Class cMOD
 
         Dim AuxList As New List(Of String)
 
+        Dim Gear As Integer
+
         MsgSrc = "MOD/Output"
 
         '*********** Initialization / Open File **************
@@ -519,6 +521,14 @@ Public Class cMOD
 
             For t = 0 To t1
 
+                'Predefine Gear for FLD assignment
+                If GEN.VehMode = tVehMode.EngineOnly Then
+                    Gear = 0
+                Else
+                    Gear = .Gear(t)
+                End If
+
+
                 s.Length = 0
 
                 'Time
@@ -603,9 +613,9 @@ Public Class cMOD
                             s.Append(Sepp & "-" & Sepp & "-")
                         Else
                             If t = 0 Then
-                                s.Append(Sepp & 1000 * FLD.Pfull(.nn(t)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60) & Sepp & 1000 * FLD.Pdrag(.nn(t)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60))
+                                s.Append(Sepp & 1000 * FLD(Gear).Pfull(.nn(t)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60) & Sepp & 1000 * FLD(Gear).Pdrag(.nn(t)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60))
                             Else
-                                s.Append(Sepp & 1000 * FLD.Pfull(.nn(t), .Pe(t - 1)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60) & Sepp & 1000 * FLD.Pdrag(.nn(t)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60))
+                                s.Append(Sepp & 1000 * FLD(Gear).Pfull(.nn(t), .Pe(t - 1)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60) & Sepp & 1000 * FLD(Gear).Pdrag(.nn(t)) / (2 * Math.PI * (.nn(t) * (VEH.nNenn - VEH.nLeerl) + VEH.nLeerl) / 60))
                             End If
                         End If
 
@@ -625,9 +635,9 @@ Public Class cMOD
                         s.Append(Sepp & "-" & Sepp & "-")
                     Else
                         If t = 0 Then
-                            s.Append(Sepp & FLD.Pfull(.nn(t)) & Sepp & FLD.Pdrag(.nn(t)))
+                            s.Append(Sepp & FLD(Gear).Pfull(.nn(t)) & Sepp & FLD(Gear).Pdrag(.nn(t)))
                         Else
-                            s.Append(Sepp & FLD.Pfull(.nn(t), .Pe(t - 1)) & Sepp & FLD.Pdrag(.nn(t)))
+                            s.Append(Sepp & FLD(Gear).Pfull(.nn(t), .Pe(t - 1)) & Sepp & FLD(Gear).Pdrag(.nn(t)))
                         End If
                     End If
 
@@ -645,7 +655,7 @@ Public Class cMOD
                 If Not GEN.VehMode = tVehMode.EngineOnly Then
 
                     'Gear
-                    s.Append(Sepp & GBX.fGearStr(.Gear(t)))
+                    s.Append(Sepp & .Gear(t))
 
                     'Transmission-losses
                     s.Append(Sepp & .PlossGB(t))
diff --git a/VECTO/MODcalc/cPower.vb b/VECTO/MODcalc/cPower.vb
index f388d0dbf68635fa1af31c63694741105430b88d..c429d19b773320d9a9318a32db047cd7ffa623a4 100644
--- a/VECTO/MODcalc/cPower.vb
+++ b/VECTO/MODcalc/cPower.vb
@@ -11,12 +11,7 @@ Public Class cPower
     'Settings
     Private Gvorg As Boolean
     Private Nvorg As Boolean
-    Private Aaufi As Single
-    Private Baufi As Single
-    Private Caufi As Single
-    Private Aobi As Single
-    Private Bobi As Single
-    Private Cobi As Single
+
 
     'Per-second Data
     Private Clutch As tEngClutch
@@ -168,231 +163,6 @@ Public Class cPower
         End If
     End Sub
 
-#Region "(H)EV Support-Methoden"
-
-    Public Function EVinit() As Boolean
-        Return BATread()
-    End Function
-
-    Public Function HEVinit() As Boolean
-
-        'BAT
-        If Not BATread() Then Return False
-
-        'STE
-        HEV.STEfile = GEN.STEnam
-        If Not HEV.readSTE() Then Return False
-
-        'EMO
-        EMO.FilePath = GEN.Emospez
-        If Not EMO.ReadFile Then Return False
-
-        Return True
-
-    End Function
-
-    'Read Bat
-    Private Function BATread() As Boolean
-        BAT.FilePath = GEN.Batfile
-        SOCstart = GEN.SOCstart
-        Return BAT.Bat_Init()
-    End Function
-
-    'Maximum effective EM-Power in driving depends on Overload and Battery-status
-    Private Function fPeEMmax(ByVal nn As Single) As Single
-        Dim PeFLD As Single
-        Dim PeBAT As Single
-
-        'Based: Full-load-curve
-        PeFLD = FLD.Pfull(nn)
-
-        'If Overload possible, upscale Overload(ÃœL)-power
-        If ULok Then PeFLD *= PeUL / VEH.Pnenn
-
-        '=> PeFLD = maximum EM-Power by(nach) FLD and Overload(ÃœL)
-
-        'Calculate PeMax from PeBatMax
-        PeBAT = 0.9 * fPefromPi(nn, PeBatMax)
-
-        '=> PeBAT = maximum EM-power to Battery
-
-        'Return the maximum Power allowed by the Battery
-        Return Math.Min(PeFLD, PeBAT)
-
-    End Function
-
-    'Maximum effective EM charging power depending on Overload and Battery-state
-    Private Function fPeEMmin(ByVal nn As Single) As Single
-        Dim PeFLD As Single
-        Dim PeBAT As Single
-
-        'Base: Drag-curve
-        PeFLD = FLD.Pdrag(nn)
-
-        'If Overload possible, upscale to Overload(ÃœL)-power
-        If ULok Then PeFLD *= PeUL / VEH.Pnenn
-
-        '=> PeFLD = maximum EM-Power by(nach) FLD and Overload(ÃœL)
-
-        'Calculate PeMax from PeBatMax
-        PeBAT = 0.9 * fPefromPi(nn, PeBatMin)
-
-        '=> PeBAT = maximum EM-power to Battery
-
-        'Return the maximum Power allowed by the Battery
-        Return Math.Max(PeFLD, PeBAT)
-
-
-
-    End Function
-
-    'Conversion of PeBat (=PiEM) to PeEM
-    Private Function fPefromPi(ByVal nn As Single, ByVal Pi As Single) As Single
-        Dim wisum As Double = 0
-        Dim sumo As Double = 0
-        Dim ab As Double = 0
-        Dim Eta As Single
-        Dim i As Int32
-        Dim Pinorm As Single
-
-        Pinorm = Pi / VEH.Pnenn
-
-        For i = 0 To Ldim
-            'When sign of x an y is not-equal to the sign of xA(i) and yA(i) respectively, then skip Row i
-            If nn * nnL(i) < 0 Or Pi * PiL(i) < 0 Then Continue For
-            ab = (nn - nnL(i)) ^ 2 + (Pinorm - PiL(i)) ^ 2
-            If ab = 0 Then
-                Eta = WGL(i)
-                GoTo lb10
-            Else
-                sumo = sumo + (WGL(i)) / ab
-                wisum = wisum + 1 / ab
-            End If
-        Next
-        If wisum = 0 Then
-            Eta = 0
-        Else
-            Eta = sumo / wisum
-        End If
-lb10:
-        If Pi > 0 Then
-            Return Pi * Eta
-        Else
-            Return Pi / Eta
-        End If
-
-    End Function
-
-    'Conversion of PeEM to PeBat (=piEM)
-    Private Function fPifromPe(ByVal nn As Single, ByVal Pe As Single) As Single
-        Dim wisum As Double = 0
-        Dim sumo As Double = 0
-        Dim ab As Double = 0
-        Dim Eta As Single
-        Dim i As Int32
-        Dim Penorm As Single
-
-        Penorm = Pe / VEH.Pnenn
-
-        For i = 0 To Ldim
-            'When sign of x and y is not-equal to the sign of xA(i) and yA(i) respectively, then skipp Row i
-            If nn * nnL(i) < 0 Or Pe * PeL(i) < 0 Then Continue For
-            ab = (nn - nnL(i)) ^ 2 + (Penorm - PeL(i)) ^ 2
-            If ab = 0 Then
-                Eta = WGL(i)
-                GoTo lb10
-            Else
-                sumo = sumo + (WGL(i)) / ab
-                wisum = wisum + 1 / ab
-            End If
-        Next
-        If wisum = 0 Then
-            Eta = 0
-        Else
-            Eta = sumo / wisum
-        End If
-lb10:
-        If Pe > 0 Then
-            Return Pe / Eta
-        Else
-            Return Pe * Eta
-        End If
-
-    End Function
-
-    'Maximum Recuparation-power
-    Private Function fPrekupMax() As Single
-        Dim Fz As Single
-        Dim Fx As Single
-        Dim Prekup As Single
-
-        'If speed is already under ceiling then return Zero
-        If Vist < RekupVu Then Return 0
-
-        'Wheel contact
-        If RekupVorne Then
-            Fz = ((VEH.Mass + VEH.MassExtra + VEH.Loading) * (9.81F * lSHh - aist * hSH)) / (lSHv + lSHh)
-        Else
-            Fz = ((VEH.Mass + VEH.MassExtra + VEH.Loading) * (9.81F * lSHv + aist * hSH)) / (lSHv + lSHh)
-        End If
-
-        'Sign "should" always be +
-        Fz = Math.Max(0, Fz)
-
-        'Longitudinal-force on the Tire
-        Fx = Fz * muReifStr
-
-        'Consider Safety-factor
-        Fx /= RekupS
-
-        'Power
-        Prekup = -Fx * Vist / 1000
-
-        'If below upper V-upper-limit, then scale down linearly
-        If Vist <= RekupVo Then Prekup *= (Vist - RekupVu) / (RekupVo - RekupVu)
-
-        Return Prekup
-
-    End Function
-
-    ''Reduce PeEM-Max until battery current is okay
-    'Private Function RedPiToPbatMax(ByVal PeEM As Single) As Single
-
-    '    Dim PiEM As Single
-
-    '    PiEM = EMO.PiEM(PeEM)
-
-    '    Do While PiEM > PeBatMax
-
-    '        PeEM *= 0.99
-    '        PiEM = EMO.PiEM(PeEM)
-
-    '    Loop
-
-    '    Return PiEM
-
-    'End Function
-
-    ''Reduce PeEM-Min until battery current is okay
-    'Private Function RedPiToPbatMin(ByVal PeEM As Single) As Single
-
-    '    Dim PiEM As Single
-
-    '    PiEM = EMO.PiEM(PeEM)
-
-    '    Do While PiEM < PeBatMin
-
-    '        PeEM *= 0.99
-    '        PiEM = EMO.PiEM(PeEM)
-
-    '    Loop
-
-    '    Return PiEM
-
-    'End Function
-
-#End Region
-
     Public Function PreRun() As Boolean
         Dim i As Integer
         Dim i0 As Integer
@@ -524,8 +294,8 @@ lb10:
             'Engine Power (at Clutch)
             If Pplus Or Pminus Then
 
-                PlossGB = fPlossGB(PvorD, Vist, Gear)
-                PlossDiff = fPlossDiff(PvorD, Vist)
+                PlossGB = fPlossGB(PvorD, Vist, Gear, True)
+                PlossDiff = fPlossDiff(PvorD, Vist, True)
                 PlossRt = fPlossRt(Vist, Gear)
                 PaGetr = fPaG(Vist, aist)
 
@@ -540,7 +310,7 @@ lb10:
             End If
 
             'Full load / motoring
-            Pmin = FLD.Pdrag(nn)
+            Pmin = FLD(Gear).Pdrag(nn)
 
             If Vh.Vsoll(i) >= GEN.vMin / 3.6 Then
 
@@ -738,8 +508,6 @@ lb10:
         Dim Vh As cVh
 
         Dim Gear As Integer
-        Dim GnachV As Boolean
-        Dim PKWja As Boolean
 
         Dim P As Single
         Dim Pkup As Single
@@ -795,7 +563,6 @@ lb10:
             Gvorg = False
             Nvorg = False
         End If
-        PKWja = GEN.PKWja
         StStAus = False
         StStTx = 0
         SecSpeedRed = 0
@@ -821,53 +588,6 @@ lb10:
 
         LastClutch = tEngClutch.Opened
 
-        'Gear-shifting points for NEDC / FTP
-        Select Case GEN.izykwael
-            Case 0  'Nefzja = True
-                GnachV = True
-                avh(1) = 16 / 3.6
-                avh(2) = 34.0 / 3.6
-                avh(3) = 51 / 3.6
-                avh(4) = 69 / 3.6
-                If (VEH.ganganz = 5) Then
-                    avh(5) = 180 / 3.6
-                Else
-                    avh(5) = 99 / 3.6
-                    avh(6) = 180 / 3.6
-                End If
-                avl(1) = -5.0 / 3.6
-                avl(2) = 0.1 / 3.6
-                avl(3) = 34.0 / 3.6
-                avl(4) = 34.0 / 3.6
-                avl(5) = 60.0 / 3.6
-                avl(6) = 60.0 / 3.6
-            Case 1  'Ftpja = True 
-                GnachV = True
-                avh(1) = 25 / 3.6
-                avh(2) = 40 / 3.6
-                avh(3) = 65 / 3.6
-                avh(4) = 74 / 3.6
-                avh(5) = 200 / 3.6
-                avl(1) = 12.9 / 3.6
-                avl(2) = 13.0 / 3.6
-                avl(3) = 28 / 3.6
-                avl(4) = 52 / 3.6
-                avl(5) = 60 / 3.6
-                avl(6) = 200 / 3.6
-            Case Else
-                GnachV = False
-                'Initialize Gear-shifting parameters
-
-                'Standard
-                Aaufi = 0.3
-                Baufi = 0.3
-                Caufi = 0.4
-                Aobi = 0.18
-                Bobi = 0.28
-                Cobi = 0.46
-
-        End Select
-
         'Theoretical maximum speed [m/s] - set to Speed ​​at 1.2 x Nominal-Revolutions in top-Gear
         GVmax = 1.2 * VEH.nNenn * VEH.Dreifen * Math.PI / (VEH.AchsI * VEH.Igetr(VEH.ganganz) * 60)
 
@@ -1031,27 +751,17 @@ lbGschw:
                 ElseIf VEH.ganganz = 1 Then
                     Gear = 1
                 Else
-                    If GnachV Then
-                        'Gear by speed dependent function
-                        Gear = fGearBySpeed(jz)
-                    Else
 
-                        'Gear-shifting Model
-                        If PKWja Then
-                            Gear = fGearPKW(jz)
-                        Else
-                            If GBX.TCon Then
-                                Gear = fGearTC(jz)
-                            Else
-                                Gear = fGearVECTO(jz)
-                            End If
-                            'Gear = fGearLKW(jz)
-                        End If
+                    'Gear-shifting Model
+                    If GBX.TCon Then
+                        Gear = fGearTC(jz)
+                    Else
+                        Gear = fGearVECTO(jz)
+                    End If
 
-                        'Must be reset here because the Gear-shifting model may cause changes
+                    'Must be reset here because the Gear-shifting model may cause changes
                         MODdata.ModErrors.PxReset()
 
-                    End If
                 End If
 
                 'Gear shifting-model / gear input can open Clutch
@@ -1171,7 +881,7 @@ lbCheck:
                     i = 0
                     Do
                         PminX = Pmin
-                        Pmin = FLD.Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl))
+                        Pmin = FLD(Gear).Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl))
                         'Leistungsabfall limitieren auf Pe(t-1) minus 75% von (Pe(t-1) - Pschlepp) |@@| Limit Power-drop to Pe(t-1) minus 75% of (Pe(t-1) - Pdrag)
                         '   aus Auswertung ETC des Motors mit dem dynamische Volllast parametriert wurde |@@| of the evaluated ETC of the Enginges with the dynamic parametrized Full-load
                         '   Einfluss auf Beschleunigungsvermögen gering (Einfluss durch Pe(t-1) bei dynamischer Volllast mit PT1) |@@| Influence at low acceleration (influence dynamic Full-load through Pe(t-1) with PT1)
@@ -1201,10 +911,10 @@ lbCheck:
 
             Else
 
-                If GBX.TCon And Gear = 1 Then
+                If GBX.TCon And GBX.IsTCgear(Gear) Then
 
-                    PlossGB = fPlossGB(PvorD, Vist, Gear)
-                    PlossDiff = fPlossDiff(PvorD, Vist)
+                    PlossGB = fPlossGB(PvorD, Vist, Gear, False)
+                    PlossDiff = fPlossDiff(PvorD, Vist, False)
                     PlossRt = fPlossRt(Vist, Gear)
                     PaGetr = fPaG(Vist, aist)
                     Pkup = PvorD + PlossGB + PlossDiff + PaGetr + PlossRt
@@ -1289,14 +999,14 @@ lb_nOK:
                     PaGetr = 0
                 Case tEngClutch.Closed
 
-                    If GBX.TCon And Gear = 1 Then
+                    If GBX.TCon And GBX.IsTCgear(Gear) Then
 
                         P = nMtoPe(nU, GBX.TCMin) + Paux + PaMot
 
                     Else
 
-                        PlossGB = fPlossGB(PvorD, Vist, Gear)
-                        PlossDiff = fPlossDiff(PvorD, Vist)
+                        PlossGB = fPlossGB(PvorD, Vist, Gear, False)
+                        PlossDiff = fPlossDiff(PvorD, Vist, False)
                         PlossRt = fPlossRt(Vist, Gear)
                         PaGetr = fPaG(Vist, aist)
                         Pkup = PvorD + PlossGB + PlossDiff + PaGetr + PlossRt
@@ -1304,8 +1014,8 @@ lb_nOK:
 
                     End If
                 Case Else 'tEngClutch.Slipping: never in AT mode!
-                    PlossGB = fPlossGB(PvorD, Vist, Gear)
-                    PlossDiff = fPlossDiff(PvorD, Vist)
+                    PlossGB = fPlossGB(PvorD, Vist, Gear, False)
+                    PlossDiff = fPlossDiff(PvorD, Vist, False)
                     PlossRt = fPlossRt(Vist, Gear)
                     PaGetr = fPaG(Vist, aist)
                     Pkup = (PvorD + PlossGB + PlossDiff + PaGetr + PlossRt) / KupplEta
@@ -1368,20 +1078,20 @@ lb_nOK:
 
             Else
 
-                Pmin = FLD.Pdrag(nn)
+                Pmin = FLD(Gear).Pdrag(nn)
 
                 If jz = 0 Then
-                    Pmax = FLD.Pfull(nn)
+                    Pmax = FLD(Gear).Pfull(nn)
                 Else
-                    Pmax = FLD.Pfull(nn, MODdata.Pe(jz - 1))
+                    Pmax = FLD(Gear).Pfull(nn, MODdata.Pe(jz - 1))
                 End If
 
                 'If Pmax < 0 or Pmin > 0 then Abort with Error!
                 If Pmin >= 0 And P < 0 Then
-                    WorkerMsg(tMsgID.Err, "Pe_drag > 0! n= " & nU & " [1/min]", MsgSrc & "/t= " & jz + 1, FLD.FilePath)
+                    WorkerMsg(tMsgID.Err, "Pe_drag > 0! n= " & nU & " [1/min]", MsgSrc & "/t= " & jz + 1, FLD(Gear).FilePath)
                     Return False
                 ElseIf Pmax <= 0 And P > 0 Then
-                    WorkerMsg(tMsgID.Err, "Pe_full < 0! n= " & nU & " [1/min]", MsgSrc & "/t= " & jz + 1, FLD.FilePath)
+                    WorkerMsg(tMsgID.Err, "Pe_full < 0! n= " & nU & " [1/min]", MsgSrc & "/t= " & jz + 1, FLD(Gear).FilePath)
                     Return False
                 End If
 
@@ -1400,7 +1110,7 @@ lb_nOK:
             Else
                 If EngState0 = tEngState.Load Then
                     Pbrake = 0
-                    If GBX.TCon And Gear = 1 Then Pbrake = GBX.TC_PeBrake
+                    If GBX.TCon And GBX.IsTCgear(Gear) Then Pbrake = GBX.TC_PeBrake
                     If Math.Abs(P / Pmax - 1) < 0.02 Then EngState0 = tEngState.FullLoad
                 Else    ' tEngState.Drag (tEngState.Idle, tEngState.Stopped kann's hier nicht geben weil Clutch <> Closed)
                     If P < Pmin Then
@@ -1433,8 +1143,8 @@ lb_nOK:
                         'Forward-calculation to Wheel (PvorD)
                         Pkup = P - Paux - PaMot
                         PaGetr = fPaG(Vist, aist)
-                        PlossGB = fPlossGBfwd(Pkup, Vist, Gear)
-                        PlossDiff = fPlossDiffFwd(Pkup - PlossGB, Vist)
+                        PlossGB = fPlossGBfwd(Pkup, Vist, Gear, False)
+                        PlossDiff = fPlossDiffFwd(Pkup - PlossGB, Vist, False)
                         PlossRt = fPlossRt(Vist, Gear)
 
                         Pbrake = PvorD - (Pkup - PlossGB - PlossDiff - PaGetr - PlossRt)
@@ -1558,7 +1268,7 @@ lb_nOK:
 
             'Torque Converter output
             If GBX.TCon Then
-                If Gear = 1 Then
+                If GBX.IsTCgear(Gear) Then
                     If nU = 0 Then
                         MODdata.TCnu.Add(0)
                     Else
@@ -1739,20 +1449,20 @@ lb_nOK:
             If MODdata.nn(t) < Cfg.nnormEngStop Then
                 EngState0 = tEngState.Stopped
             Else
-                PminN = FLD.Pdrag(MODdata.nn(t)) / VEH.Pnenn
+                PminN = FLD(0).Pdrag(MODdata.nn(t)) / VEH.Pnenn
 
                 If t = 0 Then
-                    PmaxN = FLD.Pfull(MODdata.nn(t)) / VEH.Pnenn
+                    PmaxN = FLD(0).Pfull(MODdata.nn(t)) / VEH.Pnenn
                 Else
-                    PmaxN = FLD.Pfull(MODdata.nn(t), MODdata.Pe(t - 1)) / VEH.Pnenn
+                    PmaxN = FLD(0).Pfull(MODdata.nn(t), MODdata.Pe(t - 1)) / VEH.Pnenn
                 End If
 
                 'If Pmax < 0 or Pmin >  0 then Abort with Error!
                 If PminN >= 0 AndAlso MODdata.Pe(t) < 0 Then
-                    WorkerMsg(tMsgID.Err, "Pe_drag > 0! n= " & MODdata.nU(t) & " [1/min]", MsgSrc & "/t= " & t + 1, FLD.FilePath)
+                    WorkerMsg(tMsgID.Err, "Pe_drag > 0! n= " & MODdata.nU(t) & " [1/min]", MsgSrc & "/t= " & t + 1, FLD(0).FilePath)
                     Return False
                 ElseIf PmaxN <= 0 AndAlso MODdata.Pe(t) > 0 Then
-                    WorkerMsg(tMsgID.Err, "Pe_full < 0! n= " & MODdata.nU(t) & " [1/min]", MsgSrc & "/t= " & t + 1, FLD.FilePath)
+                    WorkerMsg(tMsgID.Err, "Pe_full < 0! n= " & MODdata.nU(t) & " [1/min]", MsgSrc & "/t= " & t + 1, FLD(0).FilePath)
                     Return False
                 End If
 
@@ -1761,7 +1471,7 @@ lb_nOK:
                     If MODdata.Pe(t) / PmaxN > 1.05 Then PcorCount += 1
                     MODdata.Pe(t) = PmaxN
                 ElseIf MODdata.Pe(t) < PminN Then
-                    If MODdata.Pe(t) / PminN > 1.05 Then PcorCount += 1
+                    If MODdata.Pe(t) / PminN And MODdata.Pe(t) > -99999 > 1.05 Then PcorCount += 1
                     MODdata.Pe(t) = PminN
                 End If
 
@@ -1885,14 +1595,14 @@ lb_nOK:
 
         vstep = 5
         nU = fnU(v, Gear, False)
-        Pdrag = FLD.Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl))
+        Pdrag = FLD(Gear).Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl))
 
         'Do not allow positive road gradients     
         Grad = MODdata.Vh.Grad(t)
 
 
         PvD = fPvD(t, v, a, Grad)
-        Pe = PvD + fPlossGB(PvD, v, Gear) + fPlossDiff(PvD, v) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMot(t, Gear, v, a)
+        Pe = PvD + fPlossGB(PvD, v, Gear, True) + fPlossDiff(PvD, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMot(t, Gear, v, a)
 
         Diff = Math.Abs(Pdrag - Pe) / VEH.Pnenn
 
@@ -1923,12 +1633,12 @@ lb_nOK:
             End If
 
             nU = fnU(v, Gear, False)
-            Pdrag = FLD.Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl))
+            Pdrag = FLD(Gear).Pdrag((nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl))
 
             LastDiff = Diff
 
             PvD = fPvD(t, v, a, Grad)
-            Pe = PvD + fPlossGB(PvD, v, Gear) + fPlossDiff(PvD, v) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMot(t, Gear, v, a)
+            Pe = PvD + fPlossGB(PvD, v, Gear, True) + fPlossDiff(PvD, v, True) + fPaG(v, a) + fPlossRt(v, Gear) + fPaux(t, nU) + fPaMot(t, Gear, v, a)
 
             Diff = Math.Abs(Pdrag - Pe) / VEH.Pnenn
 
@@ -2032,11 +1742,11 @@ lb_nOK:
                 nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl)
 
                 'full load
-                Pmax = FLD.Pfull(nn)
+                Pmax = FLD(Gear).Pfull(nn)
 
                 'power demand - cut at full load / drag so that fGSnnUp and fGSnnDown don't extrapolate
                 Pe = Math.Min(fPeGearMod(Gear, t) * VEH.Pnenn, Pmax)
-                Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                Pe = Math.Max(Pe, FLD(Gear).Pdrag(nn))
 
                 'torque demand
                 Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
@@ -2070,14 +1780,14 @@ lb_nOK:
                 nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl)
 
                 'full load
-                Pmax = FLD.Pfull(nn)
+                Pmax = FLD(Gear).Pfull(nn)
 
                 'Max torque
                 MdMax = Pmax * 1000 / (nU * 2 * Math.PI / 60)
 
                 'power demand
                 Pe = Math.Min(fPeGearMod(Gear, t, GBX.gs_StartSpeed, GBX.gs_StartAcc) * VEH.Pnenn, Pmax)
-                Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                Pe = Math.Max(Pe, FLD(Gear).Pdrag(nn))
 
                 'torque demand
                 Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
@@ -2110,6 +1820,7 @@ lb_nOK:
         Dim nnDown As Single
         Dim Md As Single
         Dim Pe As Single
+        Dim OutOfRpmRange As Boolean
 
         'First time step OR first time step after stand still
         If t = 0 OrElse MODdata.VehState(t - 1) = tVehState.Stopped Then Return 1
@@ -2126,12 +1837,19 @@ lb_nOK:
         If LastGear = 0 Then Return 1
 
         'If lockup-clutch already closed then goto normal shift model
-        If LastGear > 1 Then Return fGearVECTO(t)
+        If Not GBX.IsTCgear(LastGear) Then Return fGearVECTO(t)
 
         'Rpm
         nU = MODdata.nU(t - 1)
         nn = MODdata.nn(t - 1)
 
+        OutOfRpmRange = (nn >= 1.2 Or nU < VEH.nLeerl)
+
+        'No gear change 3s after last one -except rpm out of range
+        If Not OutOfRpmRange AndAlso t - LastGearChange <= GBX.gs_ShiftTime And t > GBX.gs_ShiftTime - 1 Then Return LastGear
+
+
+
         'previous power demand
         Pe = MODdata.Pe(t - 1) * VEH.Pnenn
 
@@ -2145,21 +1863,20 @@ lb_nOK:
         If nn > nnUp Then
 
             If fnn(Vist, 2, False) > nnDown Then
-                Return 2
+                Return LastGear + 1
             Else
-                Return 1
+                Return LastGear
             End If
 
         ElseIf nn < nnDown Then
-            Return 0
+            Return LastGear - 1
         Else
-            Return 1
+            Return LastGear
         End If
 
 
     End Function
 
-
     Private Function fGearVECTO(ByVal t As Integer) As Integer
         Dim nU As Single
         Dim nn As Single
@@ -2233,12 +1950,12 @@ lb_nOK:
         nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl)
 
         'Current power demand with previous gear
-        Pe = Math.Min(fPeGearMod(LastGear, t) * VEH.Pnenn, FLD.Pfull(nn))
-        Pe = Math.Max(Pe, FLD.Pdrag(nn))
+        Pe = Math.Min(fPeGearMod(LastGear, t) * VEH.Pnenn, FLD(LastGear).Pfull(nn))
+        Pe = Math.Max(Pe, FLD(LastGear).Pdrag(nn))
 
         'Current torque demand with previous gear
         Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
-        MdMax = FLD.Pfull(nn) * 1000 / (nU * 2 * Math.PI / 60)
+        MdMax = FLD(LastGear).Pfull(nn) * 1000 / (nU * 2 * Math.PI / 60)
 
         'Up/Downshift rpms
         nnUp = GBX.fGSnnUp(Md)
@@ -2259,8 +1976,8 @@ lb_nOK:
 
                 'Continue only if rpm (for lower gear) is above idling
                 If nn >= 0 Then
-                    Pe = Math.Min(fPeGearMod(Gear - 1, t) * VEH.Pnenn, FLD.Pfull(nn))
-                    Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                    Pe = Math.Min(fPeGearMod(Gear - 1, t) * VEH.Pnenn, FLD(Gear - 1).Pfull(nn))
+                    Pe = Math.Max(Pe, FLD(Gear - 1).Pdrag(nn))
                     Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
                     nnUp = GBX.fGSnnUp(Md)
                     nnDown = GBX.fGSnnDown(Md)
@@ -2281,8 +1998,8 @@ lb_nOK:
                         'Continue only if rpm (for lower gear) is above idling
                         If nn < 0 Then Exit Do
 
-                        Pe = Math.Min(fPeGearMod(Gear - 1, t) * VEH.Pnenn, FLD.Pfull(nn))
-                        Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                        Pe = Math.Min(fPeGearMod(Gear - 1, t) * VEH.Pnenn, FLD(Gear - 1).Pfull(nn))
+                        Pe = Math.Max(Pe, FLD(Gear - 1).Pdrag(nn))
                         Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
                         nnUp = GBX.fGSnnUp(Md)
                         nnDown = GBX.fGSnnDown(Md)
@@ -2307,14 +2024,14 @@ lb_nOK:
 
                 'Continue only if rpm (for higher gear) is below rated rpm
                 If nn <= 1 Then
-                    Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD.Pfull(nn))
-                    Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                    Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD(Gear + 1).Pfull(nn))
+                    Pe = Math.Max(Pe, FLD(Gear + 1).Pdrag(nn))
                     Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
                     nnUp = GBX.fGSnnUp(Md)
                     nnDown = GBX.fGSnnDown(Md)
 
                     'Max Torque
-                    MdMax = FLD.Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
+                    MdMax = FLD(Gear + 1).Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
 
                     'Shift up as long as Torque reserve is okay and Gear < Max-Gear and rpm is above DownShift-rpm
                     Do While Gear < VEH.ganganz AndAlso 1 - Md / MdMax >= GBX.gs_TorqueResv / 100 AndAlso nn > nnDown '+ 0.1 * (nnUp - nnDown)
@@ -2332,14 +2049,14 @@ lb_nOK:
                         'Continue only if rpm (for higher gear) is below rated rpm
                         If nn > 1 Then Exit Do
 
-                        Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD.Pfull(nn))
-                        Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                        Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD(Gear + 1).Pfull(nn))
+                        Pe = Math.Max(Pe, FLD(Gear + 1).Pdrag(nn))
                         Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
                         nnUp = GBX.fGSnnUp(Md)
                         nnDown = GBX.fGSnnDown(Md)
 
                         'Max Torque
-                        MdMax = FLD.Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
+                        MdMax = FLD(Gear + 1).Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
 
                     Loop
 
@@ -2361,14 +2078,14 @@ lb_nOK:
 
                 'Continue only if rpm (for higher gear) is below rated rpm
                 If nn <= 1 Then
-                    Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD.Pfull(nn))
-                    Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                    Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD(Gear + 1).Pfull(nn))
+                    Pe = Math.Max(Pe, FLD(Gear + 1).Pdrag(nn))
                     Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
                     nnUp = GBX.fGSnnUp(Md)
                     nnDown = GBX.fGSnnDown(Md)
 
                     'Max Torque
-                    MdMax = FLD.Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
+                    MdMax = FLD(Gear + 1).Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
 
                     'Shift up as long as Torque reserve is okay and Gear < Max-Gear and rpm is above DownShift-rpm
                     Do While Gear < VEH.ganganz AndAlso 1 - Md / MdMax >= GBX.gs_TorqueResv / 100 AndAlso nn > nnDown '+ 0.1 * (nnUp - nnDown)
@@ -2386,14 +2103,14 @@ lb_nOK:
                         'Continue only if rpm (for higher gear) is below rated rpm
                         If nn > 1 Then Exit Do
 
-                        Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD.Pfull(nn))
-                        Pe = Math.Max(Pe, FLD.Pdrag(nn))
+                        Pe = Math.Min(fPeGearMod(Gear + 1, t) * VEH.Pnenn, FLD(Gear + 1).Pfull(nn))
+                        Pe = Math.Max(Pe, FLD(Gear + 1).Pdrag(nn))
                         Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
                         nnUp = GBX.fGSnnUp(Md)
                         nnDown = GBX.fGSnnDown(Md)
 
                         'Max Torque
-                        MdMax = FLD.Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
+                        MdMax = FLD(Gear + 1).Pfull(nn, LastPeNorm) * 1000 / (nU * 2 * Math.PI / 60)
 
                     Loop
 
@@ -2409,8 +2126,8 @@ lb_nOK:
         nU = fnU(Vist, Gear, Clutch = tEngClutch.Slipping)
         nn = (nU - VEH.nLeerl) / (VEH.nNenn - VEH.nLeerl)
         'Current power demand
-        Pe = Math.Min(fPeGearMod(Gear, t) * VEH.Pnenn, FLD.Pfull(nn))
-        Pe = Math.Max(Pe, FLD.Pdrag(nn))
+        Pe = Math.Min(fPeGearMod(Gear, t) * VEH.Pnenn, FLD(Gear).Pfull(nn))
+        Pe = Math.Max(Pe, FLD(Gear).Pdrag(nn))
         'Current torque demand
         Md = Pe * 1000 / (nU * 2 * Math.PI / 60)
         'Clear old errors
@@ -2496,1289 +2213,46 @@ lb_nOK:
 
     End Function
 
-    Private Function fGearPKW(ByVal t As Integer) As Integer
-
-        Dim gangX As Int16
-        Dim Gear As Integer
-        Dim ix As Integer
-        Dim nn As Single
-        Dim tx As Int32
-        Dim t1 As Int32
-        Dim V_norm As Single
-        Dim jpm As Integer
-        Dim AP10 As Single
-        Dim Pjetzt As Single
-        Dim Pvorher As Single
-        Dim Pjzx As Single
-        Dim nnsaufi As Single
-        Dim nnsobi As Single
-        Dim nsa As Single
-        Dim nsd As Single
-        Dim itgangwL As Integer
-        Dim bCheck As Boolean
-        Dim Gcheck(10) As Short
-        Dim Gears(11) As Integer      '<<<<==== !!!!!!
-        Dim LastGear As Integer
-        Dim a As Single
-        Dim b As Single
-        Dim Valt As Single
-        Dim nx As Single
-        Dim Vist0 As Single
-
-        '-----------------------------------Second 1 --------------------------------------
-        'First second: find Gear / Initialization
-        If t = 0 Then
-            gangX = -1
-            If (Vist <= 1.5) Then
-                Gear = 1
-            Else
-                For ix = 1 To VEH.ganganz
-                    nn = fnn(Vist, ix, False)
-
-                    If (ix < VEH.ganganz) Then
-                        If (nn <= 0.75) Then
-                            gangX = ix
-                            Exit For
-                        End If
-                    Else
-                        If (nn <= 1.0) Then
-                            gangX = ix
-                            Exit For
-                        End If
-                    End If
-                Next ix
-                If gangX = -1 Then gangX = VEH.ganganz
-                Gear = gangX
-            End If
-            Return Gear
-        End If
-
-        '--------------------------------From second 2 --------------------------------------
-
-        '---------Start-values ---------
-        'gangX = Last Gang ie Basis for Gear-shiftching model
-        LastGear = MODdata.Gear(t - 1)
-        gangX = LastGear
-        Gear = LastGear
-        t1 = MODdata.tDim
-        itgangwL = -1
-
-        'Clutch-lock(Kuppelschleif) check << already happened in Power.Calc
-        ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True
-
-        '-------------------Calculate Gear for the next 6 seconds ---------------------
-        '-------------------------------------------------------------
-
-        Pvorher = MODdata.Pe(t - 1)
-
-        tx = t
-        Do
-            '-----------Gear-shifting function ----------
-            Vist0 = MODdata.Vh.V(t)
-            V_norm = Vist0 / GVmax
-            nx = fnU(Vist0, gangX, False) / VEH.nNenn
-            Valt = MODdata.Vh.V(t - 1)
-
-            If (t >= 6) Then
-                jpm = 5
-            Else
-                jpm = t - 1
-            End If
-            AP10 = 0
-
-            t = t - jpm
-            ix = 1
-            Do
-                If t < tx Then
-                    Pjetzt = MODdata.Pe(t)
-                Else
-                    Pjetzt = fPeGearModvD(t)
-                    If t = tx Then Pjzx = Pjetzt
-                End If
-
-                If t = t - ix + jpm Then
-                    Pvorher = Pjetzt
-                End If
-
-                'Gelöscht LUZ 13.07.10: If (Pjetzt > 1) Then Pjetzt = 1.0
-                'If ix = jpm Then Pvorher = Pjetzt
-
-
-
-                AP10 = AP10 + Pjetzt / (jpm + 6)
-                t += 1
-                ix += 1
-            Loop Until ix = 11 Or t > t1
-            t = t - ix + jpm + 1
-
-            'Revolutions-limit for Upshifting  n_normiert (Idle = 0, Nominal-revolutions = 1)
-            nnsaufi = Aaufi + Baufi * V_norm + Caufi * AP10
-            If (nnsaufi > 0.95) Then nnsaufi = 0.95
-            'Revolutions-limit for Downhifting  n_normiert (Idle = 0, Nominal-revolutions = 1)
-            nnsobi = Aobi + Bobi * V_norm + Cobi * AP10
-            'Deleted by LUZ  13.07.10: If (nnsaufi > 0.85)  Then nnsaufi = 0.85
-            'Convert here the Revolutions-units (n/n_nom):
-            nsa = (VEH.nLeerl / VEH.nNenn) + nnsaufi * (1 - (VEH.nLeerl / VEH.nNenn))
-            nsd = (VEH.nLeerl / VEH.nNenn) + nnsobi * (1 - (VEH.nLeerl / VEH.nNenn))
-            'Revolutions with last Gear (gangX)
-            'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
-            '-----------------------------------
-
-            ' ''Maximum permissible Gear-shift every 2 seconds:
-            If (t - itgangwL) < 3 And itgangwL > -1 Then GoTo lb10
-
-            'Check whether Downshift, only when Speed decreases or Power increases
-            bCheck = False
-            Pjetzt = fPeGearModvD(t)
-            If Vist0 < Valt Then bCheck = True
-            If (Pjetzt > Pvorher) Then bCheck = True
-            If bCheck Then
-                If nx < nsd Then gangX -= 1
-            End If
-
-            'Check whether Upshift, only when Speed increases or Power decreases
-            bCheck = False
-            If (Vist0 > Valt) Then bCheck = True
-            If (Pjetzt < Pvorher) Then bCheck = True
-            If bCheck Then
-                If nx > nsa Then gangX += 1
-            End If
-
-            'Correct Gear-selection
-            If gangX > VEH.ganganz Then
-                gangX = VEH.ganganz
-            ElseIf gangX < 1 Then
-                gangX = 1
-            End If
-
-lb10:
-
-            'Not Idle when Power > 0
-            If gangX = 0 Then
-                If Pjzx > 0.001 Then gangX = 1
+    Private Function fGearByU(ByVal nU As Single, ByVal V As Single) As Integer
+        Dim Dif As Single
+        Dim DifMin As Single
+        Dim g As Int16
+        Dim g0 As Integer
+        DifMin = 9999
+        For g = 1 To VEH.ganganz
+            Dif = Math.Abs(VEH.Igetr(g) - nU * (VEH.Dreifen * Math.PI) / (V * 60.0 * VEH.AchsI))
+            If Dif <= DifMin Then
+                g0 = g
+                DifMin = Dif
             End If
-
-            'New Revolutions
-            ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
-            nn = fnn(Vist0, gangX, False)
-
-            'Check whether Gear within the Power/Revolutions limits. Drag is not respected
-            Select Case nn
-                Case Is < Kuppln_norm
-                    If gangX > 1 Then
-                        gangX -= 1
-                        GoTo lb10
-                    End If
-                Case Is > 1
-                    If gangX < VEH.ganganz Then
-                        gangX += 1
-                        GoTo lb10
-                    End If
-            End Select
-
-            'Save for Gear in Field for further checks
-            Gcheck(t - tx) = gangX
-
-            If gangX <> Gear Then itgangwL = t
-
-            Gear = gangX
-
-            t += 1
-
-        Loop Until t = tx + 11 Or t > t1
-        t = tx
-        '-------------------------------------------------------------
-        'Gear accepted
-        gangX = Gcheck(0)
-        For ix = t To t + 10
-            Gears(ix - t) = Gcheck(ix - t)
         Next
+        Return g0
+    End Function
 
-        Gear = Gears(0)
-
-        'Gang-Verlauf hinzufügen |@@| Add to Gears-sequence
-
-        '----------------------------------------------------------------------------------
-
-        '--------------------------------Checks Part 1 -------------------------------------
-        'Checks to Purge non-sensible Gear-shift:
-
-        ''Division into "iphase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3):
-        'iphase = 0
-        'Select Case (beschl(jz - 2) + beschl(jz - 1) + beschl(jz)) / 3
-        '    Case Is >= 0.125
-        '        iphase = 1
-        '    Case Is <= -0.125
-        '        iphase = 2
-        '    Case Else
-        '        iphase = 3
-        'End Select
-        '   ============>> Already determined by VehState0
-
-        'Search by last Gear-change
-        itgangwL = -1
-        If t > 2 Then
-            For ix = t - 1 To 1 Step -1
-                If MODdata.Gear(ix) <> MODdata.Gear(ix - 1) Then
-                    itgangwL = ix
-                    Exit For
-                End If
-            Next
-        End If
-
-        'Maximum permissible Gear-shifts every 3 seconds:
-        If t - itgangwL <= 2 And t > 2 And LastGear <> 0 Then
-            Return LastGear    '<<< keine weiteren Checks!!!
-        End If
-
-        If Gear <> LastGear Then
-            'Cruise-phases:
-            'Do not change Gear for as long Speed-change since last Gear-shift is below 6% and Pe/Pnorm change is below 6%:
-            'Deceleration-phases: Upshift is suppressed
-            'Acceleration-phases: Downshift?(Zurückschalten) suppressed
-            If itgangwL = -1 Then itgangwL = 0
-            bCheck = False
-            Pjetzt = fPeGearModvD(t)
-            Pvorher = MODdata.Pe(itgangwL)
-            If MODdata.Vh.V(itgangwL) = 0 Then
-                a = Math.Abs(Vist / 0.0001 - 1)
-            Else
-                a = Math.Abs(Vist / MODdata.Vh.V(itgangwL) - 1)
-            End If
-            If Pvorher = 0 Then
-                b = Math.Abs(Pjetzt / 0.0001 - 1)
-            Else
-                b = Math.Abs(Pjetzt / Pvorher - 1)
-            End If
-            If VehState0 = tVehState.Cruise And a < 0.06 And b < 0.06 Then bCheck = True
-            If (VehState0 = tVehState.Acc) And Gear < LastGear Then bCheck = True
-            If (VehState0 = tVehState.Dec) And Gear > LastGear And LastGear <> 0 Then bCheck = True
-            If bCheck Then
-                Gear = LastGear
-            Else
-                'If within 6 seconds it Shifts back to the previous-Gear,
-                'then maintain the previous-Gear throughout.
-                bCheck = False
-                For ix = t + 1 To t + 6
-                    If ix > t1 Then Exit For
-                    If (Gears(ix - t) = LastGear) Then
-                        bCheck = True
-                        Exit For
-                    End If
-                Next
-                If bCheck Then
-                    Gear = LastGear
-                Else
-                    'If within 6 seconds it Shifts once above and once below the previous-Gear,
-                    'then maintain the previous-Gear throughout.
-                    a = 0
-                    b = 0
-                    For ix = t To t + 6
-                        If Gears(ix - t) > LastGear Then
-                            a = 1
-                        ElseIf Gears(ix - t) < LastGear Then
-                            b = 1
-                        End If
-                    Next
-                    If a * b > 0 Then
-                        Gear = LastGear
-                    End If
-                End If
-            End If
-        End If
+    'Function calculating the Power easily for Gear-shift-model
+    Private Function fPeGearModvD(ByVal t As Integer) As Single
+        Return fPvD(t) / VEH.Pnenn
+    End Function
 
-        '--------------------------------Checks Part 2 -------------------------------------
-        'Gear-shift from 2 to 1 are suppressed when v > 2.5 m/s
-        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl |@@| NEW LUZ 040210: Upshifting only when in 2nd Gear over Cluch-Revolutions
-        If Gear = 1 And LastGear > 1 And Vist >= 2.5 Then
-            If fnn(Vist, 2, False) > Kuppln_norm Then Gear = 2
-        End If
+    Private Function fPeGearMod(ByVal Gear As Integer, ByVal t As Integer, ByVal V As Single, ByVal a As Single) As Single
+        Dim PaM As Single
+        Dim nU As Single
+        Dim PvD As Single
 
-        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| at decelerations below 2.5 m/s, shift to idle
-        bCheck = True
-        For ix = t To t + 2
-            If ix > t1 Then Exit For
-            If MODdata.Vh.V(ix) > MODdata.Vh.V(ix - 1) Then
-                bCheck = False
-                Exit For
-            End If
-        Next
+        PvD = fPvD(t, V, a)
 
-        If bCheck And Vist < 2.5 And VehState0 = tVehState.Dec Then
-            Return 0  '<<< keine weiteren Checks!!!
-        End If
+        nU = fnU(V, Gear, False)
 
-        'If v <0.1 m/s for more than 1 sec then shift to Gear=0
-        If t < t1 Then
-            If (Vist < 0.1 And MODdata.Vh.V(t + 1) < 0.1) Then
-                Return 0    '<<< keine weiteren Checks!!!
-            End If
+        If Nvorg Then
+            'Drehzahlvorgabe
+            PaM = (VEH.I_mot * MODdata.dnUvorg(t) * 0.01096 * MODdata.nUvorg(t)) * 0.001
+        Else
+            PaM = ((VEH.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * a * V) * 0.001
         End If
-
-        'at Acceleration processes below 1.5 m/s, then shift to 1st Gear
-        If Vist < 1.5 And t < t1 Then
-            If (Vist > 0.01 + MODdata.Vh.V(t - 1) And MODdata.Vh.V(t + 1) > 0.01 + Vist) Then
-                Gear = 1
-            End If
-        End If
-
-        'checking if Revolutions above Nominal-Revolutions, then always Upshift
-        'otherwise lack the power!
-        Do While fnn(Vist, Gear, Clutch = tEngClutch.Slipping) > 1 And Gear < VEH.ganganz
-            Gear += 1
-        Loop
-
-        Return Gear
-
-    End Function
-
-    'EV-Gear-shifting model (based on Cars(PKW))
-    Private Function fGearEV(ByVal t As Integer) As Integer
-
-        Dim gangX As Int16
-        Dim Gear As Integer
-        Dim ix As Integer
-        Dim nn As Single
-        Dim tx As Int32
-        Dim t1 As Int32
-        Dim V_norm As Single
-        Dim jpm As Integer
-        Dim AP10 As Single
-        Dim Pjetzt As Single
-        Dim Pvorher As Single
-        Dim Pjzx As Single
-        Dim nnsaufi As Single
-        Dim nnsobi As Single
-        Dim nsa As Single
-        Dim nsd As Single
-        Dim itgangwL As Integer
-        Dim bCheck As Boolean
-        Dim Gcheck(10) As Short
-        Dim Gears(11) As Integer      '<<<<==== !!!!!!
-        Dim LastGear As Integer
-        Dim a As Single
-        Dim b As Single
-        Dim Valt As Single
-        Dim nx As Single
-        Dim Vist0 As Single
-
-        '-----------------------------------Second 1 --------------------------------------
-        'First second: Find Gear / initialization
-        If t = 0 Then
-            gangX = -1
-            If (Vist <= 1.5) Then
-                Gear = 1
-            Else
-                For ix = 1 To VEH.ganganz
-                    nn = fnn(Vist, ix, False)
-
-                    If (ix < VEH.ganganz) Then
-                        If (nn <= 0.75) Then
-                            gangX = ix
-                            Exit For
-                        End If
-                    Else
-                        If (nn <= 1.0) Then
-                            gangX = ix
-                            Exit For
-                        End If
-                    End If
-                Next ix
-                If ix > VEH.ganganz Then gangX = VEH.ganganz
-                Gear = gangX
-            End If
-            Return Gear
-        End If
-
-        '--------------------------------From second 2 --------------------------------------
-
-        '---------Start-values ---------
-        'gangX = Last Gear ie Starting-base for Shifting-model
-        LastGear = MODdata.Gear(t - 1)
-        gangX = LastGear
-        Gear = LastGear
-        t1 = MODdata.tDim
-        itgangwL = -1
-
-        'Clutch-lock check << already happened in Power.Calc
-        ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True
-
-        '-------------------Calculate Gear for the next 6 seconds ---------------------
-        '-------------------------------------------------------------
-
-        Pvorher = MODdata.Pe(t - 1)
-
-        tx = t
-        Do
-            '-----------Shifting-function ----------
-            Vist0 = MODdata.Vh.V(t)
-            V_norm = Vist0 / GVmax
-            nx = fnU(Vist0, gangX, False) / VEH.nNenn
-            Valt = MODdata.Vh.V(t - 1)
-
-            If (t >= 6) Then
-                jpm = 5
-            Else
-                jpm = t - 1
-            End If
-            AP10 = 0
-
-            t = t - jpm
-            ix = 1
-            Do
-                If t < tx Then
-                    Pjetzt = MODdata.Pe(t)
-                Else
-                    Pjetzt = fPeGearEV(gangX, t)
-                    If t = tx Then Pjzx = Pjetzt
-                End If
-
-                If t = t - ix + jpm Then
-                    Pvorher = Pjetzt
-                End If
-
-                'Gelöscht LUZ 13.07.10: If (Pjetzt > 1) Then Pjetzt = 1.0
-                'If ix = jpm Then Pvorher = Pjetzt
-
-
-
-                AP10 = AP10 + Pjetzt / (jpm + 6)
-                t += 1
-                ix += 1
-            Loop Until ix = 11 Or t > t1
-            t = t - ix + jpm + 1
-
-            'Revolutions-limit for Upshift, n_normiert (Idle = 0, Nominal-Revolutions = 1)
-            nnsaufi = Aaufi + Baufi * V_norm + Caufi * AP10
-            If (nnsaufi > 0.95) Then nnsaufi = 0.95
-            'Revolutions-limit for Downshift, n_normiert (Idle = 0, Nominal-Revolutions = 1)
-            nnsobi = Aobi + Bobi * V_norm + Cobi * AP10
-            'Gelöscht LUZ 13.07.10: If (nnsaufi > 0.85) Then nnsaufi = 0.85
-            'Convert here of Revolutions units to use (n/n_nominal):
-            nsa = (VEH.nLeerl / VEH.nNenn) + nnsaufi * (1 - (VEH.nLeerl / VEH.nNenn))
-            nsd = (VEH.nLeerl / VEH.nNenn) + nnsobi * (1 - (VEH.nLeerl / VEH.nNenn))
-            'Revolutions with last Gear (gangX)
-            'nx = fnU(Vist, gangX, Clutch = tEngClutch.Slipping) / VEH.nNenn
-            '-----------------------------------
-
-            ' ''Maximum permissible Gear-shifting every 2 seconds:
-            If (t - itgangwL) < 3 And itgangwL > -1 Then GoTo lb10
-
-            'Check whether Downshifting-gear, only when Revolutions decrease or Power increases
-            bCheck = False
-            Pjetzt = fPeGearEV(gangX, t)
-            If Vist0 < Valt Then bCheck = True
-            If (Pjetzt > Pvorher) Then bCheck = True
-            If bCheck Then
-                If nx < nsd Then gangX -= 1
-            End If
-
-            'Check whether Upshifting-gear, only when Revolutions increase or Power decreases
-            bCheck = False
-            If (Vist0 > Valt) Then bCheck = True
-            If (Pjetzt < Pvorher) Then bCheck = True
-            If bCheck Then
-                If nx > nsa Then gangX += 1
-            End If
-
-            'Correct Gear-selection
-            If gangX > VEH.ganganz Then
-                gangX = VEH.ganganz
-            ElseIf gangX < 1 Then
-                gangX = 1
-            End If
-
-lb10:
-
-            'Not idle when Power > 0
-            If gangX = 0 Then
-                If Pjzx > 0.001 Then gangX = 1
-            End If
-
-            'New Revolutions
-            ''nn = fnn(Vist, gangX, Clutch = tEngClutch.Slipping)
-            nn = fnn(Vist0, gangX, False)
-
-            'Check if Gear within Power/Revolutions limits. Drag-operation is not respected
-            Select Case nn
-                Case Is < Kuppln_norm
-                    If gangX > 1 Then
-                        gangX -= 1
-                        GoTo lb10
-                    End If
-                Case Is > 1
-                    If gangX < VEH.ganganz Then
-                        gangX += 1
-                        GoTo lb10
-                    End If
-            End Select
-
-            'Save Gears in field for later checks
-            Gcheck(t - tx) = gangX
-
-            If gangX <> Gear Then itgangwL = t
-
-            Gear = gangX
-
-            t += 1
-
-        Loop Until t = tx + 11 Or t > t1
-        t = tx
-        '-------------------------------------------------------------
-        'Accept Gear
-        gangX = Gcheck(0)
-        For ix = t To t + 10
-            Gears(ix - t) = Gcheck(ix - t)
-        Next
-
-        Gear = Gears(0)
-
-        'Gang-Verlauf hinzufügen |@@| Add to Gang-sequence
-
-        '----------------------------------------------------------------------------------
-
-        '--------------------------------Checks Part 1 -------------------------------------
-        'Checks to Purge non-sensible Gear-shift:
-
-        ''Division into "IPhase(j)" stages: acceleration(=1), Deceleration(=2) and Cruise(=3):
-        'iphase = 0
-        'Select Case (beschl(jz - 2) + beschl(jz - 1) + beschl(jz)) / 3
-        '    Case Is >= 0.125
-        '        iphase = 1
-        '    Case Is <= -0.125
-        '        iphase = 2
-        '    Case Else
-        '        iphase = 3
-        'End Select
-        '   ============>> Already determined by VehState0
-
-        'Search by last Gear-change
-        itgangwL = -1
-        If t > 2 Then
-            For ix = t - 1 To 1 Step -1
-                If MODdata.Gear(ix) <> MODdata.Gear(ix - 1) Then
-                    itgangwL = ix
-                    Exit For
-                End If
-            Next
-        End If
-
-        'Max permissible Gear-change every 3 seconds:
-        If t - itgangwL <= 2 And t > 2 And LastGear <> 0 Then
-            Return LastGear    '<<< keine weiteren Checks!!!
-        End If
-
-        If Gear <> LastGear Then
-            'Cruise-phases:
-            'Solange Geschwindigkeitsaenderung seit letztem Gangwechsel unter 6% und Pe/Pnenn aenderung unter 6% wird nicht geschaltet: |@@| As long Speed-change since last Gear-shift is under 6% and Pe/Pnom below 6%, do not run:
-            'Deceleration phases: Upshift suppressed
-            'Acceleration phases: Downshift?(Zurückschalten) suppressed
-            If itgangwL = -1 Then itgangwL = 0
-            bCheck = False
-            Pjetzt = fPeGearEV(Gear, t)
-            Pvorher = MODdata.Pe(itgangwL)
-            If MODdata.Vh.V(itgangwL) = 0 Then
-                a = Math.Abs(Vist / 0.0001 - 1)
-            Else
-                a = Math.Abs(Vist / MODdata.Vh.V(itgangwL) - 1)
-            End If
-            If Pvorher = 0 Then
-                b = Math.Abs(Pjetzt / 0.0001 - 1)
-            Else
-                b = Math.Abs(Pjetzt / Pvorher - 1)
-            End If
-            If VehState0 = tVehState.Cruise And a < 0.06 And b < 0.06 Then bCheck = True
-            If (VehState0 = tVehState.Acc) And Gear < LastGear Then bCheck = True
-            If (VehState0 = tVehState.Dec) And Gear > LastGear And LastGear <> 0 Then bCheck = True
-            If bCheck Then
-                Gear = LastGear
-            Else
-                'Wenn innerhalb von 6 Sekunden wieder in vorigen Gang zurueck geschaltet wird, wird der vorige Gang |@@| If within 6 seconds switched back again to the previous Gear, stick
-                'durchgehend beibehalten |@@| to the previous Gear
-                bCheck = False
-                For ix = t + 1 To t + 6
-                    If ix > t1 Then Exit For
-                    If (Gears(ix - t) = LastGear) Then
-                        bCheck = True
-                        Exit For
-                    End If
-                Next
-                If bCheck Then
-                    Gear = LastGear
-                Else
-                    'Wenn innerhalb von 6 Sekunden einmal höher und einmal niedriger als voriger Gang |@@| If within 6 seconds it Shifts once above and once below the previous-Gear,
-                    'geschaltet wird, wird voriger Gang durchgehend beibehalten |@@| then maintain the previous-Gear throughout.
-                    a = 0
-                    b = 0
-                    For ix = t To t + 6
-                        If Gears(ix - t) > LastGear Then
-                            a = 1
-                        ElseIf Gears(ix - t) < LastGear Then
-                            b = 1
-                        End If
-                    Next
-                    If a * b > 0 Then
-                        Gear = LastGear
-                    End If
-                End If
-            End If
-        End If
-
-        '--------------------------------Checks Part 2 -------------------------------------
-        'Suppress Gear-shift from 2 to 1 when v > 2.5 m/s
-        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl |@@| NEW LUZ 040210: Upshift only when in 2 Gear over Clutch-revolutions
-        If Gear = 1 And LastGear > 1 And Vist >= 2.5 Then
-            If fnn(Vist, 2, False) > Kuppln_norm Then Gear = 2
-        End If
-
-        'bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| at decelerations below 2.5 m/s, shift to Idle
-        bCheck = True
-        For ix = t To t + 2
-            If ix > t1 Then Exit For
-            If MODdata.Vh.V(ix) > MODdata.Vh.V(ix - 1) Then
-                bCheck = False
-                Exit For
-            End If
-        Next
-
-        If bCheck And Vist < 2.5 And VehState0 = tVehState.Dec Then
-            Return 0  '<<< keine weiteren Checks!!!
-        End If
-
-        'wenn v mehr als 1 Sek. < 0.1 m/s wird auf Gang=0 geschaltet |@@| If v < 0.1 m/s for more than 1 sec, then shift to Gear=0
-        If t < t1 Then
-            If (Vist < 0.1 And MODdata.Vh.V(t + 1) < 0.1) Then
-                Return 0    '<<< keine weiteren Checks!!!
-            End If
-        End If
-
-        'at Acceleration below 1.5 m/s, then shift to 1st Gear
-        If Vist < 1.5 And t < t1 Then
-            If (Vist > 0.01 + MODdata.Vh.V(t - 1) And MODdata.Vh.V(t + 1) > 0.01 + Vist) Then
-                Gear = 1
-            End If
-        End If
-
-        'Check whether Revolutions over Nominal-Revolutions, then should always Upshift,
-        'otherwise Power not enough!
-        Do While fnn(Vist, Gear, Clutch = tEngClutch.Slipping) > 1 And Gear < VEH.ganganz
-            Gear += 1
-        Loop
-
-        Return Gear
-
-    End Function
-
-    Private Function fGearLKW(ByVal t As Integer) As Integer
-        Dim gangX As Int16
-        Dim GangXl As Int16
-        Dim Gear As Integer
-        Dim ix As Integer
-        Dim nn As Single
-        Dim tx As Int32
-        Dim t1 As Int32
-        Dim Pjetzt As Single
-        Dim Pvorher As Single
-        Dim itgangwL As Integer
-        Dim itgangwH As Int32
-        Dim bCheck As Boolean
-        Dim Gears(11) As Integer      '<<<<==== !!!!!!
-        Dim LastGear As Integer
-        Dim a As Single
-        Dim b As Single
-        Dim Pe0 As Single
-        Dim PeX As Single
-        Dim achek As Integer
-        'Dim avchek As Single
-        Dim achstg As Single
-        Dim cnl As Single
-        Dim n0 As Single
-        Dim P_maxg As Single
-        Dim pschnellm As Single
-        Dim psparm As Single
-        Dim psparist As Single
-        Dim pschist As Single
-        Dim ClutchSlip As Boolean
-        Dim P_maxi(16) As Single
-        Dim maxPgang As Int16
-        Dim Pivoll As Single
-        Dim iphase As Int16
-        Dim iphase0 As Int16
-        Dim Vist0 As Single
-        Dim LastPe As Single
-        Dim OverPfull As Boolean = False
-        Dim MsgSrc As String
-
-        MsgSrc = "Power/HDV_Gear"
-
-        '-----------------------------------Second 1 --------------------------------------
-        'First second: Find Gear/Initialization
-        If t = 0 Then
-            gangX = -1
-            If (MODdata.Vh.V(t) <= 1.5) Then
-                Gear = 1
-            Else
-                For ix = 1 To VEH.ganganz
-                    nn = fnn(Vist, ix, False)
-
-                    If (ix < VEH.ganganz) Then
-                        If (nn <= 0.8) Then
-                            gangX = ix
-                            Exit For
-                        End If
-                    Else
-                        If (nn <= 1.06) Then
-                            gangX = ix
-                            Exit For
-                        End If
-                    End If
-                Next ix
-                If gangX = -1 Then
-                    WorkerMsg(tMsgID.Err, "Failed to calculate intial gear!", MsgSrc)
-                    Return -1
-                End If
-                Gear = gangX
-            End If
-            GangH(t) = Gear
-            GangL(t) = Gear
-            Return Gear
-
-        Else
-
-            LastPe = MODdata.Pe(t - 1)
-
-        End If
-
-        '--------------------------------From second 2 --------------------------------------
-
-        '---------Start-values ---------
-        gangX = MODdata.Gear(t - 1)
-        LastGear = gangX
-        GangXl = GangL(t - 1)
-
-        ClutchSlip = (Clutch = tEngClutch.Slipping)
-
-        t1 = MODdata.tDim
-
-        itgangwH = 0
-        itgangwL = 0
-
-        If t > 1 Then
-            For ix = t - 1 To 1 Step -1
-                If GangH(ix) <> GangH(ix - 1) Then
-                    itgangwH = ix
-                    Exit For
-                End If
-            Next
-
-            For ix = t - 1 To 1 Step -1
-                If GangL(ix) <> GangL(ix - 1) Then
-                    itgangwL = ix
-                    Exit For
-                End If
-            Next
-        End If
-
-
-
-        'Compute power from jz to (jz + 6) -----------------
-        tx = t
-        For t = tx To tx + 6
-            If t > t1 Then Exit For
-
-            Vist0 = MODdata.Vh.V(t)
-
-            Pe0 = fPeGearModvD(t)
-
-            n0 = fnU(MODdata.Vh.V(t), gangX, False) / VEH.nNenn
-
-            '-----------------------------------------------------------------
-            '
-            '     Berechnung nach Drehzahl/Leistung-Modell |@@| Calculated towards a Revolutions/Power model
-            '
-            '    --------------------------------------------------------------
-            '(1) "Fast Driving" variant
-
-            'Gear-shift only if v-change 5% since last Gear-shift
-            'VECTO: Commented out START
-            'achek = 1
-            'If (MODdata.Vh.V(itgangwH) <> 0) Then
-            '    avchek = Math.Abs(Vist0 / MODdata.Vh.V(itgangwH) - 1)
-            'Else
-            '    avchek = Math.Abs(Vist0 - MODdata.Vh.V(itgangwH))
-            'End If
-            'If (avchek >= 0.05) Then
-            '    achek = -1
-            'Else
-            '    achek = 1
-            'End If
-            'VECTO: Commented out END
-
-            'in ersten 10 Zyklussekunden kann zum Einregulieren immer geschlatet werden: |@@| the first 10 seconds of the cycle can always be used for balancing gear-shifting:
-            If (t <= 9) Then achek = -1
-
-            'A Change in the Slope can always result in Gear-shift:
-            achstg = Math.Abs(MODdata.Vh.Grad(t) - MODdata.Vh.Grad(itgangwH))
-            If (achstg > 0.001) Then achek = -1
-
-            'Downshift:
-            If (n0 <= VEH.hinunter) Then
-                If (achek < 0.9) Then
-                    gangX = gangX - 1
-                End If
-            End If
-
-            'Upshift:
-            ' bei Steigungszyklen mit zu hohen Geschwindigkeiten wird geschw. i+1 erst nach gangwahl berechnet |@@| at Sloped-cycles with excessive speed the Gear i +1 is calculated
-            ' dabei manchmal zu hoher gang -> Drehzahl und P_max viel zu nieder, daher nu bei niederen leistungen |@@| sometimes Gear is too high -> Revolutions and P_max too low, so only at low Power
-            ' hochschalten erlaubt: |@@| Upshift allowed:
-            If (Pe0 > 0.8) Then
-                If (n0 < 0.9) Then
-                    achek = 1
-                End If
-            End If
-
-            If (n0 >= VEH.hinauf) Then
-                If (achek < 0.9) Then
-                    gangX = gangX + 1
-                End If
-            End If
-
-            If (gangX > VEH.ganganz) Then gangX = VEH.ganganz
-            If (gangX < 1) Then gangX = 1
-
-            GangH(t) = gangX
-
-            '   -----------------------------------------------------------------
-            '(2) "Economical Driving" Variant
-
-            '   Downshift?(Zurueckschalten) happens only when Speed-change > 6%
-            '   Always Upshift
-            'VECTO: Commented out START
-            'achek = 1
-            'If (MODdata.Vh.V(itgangwL) <> 0) Then
-            '    avchek = Math.Abs(Vist0 / MODdata.Vh.V(itgangwL) - 1)
-            'Else
-            '    avchek = Math.Abs(Vist0 - MODdata.Vh.V(itgangwL))
-            'End If
-            'If (avchek >= 0.06) Then
-            '    achek = -1
-            'Else
-            '    achek = 1
-            'End If
-            'VECTO: Commented out END
-
-            '       in ersten 10 Zyklussekunden kann zum einregulieren immer geschlatet werden: |@@| The first 10 seconds cycle can always be used for balancing Gear-shift:
-            If (t <= 9) Then achek = -1
-            '       When slope changes always may result in Gear-shift:
-            achstg = Math.Abs(MODdata.Vh.Grad(t) - MODdata.Vh.Grad(itgangwL))
-            If (achstg > 0.001) Then achek = -1
-
-            '    Downshift:
-            If (GangXl > 1) Then
-                cnl = fnU(Vist0, GangXl, False) / VEH.nNenn
-                If (cnl <= VEH.lhinunter) Then
-                    If (achek < 0.9) Then
-                        GangXl = GangXl - 1
-                    End If
-                End If
-            End If
-
-            'Upshift, only if checked not the highest Gear:
-            If (GangXl < VEH.ganganz) Then
-                'C
-                If (Pe0 > 0.8) Then
-                    If (n0 < 0.85) Then
-                        achek = 1.0
-                    End If
-                End If
-                'C
-                'C     Relative Revolutions:
-                cnl = fnU(Vist0, GangXl + 1, False) / VEH.nNenn
-
-
-                If (cnl >= VEH.lhinauf) Then
-                    GangXl = GangXl + 1
-                End If
-            End If
-
-            GangL(t) = GangXl
-
-            ' Auswahl des Drehzahlverhaeltnisses aus der "schnellen (..h)" und |@@| Select Revolutions-relationship for the "fast (h ..)" and
-            ' der "sparsamen (..l)" Variante: |@@| the "economical (.. l)"  Variant:
-
-            '   Drehzahlverhhealtnisse nach "Modellmix": |@@| Revolutions-relationship for "Modelmix":
-            '   anhand der erforderlichen maximalen Motorleistung ueber die |@@| according to the required maximum Engine-power over the
-            '   next 6 seconds
-            P_maxg = Pe0
-            For ix = t To t + 5
-                If ix > t1 Then Exit For
-                PeX = fPeGearModvD(t)
-                If (PeX > P_maxg) Then P_maxg = PeX
-            Next
-
-            '     Determine the proportions between the Fast and the Economical Driving-style
-            '      (Hausberger model):
-            pschnellm = 3.3333 * P_maxg - 1.6667
-
-            If (pschnellm > 1) Then pschnellm = 1
-            If (pschnellm < 0) Then pschnellm = 0
-            psparm = 1.0 - pschnellm
-
-            '     Mix der berechneten Gaenge gemaess Vorgabe in Eingabefile: |@@| Mix the calculated Gears as specified in the input file:
-            '     (pmodell wird aus Eingabefile gelesen, = Anteil, zu der die Drehzahl |@@| from the Input-file it is read the pmodell = ratios of the revolutions
-            '      nach "reales Modell" bestehen soll) |@@| towards a "real model")
-
-            psparist = VEH.pspar + psparm * VEH.pmodell
-            pschist = 1.0 - psparist
-
-            '      Ermittlung des "virtuellen" aktuellen Ganges nach Modell |@@| Determine the "virtual" up-to-date Gears from the Model
-            Gear = Math.Round((pschist) * GangH(t) + (psparist) * GangL(t), 0, MidpointRounding.AwayFromZero)
-            If (Gear > VEH.ganganz) Then Gear = VEH.ganganz
-            If (Gear < 1) Then Gear = 1
-
-            '    check if Revolutions over Nominal-Revolutions, then must always upshift,
-            '    otherwise Power not enough!
-lb88:
-            n0 = fnU(Vist0, Gear, False) / VEH.nNenn
-            If (n0 > 1) Then
-                If (Gear < VEH.ganganz) Then
-                    Gear = Gear + 1
-                    GoTo lb88
-                End If
-            End If
-
-            '    Check whether required Power is over P_max (s)
-            '    then Downshift?(zurueckgeschaltet):
-
-            For ix = 1 To VEH.ganganz
-                n0 = fnU(Vist0, ix, False) / VEH.nNenn
-                nn = fnn(Vist0, ix, False)
-                If (n0 > 0.2 And n0 < 1.02) Then
-                    P_maxi(ix) = FLD.Pfull(nn, LastPe) / VEH.Pnenn
-                Else
-                    P_maxi(ix) = 0
-                End If
-            Next
-
-            P_maxg = 0
-            For ix = 1 To VEH.ganganz
-                If (P_maxi(ix) > P_maxg) Then
-                    P_maxg = P_maxi(ix)
-                    maxPgang = ix
-                End If
-            Next
-
-            For ix = maxPgang To VEH.ganganz
-                If (P_maxi(ix) >= (0.94 * P_maxg)) Then
-                    maxPgang = ix
-                End If
-            Next
-
-            '    Eigentliche Ueberpruefung ob ueber P_max(n) |@@| Check whether Actual over P_max (s)
-
-lb909:
-
-            Pivoll = FLD.Pfull(fnn(MODdata.Vh.V(t), Gear, ClutchSlip), LastPe) / VEH.Pnenn
-
-            'falls schlechte Vollastkurve ohne Moment in leerlauf wird korrigiert: |@@| if bad Full-load-curve without Torque, then correct in Idle:
-            If (Pivoll < 0.06) Then Pivoll = 0.06
-
-            '    Ueberpruefung, ob hoehere Leistung erforderlich ist als Maximalleistung bei nh |@@| Checking whether required Power is higher than maximum power at nh
-            '     dann wird zurueckgeschaltet: |@@| then Gear-shift-back?(zurueckgeschaltet):
-            If (Pe0 > Pivoll) Then
-
-                If t = tx Then OverPfull = True
-
-                If (Gear > maxPgang) Then
-                    cnl = fnU(Vist0, Gear - 1, False) / VEH.nNenn
-                    If (cnl <= 1.02) Then
-                        gangX = gangX - 1
-                        GangXl = GangXl - 1
-                        Gear = Gear - 1
-                        GoTo lb909
-                    End If
-                End If
-            End If
-
-            If (gangX > VEH.ganganz) Then gangX = VEH.ganganz
-            If (gangX < 1) Then gangX = 1
-            If (GangXl > VEH.ganganz) Then GangXl = VEH.ganganz
-            If (GangXl < 1) Then GangXl = 1
-            If (Gear > VEH.ganganz) Then Gear = VEH.ganganz
-            If (Gear < 1) Then Gear = 1
-
-            Gears(t - tx) = Gear
-
-        Next
-        t = tx
-
-        Gear = Gears(0)
-
-        ''Pjetzt = fPantr(Gang(jz)) / (fGPvoll(fn(Gang(jz))) + 0.00000001)
-
-        ''If Pjetzt > 1 Then
-        ''    GeschwRed = True
-        ''    GeschwRedPC = Pjetzt
-        ''    Exit Function
-        ''End If
-
-        'c     Ende "Modell"-Basisgangwahl |@@| End "model"-Gear-selection basis
-        '---------------------------------------------------
-
-
-        'Kuppelschleif-check |@@| Clutch-lock check
-        ''If bPplus And fn_norm(1) < Kuppln_norm Then bKupplSchleif = True
-
-        '--------------------------------Checks Part 1 -------------------------------------
-        'Checks to Purge non-sensible Gear-shift:
-        'Division into "IPhase(j)" stages: Acceleration(=1), Deceleration(=2) and Cruise(=3):
-        iphase = 0
-        If t > 1 Then
-            Select Case (MODdata.Vh.a(t - 2) + MODdata.Vh.a(t - 1) + MODdata.Vh.a(t)) / 3
-                Case Is >= 0.125
-                    iphase = 1
-                Case Is <= -0.125
-                    iphase = 2
-                Case Else
-                    iphase = 3
-            End Select
-        End If
-
-        iphase0 = 0
-        If t > 3 Then
-            Select Case (MODdata.Vh.a(t - 3) + MODdata.Vh.a(t - 2) + MODdata.Vh.a(t - 1)) / 3
-                Case Is >= 0.125
-                    iphase0 = 1
-                Case Is <= -0.125
-                    iphase0 = 2
-                Case Else
-                    iphase0 = 3
-            End Select
-        End If
-
-        'Search by last Gear-change
-        itgangwL = 0
-        For ix = t - 1 To 1 Step -1
-            If MODdata.Gear(ix) <> MODdata.Gear(ix - 1) Then
-                itgangwL = ix
-                Exit For
-            End If
-        Next
-
-        'Maximum permissible Gear-shifts every 3 seconds:
-        If t - itgangwL <= 3 And t > 2 Then
-            Return LastGear    '<<< keine weiteren Checks!!!
-        End If
-
-        'Cruise-phases:
-        'As long Speed-change since last Gear-shift is below 6% and Pe/Pnom below 6% then do not Gear-shift:
-        'Deceleration-phases: Upshift suppressed
-        'Acceleration phases: Downshift?(Zurückschalten) suppressed
-        bCheck = False
-        Pjetzt = fPeGearModvD(t)
-        Pvorher = MODdata.Pe(itgangwL)
-        If MODdata.Vh.V(itgangwL) = 0 Then
-            a = Math.Abs(Vist / 0.0001 - 1)
-        Else
-            a = Math.Abs(Vist / MODdata.Vh.V(itgangwL) - 1)
-        End If
-        If Pvorher = 0 Then
-            b = Math.Abs(Pjetzt / 0.0001 - 1)
-        Else
-            b = Math.Abs(Pjetzt / Pvorher - 1)
-        End If
-        If iphase = 3 And a < 0.06 And b < 0.06 Then bCheck = True
-        If (iphase = 1) And Gear < MODdata.Gear(t - 1) And iphase0 = 1 Then bCheck = True
-        If (iphase = 2) And Gear > MODdata.Gear(t - 1) Then bCheck = True
-        If bCheck Then Gear = LastGear
-
-        'If within 6 seconds switched back again to the previous Gear, then
-        'stick to previous Gear
-        'VECTO: Exception: on Full-load curve
-        If Not OverPfull Then
-            bCheck = False
-            For ix = t + 1 To t + 6
-                If ix > t1 Then Exit For
-                If (Gears(ix - t) = LastGear) Then bCheck = True
-            Next
-            If bCheck Then Gear = LastGear
-        End If
-
-
-        'If within the 6 seconds, it shifts once to higher and once to lower-Gear than the previous one, then
-        'stick to the previous Gear.
-        a = 0
-        b = 0
-        If (Gear <> LastGear) Then
-            For ix = t To t + 6
-                If Gears(ix - t) > LastGear Then
-                    a = 1
-                ElseIf Gears(ix - t) < LastGear Then
-                    b = 1
-                End If
-            Next
-            If a * b > 0 Then
-                Gear = LastGear
-            End If
-        End If
-
-        '--------------------------------Checks Part 2 -------------------------------------
-        'Shifting from 2nd to 1st Gear is suppressed when v > 1.5 m/s
-        'NEU LUZ 040210: Hochschalten nur wenn im 2. Gang über Kuppeldrehzahl |@@| NEW LUZ 040210: Upshifting only when in 2nd Gear over the Clutch-revolutions
-        If Gear = 1 And LastGear > 1 And Vist >= 1.5 Then
-            If fnn(Vist, 2, False) > Kuppln_norm Then Gear = 2
-        End If
-
-        'bei verzoegerungsvorgaengen unter 1.5 m/s wird in Leerlauf geschaltet |@@| at decelerations below 1.5 m/s, shift to Idle
-        bCheck = False
-        For ix = t To t + 2
-            If ix > t1 Then Exit For
-            If MODdata.Vh.V(ix) > MODdata.Vh.V(ix - 1) Then GoTo lb20
-        Next
-        bCheck = True
-lb20:
-        If bCheck And Vist < 1.5 And VehState0 = tVehState.Dec Then
-            Return 0    '<<< keine weiteren Checks!!!
-        End If
-
-        'If v < 0.1 m/s for more than 1 sec, then shift to Gear=0
-        If t < t1 Then
-            If (Vist < 0.1 And MODdata.Vh.V(t + 1) < 0.1) Then
-                Return 0    '<<< keine weiteren Checks!!!
-            End If
-        End If
-
-
-        'Check if Revolutions over Nominal-revolutions, then should always Upshift,
-        'otherwise Power not enough!
-        Do While fnn(Vist, Gear, ClutchSlip) > 1 And Gear < VEH.ganganz
-            Gear += 1
-        Loop
-
-        Return Gear
-
-    End Function
-
-    Private Function fGearBySpeed(ByVal t As Integer) As Integer
-        Dim i As Int16
-        Dim g0 As Int16
-        Dim g As Int16
-        Dim v0 As Single
-        Dim v1 As Single
-        Dim v2 As Single
-        Dim v As Single
-
-        v = MODdata.Vh.V(t)
-
-        If t = 0 Then
-            v0 = v
-            g0 = VEH.ganganz
-            For i = 1 To VEH.ganganz
-                If v < avh(i) Then
-                    g0 = i
-                End If
-            Next
-        Else
-            v0 = MODdata.Vh.V(t - 1)
-            g0 = MODdata.Vh.GearVorg(t - 1)
-            g = g0
-            If g = -1 Then g = 1 '<= Sonst Absturz bei g=-1. 
-            If v > v0 Then
-                If v >= avh(g) And g < VEH.ganganz Then g += 1
-            ElseIf v < v0 Then
-                If v <= avl(g) And g > 0 Then g -= 1
-            End If
-        End If
-
-        'Speed look-ahead
-        If t = MODdata.tDim Then
-            v1 = v
-            v2 = v
-        Else
-            v1 = MODdata.Vh.V(t + 1)
-            If t + 1 = MODdata.tDim Then
-                v2 = v
-            Else
-                v2 = MODdata.Vh.V(t + 2)
-            End If
-        End If
-
-        'Checks Gears for Cars(PKW) ....
-        'Schalten von 2. in 1. Gang wird bei v>2,5 m/s unterdrueckt |@@| Gear-shifting from 2nd to 1st is suppressed at v > 2.5 m/s
-        If (g = 1) Then
-            If (g0 > g) Then
-                If (v >= 2.5) Then
-                    g = 2
-                End If
-            End If
-        End If
-
-        'Bei verzoegerungsvorgaengen unter 2,5 m/s wird in Leerlauf geschaltet |@@| At decelerations below 2.5 m/s, shift to Idle
-        If (v < 2.5) Then
-            If (v <= v0 And v1 <= v) Then
-                If (v2 <= v1) Then
-                    g = 0
-                End If
-            End If
-        End If
-
-        'If v < 0.1 m/s for  more than 1 sec, then shift to Gear=0
-        If (v < 0.1 And v1 < 0.1) Then
-            g = 0
-        End If
-
-        'When Acceleration below 1.5 m/s, then shift to 1st Gear
-        If (v < 1.5) Then
-            If v > v0 And v1 > v Then
-                g = 1
-            End If
-        End If
-
-        Return g
-
-    End Function
-
-    Private Function fGearByU(ByVal nU As Single, ByVal V As Single) As Integer
-        Dim Dif As Single
-        Dim DifMin As Single
-        Dim g As Int16
-        Dim g0 As Integer
-        DifMin = 9999
-        For g = 1 To VEH.ganganz
-            Dif = Math.Abs(VEH.Igetr(g) - nU * (VEH.Dreifen * Math.PI) / (V * 60.0 * VEH.AchsI))
-            If Dif <= DifMin Then
-                g0 = g
-                DifMin = Dif
-            End If
-        Next
-        Return g0
-    End Function
-
-    'Function calculating the Power easily for Gear-shift-model
-    Private Function fPeGearModvD(ByVal t As Integer) As Single
-        Return fPvD(t) / VEH.Pnenn
-    End Function
-
-    Private Function fPeGearMod(ByVal Gear As Integer, ByVal t As Integer, ByVal V As Single, ByVal a As Single) As Single
-        Dim PaM As Single
-        Dim nU As Single
-        Dim PvD As Single
-
-        PvD = fPvD(t, V, a)
-
-        nU = fnU(V, Gear, False)
-
-        If Nvorg Then
-            'Drehzahlvorgabe
-            PaM = (VEH.I_mot * MODdata.dnUvorg(t) * 0.01096 * MODdata.nUvorg(t)) * 0.001
-        Else
-            PaM = ((VEH.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * a * V) * 0.001
-        End If
-        If Clutch = tEngClutch.Closed Then
-            Return (PvD + fPlossGB(PvD, V, Gear) + fPlossDiff(PvD, V) + fPaG(V, a) + fPaux(t, nU) + PaM) / VEH.Pnenn
-        Else    'Clutch = tEngClutch.Slipping
-            Return ((PvD + fPlossGB(PvD, V, Gear) + fPlossDiff(PvD, V) + fPaG(V, a)) / KupplEta + fPaux(t, nU) + PaM) / VEH.Pnenn
+        If Clutch = tEngClutch.Closed Then
+            Return (PvD + fPlossGB(PvD, V, Gear, True) + fPlossDiff(PvD, V, True) + fPaG(V, a) + fPaux(t, nU) + PaM) / VEH.Pnenn
+        Else    'Clutch = tEngClutch.Slipping
+            Return ((PvD + fPlossGB(PvD, V, Gear, True) + fPlossDiff(PvD, V, True) + fPaG(V, a)) / KupplEta + fPaux(t, nU) + PaM) / VEH.Pnenn
         End If
 
 
@@ -3789,39 +2263,6 @@ lb20:
     End Function
 
 
-
-    'Function calculating the Power easily for EV-shift-model
-    Private Function fPeGearEV(ByVal Gear As Integer, ByVal t As Integer) As Single
-        Dim PaM As Single
-        Dim nU As Single
-        Dim PvD As Single
-        Dim V As Single
-        Dim a As Single
-
-        PvD = fPvD(t)
-        V = MODdata.Vh.V(t)
-        a = MODdata.Vh.a(t)
-
-        nU = fnU(V, Gear, False)
-
-        If Nvorg Then
-            'Revolutions-setting
-            PaM = (VEH.I_mot * MODdata.dnUvorg(t) * 0.01096 * MODdata.nUvorg(t)) * 0.001
-        Else
-            PaM = ((VEH.I_mot * (VEH.AchsI * VEH.Igetr(Gear) / (0.5 * VEH.Dreifen)) ^ 2) * a * V) * 0.001
-        End If
-        If Clutch = tEngClutch.Closed Then
-            Return (PvD + fPlossGB(PvD, V, Gear) + fPlossDiff(PvD, V) + fPaG(V, a) + fPaux(t, nU) + PaM) / PeUL
-        Else    'Clutch = tEngClutch.Slipping
-            Return ((PvD + fPlossGB(PvD, V, Gear) + fPlossDiff(PvD, V) + fPaG(V, a)) / KupplEta + fPaux(t, nU) + PaM) / PeUL
-        End If
-
-    End Function
-
-
-
-
-
 #End Region
 
 #Region "Drehzahl"
@@ -3939,7 +2380,7 @@ lb20:
     End Function
 
     '-------------------Transmission(Getriebe)-------------------
-    Private Function fPlossGB(ByVal PvD As Single, ByVal V As Single, ByVal Gear As Integer) As Single
+    Private Function fPlossGB(ByVal PvD As Single, ByVal V As Single, ByVal Gear As Integer, ByVal TrLossApprox As Boolean) As Single
         Dim Pdiff As Single
         Dim P As Single
         Dim P1_getr As Single
@@ -3955,7 +2396,7 @@ lb20:
         nU = (60 * V) / (VEH.Dreifen * Math.PI) * VEH.Igetr(0) * VEH.Igetr(Gear)
 
         'Pdiff
-        Pdiff = fPlossDiff(PvD, V)
+        Pdiff = fPlossDiff(PvD, V, TrLossApprox)
 
         Select Case GEN.TransmModel
 
@@ -3996,14 +2437,14 @@ lb20:
                 '   Power after Differential (before Transmission)
                 P = PvD + Pdiff
 
-                Return Math.Max(VEH.IntpolPeLoss(Gear, nU, P), 0)
+                Return Math.Max(VEH.IntpolPeLoss(Gear, nU, P, TrLossApprox), 0)
 
         End Select
 
 
     End Function
 
-    Private Function fPlossDiff(ByVal PvD As Single, ByVal V As Single) As Single
+    Private Function fPlossDiff(ByVal PvD As Single, ByVal V As Single, ByVal TrLossApprox As Boolean) As Single
 
         Dim Pdiff As Single
         Dim anrad As Single
@@ -4023,13 +2464,13 @@ lb20:
 
                 '***Differential
                 '   Power before Differential
-                Return Math.Max(VEH.IntpolPeLoss(0, (60 * V) / (VEH.Dreifen * Math.PI) * VEH.Igetr(0), PvD), 0)
+                Return Math.Max(VEH.IntpolPeLoss(0, (60 * V) / (VEH.Dreifen * Math.PI) * VEH.Igetr(0), PvD, TrLossApprox), 0)
 
         End Select
 
     End Function
 
-    Private Function fPlossGBfwd(ByVal PeICE As Single, ByVal V As Single, ByVal Gear As Integer) As Single
+    Private Function fPlossGBfwd(ByVal PeICE As Single, ByVal V As Single, ByVal Gear As Integer, ByVal TrLossApprox As Boolean) As Single
         Dim nU As Single
 
         If Gear = 0 Then Return 0
@@ -4044,13 +2485,13 @@ lb20:
 
                 nU = (60 * V) / (VEH.Dreifen * Math.PI) * VEH.Igetr(0) * VEH.Igetr(Gear)
 
-                Return Math.Max(VEH.IntpolPeLossFwd(Gear, nU, PeICE), 0)
+                Return Math.Max(VEH.IntpolPeLossFwd(Gear, nU, PeICE, TrLossApprox), 0)
 
         End Select
 
     End Function
 
-    Private Function fPlossDiffFwd(ByVal PeIn As Single, ByVal V As Single) As Single
+    Private Function fPlossDiffFwd(ByVal PeIn As Single, ByVal V As Single, ByVal TrLossApprox As Boolean) As Single
         Dim nU As Single
 
         Select Case GEN.TransmModel
@@ -4063,7 +2504,7 @@ lb20:
 
                 nU = (60 * V) / (VEH.Dreifen * Math.PI) * VEH.Igetr(0)
 
-                Return Math.Max(VEH.IntpolPeLossFwd(0, nU, PeIn), 0)
+                Return Math.Max(VEH.IntpolPeLossFwd(0, nU, PeIn, TrLossApprox), 0)
 
         End Select
 
diff --git a/VECTO/M_Lese.vb b/VECTO/M_Lese.vb
index 5dd6983acb744fb0a73f688b3b7feef3b548479e..b193a0aa9e3522838995400b5ea64f5f98e6f490 100644
--- a/VECTO/M_Lese.vb
+++ b/VECTO/M_Lese.vb
@@ -6,7 +6,11 @@ Module M_Lese
         Dim AuxEntry As cVEH.cAuxEntry
         Dim AuxKV As KeyValuePair(Of String, cVEH.cAuxEntry)
         Dim i As Integer
+        Dim j As Integer
         Dim sb As cSubPath
+        Dim fldgear As Dictionary(Of Integer, String)
+        Dim fldgFromTo As String()
+        Dim str As String
 
         Dim MsgSrc As String
 
@@ -115,34 +119,101 @@ Module M_Lese
         VEH.I_mot = ENG.I_mot
 
         'GBX => VEH
-        VEH.ganganz = 0
-        For i = 0 To 16
-            VEH.Igetr(i) = GBX.GetrI(i)
+        If GEN.EngOnly Then
+            VEH.ganganz = 0
+        Else
+            VEH.ganganz = GBX.GetrI.Count - 1
+        End If
+
+        For i = 0 To GBX.GetrI.Count - 1
+            VEH.siGetrI.Add(GBX.GetrI(i))
+            VEH.GetrMap.Add(New cSubPath)
             If IsNumeric(GBX.GetrMap(i, True)) Then
-                VEH.GetrEffDef(i) = True
-                VEH.GetrEff(i) = CSng(GBX.GetrMap(i, True))
+                VEH.GetrEffDef.Add(True)
+                VEH.GetrEff.Add(CSng(GBX.GetrMap(i, True)))
             Else
+                VEH.GetrEffDef.Add(False)
+                VEH.GetrEff.Add(0)
                 VEH.GetrMap(i).Init(fPATH(GEN.PathGBX), GBX.GetrMap(i, True))
             End If
-            If VEH.Igetr(i) > 0.0001 Then VEH.ganganz = i
         Next
         VEH.I_Getriebe = GBX.I_Getriebe
         VEH.TracIntrSi = GBX.TracIntrSi
 
         '-----------------------------    ~FLD~    -----------------------------
         '   FLD muss jetzt vor MAP/MEP eingelesen werden falls dort <DRAG> Einträge sind! |@@| if there are <DRAG> entries, then read FLD before MAP/MEP!
-        FLD = New cFLD
-        FLD.FilePath = ENG.PathFLD
+
+        FLD = New List(Of cFLD)
+
+        If ENG.FLDgears.Count = 0 Then
+            WorkerMsg(tMsgID.Err, "No .vfld file defined in Engine file!", MsgSrc, "<GUI>" & GEN.PathENG)
+            Return False
+        End If
+
+        fldgear = New Dictionary(Of Integer, String)
 
         Try
-            If Not FLD.ReadFile Then Return False 'Fehlermeldung hier nicht notwendig weil schon von in ReadFile
+            j = -1
+            For Each str In ENG.FLDgears
+
+                j += 1
+                If str.Contains("-") Then
+                    fldgFromTo = str.Replace(" ", "").Split("-")
+                Else
+                    fldgFromTo = New String() {str, str}
+                End If
+
+                For i = CInt(fldgFromTo(0)) To CInt(fldgFromTo(1))
+
+                    If i > VEH.ganganz Then Exit For
+
+                    If i < 0 Or i > 99 Then
+                        WorkerMsg(tMsgID.Err, "Cannot assign .vfld file to gear " & i & "!", MsgSrc, "<GUI>" & GEN.PathENG)
+                        Return False
+                    End If
+
+                    If fldgear.ContainsKey(i) Then
+                        WorkerMsg(tMsgID.Err, "Multiple .vfld files are assigned to gear " & i & "!", MsgSrc, "<GUI>" & GEN.PathENG)
+                        Return False
+                    End If
+
+                    fldgear.Add(i, ENG.PathFLD(j))
+
+                Next
+
+            Next
         Catch ex As Exception
-            WorkerMsg(tMsgID.Err, "File read error! (" & ENG.PathFLD & ")", MsgSrc, ENG.PathFLD)
+            WorkerMsg(tMsgID.Err, "Failed to process engine file '" & GEN.PathENG & "'!", MsgSrc)
             Return False
         End Try
 
-        'Normalize
-        FLD.Norm()
+       
+
+
+        For i = 0 To VEH.ganganz
+
+            If Not fldgear.ContainsKey(i) Then
+                WorkerMsg(tMsgID.Err, "No .vfld file assigned to gear " & i & "!", MsgSrc, "<GUI>" & GEN.PathENG)
+                Return False
+            End If
+
+            FLD.Add(New cFLD)
+            FLD(i).FilePath = fldgear(i)
+
+            Try
+                If Not FLD(i).ReadFile Then Return False 'Fehlermeldung hier nicht notwendig weil schon von in ReadFile
+            Catch ex As Exception
+                WorkerMsg(tMsgID.Err, "File read error! (" & fldgear(i) & ")", MsgSrc, fldgear(i))
+                Return False
+            End Try
+
+            'Normalize
+            FLD(i).Norm()
+
+
+        Next
+
+     
 
         '-----------------------------    ~MAP~    -----------------------------
         '    Map: Columns 1 and 2 are the x-and y-coordinates (Pe, n)
diff --git a/VECTO/M_MAIN.vb b/VECTO/M_MAIN.vb
index cb737b7ee38eb48aea90844114114b10fc1be9a1..0fa3bf519e7370cca4f7e616bcbbf4ce1c47f8d2 100644
--- a/VECTO/M_MAIN.vb
+++ b/VECTO/M_MAIN.vb
@@ -394,44 +394,9 @@ lbADV:
 
                         If GEN.ModeHorEV Then
 
-                            If GEN.VehMode = tVehMode.EV Then
-
-                                If MsgOut Then WorkerMsg(tMsgID.Normal, "EV Init", MsgSrc)
-
-                                If Not MODdata.Px.EVinit Then
-                                    WorkerMsg(tMsgID.Err, "ERROR in BAT-Init!", MsgSrc)
-                                    JobAbortedByErr = True
-                                    GoTo lbNextJob
-                                End If
-
-                                If MsgOut Then WorkerMsg(tMsgID.Normal, "EV Calc", MsgSrc)
-
-                                '!!!!!!!! EV disabled !!!!!!!!!
-                                'If Not MODdata.Px.EV_Calc() Then
-                                CyclAbrtedByErr = True
-                                GoTo lbAusg
-                                'End If
-
-                            Else
-
-                                If MsgOut Then WorkerMsg(tMsgID.Normal, "HEV Init", MsgSrc)
-
-                                If Not MODdata.Px.HEVinit Then
-                                    'TODO: notification...
-                                    WorkerMsg(tMsgID.Err, "ERROR in HEV Init!", MsgSrc)
-                                    JobAbortedByErr = True
-                                    GoTo lbNextJob
-                                End If
-
-                                If MsgOut Then WorkerMsg(tMsgID.Normal, "HEV Calc", MsgSrc)
-
-                                '!!!!!!!! HEV disabled !!!!!!!!!
-                                'If Not MODdata.Px.HEV_Calc() Then
-                                CyclAbrtedByErr = True
-                                GoTo lbAusg
-                                'End If
-
-                            End If
+                            WorkerMsg(tMsgID.Err, "(H)EV mode is not available!", MsgSrc)
+                            JobAbortedByErr = True
+                            GoTo lbNextJob
 
                         Else
 
diff --git a/VECTO/VECTO.vbproj b/VECTO/VECTO.vbproj
index 571a9d3d4f6fd1201a44feb78a78bf4a0a230345..164741902b4e061e00b0b680de4e528bbde2d8cd 100644
--- a/VECTO/VECTO.vbproj
+++ b/VECTO/VECTO.vbproj
@@ -109,6 +109,12 @@
     <Compile Include="ADVANCE\cADV.vb" />
     <Compile Include="cVECTO.vb" />
     <Compile Include="cVSUM.vb" />
+    <Compile Include="GUI\F_FLD.Designer.vb">
+      <DependentUpon>F_FLD.vb</DependentUpon>
+    </Compile>
+    <Compile Include="GUI\F_FLD.vb">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Include="GUI\F_Welcome.Designer.vb">
       <DependentUpon>F_Welcome.vb</DependentUpon>
     </Compile>
@@ -284,6 +290,9 @@
     <EmbeddedResource Include="File Browser\FB_FavDlog.resx">
       <DependentUpon>FB_FavDlog.vb</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="GUI\F_FLD.resx">
+      <DependentUpon>F_FLD.vb</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="GUI\F_Welcome.resx">
       <DependentUpon>F_Welcome.vb</DependentUpon>
     </EmbeddedResource>
diff --git a/VECTO/VECTO_Global.vb b/VECTO/VECTO_Global.vb
index 3ad6ed35941d580878b483fec0657fbcf221d190..fac311609bdb24166e64c3d8b405f00369b18698 100644
--- a/VECTO/VECTO_Global.vb
+++ b/VECTO/VECTO_Global.vb
@@ -33,7 +33,7 @@ Module VECTO_Global
     Public VEH As cVEH
     Public MAP As cMAP
     Public DRI As cDRI
-    Public FLD As cFLD
+    Public FLD As List(Of cFLD)
     Public MODdata As cMOD
     Public TRS As cTRS
     Public EXS As cEXS
diff --git a/VECTO/cDEV.vb b/VECTO/cDEV.vb
index 035d0cee1a1559581af1e5928dc38417604c76df..3614b4e28f2ad6e954d3b954b85cf75239adff12 100644
--- a/VECTO/cDEV.vb
+++ b/VECTO/cDEV.vb
@@ -17,6 +17,8 @@ Public Class cDEV
     Public PreRun As Boolean
     Public negFCerr As Single
 
+    Public AllowAprxTrLoss As Boolean
+
 
 
     '**************************************************************************************************************
@@ -154,6 +156,10 @@ Public Class cDEV
         Conf0.SingleVal = -0.000001
         MyOptions.Add("negFCerr", Conf0)
 
+        Conf0 = New cDEVoption(tDEVconfType.tBoolean, "Allow approximate transmission loss calculation in Cycle Preprocessing and Gear Shift Model", False)
+        Conf0.BoolVal = True
+        MyOptions.Add("AllowAprxTrLoss", Conf0)
+
 
         '**************************** END: Parameters Configuration '*****************************
         '*****************************************************************************************
@@ -176,6 +182,7 @@ Public Class cDEV
 
         negFCerr = MyOptions("negFCerr").SingleVal
 
+        AllowAprxTrLoss = MyOptions("AllowAprxTrLoss").BoolVal
 
     End Sub