Good day.

Source code:
Code:
...
List<ColumnConfig<MerchantNotification, ?>> ccs = new LinkedList<ColumnConfig<MerchantNotification, ?>>();
        ColumnConfig<MerchantNotification, Site> cc1 = new ColumnConfig<MerchantNotification, Site>(properties.site(), 200, "Site");
        cc1.setCell(new AbstractCell<Site>() {
            @Override
            public void render(Context context, Site site, SafeHtmlBuilder safeHtmlBuilder) {
                safeHtmlBuilder.appendHtmlConstant(site == null ? "" : (site.getId() + " [" + Util.escapeHtml(site.getName()) + ']'));
            }
        });
        ccs.add(cc1);
        ColumnConfig<MerchantNotification, String> cc2 = new ColumnConfig<MerchantNotification, String>(properties.email(), 250, "Email");
        cc2.setCell(new AbstractCell<String>() {
            @Override
            public void render(Context context, String email, SafeHtmlBuilder safeHtmlBuilder) {
                safeHtmlBuilder.appendHtmlConstant(Util.escapeHtml(email));
            }
        });
        ccs.add(cc2);
        ColumnConfig<MerchantNotification, Boolean> cc3 = new ColumnConfig<MerchantNotification, Boolean>(properties.sendAuthorization(), 100, "Authorization");
        cc3.setCell(new BooleanCellRenderer(Util.icons.passed(), "Notify on each Authorize transaction"));
        ccs.add(cc3);
        cc3 = new ColumnConfig<MerchantNotification, Boolean>(properties.sendSale(), 100, "Sale");
        cc3.setCell(new BooleanCellRenderer(Util.icons.passed(), "Notify on each Sale transaction"));
        ccs.add(cc3);
        cc3 = new ColumnConfig<MerchantNotification, Boolean>(properties.sendSalesCompletion(), 100, "Sales Completion");
        cc3.setCell(new BooleanCellRenderer(Util.icons.passed(), "Notify on each Sales Completion transaction"));
        ccs.add(cc3);
        cc3 = new ColumnConfig<MerchantNotification, Boolean>(properties.sendRefund(), 100, "Refund");
        cc3.setCell(new BooleanCellRenderer(Util.icons.passed(), "Notify on each Refund transaction"));
        ccs.add(cc3);
        cc3 = new ColumnConfig<MerchantNotification, Boolean>(properties.sendVoid(), 100, "Void");
        cc3.setCell(new BooleanCellRenderer(Util.icons.passed(), "Notify on each Void transaction"));
        ccs.add(cc3);
        cc3 = new ColumnConfig<MerchantNotification, Boolean>(properties.sendChargeBack(), 100, "ChargeBack");
        cc3.setCell(new BooleanCellRenderer(Util.icons.passed(), "Notify on each ChargeBack transaction"));
        ccs.add(cc3);
        ColumnModel<MerchantNotification> cm = new ColumnModel<MerchantNotification>(ccs);
        cm.addHeaderGroup(0, 2, new HeaderGroupConfig("Event Types", 1, 6));
...
Result:
header-group-on.jpg

Without cm.addHeaderGroup(0, 2, new HeaderGroupConfig("Event Types", 1, 6)); :header-group-off.jpg