protected Boolean containsInternal(Object o) {
    if (individuals.contains(o)) {
      return Boolean.TRUE;
    }

    for (Iterator iter = popAppSatisfiers.entrySet().iterator(); iter.hasNext(); ) {
      Map.Entry entry = (Map.Entry) iter.next();
      NumberVar popApp = (NumberVar) entry.getKey();
      ObjectSet satisfiers = (ObjectSet) entry.getValue();
      if (satisfiers.contains(o)) {
        Set exceptions = (Set) popAppExceptions.get(popApp);
        return Boolean.valueOf(!exceptions.contains(o));
      }
    }

    return Boolean.FALSE;
  }
  public int indexOf(Object o) {
    int indivIndex = individuals.indexOf(o);
    if (indivIndex != -1) {
      return indivIndex;
    }

    int indexSoFar = individuals.size();
    for (Iterator iter = popAppSatisfiers.entrySet().iterator(); iter.hasNext(); ) {
      Map.Entry entry = (Map.Entry) iter.next();
      NumberVar popApp = (NumberVar) entry.getKey();
      ObjectSet satisfiers = (ObjectSet) entry.getValue();
      Set exceptions = (Set) popAppExceptions.get(popApp);

      if (satisfiers.contains(o) && !exceptions.contains(o)) {
        return (indexSoFar + getIndexInPOPApp(satisfiers, exceptions, o));
      }

      int numInSet = satisfiers.size() - exceptions.size();
      indexSoFar += numInSet;
    }

    return -1;
  }