public void influenceEnvironments(final ArrayList<EnvironmentGroup> environmentGroups) {

        if (environmentGroups == null) {
            return;
        }

        Integer i = 0;

        // List of all tradeables which are influenced
        ArrayList<ITradeable> finalTradeables = new ArrayList<ITradeable>();
        // Temporary storage for all tradeables
        ArrayList<ArrayList<ITradeable>> tradeableArray = new ArrayList<ArrayList<ITradeable>>();

        // Iterate over each group
        for (final EnvironmentGroup environmentGroup : environmentGroups) {
            finalTradeables = new ArrayList<ITradeable>();
            tradeableArray = new ArrayList<ArrayList<ITradeable>>();
            i = 0;

            // Iterate over each environment and save affected tradeables
            for (final Environment environment : environmentGroup.getEnvironments()) {

                // Get all affected tradeables from current environment
                final HashSet<ITradeable> tempTradeables = environment.getInfluencedTradeables();

                // Create new tradeable array and add tradeables
                tradeableArray.add(i, new ArrayList<ITradeable>());
                tradeableArray.get(i).addAll(tempTradeables);

                i++;
            }

            // Get all intersecting tradeables of all environments in
            // current environment group
            if (tradeableArray.isEmpty() == false) {

                finalTradeables.addAll(tradeableArray.get(0));

                for (final ArrayList<ITradeable> tradeablelist : tradeableArray) {
                    finalTradeables.retainAll(tradeablelist);
                }
            }

            // Calculate and set new value of tradeable
            for (final ITradeable tradeable : finalTradeables) {
                if (TradeableHandler.getInstance().getActiveTradeables().containsKey(tradeable)) {
                    updateTradeable(environmentGroup, tradeable);
                }
            }
        }
    }