             alarm_set_timestamp(&next_run);
         }
         // TODO Remember to keep meta of where we are – are any actions
-        // running, are we snoozed, etc.
-        menu_title("Alarm ringing:");
-        if (alarm != NULL && alarm->name != NULL)
-            menu_content(alarm->name);
-        else
-            menu_content("Unnamed");
+        // running, are we snoozed, etc. ... and also make the menu reflect the
+        // state, showing alarm name etc.
+        menu_title("Alarm ringing!");
+        if (alarm != NULL && alarm->name != NULL) {
+            char content[16];
+            sprintf(content, "\n\n\n%s", alarm->name);
+            menu_content(content);
+        } else
+            menu_content("\n\n\nUnnamed");
     } else
         perform_action(&action_time->actions);
 


    alarm_t * alarm = get_alarm(alarm_req->alarmno);

    if (alarm == NULL) {
        alarm = new_alarm(alarm_req->alarmno, alarm_req->timestamp);
        alarm->name = strdup("Default");
        push_front(alarms, (void *) alarm);
        action_t * action;
        if (actions != NULL)
            action = GET_ITEM(actions, action_t);
        else {
            actionspec_t * actionspec = new_actionspec();
            // TODO This is a temp. default action
            actionspec->actions.flags.blink_backlight = true;
            actionspec->actions.flags.snoozable = true;
            actionspec->timeout = 0x7FFF;

            action = new_action();
            PUSH_FRONT(action->actionspecs, (void *) actionspec);
            PUSH_FRONT(actions, (void *) action);
            PUSH_FRONT(alarm->actionnos, COPY_ITEM(uint8_t, &action->actionno));
        }
        PUSH_FRONT(alarm->actionnos, COPY_ITEM(uint8_t, &action->actionno));
    }

    prepare_action(alarm, new_actionspec(), false);
    linked_list_t * iterator = alarm->actionnos;
    while (iterator != NULL) {
        uint8_t actionno = *GET_ITEM(iterator, uint8_t);
        linked_list_t * action_iterator = actions;
        while (action_iterator != NULL) {
            if (actionno == GET_MEMBER(action_iterator, action_t, actionno)) {

    return NULL;
}

static inline action_t * get_action(uint8_t actionno) {
    linked_list_t * iterator = actions;
    while (iterator != NULL) {
        if (GET_MEMBER(iterator, action_t, actionno) == actionno)
            return GET_ITEM(iterator, action_t);
        NEXT(iterator);
    }
    return NULL;
}

static inline void prepare_action(alarm_t * alarm, actionspec_t * actionspec, bool invert) {
    time_t action_timestamp = alarm->timestamp + actionspec->offset;

    if (invert)
        action_timestamp += actionspec->timeout;

