private void leave(StateEnum state, final C context) {
        if (context.isTerminated()) {
            return;
        }

        try {
            if (isTrace())
                log.info("when leave %s for %s <<<", state, context);

            handlers.callOnStateLeaved(state, context);

            if (isTrace())
                log.info("when leave %s for %s >>>", state, context);
        } catch (Exception e) {
            doOnError(new ExecutionError(state, null, e,
                "Execution Error in [whenLeave] handler", context));
        }
    }