diff --git a/library/UNIXUTILS b/library/UNIXUTILS
index 0c0553a4..d8dce663 100644
--- a/library/UNIXUTILS
+++ b/library/UNIXUTILS
@@ -1,12 +1,12 @@
-(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
+(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10)
 
-(FILECREATED "19-Jan-2026 14:09:03" {WMEDLEY}<library>UNIXUTILS.;55 20711  
+(FILECREATED "31-Mar-2026 00:14:19" {WMEDLEY}<library>UNIXUTILS.;58 21269  
 
       :EDIT-BY rmk
 
       :CHANGES-TO (FNS UNIX-FILE-NAME)
 
-      :PREVIOUS-DATE "17-Jan-2026 23:16:17" {WMEDLEY}<library>UNIXUTILS.;54)
+      :PREVIOUS-DATE "29-Mar-2026 00:26:43" {WMEDLEY}<library>UNIXUTILS.;57)
 
 
 (PRETTYCOMPRINT UNIXUTILSCOMS)
@@ -287,7 +287,9 @@
          SLASHED])
 
 (UNIX-FILE-NAME
-  [LAMBDA (FILE ACCESS COPY EXTENSION)                       (* ; "Edited 19-Jan-2026 14:05 by rmk")
+  [LAMBDA (FILE ACCESS COPY EXTENSION)                       (* ; "Edited 31-Mar-2026 00:13 by rmk")
+                                                             (* ; "Edited 29-Mar-2026 00:26 by rmk")
+                                                             (* ; "Edited 19-Jan-2026 14:05 by rmk")
                                                              (* ; "Edited 17-Jan-2026 22:32 by rmk")
                                                              (* ; "Edited 11-Jan-2026 23:54 by rmk")
                                                              (* ; "Edited 27-Dec-2025 21:24 by rmk")
@@ -317,8 +319,13 @@
                                FILE))
                      (DSK [LET ((VERSION (FILENAMEFIELD FILE 'VERSION))
                                 (UNAME (PACKFILENAME 'VERSION NIL 'BODY FILE)))
-                               (CL:UNLESS (EQ VERSION 1)
-                                   (CONCAT UNAME (CONCAT "~" VERSION "~")))])
+                               (CL:IF (EQ VERSION 1)
+                                   UNAME
+                                   (CONCAT UNAME (CONCAT (CL:IF (EQ (CHARCODE %.)
+                                                                    (NTHCHARCODE UNAME -1))
+                                                             ""
+                                                             ".")
+                                                        "~" VERSION "~")))])
                      (LET (UNAME)
 
                           (* ;; "Catch the streams as well as other devices (CORE, servers)")
@@ -360,8 +367,8 @@
 
 (PUTPROPS UNIXUTILS FILETYPE CL:COMPILE-FILE)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (1170 1543 (ShellCommand 1170 . 1543)) (1545 1942 (ShellWhich 1545 . 1942)) (2052 20633 
+  (FILEMAP (NIL (1170 1543 (ShellCommand 1170 . 1543)) (1545 1942 (ShellWhich 1545 . 1942)) (2052 21191 
 (ShellBrowser 2062 . 3834) (ShellBrowse 3836 . 4521) (ShellOpener 4523 . 6211) (ShellOpen 6213 . 11982
-) (PROCESS-COMMAND 11984 . 12597) (SLASHIT 12599 . 15623) (UNIX-FILE-NAME 15625 . 18952) (
-UNIX-TMP-FILE-NAME 18954 . 20631)))))
+) (PROCESS-COMMAND 11984 . 12597) (SLASHIT 12599 . 15623) (UNIX-FILE-NAME 15625 . 19510) (
+UNIX-TMP-FILE-NAME 19512 . 21189)))))
 STOP
