| API changes - 1.26 | 
 RAYLASE.SPICE3.ClientLib.dll
RAYLASE.SPICE3.ClientLib.dll+	public void AppendZoomAbs( double target, bool async )
+	public void AppendZoomRel( double target, bool async )
+	public void AppendZoomSpeed( double speed )
 RAYLASE.SPICE3.dll
RAYLASE.SPICE3.dll+	ZOOM_ABS
+	ZOOM_REL
+	ZOOM_SPEED
+	SPZA
+	SPZR
+	ZS
-	public static void ConvertOldHeader( string filePath )
-	CorrectionFile( )
+	CorrectionFile( )
-	public BinaryReader CorrectionStream { get; }
+	public BinaryReader CorrectionTable( int table )
-	public static CorrectionFile Create( string filePath, OpticalParameters header, Stream correction )
+	public static CorrectionFile Create( string filePath, OpticalParameters header, Stream correction, bool compressPayload = true )
-	public void PayloadToStream( Stream stream )
+	public void PayloadToStream( Stream stream, int table = 0 )
+	public bool SupportsMultipleTables { get; }
+	public int TableCount { get; }
+	public ScanHeadFormat HeadFormat { get; set; }
+	public double MaxZoom { get; set; }
+	public LAYERS MLayers { get; set; }
-	public Point3D[] Actual { get; }
+	public Point3D[] Actual { get; set; }
+	public Double[] ActualZoom { get; set; }
-	public Point3D[] Head { get; }
+	public Point3D[] Head { get; set; }
-	public Point3D Laser { get; }
+	public Point3D Laser { get; set; }
-	public Point3D Motf { get; }
+	public Point3D Motf { get; set; }
-	public Point3D NominalAfterTransformation { get; }
+	public Point3D NominalAfterTransformation { get; set; }
-	public Point3D NominalBeforeTransformation { get; }
+	public Point3D NominalBeforeTransformation { get; set; }
+	public double NominalZoom { get; set; }
-	public Positions( Point3D nominalBeforeTransform, Point3D nominal, Point3D laser, Point3D user, Point3D motf, Point3D[] actual, Point3D[] head )
+	public Positions( )
-	public Point3D User { get; }
+	public Point3D User { get; set; }
+	public double ZoomSpeed { get; set; }
-	public Point3D AccelerationTime { get; set; }
+	public Double[] AccelerationTime { get; set; }
-	public XForm FieldTransform { get; set; }
+	public Transform3D FieldTransform { get; set; }
-	public Point3D HeadBias { get; set; }
+	public Double[] HeadBias { get; set; }
-	public Point3D TrackingError { get; set; }
+	public Double[] TrackingError { get; set; }
+	RL3_Dual3D
+	RL3_Single3D
+	RL3_Single3DX
+	RL3_Single4D
+	RL3_Single4DX
+	SL2_Single3DX
+	SL2_Single4DX
-	public double FieldSizeX { get; set; }
-	public double FieldSizeY { get; set; }
-	public double FieldSizeZ { get; set; }
+	public static int GetAxisCount( ScanHeadFormat headFormat )
+	public static int GetDimensions( ScanHeadFormat headFormat )
+	public static int GetHeadCount( ScanHeadFormat headFormat )
+	public static bool IsExtended( ScanHeadFormat headFormat )
+	public double MaxZoom { get; set; }
-	public ScannerConfig( )
+	public ScannerConfig( )
 RAYLASE.SPICE3.Utils.dll
RAYLASE.SPICE3.Utils.dll+	public Point2D XY { get; set; }
+	static .cctor( )
+	public bool Equals( Point4D rhs )
+	public virtual int GetHashCode( )
+	public double Item { get; set; }
+	public double M { get; set; }
+	public static Point4D op_Addition( Point4D lhs, Point4D rhs )
+	public static Point4D op_Addition( Point4D lhs, double rhs )
+	public static Point4D op_Addition( double lhs, Point4D rhs )
+	public static Point4D op_Division( Point4D lhs, double rhs )
+	public static Point4D op_Multiply( Point4D lhs, double rhs )
+	public static Point4D op_Multiply( double lhs, Point4D rhs )
+	public static Point4D op_Subtraction( double lhs, Point4D rhs )
+	public static Point4D op_Subtraction( Point4D lhs, Point4D rhs )
+	public static Point4D op_Subtraction( Point4D lhs, double rhs )
+	public Point4D( double x, double y, double z, double m )
+	public Point4D( Point4D other )
+	public Point4D( Point3D point )
+	public Point4D( Point2D point )
+	public static string ToAxisString( int index )
+	public string ToString( int decimalPlaces )
+	public virtual string ToString( )
+	public double X { get; set; }
+	public Point2D XY { get; set; }
+	public Point3D XYZ { get; set; }
+	public double Y { get; set; }
+	public double Z { get; set; }
+	public static Point4D Zero
+	static .cctor( )
+	public virtual bool Equals( object obj )
+	public bool Equals( Point4DInt rhs )
+	public virtual int GetHashCode( )
+	public int Item { get; set; }
+	public int M { get; set; }
+	public static Point4DInt op_Addition( int lhs, Point4DInt rhs )
+	public static Point4DInt op_Addition( Point4DInt lhs, int rhs )
+	public static Point4DInt op_Addition( Point4DInt lhs, Point4DInt rhs )
+	public static Point4DInt op_Decrement( Point4DInt lhs )
+	public static bool op_Equality( Point4DInt lhs, Point4DInt rhs )
+	public static Point4DInt op_Increment( Point4DInt lhs )
+	public static bool op_Inequality( Point4DInt lhs, Point4DInt rhs )
+	public static Point4D op_Multiply( double lhs, Point4DInt rhs )
+	public static Point4DInt op_Multiply( Point4DInt lhs, int rhs )
+	public static Point4DInt op_Multiply( int lhs, Point4DInt rhs )
+	public static Point4D op_Multiply( Point4DInt lhs, double rhs )
+	public static Point4DInt op_Subtraction( Point4DInt lhs, Point4DInt rhs )
+	public static Point4DInt op_Subtraction( Point4DInt lhs, int rhs )
+	public static Point4DInt op_Subtraction( int lhs, Point4DInt rhs )
+	public Point4DInt( int x, int y, int z, int m )
+	public static string ToAxisString( int index )
+	public virtual string ToString( )
+	public int X { get; set; }
+	public Point3DInt XYZ { get; set; }
+	public int Y { get; set; }
+	public int Z { get; set; }
+	public static Point4DInt Zero
+	public virtual bool CanRead { get; }
+	public virtual bool CanSeek { get; }
+	public virtual bool CanWrite { get; }
+	protected virtual void Dispose( bool disposing )
+	public virtual void Flush( )
+	public virtual long Length { get; }
+	public virtual long Position { get; set; }
+	public virtual int Read( Byte[] buffer, int offset, int count )
+	public virtual long Seek( long offset, SeekOrigin origin )
+	public virtual void SetLength( long value )
+	public SubStream( Stream baseStream, long offset, long length, bool leaveOpen = false )
+	public SubStream( Stream baseStream, bool leaveOpen = false )
+	public virtual void Write( Byte[] buffer, int offset, int count )