GatewayHook: public static final ConfigCategory CONFIG_CATEGORY_MAIN = new ConfigCategory("3rd Party Historian", "MainConfigPage.nav.header", 700); public static final IConfigTab CONFIG_ENTRY_MAIN = DefaultConfigTab.builder() .category(CONFIG_CATEGORY_MAIN ) .name("3rd Party Historian Main") .i18n("CanaryHistorianMainConfigPage.nav.settings.title") .page(CanaryHistorianMainConfigPage.class) .terms("3rd Party Historian Settings") .build(); @Override public boolean isFreeModule() { return true; } @Override public List getConfigCategories() { List _cats = new ArrayList(); _cats.add(CONFIG_CATEGORY_MAIN ); _cats.add(MainConfigPage.CONFIG_CATEGORY); return _cats; } @Override public List getConfigPanels() { return (List) Arrays.asList( CONFIG_ENTRY_MAIN ); } MainConfigPage class : public class MainConfigPage extends TabbedConfigPanel { public static final ConfigCategory CONFIG_CATEGORY = new ConfigCategory("3rd Party Historian", "ConfigPage.nav.header", 700); public static final IConfigTab CONFIG_ENTRY = DefaultConfigTab.builder() .category(CONFIG_CATEGORY) .name("3rd Party Historian") .i18n("ConfigPage.nav.settings.title") .page(HistorianSettingsPage.class) .terms("3rd Party Historian Settings") .build(); public static final IConfigTab CONFIG_ENTRY_DSANDDR = DefaultConfigTab.builder() .category(CONFIG_CATEGORY) .name("Directories and Datasets") .i18n("ConfigPageDSAndDR.nav.settings.title") .page(SettingsPageDSAndDR.class) .terms("3rd Party Historian Settings") .build(); public MainConfigPage() { super(); } public MainConfigPage(String titleKey) { super(titleKey); addTab(CONFIG_ENTRY); addTab(CONFIG_ENTRY_DSANDDR); } @Override public Pair getMenuLocation() { return Pair.of("3rd Party Historian", "Settings"); } }