public void reload(DatasetConfigTreeNode editingNode, DatasetConfigTreeNode parentNode) {
    int start, finish;
    String parentClassName = (parentNode.getUserObject().getClass()).getName();
    String childClassName = (editingNode.getUserObject().getClass()).getName();
    start = childClassName.lastIndexOf(".") + 1;
    finish = childClassName.length();
    String childName = childClassName.substring(start, finish);
    if (parentClassName.equals("org.ensembl.mart.lib.config.DatasetConfig")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.FilterPage")) {
        config = (DatasetConfig) parentNode.getUserObject();
        config.addFilterPage((FilterPage) editingNode.getUserObject());
        // config.removeAttributePage();

      } else if (childClassName.equals("org.ensembl.mart.lib.config.AttributePage")) {
        config = (DatasetConfig) parentNode.getUserObject();
        config.addAttributePage((AttributePage) editingNode.getUserObject());

      } else if (childClassName.equals("org.ensembl.mart.lib.config.Importable")) {
        config = (DatasetConfig) parentNode.getUserObject();
        config.addImportable((Importable) editingNode.getUserObject());

      } else if (childClassName.equals("org.ensembl.mart.lib.config.Exportable")) {
        config = (DatasetConfig) parentNode.getUserObject();
        config.addExportable((Exportable) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.FilterPage")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.FilterGroup")) {
        FilterPage fp = (FilterPage) parentNode.getUserObject();
        fp.addFilterGroup((FilterGroup) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.FilterGroup")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.FilterCollection")) {
        FilterGroup fg = (FilterGroup) parentNode.getUserObject();
        fg.addFilterCollection((FilterCollection) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.FilterCollection")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.FilterDescription")) {
        FilterCollection fc = (FilterCollection) parentNode.getUserObject();
        fc.addFilterDescription((FilterDescription) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.FilterDescription")) {

      if (childClassName.equals("org.ensembl.mart.lib.config.Option")) {
        FilterDescription fd = (FilterDescription) parentNode.getUserObject();
        fd.addOption((Option) editingNode.getUserObject());

      } else if (childClassName.equals("org.ensembl.mart.lib.config.SpecificFilterContent")) {
        FilterDescription ad = (FilterDescription) parentNode.getUserObject();
        ad.addSpecificFilterContent((SpecificFilterContent) editingNode.getUserObject());
      }

    } else if (parentClassName.equals("org.ensembl.mart.lib.config.Option")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.SpecificOptionContent")) {
        Option ad = (Option) parentNode.getUserObject();
        ad.addSpecificOptionContent((SpecificOptionContent) editingNode.getUserObject());
      } else if (childClassName.equals("org.ensembl.mart.lib.config.PushAction")) {
        Option op = (Option) parentNode.getUserObject();
        op.addPushAction((PushAction) editingNode.getUserObject());
      } else if (childClassName.equals("org.ensembl.mart.lib.config.Option")) {
        Option op = (Option) parentNode.getUserObject();
        op.addOption((Option) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.PushAction")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.Option")) {
        PushAction pa = (PushAction) parentNode.getUserObject();
        pa.addOption((Option) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.AttributePage")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.AttributeGroup")) {
        AttributePage ap = (AttributePage) parentNode.getUserObject();
        ap.addAttributeGroup((AttributeGroup) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.AttributeGroup")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.AttributeCollection")) {
        AttributeGroup ag = (AttributeGroup) parentNode.getUserObject();
        ag.addAttributeCollection((AttributeCollection) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.AttributeCollection")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.AttributeDescription")) {
        AttributeCollection ac = (AttributeCollection) parentNode.getUserObject();
        ac.addAttributeDescription((AttributeDescription) editingNode.getUserObject());
      } else if (childClassName.equals("org.ensembl.mart.lib.config.AttributeList")) {
        AttributeCollection ac = (AttributeCollection) parentNode.getUserObject();
        ac.addAttributeList((AttributeList) editingNode.getUserObject());
      }
    } else if (parentClassName.equals("org.ensembl.mart.lib.config.AttributeDescription")) {

      if (childClassName.equals("org.ensembl.mart.lib.config.SpecificAttributeContent")) {
        AttributeDescription ad = (AttributeDescription) parentNode.getUserObject();
        ad.addSpecificAttributeContent((SpecificAttributeContent) editingNode.getUserObject());
      }

    } else if (parentClassName.equals("org.ensembl.mart.lib.config.SpecificFilterContent")) {
      if (childClassName.equals("org.ensembl.mart.lib.config.Option")) {
        SpecificFilterContent fd = (SpecificFilterContent) parentNode.getUserObject();
        System.out.println(
            "TREE MODEL -- ADDING DYN OPTION "
                + ((Option) editingNode.getUserObject()).getInternalName());
        fd.addOption((Option) editingNode.getUserObject());
      }
    }

    super.reload(parentNode);
  }