Index: src/org/armedbear/lisp/autoloads.lisp
===================================================================
--- src/org/armedbear/lisp/autoloads.lisp	(revision 12586)
+++ src/org/armedbear/lisp/autoloads.lisp	(working copy)
@@ -318,8 +318,10 @@
 
 (in-package "THREADS")
 
+(autoload '(;; MAKE-THREAD helper
+            thread-function-wrapper
 
-(autoload '(;; Mailbox
+            ;; Mailbox
             make-mailbox mailbox-send mailbox-empty-p
             mailbox-read mailbox-peek
 
Index: src/org/armedbear/lisp/debug.lisp
===================================================================
--- src/org/armedbear/lisp/debug.lisp	(revision 12586)
+++ src/org/armedbear/lisp/debug.lisp	(working copy)
@@ -94,8 +94,9 @@
                          (stream-offset *load-stream*)))
         (simple-format *debug-io*
                        (if (fboundp 'tpl::repl)
-                           "Debugger invoked on condition of type ~A:~%"
-                           "Unhandled condition of type ~A:~%")
+                           "~S: Debugger invoked on condition of type ~A~%"
+                           "~S: Unhandled condition of type ~A:~%")
+                       (threads:current-thread)
                        (type-of condition))
         (simple-format *debug-io* "  ~A~%" condition)))))
 
Index: src/org/armedbear/lisp/LispThread.java
===================================================================
--- src/org/armedbear/lisp/LispThread.java	(revision 12586)
+++ src/org/armedbear/lisp/LispThread.java	(working copy)
@@ -72,6 +72,8 @@
     public LispObject[] _values;
     private boolean threadInterrupted;
     private LispObject pending = NIL;
+    private Symbol wrapper =
+        PACKAGE_THREADS.intern("THREAD-FUNCTION-WRAPPER");
 
     LispThread(Thread javaThread)
     {
@@ -85,7 +87,9 @@
             public void run()
             {
                 try {
-                    funcall(fun, new LispObject[0], LispThread.this);
+                    funcall(wrapper,
+                            new LispObject[] { fun },
+                            LispThread.this);
                 }
                 catch (ThreadDestroyed ignored) {
                       // Might happen.
Index: src/org/armedbear/lisp/threads.lisp
===================================================================
--- src/org/armedbear/lisp/threads.lisp	(revision 12586)
+++ src/org/armedbear/lisp/threads.lisp	(working copy)
@@ -34,6 +34,15 @@
 
 
 ;;
+;; MAKE-THREAD helper to establish restarts
+;;
+
+(defun thread-function-wrapper (fun)
+  (restart-case
+      (funcall fun)
+    (abort () :report "Abort thread.")))
+
+;;
 ;; Mailbox implementation
 ;;
 
