public void addExclusive(SignalArea areaToAdd) {
        final SignalArea current = areaToAdd;
        // list of already treated mutEx areas, which are mutually exclusive, and
        // exclusive with the 'current' area
        final List<SignalArea> currentMutEx = new LinkedList<>();
        while (!isEmpty()) {
            final SignalArea mutExArea = remove(0);
            final SignalArea intersection = SignalArea.intersect(current, mutExArea);

            // the remaining part of 'mutExArea' is necessarily exclusive with
            // all other shapes of this list, because 'mutExArea' was in this list
            if (!mutExArea.isEmpty()) {
                currentMutEx.add(mutExArea);
            }

            // the intersection is necessarily exclusive with all other shapes of
            // this list, because it is part of 'mutExArea', which was in this list
            if (!intersection.isEmpty()) {
                currentMutEx.add(intersection);
            }

            if (current.isEmpty()) {
                // add the treated areas
                addAll(currentMutEx);
                // end here, because nothing's left of 'current'
                return;
            }

            // the remaining part of 'current' needs to be intersected with the other
            // shapes: carry on with what's left of 'current'
        }
        // no more areas to intersect: add what's left of 'current'
        add(current);
        // add the treated areas
        addAll(currentMutEx);
        return;
    }