diff --git a/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb b/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb
index f61e73e5046e57699e539f66689e0a22062626b8..659f8f7d171f9310d4f017c4edadd465055635c5 100644
--- a/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb
+++ b/VECTOAux/VectoAuxiliaries/Electrics/Alternator.vb
@@ -50,6 +50,11 @@ Public Class Alternator
                'TODO: Calculate Efficiency
                'Calculate ( Interpolate ) Efficiency
 
+               Dim range as List(Of AltUserInput) = RangeTable.Select( Function(s) New AltUserInput(s.RPM,s.Efficiency)).ToList()
+
+               Dim v As Single =  Alternator.Iterpolate( range, SpindleSpeed)
+
+               Return v
 
             End Get
 
@@ -87,18 +92,18 @@ Public Class Alternator
 
 
      CreateRangeTable()
-     InitialiseRangeTable()
+     'InitialiseRangeTable()
 
 
  End Sub
 
- Private Function Iterpolate( values As List(Of AltUserInput), x As single) As Single
+
+ Public  shared Function Iterpolate( values As List(Of AltUserInput), x As single) As Single
 
     Dim lowestX As single = values.Min( Function(m) m.Amps)
     Dim highestX As Single = values.Max( Function(m) m.Amps)
-    Dim lastX, nextX ,lastEff,NextEff As single
-    Dim deltaX As single 
-    Dim slope As single
+    Dim preKey, postKey ,preEff,postEff, EffSlope As single
+    Dim deltaX , deltaEff As single 
 
     'Out of range, returns efficiency for lowest
     If x< lowestX then Return values.First( Function(f) f.Amps= lowestX).Eff
@@ -111,26 +116,96 @@ Public Class Alternator
 
 
     'OK, we need to interpolate.
-    lastX   = values.Last(  Function(l)  l.Amps < x).Amps
-    nextX   = values.First( Function(l)  l.Amps > x).Amps
-    lastEff = values.First( Function(f)  f.Amps=lastX).Eff
-    nextEff = values.First( Function(f)  f.Amps=nextX).Eff
+    preKey   = values.Last(  Function(l)  l.Amps < x).Amps
+    postKey   = values.First( Function(l)  l.Amps > x).Amps
+    preEff = values.First( Function(f)  f.Amps=preKey).Eff
+    postEff = values.First( Function(f)  f.Amps=postKey).Eff
 
 
-    deltaX = nextX-lastX
-    slope  = NextEff/lastEff
+    deltaX = postKey-preKey
+    deltaEff  = postEff-preEff
 
-    Return lastEff + ( NextEff * slope)
+    'slopes
+    effSlope = deltaEff/deltaX
 
 
+    Dim retVal As Single =   ((x - preKey) * effSlope) + preEff
+
+    Return retVal
+
 
  End Function
 
 
  Private Sub CalculateRangeTable()
 
