anchor.diff:       IWBSRegion, IWBSInput, IWBSButton, IWBSControls;
   
   type
  +  TIWBSDialogCloseButton = (iwbsdcNone, iwbsdcCaption, iwbsdcFooter, iwbsdcBoth);
  +
     TIWBSDialog = class(TIWBSModal)
     private
       FContent: TIWBSRegion;
  -    FTitle: TIWBSRegion;
       FHeader: TIWBSRegion;
       FBody: TIWBSRegion;
       FFooter: TIWBSRegion;
   
  -    FTitleText: string;
  -    FHeaderText: string;
  -    FBodyText: string;
  -    FFooterText: string;
  -    FCloseButton: boolean;
  +    FBodyControl: TIWBSText;
  +    FTitleControl: TIWBSLabel;
  +
  +    procedure SetBodyText(const Value: string);
  +    function GetBodyText: string;
  +    procedure SetTitleText(const Value: string);
  +    function GetTitleText: string;
     public
  -    constructor Create(AForm: TIWForm; const AHeaderText, ABodyText: string); reintroduce; overload;
  -    constructor Create(const AHeaderText, ABodyText: string); reintroduce; overload;
  -
  -    procedure Show;
  -    function AddButton(AParent: TIWBSRegion; const ACaption: string; AAsyncClickProc: TIWBSAsyncClickProc): TIWBSButton;
  -
  -    function GetTitle: TIWBSRegion;
  +    constructor Create(AForm: TIWForm; const ATitleText, ABodyText: string; ACloseButton: TIWBSDialogCloseButton = iwbsdcBoth); reintroduce; overload;
  +    constructor Create(const ATitleText, ABodyText: string; ACloseButton: TIWBSDialogCloseButton = iwbsdcBoth); reintroduce; overload;
  +
  +    function AddButton(AParent: TIWBSRegion; const ACaption: string; AAsyncClickProc: TIWBSAsyncClickProc = nil): TIWBSButton;
  +
       function GetHeader: TIWBSRegion;
       function GetBody: TIWBSRegion;
       function GetFooter: TIWBSRegion;
   
  -    property TitleText: string read FTitleText write FTitleText;
  -    property HeaderText: string read FHeaderText write FHeaderText;
  -    property BodyText: string read FBodyText write FBodyText;
  -    property FooterText: string read FFooterText write FFooterText;
  -
  -    property CloseButton: boolean read FCloseButton write FCloseButton;
  +    function GetBodyControl: TIWBSText;
  +    function GetTitleControl: TIWBSLabel;
  +
  +    property BodyText: string read GetBodyText write SetBodyText;
  +    property TitleText: string read GetTitleText write SetTitleText;
     end;
   
     TIWBSAlertStyle = (bsasSuccess, bsasInfo, bsasWarning, bsasDanger);
  
positive.code:   FContent.BSRegionType := bsrtModalContent;
    FContent.Parent := Self;
  
    FHeaderText := AHeaderText;
    FBodyText := ABodyText;
    FCloseButton := True;
  end;
  
  constructor TIWBSDialog.Create(const AHeaderText, ABodyText: string);
  begin
    Create(TIWForm(GGetWebApplicationThreadVar.ActiveForm), AHeaderText, ABodyText);
  end;
  
  function TIWBSDialog.GetTitle: TIWBSRegion;
  begin
    if FTitle = nil then begin
      FTitle := TIWBSRegion.Create(Owner);
      FTitle.Parent := FContent;
      FTitle.BSRegionType := bsrtModalTitle;
      FTitle.Top := 0;
    end;
    Result := FTitle;
  end;
  
  function TIWBSDialog.GetHeader: TIWBSRegion;
  
negative.code:   Result := FFooter;
  end;
  
  procedure TIWBSDialog.SetBodyText(const Value: string);
  begin
    if Value <> '' then
      GetBodyControl.Lines.Text := Value;
  end;
  
  procedure TIWBSDialog.SetTitleText(const Value: string);
  begin
    if Value <> '' then
      GetTitleControl.Caption := Value;
  end;
  
  function TIWBSDialog.AddButton(AParent: TIWBSRegion; const ACaption: string; AAsyncClickProc: TIWBSAsyncClickProc = nil): TIWBSButton;
  begin
    Result := TIWBSButton.Create(Owner);
    Result.Parent := AParent;
    Result.Caption := ACaption;
    Result.AsyncClickProc := AAsyncClickProc;
  end;
  {$endregion}
  