@Override
	public I put(@Nonnull String key, @Nonnull I newValue) {
		I oldValue = backing.put(key, newValue);

		// Ensure we don't track entries by this name as 'removed'
		removed.remove(key);

		// Notify listeners
		Unchecked.checkedForEach(listeners, listener -> {
			if (oldValue == null) {
				listener.onNewItem(key, newValue);
			} else {
				listener.onUpdateItem(key, oldValue, newValue);
			}
		}, (listener, t) -> logger.error("Exception thrown when putting bundle item", t));

		// Update history
		if (oldValue == null) {
			initHistory(newValue);
		} else {
			incrementHistory(newValue);
		}
		return oldValue;
	}
History contains a stack of prior states of items.
If an item has not been modified there is no entry in this map.

@return Map of historical states of items within this bundle.
recaf-core/src/main/java/software/coley/recaf/workspace/model/bundle/BasicBundle.java