@Override
    public Map<String, Boolean> getPermissionsForPlayer(Player player) {
        // We try to do handle the maps by reference
        // as long as possible, to avoid creating
        // new maps over and over
        Map<String, Boolean> result = null;

        // If we had to make a copy of the result map
        // set this to true. We only need a copy once
        // then fill it with whatever results come
        // afterwards
        boolean copyMade = false;

        for(Selector selector : selectors) {
            if(result == null) {
                // Still looking for a first match
                result = selector.getPermissionsForPlayer(player);
            } else {
                // Already have some results, maybe there's more?
                Map<String, Boolean> result2 = selector.getPermissionsForPlayer(player);
                if(result2 != null) {
                    // Damn, now we have to combine
                    // multiple permissions into one
                    // new package = not optimal...
                    // Make a copy that we can safely edit
                    if(!copyMade) {
                        result = new HashMap<String, Boolean>(result);
                        copyMade = true;
                    }

                    // combine
                    result.putAll(result2);
                }
            }
        }

        return result;
    }