public String remove(final String key) {
        if (deleted.get().contains(key)) {
            return null;
        }

        String result = null;

        if (diff.get().containsKey(key)) {
            result = diff.get().get(key);
            diff.get().remove(key);
            deleted.get().add(key);
            return result;
        }

        readLock.lock();
        try {
            if (old.containsKey(key)) {
                result = old.get(key);
                deleted.get().add(key);
            }
        } finally {
            readLock.unlock();
        }

        return result;
    }