- 'TODO: CALCULATE RANGE TABLE
-
+    'M10=Row0-Rpm - N10=Row0-Eff
+    'M11=Row1-Rpm - N11=Row1-Eff
+    'M12=Row2-Rpm - N12=Row2-Eff - 2000
+    'M13=Row3-Rpm - N13=Row3-Eff - 4000
+    'M14=Row4-Rpm - N14=Row4-Eff - 6000
+    'M15=Row5-Rpm - N15=Row5-Eff
+    'M16=Row6-Rpm - N16=Row6-Eff
+
+     Dim N10,N11,N12,N13,N14,N15,N16 As single
+     Dim M10,M11,M12,M13,M14,M15,M16 As single
+
+     'EFFICIENCY
+  
+    '2000
+     N12= Alternator.Iterpolate(InputTable2000,signals.CurrentDemandAmps)
+     RangeTable(2).Efficiency= N12
+    '4000
+     N13 = Alternator.Iterpolate(InputTable4000,signals.CurrentDemandAmps)
+     RangeTable(3).Efficiency= N13
+    '6000
+     N14 =Alternator.Iterpolate(InputTable6000,signals.CurrentDemandAmps)
+     RangeTable(4).Efficiency= N14
+
+    'Row0 & Row1 Efficiency  =IF(N13>N12,0,MAX(N12:N14)) - Example Alt 1 N13=
+     N11=IF(N13>N12,0,Math.Max(Math.MAX(N12,N13),N14))
+     RangeTable(1).Efficiency = N11
+     N10=N11
+     RangeTable(0).Efficiency = N10
+
+
+    'Row 5 Efficiency
+     N15 =IF(N13>N14,0,Math.Max(Math.MAX(N12,N13),N14))
+     RangeTable(5).Efficiency = N15
+    'Row 6 - Efficiency
+     N16 = N15
+     RangeTable(6).Efficiency = N16
+
+     'RPM
+
+     '2000 Row 2 - RPM
+      M12 =  2000
+      RangeTable(2).RPM = M12
+
+     '4000 Row 3 - RPM
+      M13 = 4000
+      RangeTable(3).RPM =  M13
+
+     '6000 Row 4 - RPM
+      M14 = 6000
+      RangeTable(4).RPM =  M14
+
+      'Row 1 - RPM
+      M11 = IF(M12=IF(N12>N13,M12-((M12-M13)/(N12-N13))*(N12-N11),M12-((M12-M13)/(N12-N13))*(N12-N11)), M12-0.01, IF(N12>N13,M12-((M12-M13)/(N12-N13))*(N12-N11),M12-((M12-M13)/(N12-N13))*(N12-N11)))
+      RangeTable(1).RPM =M11
+
+      'Row 0 - RPM
+      M10 = IF(M11<1500,M11-1,1500)
+      RangeTable(0).RPM  = M10
+
+      'Row 5 - RPM
+      M15 = IF(M14=IF((N14=0 OrElse N14=N13),M14+1,IF(N13>N14,((((M14-M13)/(N13-N14))*N14)+M14),((((M14-M13)/(N13-N14))*(N14-N15))+M14))),M14+0.01,IF((N14=0 OrElse N14=N13),M14+1,IF(N13>N14,((((M14-M13)/(N13-N14))*N14)+M14),((((M14-M13)/(N13-N14))*(N14-N15))+M14))))
+      RangeTable(5).RPM = M15
+
+
+      'Row 6 - RPM
+      M16 =  IF(M15>10000,M15+1,10000)
+      RangeTable(6).RPM =  M16
 
  End Sub
 
diff --git a/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb b/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb
index e50265364d65ef19ed844eb14299901e12d52ac3..ad9f38efc5cdc156989b41496d1b76d09c521981 100644
--- a/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb
+++ b/VECTOAux/VectoAuxiliaries/Electrics/CombinedAlternator.vb
@@ -29,7 +29,16 @@ Public Class CombinedAlternator
  Public Function GetEfficiency( CrankRPM As Single , AmpsDemand  As Single ) As Single
 
     altSignals.CrankRPM = CrankRPM
-    altSignals.CurrentDemandAmps = AmpsDemand
+    altSignals.CurrentDemandAmps = AmpsDemand / Alternators.Count
+
+    Dim Alt0Eff As Single = Alternators(0).Efficiency
+              
+    Dim Alt1Eff As Single = Alternators(1).Efficiency
+              
+    Dim Alt2Eff As Single  = Alternators(2).Efficiency
+             
+    Dim Alt3Eff As Single = Alternators(3).Efficiency
+
 
     Return  Alternators.Average( Function(a) a.Efficiency)
 
@@ -47,7 +56,7 @@ Public Class CombinedAlternator
       End If
 
 
-      Me.altSignals= altSignals
+      Me.altSignals= New CombinedAlternatorSignals()
 
 
       'IF file exists then read it otherwise create a default.
diff --git a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
index 6e61b5900e44cffdad3bbd40295cee4e991d65c1..9ae6c54f890d4571b183cc5fe6e6abfc06557fb7 100644
--- a/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
+++ b/VECTOAux/VectoAuxiliaries/VectoAuxiliaries.vbproj
@@ -125,7 +125,6 @@
     <Compile Include="Electrics\IM2_AverageElectricalLoadDemand.vb" />
     <Compile Include="Electrics\IM5_SmartAlternatorSetGeneration.vb" />
     <Compile Include="Electrics\IncDecValuePair.vb" />
