code: protected Iterator<Class<?>> containingCategories(final Object pProvider) {
          // TODO: Is removal using the iterator really a good idea?
          return new FilterIterator<Class<?>>(categories(),
                                    new FilterIterator.Filter<Class<?>>() {
                                        public boolean accept(Class<?> pElement) {
                                            return getRegistry(pElement).contains(pProvider);
                                        }
                                    }) {
              Class<?> current;
  
              public Class next() {
                  return (current = super.next());
              }
  
              public void remove() {
                  if (current == null) {
                      throw new IllegalStateException("No current element");
                  }
                  
                  getRegistry(current).deregister(pProvider);
                  current = null;
              }
          };
      }
docs: Returns an {@code Iterator} containing all categories in this registry
  the given {@code pProvider} <em>is currently registered with</em>.
  <p/>
  The iterator supports removal.
  <p/>
  <small>
  NOTE: Removing a category from the iterator, de-registers
  {@code pProvider} from the current category (as returned by the last
  invocation of {@code next()}), it does <em>not</em> remove the category
  itself from the registry.
  </small>
  
  @param pProvider the provider instance
  @return an {@code Iterator} containing all categories in this registry
  the given {@code pProvider} may be registered with