StringToColumnStates

I have and AdvGringGrid That Uses Grouping I want to save the Grid Information. This is what is happening. First time I open the form the grid is as I build it. I select and load data in to the grid and group it. close the form and reopen it and the columns are reduced by one select and display the data grouped the close the form and reopen and lose an other column this happens till I get and error "Strech column index out of Range"

Here is the code I use to save and restore the columnStates in the OnShow and OnClose events.
procedure TFrmTb2.WriteIniGrid(Inifile,SubKey,Key : String; Grid : TAdvStringGrid; val : String = '');
  var
    ConfigIni: TIniFile;
  begin
    ConfigIni := TIniFile.Create(Inifile);
    Try
      with ConfigIni do
        WriteString(SubKey,Key,Grid.ColumnStatesToString);
    Finally
      ConfigIni.Free;
    End;
  end;
procedure TFrmTb2.ReadIniGrid(Inifile,SubKey,Key : String; Var Grid : TAdvStringGrid);
  var
    ConfigIni : TIniFile;
    S         : String;
  begin
    ConfigIni := TIniFile.Create(Inifile);
    Try
      with ConfigIni do
        begin
          S := Trim(ReadString(UpperCase(SubKey),UpperCase(Key),''));
        end;
    Finally
      ConfigIni.Free;
    end;
    if s <> '' then
      Grid.StringToColumnStates(s);
  end;
How do I fix this?
Thanks in Advance
Donald S. Bossen