code: public synchronized void updatePath(PropertyChangeListener listener, Object newObject, Set updateSet) {
          if (currentObject != newObject) {
              removeListeners();
          }
          if ((children != null) && (children.length > 0)) {
              try {
                  Object newValue = null;
                  if (newObject != null) {
                      updateSet.add(newObject);
                      newValue = extractNewValue(newObject);
                  }
                  for (BindPath child : children) {
                      child.updatePath(listener, newValue, updateSet);
                  }
              } catch (Exception e) {
                  //LOGME
                  // do we ignore it, or fail?
              }
          }
          if (currentObject != newObject) {
              addListeners(listener, newObject, updateSet);
          }
      }
docs: Called when we detect a change somewhere down our path.
  First, check to see if our object is changing.  If so remove our old listener
  Next, update the reference object the children have and recurse
  Finally, add listeners if we have a different object
  
  @param listener This listener to attach.
  @param newObject The object we should read our property off of.
  @param updateSet The list of objects we have added listeners to