-    <Compile Include="Electrics\InterpAltUserInputs.vb" />
     <Compile Include="Electrics\IResultCard.vb" />
     <Compile Include="Electrics\M0_5_SmartAlternatorSetEfficiency.vb" />
     <Compile Include="Electrics\M0_NonSmart_AlternatorsSetEfficiency.vb" />
diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb
index 70987a93c9ab5763437b25e59b76772ccf180654..6a4a1bfc5acddc0411fc54d29e57e7b1c7d823b4 100644
--- a/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb
+++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/CombinedAlternatorTests.vb
@@ -168,11 +168,11 @@ Namespace UnitTests
        Select Case rpmK
           
          Case 2
-              interpValue= InterpAltUserInputs.Iterpolate( Alt1ExpectedTable2000,42.5)
+              interpValue= Alternator.Iterpolate( Alt1ExpectedTable2000,42.5)
          Case 4
-              interpValue= InterpAltUserInputs.Iterpolate( Alt1ExpectedTable4000,42.5)
+              interpValue= Alternator.Iterpolate( Alt1ExpectedTable4000,42.5)
          Case 6
-              interpValue= InterpAltUserInputs.Iterpolate( Alt1ExpectedTable6000,42.5)
+              interpValue= Alternator.Iterpolate( Alt1ExpectedTable6000,42.5)
 
        End Select
 
@@ -182,11 +182,11 @@ Namespace UnitTests
        Select Case rpmK
           
          Case 2
-              interpValue= InterpAltUserInputs.Iterpolate( Alt2ExpectedTable2000,42.5)
+              interpValue= Alternator.Iterpolate( Alt2ExpectedTable2000,42.5)
          Case 4                                               
-              interpValue= InterpAltUserInputs.Iterpolate( Alt2ExpectedTable4000,42.5)
+              interpValue= Alternator.Iterpolate( Alt2ExpectedTable4000,42.5)
          Case 6                                               
-              interpValue= InterpAltUserInputs.Iterpolate( Alt2ExpectedTable6000,42.5)
+              interpValue= Alternator.Iterpolate( Alt2ExpectedTable6000,42.5)
 
        End Select
 
@@ -195,11 +195,11 @@ Namespace UnitTests
        Select Case rpmK
           
          Case 2
-              interpValue= InterpAltUserInputs.Iterpolate( Alt3ExpectedTable2000,42.5)
+              interpValue= Alternator.Iterpolate( Alt3ExpectedTable2000,42.5)
          Case 4                                               
-              interpValue= InterpAltUserInputs.Iterpolate( Alt3ExpectedTable4000,42.5)
+              interpValue= Alternator.Iterpolate( Alt3ExpectedTable4000,42.5)
          Case 6                                               
-              interpValue= InterpAltUserInputs.Iterpolate( Alt3ExpectedTable6000,42.5)
+              interpValue= Alternator.Iterpolate( Alt3ExpectedTable6000,42.5)
 
        End Select
 
@@ -208,11 +208,11 @@ Namespace UnitTests
        Select Case rpmK
           
          Case 2
-              interpValue= InterpAltUserInputs.Iterpolate( Alt4ExpectedTable2000,42.5)
+              interpValue= Alternator.Iterpolate( Alt4ExpectedTable2000,42.5)
          Case 4                                               
-              interpValue= InterpAltUserInputs.Iterpolate( Alt4ExpectedTable4000,42.5)
+              interpValue= Alternator.Iterpolate( Alt4ExpectedTable4000,42.5)
          Case 6                                               
-              interpValue= InterpAltUserInputs.Iterpolate( Alt4ExpectedTable6000,42.5)
+              interpValue= Alternator.Iterpolate( Alt4ExpectedTable6000,42.5)
 
        End Select
 
@@ -385,6 +385,21 @@ Namespace UnitTests
   End Sub
 
 
+   <Test()>
+  Public Sub AveragedEfficiency( )
+
+
+ '  Dim signals As ICombinedAlternatorSignals = New CombinedAlternatorSignals() With {.CrankRPM=1750, .CurrentDemandAmps=170}
+
+   Dim ca As new CombinedAlternator("abc.aalt", New CombinedAlternatorSignals() )
+
+   Dim actual As Single = ca.GetEfficiency(1750,170)
+
+   Assert.AreEqual(56.015625,actual)
+
+
+  End Sub
+
 
  End Class