public void addElement(AbstractElement element) {
        if (element == null)
            throw new NullPointerException("The ElementSystem is null.");
        RETW(defaultEngineLock, () -> {
            if (!elements.containsKey(element.getID())) {
                elements.values().parallelStream().forEach(e -> {
                    NonOrderedFinalPair<String, String> key
                            = new NonOrderedFinalPair<>(e.getID(), element.getID());
                    switch (getSystemRelation(e.getSystemID(),
                            element.getSystemID())) {
                        case CANNOT:
                            elementRelations.put(key, ElementRelation.CANNOT);
                            break;
                        case CAN:
                        case BASE_CAN:
                        case CONDITION:
                            elementRelations.put(key, ElementRelation.SYSTEM_CAN);
                            break;
                    }
                    elementConflicts.put(key, ElementConflict.CANNOT);
                });
                elements.put(element.getID(), element);
                elementConcentrationCalcs.put(element.getID(), ELEMENT_CONCENTRATION_CALC_DEFAULT);
                NonOrderedFinalPair<String, String> self = new NonOrderedFinalPair<>(element.getID(), element.getID());
                elementRelations.put(self, ElementRelation.CAN);
                elementCalcs.put(self, ELEMENT_CALC_DEFAULT);
            }
        });
    }