code: public synchronized float get() {
      Progress node = this;
      while (node.parent != null) {                 // find the root
        node = parent;
      }
      return node.getInternal();
    }
docs: and the node's parent never changes. Still, it doesn't hurt.