public String put(final String key, final String value) {
        String result = null;

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

        if (deleted.get().contains(key)) {
            deleted.get().remove(key);
            result = null;
        }

        diff.get().put(key, value);

        return result;
    }