anchor.diff:    _Header.OffBits := sizeof( _Header ) + GetPaletteSize;           // TODO: Graeme, double check this!
   
     // Load palette
  -  _pPalette := GetMem( GetPaletteSize );
  -  bytes := FileHandle.Read(_pPalette, GetPaletteSize);
  -  if bytes <> GetPaletteSize then
  -    raise EHelpBitmapException.Create( 'Failed to read Palette.' );
  +  if _Header.cBitCount <= 8 then
  +  begin
  +    _pPalette := GetMem( GetPaletteSize );
  +    bytes := FileHandle.Read(_pPalette, GetPaletteSize);
  +    if bytes <> GetPaletteSize then
  +      raise EHelpBitmapException.Create( 'Failed to read Palette.' );
  +  end;
   
     // Read data header
  +  FillChar( DataHeader, sizeof( DataHeader ), 0 );
     bytes := FileHandle.Read(DataHeader, SizeOf(DataHeader));
  -  if bytes <> GetPaletteSize then
  +  if bytes <> SizeOf(DataHeader) then
       raise EHelpBitmapException.Create( 'Failed to read DataHeader.' );
     _UncompressedBlockSize := DataHeader.usUncompressedBlockSize;
   
  
positive.code:   inherited Destroy;
  end;
  
  constructor THelpBitmap.CreateFromHelpFile(AFileHandle: TFileStream; Offset: longint);
  var
    WordsPerLine: longint;
    LineSize: longint;
  
negative.code:   BitmapArrayHeader: INFBITMAPARRAYHEADER;
    bytes: integer;
  begin
    inherited Create;
    FileHandle := AFileHandle;
  
    FileHandle.Seek(Offset, soBeginning);
  