class MessageHeadersBuilder extends AbstractDittoHeadersBuilder<MessageHeadersBuilder, MessageHeaders> {

    @Override
    public MessageHeadersBuilder removeHeader(final CharSequence key) {
        MessageHeaderDefinition.forKey(key).ifPresent(definition -> {
            if (MANDATORY_HEADERS.contains(definition)) {
                final String msgTemplate = "Mandatory header with key <{0}> cannot be removed!";
                throw new IllegalArgumentException(MessageFormat.format(msgTemplate, key));
            }
        });
        return super.removeHeader(key);
    }

    private  MessageHeadersBuilder(final Map<String, String> headers);
    private  MessageHeadersBuilder(final MessageHeaders dittoHeaders);

}