@Override public boolean remove(Object o) { if (o instanceof Provider) { final Provider provider = (Provider) o; if (provider.isUsed()) { final String error = String.format("Unable to remove provider '5s' as it is still in use", provider.getName()); throw new IllegalStateException(error); } provider.getOwner().discard(); } return super.remove(o); } }