anchor.diff:        (when *break-on-non-single-threaded-updates?*
   	(break "Non-single-threaded update!"))
         (let ((new-table (copy-hash-table table)))
  -	(loop for (dom . ran) in undo-list
  -	   do (if (eq ran *undefined*)
  -		  (remhash dom new-table)
  -		(setf (gethash dom new-table) ran)))
  +	(unless (map-as-undo-harray-current? m)
  +          (loop for (dom . ran) in undo-list
  +                do (if (eq ran *undefined*)
  +                       (remhash dom new-table)
  +                       (setf (gethash dom new-table) ran)))
   	;; Two nreverses leave things unchanged
  -	(nreverse undo-list)
  +          (nreverse undo-list))
   	(make-map-as-undo-harray new-table nil)))))
   
   (defparameter STH_empty_map (make-map-as-undo-harray (Specware::make-sw-hash-table :size 0) nil))
  
positive.code: 	(let ((new-table (map-as-undo-harray--initial-harray)))
  	  (setf (gethash x new-table) y)
  	  (make-map-as-undo-harray new-table nil)))
      (let ((m (map-as-undo-harray-assure-current m)))
        ;(incf *map-as-undo-harray-set-count*)
        (let* ((last-undo-list (map-as-undo-harray--undo-list m))
  	     (table (map-as-undo-harray--harray m))
  	     (old-val (gethash x table *undefined*)))
  	(if (eq y old-val)
  	    m				; Optimize special case
  	  (progn
  	    (if (eq y *undefined*)
  		(progn (remhash x table))
  	      (progn (setf (gethash x table) y)))
  
negative.code: (defun mkSome (val)
    (cons ':|Some| val))
  
  (defvar *maphash-htables* nil)
  (defvar *break-on-non-single-threaded-updates?* nil)
  
  ;;; (setq MapSTHashtable::*break-on-non-single-threaded-updates?* t)
  
  (defun map-as-undo-harray-assure-current (m)
  