public boolean updateHilight(TopoTreeNode node) {

    //		System.out.println("Begin update hilight");
    if (node != null) {

      if (node.hilighted) {
        // return false; 		// commented so as not to suppress highlight of same node; so user can
        // click node, click tag, then click same node
      }

      if (hilightedNode != null) {

        hilightedNode.hilighted = false;
      }
      hilightedNode = node;
      hilightedNode.hilighted = true;

      // add the new node to the selection

      m_ttable.promoteTagSilent(m_ttable.getListedTag());

      while (m_ttable.topTag().full_components.size() > 0) {

        TopoTreeNode n = null;
        for (TopoTreeNode k : m_ttable.topTag().full_components) {
          if (n == null) {
            n = k;
          } else if (n.num_points < k.num_points) {
            n = k;
          }
        }

        m_ttable.topTag().removeComponent(n);
      }
      m_ttable.topTag().addComponent(node);
      for (TagChangeListener tagChangeListener : tagChangeListeners) {

        tagChangeListener.tagsChanged();
      }
      redraw();
    } else {

      if (hilightedNode == null) {

        return false;
      }
      hilightedNode.hilighted = false;
      hilightedNode = null;

      //
      m_ttable.promoteTagSilent(m_ttable.getListedTag());
      while (m_ttable.topTag().full_components.size() > 0) {

        TopoTreeNode n = null;
        for (TopoTreeNode k : m_ttable.topTag().full_components) {
          if (n == null) {
            n = k;
          } else if (n.num_points < k.num_points) {
            n = k;
          }
        }

        m_ttable.topTag().removeComponent(n);
      }
      for (TagChangeListener tagChangeListener : tagChangeListeners) {

        tagChangeListener.tagsChanged();
      }
      redraw();
    }
    //		System.out.println("End update hilight");

    return true;
  }