diff --git a/library/UNIXUTILS.DFASL b/library/UNIXUTILS.DFASL
index 8de67334..f4489675 100644
Binary files a/library/UNIXUTILS.DFASL and b/library/UNIXUTILS.DFASL differ
diff --git a/lispusers/BROKEN-ATOMS b/lispusers/BROKEN-ATOMS
new file mode 100644
index 00000000..a6f211aa
--- /dev/null
+++ b/lispusers/BROKEN-ATOMS
@@ -0,0 +1,187 @@
+(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10)
+
+(FILECREATED "14-Apr-2026 12:14:44" {PROJECTS}<BROKENATOMS>BROKEN-ATOMS.;10 7207   
+
+      :CHANGES-TO (FUNCTIONS WITHOUT-BROKEN-ATOMS TEST-PRETTY-FILE TEST-DEEP-COMPUTATION 
+                         CURE-BROKEN-ATOM)
+                  (VARS BROKEN-ATOMSCOMS)
+
+      :PREVIOUS-DATE "18-Feb-2026 16:08:40" {PROJECTS}<BROKENATOMS>BROKEN-ATOMS.;3)
+
+
+(PRETTYCOMPRINT BROKEN-ATOMSCOMS)
+
+(RPAQQ BROKEN-ATOMSCOMS
+       (
+        (* ;; "the representation of a broken atom")
+
+        (RECORDS BROKEN-ATOM)
+        (FUNCTIONS CURE-BROKEN-ATOM)
+        
+        (* ;; "for DEFPRINT")
+
+        (FNS BROKEN-ATOM-PRINTER)
+        
+        (* ;; "special form")
+
+        (FUNCTIONS WITHOUT-BROKEN-ATOMS)
+        
+        (* ;; "setup")
+
+        (P (DEFPRINT 'BROKEN-ATOM 'BROKEN-ATOM-PRINTER))
+        
+        (* ;; "Debugging/testing")
+
+        (FUNCTIONS TEST-INTERNAL-BA TEST-EXTERNAL-BA TEST-DEEP-COMPUTATION TEST-PRETTY-FILE)))
+
+
+
+(* ;; "the representation of a broken atom")
+
+(DECLARE%: EVAL@COMPILE
+
+(DATATYPE BROKEN-ATOM ((PACKAGE POINTER)
+                       (NAME POINTER)
+                       (EXTERNAL FLAG)))
+)
+
+(/DECLAREDATATYPE 'BROKEN-ATOM '(POINTER POINTER FLAG)
+       '((BROKEN-ATOM 0 POINTER)
+         (BROKEN-ATOM 2 POINTER)
+         (BROKEN-ATOM 2 (FLAGBITS . 0)))
+       '4)
+
+(CL:DEFUN CURE-BROKEN-ATOM (CONDITION)
+   "Given an XCL:MISSING-EXTERNAL-SYMBOL condition, return a corresponding BROKEN-ATOM"
+   (COND
+      ((TYPEP CONDITION 'XCL:MISSING-PACKAGE)                (* ; "no such package ")
+       (create BROKEN-ATOM
+              PACKAGE _ (XCL:MISSING-PACKAGE-PACKAGE-NAME CONDITION)
+              NAME _ (XCL:MISSING-PACKAGE-SYMBOL-NAME CONDITION)
+              EXTERNAL _ (XCL:MISSING-PACKAGE-EXTERNAL CONDITION)))
+      ((TYPEP CONDITION 'XCL:MISSING-EXTERNAL-SYMBOL)        (* ; 
+                                                            "package exists, no such external symbol")
+       (create BROKEN-ATOM
+              PACKAGE _ (CL:PACKAGE-NAME (XCL:MISSING-EXTERNAL-SYMBOL-PACKAGE CONDITION))
+              NAME _ (XCL:MISSING-EXTERNAL-SYMBOL-NAME CONDITION)
+              EXTERNAL _ NIL))
+      (T (HELP "Don't know how to cure" CONDITION))))
+
+
+
+(* ;; "for DEFPRINT")
+
+(DEFINEQ
+
+(BROKEN-ATOM-PRINTER
+  [LAMBDA (BROKEN-ATOM STREAM)
+    (CONS (CONCAT (fetch (BROKEN-ATOM PACKAGE) of BROKEN-ATOM)
+                 (if (fetch (BROKEN-ATOM EXTERNAL) of BROKEN-ATOM)
+                     then ":"
+                   else "::")
+                 (fetch (BROKEN-ATOM NAME) of BROKEN-ATOM])
+)
+
+
+
+(* ;; "special form")
+
+
+(DEFMACRO WITHOUT-BROKEN-ATOMS (&BODY FORMS)
+   "Handle any broken-atom errors by producing a BROKEN-ATOM that prints as if the original atom were intact"
+   `[HANDLER-BIND [[XCL:MISSING-PACKAGE #'(CL:LAMBDA (C)
+                                                 (CONDITIONS:INVOKE-RESTART 
+                                                        'CREATE-MISSING-PACKAGE-BA (CURE-BROKEN-ATOM
+                                                                                    C]
+                   (XCL:MISSING-EXTERNAL-SYMBOL #'(CL:LAMBDA (C)
+                                                         (CONDITIONS:INVOKE-RESTART 
+                                                                'CREATE-EXTERNAL-BA (CURE-BROKEN-ATOM
+                                                                                     C]
+           (CONDITIONS:RESTART-BIND [(CREATE-MISSING-PACKAGE-BA
+                                      #'(CL:LAMBDA (V)
+                                               (RETFROM (FUNCTION RESOLVE-MISSING-PACKAGE)
+                                                      V)
+                                               V))
+                                     (CREATE-EXTERNAL-BA #'(CL:LAMBDA (V)
+                                                                  (RETFROM (FUNCTION 
+                                                                      RESOLVE-MISSING-EXTERNAL-SYMBOL
+                                                                            )
+                                                                         V)
+                                                                  V]
+                  (PROGN ,@FORMS])
+
+
+
+(* ;; "setup")
+
+
+(DEFPRINT 'BROKEN-ATOM 'BROKEN-ATOM-PRINTER)
+
+
+
+(* ;; "Debugging/testing")
+
+
+(CL:DEFUN TEST-INTERNAL-BA ()
+   [LET ((FILE NIL))
+        (CL:WITH-OPEN-STREAM (OUT (OPENSTREAM "{nodircore}" 'OUTPUT))
+               (SETQ FILE OUT)
+               (PRINTOUT OUT "BROKEN::INTERNAL-ATOM" T))
+        (CL:WITH-OPEN-STREAM (IN (OPENSTREAM FILE 'INPUT))
+               (WITHOUT-BROKEN-ATOMS (RATOM IN])
+
+(CL:DEFUN TEST-EXTERNAL-BA ()
+   [LET ((FILE NIL))
+        (CL:WITH-OPEN-STREAM (OUT (OPENSTREAM "{nodircore}" 'OUTPUT))
+               (SETQ FILE OUT)
+               (PRINTOUT OUT "BROKEN:EXTERNAL-ATOM" T))
+        (CL:WITH-OPEN-STREAM (IN (OPENSTREAM FILE 'INPUT))
+               (WITHOUT-BROKEN-ATOMS (RATOM IN])
+
+(CL:DEFUN TEST-DEEP-COMPUTATION ()
+   "Test that we can handle internal calls to READ that encounter broken atoms"
+
+   (* ;; "make sure it works when there's no error")
+
+   (LET [(RESULT (WITHOUT-BROKEN-ATOMS (CL:LOOP :FOR X :FROM 0 :TO 9 :COLLECT X]
+        (PRINTOUT T "No error loop result: " RESULT T))
+
+   (* ;; "and when reading legit atoms")
+
+   (LET [(RESULT (WITHOUT-BROKEN-ATOMS (CL:LOOP :FOR X :FROM 0 :TO 9 :COLLECT (CL:READ-FROM-STRING
+                                                                               (CONCAT "IL:ATOM" X]
+        (PRINTOUT T "No error read loop result: " RESULT T))
+
+   (* ;; "test XCL:MISSING-PACKAGE.")
+
+   (COND
+      ((CL:FIND-PACKAGE :BROKEN)
+       (DELETE-PACKAGE :BROKEN)))
+   (LET [(RESULT (WITHOUT-BROKEN-ATOMS (CL:LOOP :FOR X :FROM 0 :TO 9 :COLLECT (CL:READ-FROM-STRING
+                                                                               (CONCAT "BROKEN:ATOM"
+                                                                                      X]
+        (PRINTOUT T "No such package loop result: " RESULT T))
+
+   (* ;; "test XCL:MISSING-EXTERNAL-SYMBOL")
+
+   (CL:UNWIND-PROTECT
+       (PROGN (CL:MAKE-PACKAGE :BROKEN)
+              (LET [(RESULT (WITHOUT-BROKEN-ATOMS (CL:LOOP :FOR X :FROM 0 :TO 9 :COLLECT
+                                                         (CL:READ-FROM-STRING (CONCAT "BROKEN:ATOM" X
+                                                                                     ]
+                   (PRINTOUT T "Not external symbol loop result: " RESULT T)))
+       [COND
+          ((CL:FIND-PACKAGE :BROKEN)
+           (DELETE-PACKAGE 'BROKEN]))
+
+(CL:DEFUN TEST-PRETTY-FILE (SOURCE-FILE-NAME OUTPUT-FILE-NAME OUTPUT-TYPE)
+   "Prettyprint a Lisp source file to an imagestream file"
+   (CL:WITH-OPEN-STREAM (OUTPUT-STREAM (OPENIMAGESTREAM OUTPUT-FILE-NAME OUTPUT-TYPE))
+          (WITHOUT-BROKEN-ATOMS (PRETTYFILEINDEX SOURCE-FILE-NAME NIL OUTPUT-STREAM T))
+          (FULLNAME OUTPUT-STREAM)))
+(DECLARE%: DONTCOPY
+  (FILEMAP (NIL (1403 2315 (CURE-BROKEN-ATOM 1403 . 2315)) (2346 2699 (BROKEN-ATOM-PRINTER 2356 . 2697))
+ (2731 4397 (WITHOUT-BROKEN-ATOMS 2731 . 4397)) (4503 4831 (TEST-INTERNAL-BA 4503 . 4831)) (4833 5160 
+(TEST-EXTERNAL-BA 4833 . 5160)) (5162 6829 (TEST-DEEP-COMPUTATION 5162 . 6829)) (6831 7184 (
+TEST-PRETTY-FILE 6831 . 7184)))))
+STOP
diff --git a/lispusers/BROKEN-ATOMS.DFASL b/lispusers/BROKEN-ATOMS.DFASL
new file mode 100644
index 00000000..05926d41
Binary files /dev/null and b/lispusers/BROKEN-ATOMS.DFASL differ
diff --git a/lispusers/BROKEN-ATOMS.TEdit b/lispusers/BROKEN-ATOMS.TEdit
new file mode 100644
index 00000000..c5351762
Binary files /dev/null and b/lispusers/BROKEN-ATOMS.TEdit differ
diff --git a/lispusers/COMPAREDIRECTORIES b/lispusers/COMPAREDIRECTORIES
index 36bf7841..1c2efa56 100644
--- a/lispusers/COMPAREDIRECTORIES
+++ b/lispusers/COMPAREDIRECTORIES
@@ -1,12 +1,12 @@
-(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
+(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10)
 
-(FILECREATED "10-Feb-2026 21:28:55" {WMEDLEY}<lispusers>COMPAREDIRECTORIES.;286 138607 
+(FILECREATED "31-Mar-2026 10:50:22" {WMEDLEY}<lispusers>COMPAREDIRECTORIES.;287 138875 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS CD-MENUFN)
+      :CHANGES-TO (FNS CDBROWSER-COPY)
 
-      :PREVIOUS-DATE " 8-Nov-2025 13:07:39" {WMEDLEY}<lispusers>COMPAREDIRECTORIES.;285)
+      :PREVIOUS-DATE "10-Feb-2026 21:28:55" {WMEDLEY}<lispusers>COMPAREDIRECTORIES.;286)
 
 
 (PRETTYCOMPRINT COMPAREDIRECTORIESCOMS)
@@ -2146,7 +2146,8 @@
                                                              NIL])
 
 (CDBROWSER-COPY
-  [LAMBDA (CDBROWSER TBITEM SOURCE UNIXDEST)                 (* ; "Edited 28-Oct-2025 17:39 by rmk")
+  [LAMBDA (CDBROWSER TBITEM SOURCE UNIXDEST)                 (* ; "Edited 31-Mar-2026 10:49 by rmk")
+                                                             (* ; "Edited 28-Oct-2025 17:39 by rmk")
                                                              (* ; "Edited 25-Oct-2025 23:58 by rmk")
                                                              (* ; "Edited 24-May-2022 15:49 by rmk")
                                                              (* ; "Edited 25-Apr-2022 09:24 by rmk")
@@ -2202,8 +2203,10 @@
                (CL:UNLESS DESTFILE
                    (SETQ DESTFILE (CD-SWAPDIRS SOURCEFILE SOURCEDIR DESTDIR)))
                [SETQ RESULT (if UNIXDEST
-                                then (SPUTMULTI (fetch (TABLEBROWSER TBUSERDATA) of CDBROWSER)
-                                            'ORIGINALFILES DESTFILE (COPYFILE DESTFILE '{NODIRCORE))
+                                then (CL:WHEN (INFILEP DESTFILE)
+                                         (SPUTMULTI (fetch (TABLEBROWSER TBUSERDATA) of CDBROWSER)
+                                                'ORIGINALFILES DESTFILE (COPYFILE DESTFILE
+                                                                               '{NODIRCORE})))
                                      [PSEUDOFILENAME (PACKFILENAME 'HOST 'DSK 'BODY
                                                             (COPYFILE SOURCEFILE (PACKFILENAME
                                                                                   'HOST
@@ -2323,25 +2326,25 @@
 
 (MOVD? 'NILL 'TEDIT.FILEDATE)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (2653 23632 (COMPAREDIRECTORIES 2663 . 7998) (COMPAREDIRECTORIES.INFOS 8000 . 11229) (
-COMPAREDIRECTORIES.CANDIDATES 11231 . 14616) (CDENTRIES.SELECT 14618 . 19520) (
-COMPAREDIRECTORIES.INFOS.TYPE 19522 . 20866) (MATCHNAME 20868 . 21548) (CD.INSURECDVALUE 21550 . 23164
-) (CD.UPDATEWIDTHS 23166 . 23630)) (23633 34338 (CDFILES 23643 . 29740) (CDFILES.MATCH 29742 . 31367) 
-(CDFILES.PATS 31369 . 34336)) (34339 52357 (CDPRINT 34349 . 36866) (CDPRINT.HEADER 36868 . 37765) (
-CDPRINT.LINE 37767 . 41196) (CDPRINT.MAXWIDTHS 41198 . 45313) (CDPRINT.COLHEADERS 45315 . 46600) (
-CDPRINT.COLUMNS 46602 . 51722) (CDTEDIT 51724 . 52355)) (52358 61479 (CDMAP 52368 . 53800) (CDENTRY 
-53802 . 54111) (CDSUBSET 54113 . 55552) (CDMERGE 55554 . 59538) (CDMERGE.COMMON 59540 . 60855) (
-CD.SORT 60857 . 61477)) (61480 69018 (BINCOMP 61490 . 65779) (EOLTYPE 65781 . 68343) (EOLTYPE.SHOW 
-68345 . 69016)) (69546 82073 (FIND-UNCOMPILED-FILES 69556 . 73199) (FIND-UNSOURCED-FILES 73201 . 75585
-) (FIND-SOURCE-FILES 75587 . 77325) (FIND-COMPILED-FILES 77327 . 79204) (FIND-UNLOADED-FILES 79206 . 
-80059) (FIND-LOADED-FILES 80061 . 80489) (FIND-MULTICOMPILED-FILES 80491 . 82071)) (82074 90505 (
-CREATED-AS 82084 . 86881) (SOURCE-FOR-COMPILED-P 86883 . 89810) (COMPILE-SOURCE-DATE-DIFF 89812 . 
-90503)) (90506 101269 (FIX-DIRECTORY-DATES 90516 . 93966) (FIX-EQUIV-DATES 93968 . 95493) (
-COPY-COMPARED-FILES 95495 . 97316) (COPY-MISSING-FILES 97318 . 99475) (COMPILED-ON-SAME-SOURCE 99477
- . 101267)) (101463 109341 (CDBROWSER 101473 . 105440) (CDBROWSER.STRINGS 105442 . 109339)) (109503 
-111239 (CD.TABLEITEM 109513 . 109733) (CD.TABLEITEM.PRINTFN 109735 . 109934) (CD.TABLEITEM.COPYFN 
-109936 . 110994) (CDTABLEBROWSER.HEADING.REPAINTFN 110996 . 111237)) (111240 138091 (
-CDTABLEBROWSER.WHENSELECTEDFN 111250 . 111718) (CD.COMMANDSELECTEDFN 111720 . 117893) (CD-MENUFN 
-117895 . 124372) (CD-COMPARE-FILES 124374 . 127901) (CDBROWSER-COPY 127903 . 132965) (
-CDBROWSER-DELETE-FILE 132967 . 137570) (CD-SWAPDIRS 137572 . 138089)))))
+  (FILEMAP (NIL (2658 23637 (COMPAREDIRECTORIES 2668 . 8003) (COMPAREDIRECTORIES.INFOS 8005 . 11234) (
+COMPAREDIRECTORIES.CANDIDATES 11236 . 14621) (CDENTRIES.SELECT 14623 . 19525) (
+COMPAREDIRECTORIES.INFOS.TYPE 19527 . 20871) (MATCHNAME 20873 . 21553) (CD.INSURECDVALUE 21555 . 23169
+) (CD.UPDATEWIDTHS 23171 . 23635)) (23638 34343 (CDFILES 23648 . 29745) (CDFILES.MATCH 29747 . 31372) 
+(CDFILES.PATS 31374 . 34341)) (34344 52362 (CDPRINT 34354 . 36871) (CDPRINT.HEADER 36873 . 37770) (
+CDPRINT.LINE 37772 . 41201) (CDPRINT.MAXWIDTHS 41203 . 45318) (CDPRINT.COLHEADERS 45320 . 46605) (
+CDPRINT.COLUMNS 46607 . 51727) (CDTEDIT 51729 . 52360)) (52363 61484 (CDMAP 52373 . 53805) (CDENTRY 
+53807 . 54116) (CDSUBSET 54118 . 55557) (CDMERGE 55559 . 59543) (CDMERGE.COMMON 59545 . 60860) (
+CD.SORT 60862 . 61482)) (61485 69023 (BINCOMP 61495 . 65784) (EOLTYPE 65786 . 68348) (EOLTYPE.SHOW 
+68350 . 69021)) (69551 82078 (FIND-UNCOMPILED-FILES 69561 . 73204) (FIND-UNSOURCED-FILES 73206 . 75590
+) (FIND-SOURCE-FILES 75592 . 77330) (FIND-COMPILED-FILES 77332 . 79209) (FIND-UNLOADED-FILES 79211 . 
+80064) (FIND-LOADED-FILES 80066 . 80494) (FIND-MULTICOMPILED-FILES 80496 . 82076)) (82079 90510 (
+CREATED-AS 82089 . 86886) (SOURCE-FOR-COMPILED-P 86888 . 89815) (COMPILE-SOURCE-DATE-DIFF 89817 . 
+90508)) (90511 101274 (FIX-DIRECTORY-DATES 90521 . 93971) (FIX-EQUIV-DATES 93973 . 95498) (
+COPY-COMPARED-FILES 95500 . 97321) (COPY-MISSING-FILES 97323 . 99480) (COMPILED-ON-SAME-SOURCE 99482
+ . 101272)) (101468 109346 (CDBROWSER 101478 . 105445) (CDBROWSER.STRINGS 105447 . 109344)) (109508 
+111244 (CD.TABLEITEM 109518 . 109738) (CD.TABLEITEM.PRINTFN 109740 . 109939) (CD.TABLEITEM.COPYFN 
+109941 . 110999) (CDTABLEBROWSER.HEADING.REPAINTFN 111001 . 111242)) (111245 138359 (
+CDTABLEBROWSER.WHENSELECTEDFN 111255 . 111723) (CD.COMMANDSELECTEDFN 111725 . 117898) (CD-MENUFN 
+117900 . 124377) (CD-COMPARE-FILES 124379 . 127906) (CDBROWSER-COPY 127908 . 133233) (
+CDBROWSER-DELETE-FILE 133235 . 137838) (CD-SWAPDIRS 137840 . 138357)))))
 STOP
diff --git a/lispusers/COMPAREDIRECTORIES.LCOM b/lispusers/COMPAREDIRECTORIES.LCOM
index 80f806ea..996c3950 100644
Binary files a/lispusers/COMPAREDIRECTORIES.LCOM and b/lispusers/COMPAREDIRECTORIES.LCOM differ
diff --git a/lispusers/GITFNS b/lispusers/GITFNS
index 7b9e5ad3..035519af 100644
--- a/lispusers/GITFNS
+++ b/lispusers/GITFNS
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10 :FORMAT :UTF-8)
 
-(FILECREATED " 2-Mar-2026 14:00:13" {WMEDLEY}<lispusers>GITFNS.;576 133513 
+(FILECREATED "16-Mar-2026 12:05:55" {WMEDLEY}<lispusers>GITFNS.;578 134065 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS GIT-MY-NEXT-BRANCH)
+      :CHANGES-TO (FNS GIT-BRANCH-WHENSELECTEDFN PRC-COMMAND)
 
-      :PREVIOUS-DATE "26-Feb-2026 00:39:22" {WMEDLEY}<lispusers>GITFNS.;575)
+      :PREVIOUS-DATE " 2-Mar-2026 14:00:13" {WMEDLEY}<lispusers>GITFNS.;576)
 
 
 (PRETTYCOMPRINT GITFNSCOMS)
@@ -535,7 +535,8 @@
 (DEFINEQ
 
 (PRC-COMMAND
-  [LAMBDA (REMOTEBRANCH DRAFTS PROJECT)                      (* ; "Edited 29-Jan-2025 19:19 by rmk")
+  [LAMBDA (REMOTEBRANCH DRAFTS PROJECT)                      (* ; "Edited 16-Mar-2026 11:54 by rmk")
+                                                             (* ; "Edited 29-Jan-2025 19:19 by rmk")
                                                              (* ; "Edited 13-May-2024 18:49 by rmk")
                                                              (* ; "Edited  2-May-2024 11:44 by rmk")
                                                              (* ; "Edited  1-Apr-2024 20:24 by rmk")
@@ -592,7 +593,10 @@
                       then (SETQ MENUWINDOW (ADDMENU (GIT-BRANCH-MENU (GIT-PRC-BRANCHES DRAFTS 
                                                                              PROJECT PRS)
                                                             (CONCAT (LENGTH PRS)
-                                                                   " pull requests"))
+                                                                   " pull requests in "
+                                                                   (GIT-GET-PROJECT PROJECT
+                                                                          'PROJECTNAME))
+                                                            PROJECT)
                                                    NIL NIL T)) 
 
                            (* ;; "Position the new menu just under the current TTY window, to keep it out of the way of the comparison windows.  If we have menus open for other projects, those probably should be pushed down to make room for the new menu, and moved up when a higher menu is closed.  An edge case that is not worth the effort. ")
@@ -1409,7 +1413,8 @@
                WHENSELECTEDFN ← (FUNCTION GIT-BRANCH-WHENSELECTEDFN)))])
 
 (GIT-BRANCH-WHENSELECTEDFN
-  [LAMBDA (ITEM MENU BUTTON)                                 (* ; "Edited  2-Oct-2025 23:08 by rmk")
+  [LAMBDA (ITEM MENU BUTTON)                                 (* ; "Edited 16-Mar-2026 12:05 by rmk")
+                                                             (* ; "Edited  2-Oct-2025 23:08 by rmk")
                                                              (* ; "Edited 30-Sep-2025 14:58 by rmk")
                                                              (* ; "Edited 21-Mar-2025 19:07 by rmk")
                                                              (* ; "Edited 11-May-2024 11:05 by rmk")
@@ -1420,9 +1425,11 @@
 
     (LET [(PR (CAR (LAST ITEM]
          (if (EQ BUTTON 'MIDDLE)
-             then (ShellOpen (CONCAT "https://github.com/Interlisp/medley/pull/" (fetch (PULLREQUEST
-                                                                                         PRNUMBER)
-                                                                                    of PR)))
+             then (ShellOpen (CONCAT "https://github.com/Interlisp/"
+                                    (L-CASE (GIT-GET-PROJECT (fetch PRPROJECT of PR)
+                                                   'PROJECTNAME))
+                                    "/pull/"
+                                    (fetch (PULLREQUEST PRNUMBER) of PR)))
            else 
                 (* ;; "This prints notices in its own TTY window")
 
@@ -2422,33 +2429,33 @@
 
 (PUTPROPS GITFNS FILETYPE :TCOMPL)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (4178 21056 (GIT-CLONEP 4188 . 5619) (GIT-INIT 5621 . 6251) (GIT-MAKE-PROJECT 6253 . 
-14110) (GIT-GET-PROJECT 14112 . 16037) (GIT-PUT-PROJECT-FIELD 16039 . 17680) (GIT-PROJECT-PATH 17682
- . 18726) (FIND-ANCESTOR-DIRECTORY 18728 . 19079) (GIT-FIND-CLONE 19081 . 20164) (GIT-MAINBRANCH 20166
- . 20561) (GIT-MAINBRANCH? 20563 . 21054)) (26519 31448 (PRC-COMMAND 26529 . 31446)) (31504 34292 (
-ALLSUBDIRS 31514 . 32800) (MEDLEYSUBDIRS 32802 . 33495) (GITSUBDIRS 33497 . 34290)) (34293 36698 (
-TOGIT 34303 . 35711) (FROMGIT 35713 . 36696)) (36699 39709 (MYMEDLEYSUBDIR 36709 . 37165) (GITSUBDIR 
-37167 . 37610) (STRIPDIR 37612 . 37990) (STRIPHOST 37992 . 38232) (STRIPNAME 38234 . 38987) (
-STRIPWHERE 38989 . 39707)) (39710 41945 (GFILE4MFILE 39720 . 40416) (MFILE4GFILE 40418 . 40987) (
-GIT-REPO-FILENAME 40989 . 41943)) (41994 52251 (GIT-COMMIT 42004 . 42830) (GIT-PUSH 42832 . 43592) (
-GIT-PULL 43594 . 44346) (GIT-APPROVAL 44348 . 44697) (GIT-GET-FILE 44699 . 46614) (GIT-FILE-EXISTS? 
-46616 . 46890) (GIT-REMOTE-UPDATE 46892 . 47727) (GIT-REMOTE-ADD 47729 . 48036) (GIT-FILE-DATE 48038
- . 49085) (GIT-FILE-HISTORY 49087 . 51021) (GIT-PRINT-FILE-HISTORY 51023 . 52075) (GIT-FETCH 52077 . 
-52249)) (52281 64233 (GIT-BRANCH-DIFF 52291 . 59180) (GIT-COMMIT-DIFFS 59182 . 60073) (
-GIT-BRANCH-RELATIONS 60075 . 63759) (GIT-MODIFIED 63761 . 64231)) (64278 83045 (GIT-BRANCH-NUM 64288
- . 64861) (GIT-CHECKOUT 64863 . 66149) (GIT-WHICH-BRANCH 66151 . 66558) (GIT-MAKE-BRANCH 66560 . 69139
-) (GIT-BRANCHES 69141 . 71738) (GIT-BRANCH-EXISTS? 71740 . 72611) (GIT-PICK-BRANCH 72613 . 73103) (
-GIT-BRANCH-MENU 73105 . 73994) (GIT-BRANCH-WHENSELECTEDFN 73996 . 75535) (GIT-PULL-REQUESTS 75537 . 
-79422) (GIT-SHORT-BRANCH-NAME 79424 . 79715) (GIT-LONG-NAME 79717 . 80034) (GIT-PRC-BRANCHES 80036 . 
-83043)) (83075 87829 (GIT-MY-CURRENT-BRANCH 83085 . 83455) (GIT-MY-BRANCHP 83457 . 84075) (
-GIT-MY-NEXT-BRANCH 84077 . 85877) (GIT-MY-BRANCHES 85879 . 87827)) (87875 91959 (GIT-ADD-WORKTREE 
-87885 . 89492) (GIT-REMOVE-WORKTREE 89494 . 90426) (GIT-LIST-WORKTREES 90428 . 91239) (WORKTREEDIR 
-91241 . 91957)) (92007 125045 (GIT-GET-DIFFERENT-FILES 92017 . 98925) (
-GIT-BRANCHES-COMPARE-DIRECTORIES 98927 . 106566) (GIT-WORKING-COMPARE-DIRECTORIES 106568 . 112370) (
-GIT-COMPARE-WORKTREE 112372 . 116350) (GITCDOBJBUTTONFN 116352 . 120850) (GIT-CD-LABELFN 120852 . 
-121938) (GIT-CD-MENUFN 121940 . 123026) (GIT-WORKING-COMPARE-FILES 123028 . 123648) (
-GIT-BRANCHES-COMPARE-FILES 123650 . 124814) (GIT-PR-COMPARE 124816 . 125043)) (125115 133446 (CDGITDIR
- 125125 . 125812) (GIT-COMMAND 125814 . 127372) (GITORIGIN 127374 . 128071) (GIT-INITIALS 128073 . 
-128377) (GIT-COMMAND-TO-FILE 128379 . 131864) (GIT-RESULT-TO-LINES 131866 . 132779) (STRIPLOCAL 132781
- . 133444)))))
+  (FILEMAP (NIL (4197 21075 (GIT-CLONEP 4207 . 5638) (GIT-INIT 5640 . 6270) (GIT-MAKE-PROJECT 6272 . 
+14129) (GIT-GET-PROJECT 14131 . 16056) (GIT-PUT-PROJECT-FIELD 16058 . 17699) (GIT-PROJECT-PATH 17701
+ . 18745) (FIND-ANCESTOR-DIRECTORY 18747 . 19098) (GIT-FIND-CLONE 19100 . 20183) (GIT-MAINBRANCH 20185
+ . 20580) (GIT-MAINBRANCH? 20582 . 21073)) (26538 31832 (PRC-COMMAND 26548 . 31830)) (31888 34676 (
+ALLSUBDIRS 31898 . 33184) (MEDLEYSUBDIRS 33186 . 33879) (GITSUBDIRS 33881 . 34674)) (34677 37082 (
+TOGIT 34687 . 36095) (FROMGIT 36097 . 37080)) (37083 40093 (MYMEDLEYSUBDIR 37093 . 37549) (GITSUBDIR 
+37551 . 37994) (STRIPDIR 37996 . 38374) (STRIPHOST 38376 . 38616) (STRIPNAME 38618 . 39371) (
+STRIPWHERE 39373 . 40091)) (40094 42329 (GFILE4MFILE 40104 . 40800) (MFILE4GFILE 40802 . 41371) (
+GIT-REPO-FILENAME 41373 . 42327)) (42378 52635 (GIT-COMMIT 42388 . 43214) (GIT-PUSH 43216 . 43976) (
+GIT-PULL 43978 . 44730) (GIT-APPROVAL 44732 . 45081) (GIT-GET-FILE 45083 . 46998) (GIT-FILE-EXISTS? 
+47000 . 47274) (GIT-REMOTE-UPDATE 47276 . 48111) (GIT-REMOTE-ADD 48113 . 48420) (GIT-FILE-DATE 48422
+ . 49469) (GIT-FILE-HISTORY 49471 . 51405) (GIT-PRINT-FILE-HISTORY 51407 . 52459) (GIT-FETCH 52461 . 
+52633)) (52665 64617 (GIT-BRANCH-DIFF 52675 . 59564) (GIT-COMMIT-DIFFS 59566 . 60457) (
+GIT-BRANCH-RELATIONS 60459 . 64143) (GIT-MODIFIED 64145 . 64615)) (64662 83597 (GIT-BRANCH-NUM 64672
+ . 65245) (GIT-CHECKOUT 65247 . 66533) (GIT-WHICH-BRANCH 66535 . 66942) (GIT-MAKE-BRANCH 66944 . 69523
+) (GIT-BRANCHES 69525 . 72122) (GIT-BRANCH-EXISTS? 72124 . 72995) (GIT-PICK-BRANCH 72997 . 73487) (
+GIT-BRANCH-MENU 73489 . 74378) (GIT-BRANCH-WHENSELECTEDFN 74380 . 76087) (GIT-PULL-REQUESTS 76089 . 
+79974) (GIT-SHORT-BRANCH-NAME 79976 . 80267) (GIT-LONG-NAME 80269 . 80586) (GIT-PRC-BRANCHES 80588 . 
+83595)) (83627 88381 (GIT-MY-CURRENT-BRANCH 83637 . 84007) (GIT-MY-BRANCHP 84009 . 84627) (
+GIT-MY-NEXT-BRANCH 84629 . 86429) (GIT-MY-BRANCHES 86431 . 88379)) (88427 92511 (GIT-ADD-WORKTREE 
+88437 . 90044) (GIT-REMOVE-WORKTREE 90046 . 90978) (GIT-LIST-WORKTREES 90980 . 91791) (WORKTREEDIR 
+91793 . 92509)) (92559 125597 (GIT-GET-DIFFERENT-FILES 92569 . 99477) (
+GIT-BRANCHES-COMPARE-DIRECTORIES 99479 . 107118) (GIT-WORKING-COMPARE-DIRECTORIES 107120 . 112922) (
+GIT-COMPARE-WORKTREE 112924 . 116902) (GITCDOBJBUTTONFN 116904 . 121402) (GIT-CD-LABELFN 121404 . 
+122490) (GIT-CD-MENUFN 122492 . 123578) (GIT-WORKING-COMPARE-FILES 123580 . 124200) (
+GIT-BRANCHES-COMPARE-FILES 124202 . 125366) (GIT-PR-COMPARE 125368 . 125595)) (125667 133998 (CDGITDIR
+ 125677 . 126364) (GIT-COMMAND 126366 . 127924) (GITORIGIN 127926 . 128623) (GIT-INITIALS 128625 . 
+128929) (GIT-COMMAND-TO-FILE 128931 . 132416) (GIT-RESULT-TO-LINES 132418 . 133331) (STRIPLOCAL 133333
+ . 133996)))))
 STOP
diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM
index edc706ad..03bd1bb9 100644
Binary files a/lispusers/GITFNS.LCOM and b/lispusers/GITFNS.LCOM differ
