diff --git a/extra/alarms/alarms-tests.factor b/extra/alarms/alarms-tests.factor
index 1af851c9c6..564f22ec95 100755
--- a/extra/alarms/alarms-tests.factor
+++ b/extra/alarms/alarms-tests.factor
@@ -15,3 +15,5 @@ concurrency.count-downs ;
         [ resume ] curry instant later drop
     ] "test" suspend drop
 ] unit-test
+
+\ alarm-thread-loop must-infer
diff --git a/extra/alarms/alarms.factor b/extra/alarms/alarms.factor
index 55a66c5231..adf79c84c9 100755
--- a/extra/alarms/alarms.factor
+++ b/extra/alarms/alarms.factor
@@ -38,7 +38,7 @@ SYMBOL: alarm-thread
 
 : call-alarm ( alarm -- )
     dup alarm-entry box> drop
-    dup alarm-quot try
+    dup alarm-quot "Alarm execution" spawn drop
     dup alarm-interval [ reschedule-alarm ] [ drop ] if ;
 
 : (trigger-alarms) ( alarms now -- )
@@ -62,8 +62,7 @@ SYMBOL: alarm-thread
 : alarm-thread-loop ( -- )
     alarms get-global
     dup next-alarm sleep-until
-    dup trigger-alarms
-    alarm-thread-loop ;
+    trigger-alarms ;
 
 : cancel-alarms ( alarms -- )
     [
@@ -72,7 +71,7 @@ SYMBOL: alarm-thread
 
 : init-alarms ( -- )
     alarms global [ cancel-alarms <min-heap> ] change-at
-    [ alarm-thread-loop ] "Alarms" spawn
+    [ alarm-thread-loop t ] "Alarms" spawn-server
     alarm-thread set-global ;
 
 [ init-alarms ] "alarms" add-init-hook
diff --git a/extra/ui/ui.factor b/extra/ui/ui.factor
index 477fffe6af..6286297f68 100755
--- a/extra/ui/ui.factor
+++ b/extra/ui/ui.factor
@@ -148,7 +148,7 @@ SYMBOL: ui-thread
     \ ui-running get-global ;
 
 : update-ui-loop ( -- )
-    ui-running? ui-thread get-global self eq? [
+    ui-running? ui-thread get-global self eq? and [
         ui-notify-flag get lower-flag
         [ update-ui ] ui-try
         update-ui-loop