def _update_armed_ready_status(self, message=None):
        """
        Uses the provided message to update the armed state
        and ready state at once as they can change in the same
        message and we want both events to have the same states.
        :param message: message to use to update
        :type message: :py:class:`~alarmdecoder.messages.Message`

        """

        arm_status = None
        stay_status = None
        ready_status = None

        send_ready = False
        send_arm = False

        if isinstance(message, Message):
            arm_status = message.armed_away
            stay_status = message.armed_home
            ready_status = message.ready

        if arm_status is None or stay_status is None or ready_status is None:
            return

        self._armed_stay, old_stay = stay_status, self._armed_stay
        self._armed_status, old_arm = arm_status, self._armed_status
        self._ready_status, old_ready_status = ready_status, self._ready_status

        if old_arm is not None:
            if arm_status != old_arm or stay_status != old_stay:
                send_arm = True

        if old_ready_status is not None:
            if ready_status != old_ready_status:
                send_ready = True

        if send_ready:
            self.on_ready_changed(status=self._ready_status)

        if send_arm:
            if self._armed_status or self._armed_stay:
                self.on_arm(stay=stay_status)
            else:
                self.on_disarm()