@Override
    public void unsubscribe(InformationListener<?> listener) {
        if (listener == null) return;

        // Well, not the fastest and best solution given this interface.
        this.itemsLock.lock();
        try {
            final Set<Class<? extends InformationItem<?>>> keySet = this.items.keySet();
            for (Class<? extends InformationItem<?>> uri : keySet) {
                final KeyEntry keyEntry = this.items.get(uri);
                keyEntry.entryLock.lock();
                try {
                    keyEntry.allListeners.remove(listener);
                } finally {
                    keyEntry.entryLock.unlock();
                }
            }
        } finally {
            this.itemsLock.unlock();
        }
    }