@Override
  public void insertTab(String title, Icon icon, Component component, String tip, int index) {
    TabComponent tabComp;

    if (component instanceof ExternalizablePanel) {
      final ExternalizablePanel panel = (ExternalizablePanel) component;
      tabComp = getTabComponent(panel);

      // not existing ?
      if (tabComp == null) {
        // create the associated tab component
        tabComp = new TabComponent(title, icon, panel, tip, index);
        // and save it in the list to keep a reference
        tabComponents.add(tabComp);
      }

      // externalized ?
      if (panel.isExternalized()) {
        // manually set parent and exit
        panel.setParent(this);
        return;
      }
    } else tabComp = null;

    super.insertTab(title, icon, component, tip, index);

    // use custom panel for externalizable panel
    if (tabComp != null) setTabComponentAt(index, tabComp);
  }
 @Override
 public void removeListener(Object source) {
   if (source != null) ((ExternalizablePanel) source).removeStateListener(this);
 }