Index: /trunk/source/lisp-kernel/x86-exceptions.c
===================================================================
--- /trunk/source/lisp-kernel/x86-exceptions.c	(revision 13014)
+++ /trunk/source/lisp-kernel/x86-exceptions.c	(revision 13015)
@@ -3735,5 +3735,5 @@
     size = uvector_total_size_in_bytes(noderef);
 
-  if (object_area && object_area->code != AREA_WATCHED) {
+  if (object_area && object_area->code == AREA_DYNAMIC) {
     area *a = new_watched_area(size);
     LispObj old = object;
@@ -3748,4 +3748,5 @@
     wp_update_references(tcr, old, new);
     check_all_areas(tcr);
+    return 1;
   }
   return 0;
@@ -3791,8 +3792,11 @@
   LispObj selector = xpGPR(xp,Iimm0);
   LispObj object = xpGPR(xp, Iarg_z);
+  signed_natural result;
   
   switch (selector) {
     case WATCH_TRAP_FUNCTION_WATCH:
-      gc_like_from_xp(xp, watch_object, object);
+      result = gc_like_from_xp(xp, watch_object, object);
+      if (result == 0)
+	xpGPR(xp,Iarg_z) = lisp_nil;
       break;
     case WATCH_TRAP_FUNCTION_UNWATCH:
