public void pushWeights(Map<Object, Integer> weightedItems)
    {
        for (Map.Entry<Object, Integer> weightedItem : weightedItems.entrySet())
        {
            String key = createKey(weightedItem.getKey());

            if (sharedWeights.containsKey(key))
            {
                // could add another heuristic here, for how to mix the new values with the current ones on push
                sharedWeights.put(key, weightedItem.getValue());
            }
            else
            {
                sharedWeights.put(key, weightedItem.getValue());
            }
        }

        if (hasBeenOriginallyDeviated == false)
        {
            originalDeviationStrategy.deviate(sharedWeights);
            hasBeenOriginallyDeviated = true;
        }
    }