diff --git a/internal/TEDIT-DEBUG b/internal/TEDIT-DEBUG
index ced7428f..6a953ed0 100644
--- a/internal/TEDIT-DEBUG
+++ b/internal/TEDIT-DEBUG
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 1-Feb-2025 10:15:55" {WMEDLEY}<internal>TEDIT-DEBUG.;131 130299 
+(FILECREATED "19-Feb-2025 12:21:45" {WMEDLEY}<internal>TEDIT-DEBUG.;135 130829 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (MACROS DEBUGOUTPUT)
+      :CHANGES-TO (FNS SPPRINT)
 
-      :PREVIOUS-DATE " 1-Feb-2025 08:28:14" {WMEDLEY}<internal>TEDIT-DEBUG.;130)
+      :PREVIOUS-DATE " 8-Feb-2025 22:41:55" {WMEDLEY}<internal>TEDIT-DEBUG.;134)
 
 
 (PRETTYCOMPRINT TEDIT-DEBUGCOMS)
@@ -30,7 +30,7 @@
         (COMS                                                (* ; "Inspect")
               (FNS IPC ILINES ISEL ITS IPANES ITL IHIST IPCTB IMB ICL IPL ICARET INSPECTPIECES))
         (COMS                                                (* ; "Show")
-              (FNS SP SL SSP STL SPF SLF SHOWLINE SLL STBYTES))
+              (FNS SP SL SSP STL SPF SLF SHOWLINE SLL STBYTES SSEL))
         (COMS (FNS NTHPIECE NPIECES NTHPIECECHAR SELPIECE PIECENUM PCBYTES))
         (COMS (FNS FILEBYTES TFILEBYTES))
         (FNS TRELMOVE TSCROLL TSCROLL*)
@@ -975,6 +975,15 @@
                 (SETQ VERSION (\SMALLPIN STREAM))
                 (PRINTOUT OUTFILE VERSION " (" (IDIFFERENCE VERSION 31415)
                        ")" T])
+
+(SSEL
+  [LAMBDA (SEL TEXTOBJ OFILE)                                (* ; "Edited  3-Feb-2025 23:05 by rmk")
+    (SETQ TEXTOBJ (GTO TEXTOBJ))
+    (CL:UNLESS SEL
+        (SETQ SEL (TEXTSEL TEXTOBJ)))
+    (for I from (GETSEL SEL CH#) to (GETSEL SEL CHLAST) do (PRINTOUT OFILE (TEDIT.NTHCHAR TEXTOBJ I))
+         )
+    (TERPRI OFILE])
 )
 (DEFINEQ
 
@@ -1212,7 +1221,9 @@
 (DEFINEQ
 
 (SPPRINT
-  [LAMBDA (P OSTREAM TEXTOBJ NOCR)                           (* ; "Edited  5-Aug-2024 00:30 by rmk")
+  [LAMBDA (P OSTREAM TEXTOBJ NOCR)                           (* ; "Edited 19-Feb-2025 12:21 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:41 by rmk")
+                                                             (* ; "Edited  5-Aug-2024 00:30 by rmk")
                                                              (* ; "Edited  5-May-2024 12:55 by rmk")
                                                              (* ; "Edited 23-Apr-2024 08:54 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:58 by rmk")
@@ -1275,12 +1286,12 @@
                     .I4 PLEN (CL:IF (PPARALAST P)
                                  "*"
                                  "")
-                    (CL:IF (type? FMTSPEC PARALOOKS)
-                        (if (fetch (FMTSPEC FMTNEWPAGEBEFORE) of PARALOOKS)
-                            then (CL:IF (fetch (FMTSPEC FMTNEWPAGEAFTER) of PARALOOKS)
+                    (CL:IF (type? PARALOOKS PARALOOKS)
+                        (if (GETPLOOKS PARALOOKS FMTNEWPAGEBEFORE)
+                            then (CL:IF (GETPLOOKS PARALOOKS FMTNEWPAGEAFTER)
                                      "ba"
                                      "b")
-                          elseif (fetch (FMTSPEC FMTNEWPAGEAFTER) of PARALOOKS)
+                          elseif (GETPLOOKS PARALOOKS FMTNEWPAGEAFTER)
                             then "a"
                           else "")
                         "")
@@ -2430,30 +2441,30 @@
 (ADDTOVAR LAMA )
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (4852 7411 (GTO 4862 . 5112) (GTS 5114 . 6885) (GTW 6887 . 7043) (GSEL 7045 . 7409)) (
-7468 20599 (IPC 7478 . 8982) (ILINES 8984 . 11525) (ISEL 11527 . 12138) (ITS 12140 . 13864) (IPANES 
-13866 . 14101) (ITL 14103 . 14522) (IHIST 14524 . 17186) (IPCTB 17188 . 17496) (IMB 17498 . 18113) (
-ICL 18115 . 18680) (IPL 18682 . 19086) (ICARET 19088 . 19465) (INSPECTPIECES 19467 . 20597)) (20621 
-55720 (SP 20631 . 25148) (SL 25150 . 28294) (SSP 28296 . 29727) (STL 29729 . 38241) (SPF 38243 . 40542
-) (SLF 40544 . 49677) (SHOWLINE 49679 . 53241) (SLL 53243 . 53990) (STBYTES 53992 . 55718)) (55721 
-61094 (NTHPIECE 55731 . 56863) (NPIECES 56865 . 57730) (NTHPIECECHAR 57732 . 59040) (SELPIECE 59042 . 
-59484) (PIECENUM 59486 . 60205) (PCBYTES 60207 . 61092)) (61095 63569 (FILEBYTES 61105 . 62529) (
-TFILEBYTES 62531 . 63567)) (63570 64892 (TRELMOVE 63580 . 63823) (TSCROLL 63825 . 63991) (TSCROLL* 
-63993 . 64890)) (64893 67942 (TRY 64903 . 66172) (TEDITCLOSEW 66174 . 66517) (PARALASTWITHOUTEOL 66519
- . 67404) (FIXPARALAST 67406 . 67940)) (67943 82273 (SPPRINT 67953 . 74369) (SPPRINT.CHAR 74371 . 
-75355) (SPPRINT.OBJ 75357 . 78415) (SHOWPIECEBYTES 78417 . 79973) (CHECKPLENGTHS 79975 . 80432) (SBT 
-80434 . 81423) (COPYPCHAIN 81425 . 82271)) (82274 84335 (POSLINE 82284 . 84333)) (84336 85219 (
-PRESPLIT 84346 . 85217)) (85220 86933 (ALLTL 85230 . 86483) (NTHCHARSLOT 86485 . 86931)) (86959 97172 
-(PLCHAIN 86969 . 87497) (PRINTLINE 87499 . 90489) (SL.GETLINES 90491 . 93784) (CHECKLINES 93786 . 
-94766) (COLLECTLINES 94768 . 95020) (NTHLINE 95022 . 96027) (HEIGHT 96029 . 96317) (LINEBOTS 96319 . 
-97170)) (97173 99621 (IPC.DECODEARGS 97183 . 99619)) (99622 100215 (SPF1 99632 . 100213)) (100244 
-102622 (SLF.FATPLEN 100254 . 101113) (FILEPIECE 101115 . 102620)) (102655 103423 (SELTEDIT 102665 . 
-103421)) (103493 109105 (PPARA 103503 . 103925) (PRUN 103927 . 105403) (ADDLINEPOSITIONS 105405 . 
-106832) (SBR 106834 . 107488) (SBC 107490 . 109103)) (109162 113837 (DFOV 109172 . 111642) (OLDWI 
-111644 . 112019) (DFOV.OLDEST 112021 . 112446) (COMP 112448 . 112643) (DFR 112645 . 113835)) (113838 
-114871 (DFGV 113848 . 114374) (GDIRECTORIES 114376 . 114869)) (114872 121437 (TTEST 114882 . 119414) (
-LTEST 119416 . 120781) (THC 120783 . 121435)) (121751 122443 (SHOWSAFE 121761 . 122441)) (122496 
-122943 (MYH 122506 . 122941)) (123188 124283 (DFVENUE 123198 . 124077) (VSEE 124079 . 124281)) (124284
- 124738 (PTT 124294 . 124736)) (125985 128301 (TEDIT-DEBUG 125995 . 128299)) (128302 130038 (TRENAME 
-128312 . 130036)))))
+  (FILEMAP (NIL (4850 7409 (GTO 4860 . 5110) (GTS 5112 . 6883) (GTW 6885 . 7041) (GSEL 7043 . 7407)) (
+7466 20597 (IPC 7476 . 8980) (ILINES 8982 . 11523) (ISEL 11525 . 12136) (ITS 12138 . 13862) (IPANES 
+13864 . 14099) (ITL 14101 . 14520) (IHIST 14522 . 17184) (IPCTB 17186 . 17494) (IMB 17496 . 18111) (
+ICL 18113 . 18678) (IPL 18680 . 19084) (ICARET 19086 . 19463) (INSPECTPIECES 19465 . 20595)) (20619 
+56081 (SP 20629 . 25146) (SL 25148 . 28292) (SSP 28294 . 29725) (STL 29727 . 38239) (SPF 38241 . 40540
+) (SLF 40542 . 49675) (SHOWLINE 49677 . 53239) (SLL 53241 . 53988) (STBYTES 53990 . 55716) (SSEL 55718
+ . 56079)) (56082 61455 (NTHPIECE 56092 . 57224) (NPIECES 57226 . 58091) (NTHPIECECHAR 58093 . 59401) 
+(SELPIECE 59403 . 59845) (PIECENUM 59847 . 60566) (PCBYTES 60568 . 61453)) (61456 63930 (FILEBYTES 
+61466 . 62890) (TFILEBYTES 62892 . 63928)) (63931 65253 (TRELMOVE 63941 . 64184) (TSCROLL 64186 . 
+64352) (TSCROLL* 64354 . 65251)) (65254 68303 (TRY 65264 . 66533) (TEDITCLOSEW 66535 . 66878) (
+PARALASTWITHOUTEOL 66880 . 67765) (FIXPARALAST 67767 . 68301)) (68304 82803 (SPPRINT 68314 . 74899) (
+SPPRINT.CHAR 74901 . 75885) (SPPRINT.OBJ 75887 . 78945) (SHOWPIECEBYTES 78947 . 80503) (CHECKPLENGTHS 
+80505 . 80962) (SBT 80964 . 81953) (COPYPCHAIN 81955 . 82801)) (82804 84865 (POSLINE 82814 . 84863)) (
+84866 85749 (PRESPLIT 84876 . 85747)) (85750 87463 (ALLTL 85760 . 87013) (NTHCHARSLOT 87015 . 87461)) 
+(87489 97702 (PLCHAIN 87499 . 88027) (PRINTLINE 88029 . 91019) (SL.GETLINES 91021 . 94314) (CHECKLINES
+ 94316 . 95296) (COLLECTLINES 95298 . 95550) (NTHLINE 95552 . 96557) (HEIGHT 96559 . 96847) (LINEBOTS 
+96849 . 97700)) (97703 100151 (IPC.DECODEARGS 97713 . 100149)) (100152 100745 (SPF1 100162 . 100743)) 
+(100774 103152 (SLF.FATPLEN 100784 . 101643) (FILEPIECE 101645 . 103150)) (103185 103953 (SELTEDIT 
+103195 . 103951)) (104023 109635 (PPARA 104033 . 104455) (PRUN 104457 . 105933) (ADDLINEPOSITIONS 
+105935 . 107362) (SBR 107364 . 108018) (SBC 108020 . 109633)) (109692 114367 (DFOV 109702 . 112172) (
+OLDWI 112174 . 112549) (DFOV.OLDEST 112551 . 112976) (COMP 112978 . 113173) (DFR 113175 . 114365)) (
+114368 115401 (DFGV 114378 . 114904) (GDIRECTORIES 114906 . 115399)) (115402 121967 (TTEST 115412 . 
+119944) (LTEST 119946 . 121311) (THC 121313 . 121965)) (122281 122973 (SHOWSAFE 122291 . 122971)) (
+123026 123473 (MYH 123036 . 123471)) (123718 124813 (DFVENUE 123728 . 124607) (VSEE 124609 . 124811)) 
+(124814 125268 (PTT 124824 . 125266)) (126515 128831 (TEDIT-DEBUG 126525 . 128829)) (128832 130568 (
+TRENAME 128842 . 130566)))))
 STOP
diff --git a/internal/TEDIT-DEBUG.LCOM b/internal/TEDIT-DEBUG.LCOM
index 051a3a85..1c29b266 100644
Binary files a/internal/TEDIT-DEBUG.LCOM and b/internal/TEDIT-DEBUG.LCOM differ
diff --git a/library/tedit/TEDIT b/library/tedit/TEDIT
index 8927c550..84407530 100644
--- a/library/tedit/TEDIT
+++ b/library/tedit/TEDIT
@@ -1,13 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 2-Feb-2025 11:37:42" {WMEDLEY}<library>tedit>TEDIT.;742 154343 
+(FILECREATED "20-Feb-2025 08:50:50" {WMEDLEY}<library>tedit>TEDIT.;763 154870 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS TEDIT.INSERT.OBJECT)
-                  (VARS TEDITCOMS)
+      :CHANGES-TO (FNS TEDITSTRING)
 
-      :PREVIOUS-DATE "31-Jan-2025 09:36:11" {WMEDLEY}<library>tedit>TEDIT.;741)
+      :PREVIOUS-DATE "19-Feb-2025 13:30:08" {WMEDLEY}<library>tedit>TEDIT.;762)
 
 
 (PRETTYCOMPRINT TEDITCOMS)
@@ -35,7 +34,8 @@
                              (GLOBALVARS CHECK-TEDIT-ASSERTIONS)
                              (INITVARS (CHECK-TEDIT-ASSERTIONS T)))
                       (MACROS OBJECT.ALLOWS)))
-        (FILES TEDIT-PCTREE TEDIT-STREAM TEDIT-COMMAND TEDIT-SCREEN TEDIT-ABBREV TEDIT-LOOKS)
+        (FILES TEDIT-PCTREE TEDIT-STREAM TEDIT-COMMAND TEDIT-SCREEN TEDIT-ABBREV TEDIT-LOOKS 
+               TEDIT-STYLES)
         [VARS (TEDIT.STARTUP.MONITORLOCK (CREATE.MONITORLOCK 'TEDIT.STARTUP]
         (INITVARS (TEDIT.TENTATIVE NIL)
                (TEDIT.DEFAULT.PROPS NIL))
@@ -89,9 +89,9 @@
 
 
 (RPAQQ TEDITFILES (TEDIT TEDIT-PCTREE TEDIT-SELECTION TEDIT-SCREEN TEDIT-STREAM TEDIT-COMMAND 
-                         TEDIT-FILE TEDIT-OLDFILE TEDIT-LOOKS TEDIT-WINDOW TEDIT-BUTTONS TEDIT-MENU 
-                         TEDIT-FIND TEDIT-FNKEYS TEDIT-HCPY TEDIT-HISTORY TEDIT-PAGE TEDIT-ABBREV 
-                         TEDIT-TFBRAVO))
+                         TEDIT-FILE TEDIT-OLDFILE TEDIT-LOOKS TEDIT-STYLES TEDIT-WINDOW TEDIT-BUTTONS
+                         TEDIT-MENU TEDIT-FIND TEDIT-FNKEYS TEDIT-HCPY TEDIT-HISTORY TEDIT-PAGE 
+                         TEDIT-ABBREV TEDIT-TFBRAVO))
 (DEFINEQ
 
 (MAKE-TEDIT-EXPORTS.ALL
@@ -105,15 +105,19 @@
          VAL])
 
 (UPDATE-TEDIT
-  [LAMBDA (FILES)                                            (* ; "Edited 26-Oct-2022 21:10 by rmk")
+  [LAMBDA (FILES LDFLG)                                      (* ; "Edited 16-Feb-2025 11:25 by rmk")
+                                                             (* ; "Edited 26-Oct-2022 21:10 by rmk")
+    (CL:UNLESS LDFLG (SETQ LDFLG T))
+    (for F in LOADEDFILELST eachtime (SETQ F (TRUEFILENAME F))
+       when [AND (STRPOS ">library>tedit>TEDIT-" F 1 NIL NIL NIL UPPERCASEARRAY)
+                 (STRING.EQUAL 'LCOM (FILENAMEFIELD F 'EXTENSION] collect (FILENAMEFIELD F
+                                                                                 'NAME)
+       finally 
 
-    (* ;; "updates sysout with new versions of loaded files.  Keeps the extension")
+             (* ;; "Loading TEDIT will probably do the DOFILESLOAD for all the other files, this may be overkill.  But we want to make sure the load's happen even if it looks like the files are already there (e.g. not LOAD?).")
 
-    (FOR FILE DIRFILE LOADEDFILE INSIDE (OR FILES TEDITFILES)
-       WHEN [AND (SETQ LOADEDFILE (FOR F IN LOADEDFILELST WHEN (EQ FILE (FILENAMEFIELD F 'NAME))
-                                     DO (RETURN F)))
-                 (SETQ DIRFILE (INFILEP (PACKFILENAME 'VERSION NIL 'BODY LOADEDFILE]
-       UNLESS (EQ LOADEDFILE DIRFILE) COLLECT (LOAD DIRFILE T])
+             (RETURN (for LF in (CONS 'TEDIT (REMOVE 'TEDIT $$VAL))
+                        collect (PSEUDOFILENAME (LOAD LF LDFLG])
 
 (EDIT-TEDIT
   [LAMBDA NIL                                                (* ; "Edited  3-Jul-2023 13:44 by rmk")
@@ -173,7 +177,8 @@
 
 )
 
-(FILESLOAD TEDIT-PCTREE TEDIT-STREAM TEDIT-COMMAND TEDIT-SCREEN TEDIT-ABBREV TEDIT-LOOKS)
+(FILESLOAD TEDIT-PCTREE TEDIT-STREAM TEDIT-COMMAND TEDIT-SCREEN TEDIT-ABBREV TEDIT-LOOKS TEDIT-STYLES
+       )
 
 (RPAQ TEDIT.STARTUP.MONITORLOCK (CREATE.MONITORLOCK 'TEDIT.STARTUP))
 
@@ -361,7 +366,8 @@
              NIL])
 
 (TEDIT.CONCAT
-  [LAMBDA (TSTREAMS SEPARATOR)                               (* ; "Edited 17-Mar-2024 00:21 by rmk")
+  [LAMBDA (TSTREAMS SEPARATOR)                               (* ; "Edited  8-Feb-2025 20:58 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 00:21 by rmk")
                                                              (* ; "Edited 18-Jan-2024 00:03 by rmk")
 
     (* ;; "Produces a textstream that contains the concatenation of all of the TSTREAMS, separated by SEPARATOR.  Any stream that is not already a text stream is first converted to a plaintext stream.  SEPARATOR if provided as a string or character is inserted between the files.")
@@ -381,7 +387,7 @@
               (* ;; "Take overall parameters from the first stream.  ")
 
               (FSETTOBJ CTEXTOBJ DEFAULTCHARLOOKS (FGETTOBJ FIRSTTOBJ DEFAULTCHARLOOKS))
-              (FSETTOBJ CTEXTOBJ FMTSPEC (FGETTOBJ FIRSTTOBJ FMTSPEC))
+              (FSETTOBJ CTEXTOBJ DEFAULTPARALOOKS (FGETTOBJ FIRSTTOBJ DEFAULTPARALOOKS))
               (FSETTOBJ CTEXTOBJ TXTRTBL (FGETTOBJ FIRSTTOBJ TXTRTBL))
               (FSETTOBJ CTEXTOBJ TXTWTBL (FGETTOBJ FIRSTTOBJ TXTWTBL))
               (FSETTOBJ CTEXTOBJ TXTSTYLESHEET (FGETTOBJ FIRSTTOBJ TXTSTYLESHEET))
@@ -415,6 +421,8 @@
 (TEDITSTRING
   [LAMBDA (TEXT WINDOW DONTSPAWN PROPS)
 
+(* ;;; "Edited 20-Feb-2025 08:50 by rmk")
+
 (* ;;; "Edited 31-Mar-2024 10:13 by rmk: If TEXT is NIL, don't coerce it to %"NIL%"")
 
 (* ;;; "Edited 31-Mar-2024 10:12 by rmk")
@@ -427,7 +435,7 @@
 
     (CL:WHEN TEXT
         (SETQ TEXT (MKSTRING TEXT)))
-    (TEDIT (LET ((TSTR (OPENTEXTSTREAM)))
+    (TEDIT (LET ((TSTR (OPENTEXTSTREAM NIL NIL PROPS)))
                 (TEDIT.INSERT TSTR TEXT 1 NIL T)
                 (TEDIT.SETSEL TSTR 1 0 'LEFT)
                 TSTR)
@@ -576,7 +584,10 @@
              (TEDIT.DEACTIVATE.WINDOW TEDW))])
 
 (TEDIT.QUIT
-  [LAMBDA (TSTREAM VALUE)                                    (* ; "Edited 29-Jun-2024 09:12 by rmk")
+  [LAMBDA (TSTREAM VALUE)                                    (* ; "Edited 12-Feb-2025 16:26 by rmk")
+                                                             (* ; "Edited  9-Feb-2025 21:22 by rmk")
+                                                             (* ; "Edited  7-Feb-2025 23:45 by rmk")
+                                                             (* ; "Edited 29-Jun-2024 09:12 by rmk")
                                                              (* ; "Edited 25-Jun-2024 11:59 by rmk")
                                                              (* ; "Edited 20-Sep-2023 17:55 by rmk")
                                                              (* ; "Edited 10-Apr-2023 10:19 by rmk")
@@ -584,23 +595,14 @@
 
     (* ;; "Force the edit session supported by TSTREAM to terminate, and to return VALUE")
 
-    (LET (PRIMPANE (TEXTOBJ (TEXTOBJ TSTREAM)))
-         (FSETTOBJ TEXTOBJ EDITFINISHEDFLG (OR VALUE T))     (* ; 
-                                                    "tell the command loop to stop next time through")
-         (CL:WHEN [AND (SETQ PRIMPANE (FGETTOBJ TEXTOBJ PRIMARYPANE))
-                       (NEQ PRIMPANE (PROCESSPROP (TTY.PROCESS)
-                                            'WINDOW]
+    (LET* ((TEXTOBJ (TEXTOBJ TSTREAM))
+           (PRIMPANE (FGETTOBJ TEXTOBJ PRIMARYPANE)))
 
-             (* ;; "there is a primary pane of the stream, and it is not the window of the tty process, so give it the tty")
+          (* ;; "Make sure the process has the TTY, then tell the command loop to finish.")
 
-             (TTY.PROCESS (WINDOWPROP PRIMPANE 'PROCESS))
-             (AND (NEQ (TTY.PROCESS)
-                       (THIS.PROCESS))
-                  (until [OR (NOT (WINDOWPROP PRIMPANE 'PROCESS))
-                             (PROCESS.FINISHEDP (WINDOWPROP PRIMPANE 'PROCESS] do 
-                                                             (* ; 
-                    "Wait until the Edit process has had a chance to go away before continuing here.")
-                                                                                  (DISMISS))))])
+          (CL:WHEN (AND PRIMPANE (WINDOWPROP PRIMPANE 'PROCESS))
+              (TTY.PROCESS (WINDOWPROP PRIMPANE 'PROCESS)))
+          (FSETTOBJ TEXTOBJ EDITFINISHEDFLG (OR VALUE T])
 
 (TEDIT.MOVE
   [LAMBDA (FROM TO)                                          (* ; "Edited  2-Dec-2024 09:02 by rmk")
@@ -979,11 +981,13 @@
 (DEFINEQ
 
 (\TEDIT.CONCAT.PAGEFRAMES
-  [LAMBDA (CTEXTOBJ TSTEXTOBJECTS INITIALFILEPIECES)         (* ; "Edited 17-Mar-2024 13:20 by rmk")
+  [LAMBDA (CTEXTOBJ TSTEXTOBJECTS INITIALFILEPIECES)         (* ; "Edited 19-Feb-2025 13:30 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:27 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 13:20 by rmk")
                                                              (* ; "Edited 16-Mar-2024 10:03 by rmk")
                                                              (* ; "Edited 18-Jan-2024 22:16 by rmk")
 
-    (* ;; "The individual files may have their own heading paragraphs specified in their pieces and in their pageframes.  Since the heading types are global for the file, we have to make sure the any conflicting heading-type names are made distinct within the combined toplevel pageframe, and that any new names are propagated into the FMTSPEC's of the pieces within each file.")
+    (* ;; "The individual files may have their own heading paragraphs specified in their pieces and in their pageframes.  Since the heading types are global for the file, we have to make sure the any conflicting heading-type names are made distinct within the combined toplevel pageframe, and that any new names are propagated into the PARALOOKS of the pieces within each file.")
 
     (* ;; 
   "Scan all the first/left/right heading frames, grouping all of the heading types by their regions.")
@@ -1021,15 +1025,12 @@
 
          [for PC PPARALOOKS (ALLNEW _ (APPEND FIRSTNEW LEFTNEW RIGHTNEW)) inpieces (\TEDIT.FIRSTPIECE
                                                                                     CTEXTOBJ)
-            eachtime (SETQ PPARALOOKS (PPARALOOKS PC)) when (EQ 'PAGEHEADING (fetch (FMTSPEC 
-                                                                                          FMTPARATYPE
-                                                                                           )
-                                                                                of PPARALOOKS))
-            do (FSETPC PC PPARALOOKS (create FMTSPEC using PPARALOOKS FMTPARASUBTYPE _
-                                                           (CADR (ASSOC (fetch (FMTSPEC 
-                                                                                      FMTPARASUBTYPE)
-                                                                           of PPARALOOKS)
-                                                                        ALLNEW]
+            eachtime (SETQ PPARALOOKS (PPARALOOKS PC)) when (EQ 'PAGEHEADING (GETPLOOKS PPARALOOKS 
+                                                                                    FMTPARATYPE))
+            do (FSETPC PC PPARALOOKS (create PARALOOKS using PPARALOOKS FMTPARASUBTYPE _
+                                                             (CADR (ASSOC (FGETPLOOKS PPARALOOKS 
+                                                                                 FMTPARASUBTYPE)
+                                                                          ALLNEW]
 
          (* ;; "Finally, build the pageframes for the new types and their regions. We take the page frame of the first TSOBJ as the base pattern")
 
@@ -1148,7 +1149,9 @@
                TEXTLEN))])
 
 (TEDIT.RPLCHARCODE
-  [LAMBDA (TSTREAM N NEWCHARCODE NEWCHARLOOKS DONTDISPLAY)   (* ; "Edited 23-Sep-2024 00:36 by rmk")
+  [LAMBDA (TSTREAM N NEWCHARCODE NEWCHARLOOKS DONTDISPLAY)   (* ; "Edited  9-Feb-2025 12:21 by rmk")
+                                                             (* ; "Edited  7-Feb-2025 08:02 by rmk")
+                                                             (* ; "Edited 23-Sep-2024 00:36 by rmk")
                                                              (* ; "Edited 27-Aug-2024 14:49 by rmk")
                                                              (* ; "Edited 31-Jul-2024 12:08 by rmk")
                                                              (* ; "Edited 25-Jun-2024 11:59 by rmk")
@@ -1171,8 +1174,8 @@
     (* ;; "NOTE:  this may introduce new pieces, so must be used carefully with other piece-based or BIN-based iterations.")
 
     (SETQ TSTREAM (TEXTSTREAM TSTREAM))
-    (PROG ((TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)))
-           PC OFFSET START-OF-PIECE PARALAST OLDCHAR)
+    (PROG ((TEXTOBJ (TEXTOBJ! (GETTSTR TSTREAM TEXTOBJ)))
+           PC OFFSET START-OF-PIECE OLDCHAR PARALAST)
           (DECLARE (SPECVARS START-OF-PIECE))
           (CL:WHEN (ILESSP N 0)
               (add N (ADD1 (FGETTOBJ TEXTOBJ TEXTLEN))))
@@ -1190,13 +1193,14 @@
           (replace (STREAM BINABLE) of TSTREAM with NIL)
           (SETQ PC (\TEDIT.CHTOPC N TEXTOBJ T))
           (SETQ OFFSET (ADD1 (IDIFFERENCE N START-OF-PIECE)))(* ; "Change is at OFFSET 1")
-          (if [AND (SMALLP NEWCHARCODE)
+          (SETQ PARALAST (MEMB NEWCHARCODE (FGETTOBJ TEXTOBJ PARABREAKCHARS)))
+          [if (AND (SMALLP NEWCHARCODE)
                    (MEMB (PTYPE PC)
                          STRING.PTYPES)
                    (OR (NULL NEWCHARLOOKS)
                        (EQ NEWCHARLOOKS (PLOOKS PC)))
-                   (NEQ PC (FGETTOBJ TEXTOBJ LASTPIECE))
-                   (NOT (SETQ PARALAST (MEMB NEWCHARCODE (CHARCODE (EOL CR LF FORM]
+                   (NEQ PC (FGETTOBJ TEXTOBJ SUFFIXPIECE))
+                   (NOT PARALAST))
               then 
                    (* ;; 
             "Fast case:  Smash a new character code into an existing string piece with same looks.  ")
@@ -1262,12 +1266,12 @@
                                            (\TEDIT.UNIQUIFY.CHARLOOKS (\TEDIT.CHARLOOKS.FROM.FONT
                                                                        NEWCHARLOOKS)
                                                   TEXTOBJ)
-                                           NEWCHARLOOKS)))
-                 (CL:WHEN PARALAST (FSETPC PC PPARALAST T)))
+                                           NEWCHARLOOKS)))]
+          (CL:WHEN PARALAST (FSETPC PC PPARALAST T))
           (\TEDIT.HISTORYADD TEXTOBJ (\TEDIT.HISTORY.EVENT TEXTOBJ :ReplaceCode N NIL NIL NIL OLDCHAR
                                             ))
           (CL:UNLESS (OR DONTDISPLAY (NOT (\TEDIT.PRIMARYPANE TEXTOBJ)))
-              (\TEDIT.UPDATE.LINES TEXTOBJ 'INSERTION N 1))
+              (\TEDIT.UPDATE.LINES TEXTOBJ 'CHANGED N 1))
           (RETURN TSTREAM])
 
 (TEDIT.NTHCHARCODE
@@ -1496,7 +1500,8 @@
                    (CL:WHEN TYPEIN (\TEDIT.SCROLL.CARET TSTREAM)))])])
 
 (\TEDIT.MOVE
-  [LAMBDA (FROMSEL TOSEL FROMTSTREAM TOTSTREAM)              (* ; "Edited  8-Dec-2024 21:37 by rmk")
+  [LAMBDA (FROMSEL TOSEL FROMTSTREAM TOTSTREAM)              (* ; "Edited  6-Feb-2025 16:17 by rmk")
+                                                             (* ; "Edited  8-Dec-2024 21:37 by rmk")
                                                              (* ; "Edited 26-Nov-2024 22:34 by rmk")
                                                              (* ; "Edited 22-Nov-2024 15:42 by rmk")
                                                              (* ; "Edited 22-Sep-2024 18:43 by rmk")
@@ -1529,7 +1534,7 @@
                 (TOCH# (FGETSEL TOSEL CH#))
                 (TODCH (FGETSEL TOSEL DCH))
                 (TOPOINT (FGETSEL TOSEL POINT))
-                TODELEVENT FROMPIECES)
+                TODELEVENT FROMPIECES BPD)
                (CL:WHEN (\TEDIT.MOVE.MSG FROMOBJ TOOBJ NIL)
                       (RETURN NIL))
 
@@ -1539,68 +1544,78 @@
 
          (* ;; "If FROM is in a different document, the Venue sysout leaves that documents SEL as it was before (i.e. not at the position of the deletion).  Maybe it should be moved (and scrolled) to a point selection at the deletion site?")
 
-         (* ;; "Install FROM pieces  at TO, first clearing out the blue pending delete.  The move-event may be a composite of both.  If we are doing a move in the same textobject, the TO selection (= SEL for  a CTRL-SHIFT SELOPERATION) must be updated to reflect a preceding FROM-deletion.")
+         (* ;; "")
+
+         (* ;; "We'd like to check all the image objects for allowance before we make any changes, but we don't know whether the imageobject WHENxxx functions have side effects even if they decline.  So we check only once, when we do the BPD operation or grab the from pieces.  Since we are testing for MOVE, presumably the insert and delete are both OK.")
+
+         (* ;; " ")
+
+         (* ;; " Get rid of the BPD")
+
+               (CL:WHEN (AND (FGETTOBJ TOOBJ BLUEPENDINGDELETE)
+                             (IGREATERP TODCH 0))
+                   (FSETTOBJ TOOBJ BLUEPENDINGDELETE NIL)
+                   (CL:UNLESS (\TEDIT.DELETE TOOBJ TOSEL)
+                          (RETURN NIL))
+                   (SETQ BPD T)
+                   (CL:WHEN (EQ TOOBJ FROMOBJ)               (* ; "Same text, pre-adjust  the source")
+                       (\TEDIT.SEL.DELETEDCHARS FROMSEL TOCH# TODCH)))
 
          (* ;; "")
 
+         (* ;; "BPD is gone, TOSEL and FROMSEL have been adjusted")
+
          (* ;; "Grab (a copy of) the source pieces, if image objects allow copying.  FROMPIECES is essentially a clipboard for extract/insert--the FROMOBJ has not yet been changed.")
 
                (SETQ FROMPIECES (\TEDIT.SELPIECES.COPY (\TEDIT.SELPIECES FROMSEL NIL FROMOBJ)
-                                       'COPY TOOBJ FROMOBJ))
-               (CL:UNLESS FROMPIECES (RETURN))
-               (\TEDIT.SHOWSEL FROMSEL NIL FROMOBJ)          (* ; "Turn off any current highlighting")
+                                       'MOVE TOOBJ FROMOBJ))
+               (CL:UNLESS FROMPIECES
+
+                   (* ;; "If bailing, should we undo the BPDEVENT (if history is ON)?")
+
+                   (RETURN))
+               (\TEDIT.SHOWSEL FROMSEL NIL FROMOBJ)
                (\TEDIT.SHOWSEL TOSEL NIL TOOBJ)
 
-         (* ;; "")
-
-         (* ;; "Delete the FROM unless an object doesn't allow deletion.")
+         (* ;; "No need to recheck allowance")
 
                (if (EQ TOOBJ FROMOBJ)
                    then 
-                        (* ;; "In this case, TOSEL is SEL and FROMSEL is somewhere else in TOOBJ.")
+                        (* ;; 
+      "Can't call \TEDIT.DELETE because we don't want to implicitly update the TOSEL for the insert.")
 
-                        (CL:UNLESS (\TEDIT.DELETE.SELPIECES FROMOBJ FROMSEL)
-                               (RETURN))
-                        (SETQ TODELEVENT (\TEDIT.POPEVENT TOOBJ)) 
-                                                             (* ; 
-                                             "Pop so the insert below doesn't bump the history count")
-                        (\TEDIT.UPDATE.LINES FROMOBJ 'DELETION FROMSEL)
-                        (\TEDIT.SEL.DELETEDCHARS TOSEL FROMSEL) 
+                        (\TEDIT.DELETE.SELPIECES FROMOBJ FROMSEL NIL T)
+                        (\TEDIT.SEL.DELETEDCHARS TOSEL FROMSEL)
+                        (\TEDIT.UPDATE.LINES FROMOBJ 'DELETION FROMSEL) 
 
-                        (* ;; "TOSEL has been adjusted to after-deletion chnos, but lines have not yet been updated/displayed and TOSEL has not been fixed.")
+                        (* ;; "Pop to accumulate into a single event (BPD, DELETE, INSERT).")
 
-                 elseif (\TEDIT.DELETE FROMOBJ FROMSEL)
-                   then 
-                        (* ;; "The FROM deletion has been accomplished, and FROM's history is good.  If the destination is foreign, that's not our problem.")
+                 else (\TEDIT.DELETE FROMOBJ FROMSEL NIL NIL T))
 
-                        (CL:WHEN (GETTEXTPROP TOOBJ 'COPYBYBKSYSBUF)
-                            (\TEDIT.FOREIGN.COPY (WFROMDS TOTSTREAM)
-                                   FROMSEL T)
-                            (RETURN))
-                 else (RETURN))
+         (* ;; "Deletion accomplished possibly in separate FROMOBJ with its own history.")
 
          (* ;; "")
 
-               (if (FGETTOBJ TOOBJ BLUEPENDINGDELETE)
-                   then (FSETTOBJ TOOBJ BLUEPENDINGDELETE NIL)
-                        (\TEDIT.REPLACE.SELPIECES FROMPIECES TOOBJ TOSEL)
-                 else (\TEDIT.INSERT.SELPIECES FROMPIECES TOOBJ TOSEL))
-
-         (* ;; 
-         "TO's history has either a single replace or insert, depending on its BLUEPENDINGDELETE")
-
+               (CL:WHEN (GETTEXTPROP TOOBJ 'COPYBYBKSYSBUF)
+                   (\TEDIT.FOREIGN.COPY (WFROMDS TOTSTREAM)
+                          FROMSEL T)
+                   (CL:WHEN BPD                              (* ; "If no BPD, TO history is good")
+                       (\TEDIT.HISTORYADD.COMPOSITE TOOBJ TOOBJ (LIST (\TEDIT.POPEVENT TOOBJ)
+                                                                      (\TEDIT.POPEVENT TOOBJ))))
+                   (RETURN))
+               (\TEDIT.INSERT.SELPIECES FROMPIECES TOOBJ TOSEL)
                (\TEDIT.SET.SEL.LOOKS TOSEL 'NORMAL)
                (\TEDIT.FIXSEL TOSEL TOOBJ)
                (\TEDIT.SHOWSEL TOSEL T TOOBJ)
 
          (* ;; "")
 
-         (* ;; "TO's last history event is either a single replace or insert, depending on its BLUEPENDINGDELETE. If there is also a preceding TODELEVENT, we combine both events into a single Move.  There is no history connection between the deletion and insertion events if they happen in separate documents, they have to be undone separately.  Otherwise, we would have to make sure that both documents at both reverted to just after this move before we could undo either of them. ")
+         (* ;; "TO history in order has INS, DEL if TO=FROM, and possibly BPD. (DEL) (BPD), put them all in a composite event.  ")
 
-               (CL:WHEN TODELEVENT                           (* ; "We popped it above")
-                   (\TEDIT.HISTORYADD TOOBJ (\TEDIT.HISTORY.EVENT TOOBJ :Move TOCH# TODCH TOPOINT NIL
-                                                   (LIST (\TEDIT.POPEVENT TOOBJ)
-                                                         TODELEVENT))))])])
+               (\TEDIT.HISTORYADD.COMPOSITE TOOBJ (LIST (\TEDIT.POPEVENT TOOBJ)
+                                                        (CL:IF (EQ TOOBJ FROMOBJ)
+                                                               (\TEDIT.POPEVENT TOOBJ))
+                                                        (CL:IF BPD (\TEDIT.POPEVENT TOOBJ])])
 
 (\TEDIT.COPY
   [LAMBDA (FROMSEL TOSEL FROMTSTREAM TOTSTREAM)              (* ; "Edited 23-Nov-2024 22:45 by rmk")
@@ -1969,7 +1984,8 @@
                       OBJ])
 
 (\TEDIT.DELETE
-  [LAMBDA (TEXTOBJ TARGETSEL/CHAR LEN POINT)                 (* ; "Edited  8-Dec-2024 21:39 by rmk")
+  [LAMBDA (TEXTOBJ TARGETSEL/CHAR LEN POINT DONTCHECK)       (* ; "Edited  6-Feb-2025 00:14 by rmk")
+                                                             (* ; "Edited  8-Dec-2024 21:39 by rmk")
                                                              (* ; "Edited 28-Nov-2024 10:13 by rmk")
                                                              (* ; "Edited 27-Nov-2024 09:18 by rmk")
                                                              (* ; "Edited 13-Sep-2024 22:30 by rmk")
@@ -2015,7 +2031,7 @@
          [SETQ CLOOKS (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ (CL:IF (EQ POINT 'LEFT)
                                                                (SUB1 FIRSTCHAR)
                                                                (IPLUS FIRSTCHAR LEN))]
-         (CL:WHEN (\TEDIT.DELETE.SELPIECES TEXTOBJ FIRSTCHAR LEN)
+         (CL:WHEN (\TEDIT.DELETE.SELPIECES TEXTOBJ FIRSTCHAR LEN DONTCHECK)
                                                              (* ; 
                                                   "Delete the selected characters (if objects allow)")
 
@@ -2268,14 +2284,15 @@
                                            (\TEDIT.FIRSTPIECE TEXTOBJ))])
 
 (\TEDIT.PARA.LAST
-  [LAMBDA (TEXTOBJ CHNO PROTECTEDNOTOK)                      (* ; "Edited 31-Jan-2025 09:33 by rmk")
+  [LAMBDA (TEXTOBJ CHNO PROTECTEDNOTOK)                      (* ; "Edited  7-Feb-2025 08:32 by rmk")
+                                                             (* ; "Edited 31-Jan-2025 09:33 by rmk")
                                                              (* ; "Edited 17-Mar-2024 00:27 by rmk")
                                                              (* ; "Edited 19-Jan-2024 10:37 by rmk")
                                                              (* ; "Edited 26-Dec-2023 09:14 by rmk")
                                                              (* ; "Edited 24-Dec-2023 22:16 by rmk")
                                                              (* ; "Edited 11-Dec-2023 23:02 by rmk")
 
-    (* ;; "Returns (LASTCHARNO .LASTPIECE) of the paragraph containing CHNO.  If CHNO is SELPIECES or SELECTION, CHNO is taken as its last character.  LASTCHARNO is the number of the last character of the paragraph (presumably on EOL). It is also the character of LASTPIECE, because pargraphs end on piece boundaries.  When PROTECTEDNOTOK, the scan will terminated on a protected piece, even if that isn't the beginning of the paragraph.")
+    (* ;; "Returns (LASTCHARNO . LASTPIECE) of the paragraph containing CHNO.  If CHNO is SELPIECES or SELECTION, CHNO is taken as its last character.  LASTCHARNO is the number of the last character of the paragraph (presumably on EOL). It is also the character of LASTPIECE, because pargraphs end on piece boundaries.  When PROTECTEDNOTOK, the scan will terminated on a protected piece, even if that isn't the beginning of the paragraph.")
 
     (if (ZEROP (FGETTOBJ TEXTOBJ TEXTLEN))
         then                                                 (* ; "Empty document")
@@ -2475,7 +2492,7 @@
 (* ; "TEDIT Support information")
 
 
-(RPAQQ TEDITSYSTEMDATE " 2-Feb-2025 11:37:42")
+(RPAQQ TEDITSYSTEMDATE "20-Feb-2025 08:50:50")
 
 
 
@@ -2485,27 +2502,27 @@
 (ADDTOVAR PRINTFILETYPES (TEDIT (TEST \TEDIT.GET.TRAILER)
                                 (EXTENSION (TEDIT))))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (4627 6569 (MAKE-TEDIT-EXPORTS.ALL 4637 . 5183) (UPDATE-TEDIT 5185 . 5798) (EDIT-TEDIT 
-5800 . 6567)) (8242 36697 (TEDIT 8252 . 10830) (TEXTSTREAM 10832 . 12752) (TEXTSTREAMP 12754 . 13138) 
-(TEDITMENUP 13140 . 13906) (COERCETEXTSTREAM 13908 . 18119) (TEDIT.CONCAT 18121 . 21300) (TEDITSTRING 
-21302 . 22155) (TEDIT-SEE 22157 . 22716) (TEDIT.COPY 22718 . 24863) (TEDIT.DELETE 24865 . 26117) (
-TEDIT.INSERT 26119 . 29077) (TEDIT.TERPRI 29079 . 30193) (TEDIT.KILL 30195 . 31111) (TEDIT.QUIT 31113
- . 32888) (TEDIT.MOVE 32890 . 33778) (TEDIT.STRINGWIDTH 33780 . 34451) (TEDIT.CHARWIDTH 34453 . 36695)
-) (36698 38639 (TEXTOBJ 36708 . 37173) (COERCETEXTOBJ 37175 . 38637)) (40039 41095 (TDRIBBLE 40049 . 
-41093)) (41136 56240 (TEDIT.INSERT.OBJECT 41146 . 45880) (TEDIT.EDIT.OBJECT 45882 . 48223) (
-TEDIT.FIND.OBJECT 48225 . 49733) (TEDIT.FIND.OBJECT.BACKWARD 49735 . 51662) (TEDIT.OBJECT.CHANGED 
-51664 . 54531) (TEDIT.MAP.OBJECTS 54533 . 55768) (\TEDIT.FIRST.OBJPIECE 55770 . 56003) (
-\TEDIT.NEXT.OBJPIECE 56005 . 56238)) (56263 63773 (\TEDIT.CONCAT.PAGEFRAMES 56273 . 61407) (
-\TEDIT.GET.PAGE.HEADINGS 61409 . 62438) (\TEDIT.CONCAT.INSTALL.HEADINGS 62440 . 63771)) (63774 67203 (
-\TEDIT.MOVE.MSG 63784 . 65865) (\TEDIT.READONLY 65867 . 67201)) (67204 81825 (TEDIT.NCHARS 67214 . 
-67587) (TEDIT.RPLCHARCODE 67589 . 75389) (TEDIT.NTHCHARCODE 75391 . 77748) (TEDIT.NTHCHAR 77750 . 
-78008) (\TEDIT.PIECE.NTHCHARCODE 78010 . 81823)) (81871 136253 (\TEDIT1 81881 . 83958) (\TEDIT.INSERT 
-83960 . 89937) (\TEDIT.MOVE 89939 . 97338) (\TEDIT.COPY 97340 . 101318) (\TEDIT.REPLACE.SELPIECES 
-101320 . 105300) (\TEDIT.INSERT.SELPIECES 105302 . 108187) (\TEDIT.RESTARTFN 108189 . 110694) (
-\TEDIT.CHARDELETE 110696 . 113523) (\TEDIT.COPYPIECE 113525 . 118373) (\TEDIT.APPLY.OBJFN 118375 . 
-121572) (\TEDIT.DELETE 121574 . 126383) (\TEDIT.DIFFUSE.PARALOOKS 126385 . 128656) (\TEDIT.WORDDELETE 
-128658 . 130214) (\TEDIT.WORDDELETE.FORWARD 130216 . 131888) (\TEDIT.FINISHEDIT? 131890 . 136251)) (
-136254 136913 (\TEDIT.THELP 136264 . 136911)) (136947 144727 (\TEDIT.PARAPIECES 136957 . 138931) (
-\TEDIT.PARA.FIRST 138933 . 141800) (\TEDIT.PARA.LAST 141802 . 144725)) (144728 153693 (
-\TEDIT.WORD.FIRST 144738 . 149394) (\TEDIT.WORD.LAST 149396 . 153691)))))
+  (FILEMAP (NIL (4625 6968 (MAKE-TEDIT-EXPORTS.ALL 4635 . 5181) (UPDATE-TEDIT 5183 . 6197) (EDIT-TEDIT 
+6199 . 6966)) (8662 36896 (TEDIT 8672 . 11250) (TEXTSTREAM 11252 . 13172) (TEXTSTREAMP 13174 . 13558) 
+(TEDITMENUP 13560 . 14326) (COERCETEXTSTREAM 14328 . 18539) (TEDIT.CONCAT 18541 . 21847) (TEDITSTRING 
+21849 . 22763) (TEDIT-SEE 22765 . 23324) (TEDIT.COPY 23326 . 25471) (TEDIT.DELETE 25473 . 26725) (
+TEDIT.INSERT 26727 . 29685) (TEDIT.TERPRI 29687 . 30801) (TEDIT.KILL 30803 . 31719) (TEDIT.QUIT 31721
+ . 33087) (TEDIT.MOVE 33089 . 33977) (TEDIT.STRINGWIDTH 33979 . 34650) (TEDIT.CHARWIDTH 34652 . 36894)
+) (36897 38838 (TEXTOBJ 36907 . 37372) (COERCETEXTOBJ 37374 . 38836)) (40238 41294 (TDRIBBLE 40248 . 
+41292)) (41335 56439 (TEDIT.INSERT.OBJECT 41345 . 46079) (TEDIT.EDIT.OBJECT 46081 . 48422) (
+TEDIT.FIND.OBJECT 48424 . 49932) (TEDIT.FIND.OBJECT.BACKWARD 49934 . 51861) (TEDIT.OBJECT.CHANGED 
+51863 . 54730) (TEDIT.MAP.OBJECTS 54732 . 55967) (\TEDIT.FIRST.OBJPIECE 55969 . 56202) (
+\TEDIT.NEXT.OBJPIECE 56204 . 56437)) (56462 63905 (\TEDIT.CONCAT.PAGEFRAMES 56472 . 61539) (
+\TEDIT.GET.PAGE.HEADINGS 61541 . 62570) (\TEDIT.CONCAT.INSTALL.HEADINGS 62572 . 63903)) (63906 67335 (
+\TEDIT.MOVE.MSG 63916 . 65997) (\TEDIT.READONLY 65999 . 67333)) (67336 82172 (TEDIT.NCHARS 67346 . 
+67719) (TEDIT.RPLCHARCODE 67721 . 75736) (TEDIT.NTHCHARCODE 75738 . 78095) (TEDIT.NTHCHAR 78097 . 
+78355) (\TEDIT.PIECE.NTHCHARCODE 78357 . 82170)) (82218 136670 (\TEDIT1 82228 . 84305) (\TEDIT.INSERT 
+84307 . 90284) (\TEDIT.MOVE 90286 . 97636) (\TEDIT.COPY 97638 . 101616) (\TEDIT.REPLACE.SELPIECES 
+101618 . 105598) (\TEDIT.INSERT.SELPIECES 105600 . 108485) (\TEDIT.RESTARTFN 108487 . 110992) (
+\TEDIT.CHARDELETE 110994 . 113821) (\TEDIT.COPYPIECE 113823 . 118671) (\TEDIT.APPLY.OBJFN 118673 . 
+121870) (\TEDIT.DELETE 121872 . 126800) (\TEDIT.DIFFUSE.PARALOOKS 126802 . 129073) (\TEDIT.WORDDELETE 
+129075 . 130631) (\TEDIT.WORDDELETE.FORWARD 130633 . 132305) (\TEDIT.FINISHEDIT? 132307 . 136668)) (
+136671 137330 (\TEDIT.THELP 136681 . 137328)) (137364 145254 (\TEDIT.PARAPIECES 137374 . 139348) (
+\TEDIT.PARA.FIRST 139350 . 142217) (\TEDIT.PARA.LAST 142219 . 145252)) (145255 154220 (
+\TEDIT.WORD.FIRST 145265 . 149921) (\TEDIT.WORD.LAST 149923 . 154218)))))
 STOP
diff --git a/library/tedit/TEDIT-ABBREV.LCOM b/library/tedit/TEDIT-ABBREV.LCOM
index 96be80d0..48001bb5 100644
Binary files a/library/tedit/TEDIT-ABBREV.LCOM and b/library/tedit/TEDIT-ABBREV.LCOM differ
diff --git a/library/tedit/TEDIT-BUTTONS b/library/tedit/TEDIT-BUTTONS
index a48fed72..91ffd5e9 100644
--- a/library/tedit/TEDIT-BUTTONS
+++ b/library/tedit/TEDIT-BUTTONS
@@ -1,12 +1,13 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "12-Jan-2025 13:03:46" {WMEDLEY}<library>tedit>TEDIT-BUTTONS.;213 124294 
+(FILECREATED "16-Feb-2025 15:02:06" {WMEDLEY}<library>tedit>TEDIT-BUTTONS.;218 125051 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS MB.BUTTONEVENTINFN MB.CREATE MB.GET MB.FIELD.CREATE MB.FIELD.PREFIXCREATE)
+      :CHANGES-TO (FNS MB.FIELD.CREATE MB.SPEC.REMAINDER MB.NWAY.SIZEFN MB.NWAY.CREATE)
+                  (VARS TEDIT-BUTTONSCOMS)
 
-      :PREVIOUS-DATE " 9-Jan-2025 16:52:13" {WMEDLEY}<library>tedit>TEDIT-BUTTONS.;208)
+      :PREVIOUS-DATE "16-Feb-2025 11:10:40" {WMEDLEY}<library>tedit>TEDIT-BUTTONS.;214)
 
 
 (PRETTYCOMPRINT TEDIT-BUTTONSCOMS)
@@ -23,7 +24,7 @@
         [COMS                                                (* ; "Simple Menu Button support")
               (FNS MB.BUTTONEVENTINFN MB.DISPLAYFN MB.SETIMAGE MB.SIZEFN MB.WHENOPERATEDONFN 
                    MB.COPYFN MB.GETFN MB.PUTFN MB.SHOWSELFN MB.CREATE MB.CHANGENAME MB.INIT 
-                   MB.TRACK.UNTIL MB.DON'T)
+                   MB.TRACK.UNTIL MB.DON'T MB.SPEC.REMAINDER)
               (DECLARE%: DONTEVAL@LOAD DOCOPY (P (MB.INIT]
         [COMS                                                (* ; "3STATE")
               
@@ -633,6 +634,17 @@
                                                              (* ; "Edited  7-Dec-2024 08:58 by rmk")
     (CL:UNLESS (IMAGEOBJPROP OBJ 'DELETABLE)
            'DON'T])
+
+(MB.SPEC.REMAINDER
+  [LAMBDA (SPEC IGNORE OBJ)                                  (* ; "Edited 16-Feb-2025 13:07 by rmk")
+
+    (* ;; "Reduces SPEC to properties that not to be IGNORED because they have been dealt with separately. If OBJ, those properties are installed as IMAGEOBJPROP's.")
+
+    (for S in SPEC unless (MEMB (CAR S)
+                                IGNORE) collect (CL:WHEN OBJ
+                                                    (IMAGEOBJPROP OBJ (CAR S)
+                                                           (CADR S)))
+                                              S])
 )
 (DECLARE%: DONTEVAL@LOAD DOCOPY 
 
@@ -816,7 +828,8 @@
 (DEFINEQ
 
 (MB.NWAY.CREATE
-  [LAMBDA (SPEC)                                             (* ; "Edited  9-Jan-2025 11:38 by rmk")
+  [LAMBDA (SPEC MENUTSTREAM CH#)                             (* ; "Edited 16-Feb-2025 12:08 by rmk")
+                                                             (* ; "Edited  9-Jan-2025 11:38 by rmk")
                                                              (* ; "Edited  4-Jan-2025 21:39 by rmk")
                                                              (* ; "Edited 20-Dec-2024 22:17 by rmk")
                                                              (* ; "Edited 22-Oct-2024 00:26 by rmk")
@@ -847,7 +860,6 @@
            elseif (STRINGP IDENTIFIER)
              then (SETQ IDENTIFIER (MKATOM IDENTIFIER))
            else (\ILLEGAL.ARG IDENTIFIER))
-         (SETQ IDENTIFIER IDENTIFIER)
          (SETQ SPACING (STRINGWIDTH "   " FONT))
          [SETQ HEIGHT (IPLUS 2 (FONTPROP FONT 'HEIGHT]
          (CL:UNLESS (LISTP BUTTONS)
@@ -1465,7 +1477,8 @@
 (DEFINEQ
 
 (MB.FIELD.CREATE
-  [LAMBDA (SPEC MENUTSTREAM CH#)                             (* ; "Edited 11-Jan-2025 09:59 by rmk")
+  [LAMBDA (SPEC MENUTSTREAM CH#)                             (* ; "Edited 16-Feb-2025 15:01 by rmk")
+                                                             (* ; "Edited 11-Jan-2025 09:59 by rmk")
                                                              (* ; "Edited  9-Jan-2025 16:52 by rmk")
                                                              (* ; "Edited  5-Jan-2025 12:09 by rmk")
                                                              (* ; "Edited 16-Dec-2024 13:33 by rmk")
@@ -1508,9 +1521,6 @@
              then (SETQ IDENTIFIER (MKATOM IDENTIFIER))
            else (\ILLEGAL.ARG IDENTIFIER))
          (push SPEC (LIST 'IDENTIFIER IDENTIFIER))
-         (SETQ REMAINDER (for S in SPEC unless (MEMB (CAR S)
-                                                     '(INITSTATE PRELABEL POSTLABEL IDENTIFIER 
-                                                             LABELFONT FIELDFONT)) collect S))
 
          (* ;; "SPEC could specify a prelabel font different from a field font")
 
@@ -1525,15 +1535,17 @@
 
          (SETQ FIELDLOOKS (\TEDIT.CHARLOOKS.FROM.FONT FIELDFONT))
          (SETQ PREFIXOBJ (MB.FIELD.PREFIXCREATE SPEC PRE FIELDLOOKS))
+         (SETQ SUFFIXOBJ (MB.FIELD.SUFFIXCREATE SPEC POST FIELDLOOKS))
+         (IMAGEOBJPROP PREFIXOBJ 'SUFFIXOBJ SUFFIXOBJ)
+         [SETQ REMAINDER (MB.SPEC.REMAINDER SPEC '(INITSTATE PRELABEL POSTLABEL IDENTIFIER LABELFONT
+                                                         FIELDFONT]
          (for S in REMAINDER do (IMAGEOBJPROP PREFIXOBJ (CAR S)
                                        (CADR S)))
-         (SETQ SUFFIXOBJ (MB.FIELD.SUFFIXCREATE SPEC POST FIELDLOOKS))
 
          (* ;; "Let the suffixobj have the same extras as the prefix ?  E.g. DELETABLE ?")
 
          (for S in REMAINDER do (IMAGEOBJPROP SUFFIXOBJ (CAR S)
                                        (CADR S)))
-         (IMAGEOBJPROP PREFIXOBJ 'SUFFIXOBJ SUFFIXOBJ)
 
          (* ;; "")
 
@@ -1958,25 +1970,26 @@
 (MB.FIELD.INIT)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3287 19809 (MB.ADD 3297 . 9726) (MB.DELETE 9728 . 10102) (MB.GET 10104 . 16874) (
-MB.GET.MBARG 16876 . 18545) (TEDITMENU.STREAM 18547 . 19214) (TEDIT.BACKTOMAIN 19216 . 19807)) (19853 
-39094 (MB.BUTTONEVENTINFN 19863 . 21357) (MB.DISPLAYFN 21359 . 23418) (MB.SETIMAGE 23420 . 24588) (
-MB.SIZEFN 24590 . 26138) (MB.WHENOPERATEDONFN 26140 . 28089) (MB.COPYFN 28091 . 28549) (MB.GETFN 28551
- . 29512) (MB.PUTFN 29514 . 30614) (MB.SHOWSELFN 30616 . 32125) (MB.CREATE 32127 . 36150) (
-MB.CHANGENAME 36152 . 36634) (MB.INIT 36636 . 38097) (MB.TRACK.UNTIL 38099 . 38794) (MB.DON'T 38796 . 
-39092)) (39256 49246 (MB.3STATE.CREATE 39266 . 40130) (MB.3STATE.DISPLAYFN 40132 . 41118) (
-MB.3STATE.SHOWSELFN 41120 . 43431) (MB.3STATE.INIT 43433 . 44844) (MB.3STATE.SETSTATEFN 44846 . 45504)
- (MB.3STATE.BUTTONEVENTINFN 45506 . 49244)) (49401 79998 (MB.NWAY.CREATE 49411 . 55382) (
-MB.NWAY.DISPLAYFN 55384 . 56247) (MB.NWAY.WHENOPERATEDONFN 56249 . 58439) (MB.NWAY.SIZEFN 58441 . 
-62377) (MB.NWAY.SELECT 62379 . 65949) (MB.NWAY.BUTTONEVENTINFN 65951 . 69163) (MB.NWAY.NEWMENUBUTTON 
-69165 . 69877) (MB.NWAY.COPYFN 69879 . 70846) (MB.NWAY.INIT 70848 . 72339) (MB.NWAY.ARRANGEBUTTONS 
-72341 . 74312) (MB.NWAY.ADDITEM 74314 . 78176) (MB.NWAY.FINDSUBOBJ 78178 . 78692) (MB.NWAY.SETSTATEFN 
-78694 . 79996)) (80077 91964 (MB.TOGGLE.CREATE 80087 . 81082) (MB.TOGGLE.DISPLAYFN 81084 . 82567) (
-MB.TOGGLE.INIT 82569 . 84368) (MB.SET.TOGGLE 84370 . 85571) (MB.TOGGLE.SETSTATEFN 85573 . 86413) (
-MB.TOGGLE.BUTTONEVENTINFN 86415 . 90619) (MB.TOGGLE.WHENOPERATEDONFN 90621 . 91962)) (92045 124215 (
-MB.FIELD.CREATE 92055 . 97492) (MB.FIELD.DISPLAYFN 97494 . 98285) (MB.FIELD.IMAGEBOXFN 98287 . 99769) 
-(MB.FIELD.PREFIXCREATE 99771 . 103707) (MB.FIELD.SUFFIXCREATE 103709 . 105369) (MB.FIELD.INIT 105371
- . 107138) (MB.FIELD.WHENOPERATEDONFN 107140 . 108411) (MB.FIELD.GETSTATEFN 108413 . 112347) (
-MB.FIELD.SETSTATEFN 112349 . 117044) (MB.FIELD.BUTTONEVENTINFN 117046 . 119351) (MB.FIELD.SIZEFN 
-119353 . 119593) (MB.FIELD.INSURETYPE 119595 . 124213)))))
+  (FILEMAP (NIL (3338 19860 (MB.ADD 3348 . 9777) (MB.DELETE 9779 . 10153) (MB.GET 10155 . 16925) (
+MB.GET.MBARG 16927 . 18596) (TEDITMENU.STREAM 18598 . 19265) (TEDIT.BACKTOMAIN 19267 . 19858)) (19904 
+39766 (MB.BUTTONEVENTINFN 19914 . 21408) (MB.DISPLAYFN 21410 . 23469) (MB.SETIMAGE 23471 . 24639) (
+MB.SIZEFN 24641 . 26189) (MB.WHENOPERATEDONFN 26191 . 28140) (MB.COPYFN 28142 . 28600) (MB.GETFN 28602
+ . 29563) (MB.PUTFN 29565 . 30665) (MB.SHOWSELFN 30667 . 32176) (MB.CREATE 32178 . 36201) (
+MB.CHANGENAME 36203 . 36685) (MB.INIT 36687 . 38148) (MB.TRACK.UNTIL 38150 . 38845) (MB.DON'T 38847 . 
+39143) (MB.SPEC.REMAINDER 39145 . 39764)) (39928 49918 (MB.3STATE.CREATE 39938 . 40802) (
+MB.3STATE.DISPLAYFN 40804 . 41790) (MB.3STATE.SHOWSELFN 41792 . 44103) (MB.3STATE.INIT 44105 . 45516) 
+(MB.3STATE.SETSTATEFN 45518 . 46176) (MB.3STATE.BUTTONEVENTINFN 46178 . 49916)) (50073 80741 (
+MB.NWAY.CREATE 50083 . 56125) (MB.NWAY.DISPLAYFN 56127 . 56990) (MB.NWAY.WHENOPERATEDONFN 56992 . 
+59182) (MB.NWAY.SIZEFN 59184 . 63120) (MB.NWAY.SELECT 63122 . 66692) (MB.NWAY.BUTTONEVENTINFN 66694 . 
+69906) (MB.NWAY.NEWMENUBUTTON 69908 . 70620) (MB.NWAY.COPYFN 70622 . 71589) (MB.NWAY.INIT 71591 . 
+73082) (MB.NWAY.ARRANGEBUTTONS 73084 . 75055) (MB.NWAY.ADDITEM 75057 . 78919) (MB.NWAY.FINDSUBOBJ 
+78921 . 79435) (MB.NWAY.SETSTATEFN 79437 . 80739)) (80820 92707 (MB.TOGGLE.CREATE 80830 . 81825) (
+MB.TOGGLE.DISPLAYFN 81827 . 83310) (MB.TOGGLE.INIT 83312 . 85111) (MB.SET.TOGGLE 85113 . 86314) (
+MB.TOGGLE.SETSTATEFN 86316 . 87156) (MB.TOGGLE.BUTTONEVENTINFN 87158 . 91362) (
+MB.TOGGLE.WHENOPERATEDONFN 91364 . 92705)) (92788 124972 (MB.FIELD.CREATE 92798 . 98249) (
+MB.FIELD.DISPLAYFN 98251 . 99042) (MB.FIELD.IMAGEBOXFN 99044 . 100526) (MB.FIELD.PREFIXCREATE 100528
+ . 104464) (MB.FIELD.SUFFIXCREATE 104466 . 106126) (MB.FIELD.INIT 106128 . 107895) (
+MB.FIELD.WHENOPERATEDONFN 107897 . 109168) (MB.FIELD.GETSTATEFN 109170 . 113104) (MB.FIELD.SETSTATEFN 
+113106 . 117801) (MB.FIELD.BUTTONEVENTINFN 117803 . 120108) (MB.FIELD.SIZEFN 120110 . 120350) (
+MB.FIELD.INSURETYPE 120352 . 124970)))))
 STOP
diff --git a/library/tedit/TEDIT-BUTTONS.LCOM b/library/tedit/TEDIT-BUTTONS.LCOM
index bf0cd221..edd1a6e0 100644
Binary files a/library/tedit/TEDIT-BUTTONS.LCOM and b/library/tedit/TEDIT-BUTTONS.LCOM differ
diff --git a/library/tedit/TEDIT-COMMAND b/library/tedit/TEDIT-COMMAND
index 64c25f42..d039fe7a 100644
--- a/library/tedit/TEDIT-COMMAND
+++ b/library/tedit/TEDIT-COMMAND
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "28-Nov-2024 10:03:03" {WMEDLEY}<library>tedit>TEDIT-COMMAND.;133 49278  
+(FILECREATED "17-Feb-2025 12:25:49" {WMEDLEY}<library>tedit>TEDIT-COMMAND.;135 49397  
 
       :EDIT-BY rmk
 
       :CHANGES-TO (FNS \TEDIT.COMMAND.LOOP)
 
-      :PREVIOUS-DATE "21-Nov-2024 11:53:19" {WMEDLEY}<library>tedit>TEDIT-COMMAND.;128)
+      :PREVIOUS-DATE "28-Nov-2024 10:03:03" {WMEDLEY}<library>tedit>TEDIT-COMMAND.;133)
 
 
 (PRETTYCOMPRINT TEDIT-COMMANDCOMS)
@@ -255,7 +255,8 @@
     TEXTOBJ])
 
 (\TEDIT.COMMAND.LOOP
-  [LAMBDA (TSTREAM)                                          (* ; "Edited 28-Nov-2024 10:01 by rmk")
+  [LAMBDA (TSTREAM)                                          (* ; "Edited 17-Feb-2025 12:05 by rmk")
+                                                             (* ; "Edited 28-Nov-2024 10:01 by rmk")
                                                              (* ; "Edited 21-Nov-2024 11:51 by rmk")
                                                              (* ; "Edited 13-Sep-2024 22:34 by rmk")
                                                              (* ; "Edited 26-Aug-2024 23:26 by rmk")
@@ -319,8 +320,8 @@
                               (* ;; 
       "And let him return one of NIL for 'ignore this char' , T for 'leave it be' or a new charcode.")
 
-                              (OR (EQ TCH T)
-                                  (SETQ CH TCH)))
+                              (CL:UNLESS (EQ TCH T)
+                                     (SETQ CH TCH)))
                           (SELECTC (AND CH (\SYNCODE (fetch READSA of (FGETTOBJ TEXTOBJ TXTRTBL))
                                                   CH))
                               (CHARDELETE.TTC 
@@ -911,12 +912,12 @@
 
 (\TEDIT.CLIPBOARD)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (8312 26570 (\TEDIT.INTERRUPT.SETUP 8322 . 9969) (\TEDIT.MARKACTIVE 9971 . 10300) (
-\TEDIT.MARKINACTIVE 10302 . 10518) (\TEDIT.COMMAND.LOOP 10520 . 19978) (\TEDIT.COMMAND.RESET.SETUP 
-19980 . 26568)) (26854 42051 (\TEDIT.READTABLE 26864 . 28521) (\TEDIT.WORDBOUND.READTABLE 28523 . 
-31116) (TEDIT.GETSYNTAX 31118 . 33557) (TEDIT.SETSYNTAX 33559 . 36037) (TEDIT.GETFUNCTION 36039 . 
-37399) (TEDIT.SETFUNCTION 37401 . 39840) (TEDIT.WORDGET 39842 . 40103) (TEDIT.WORDSET 40105 . 40802) (
-TEDIT.ATOMBOUND.READTABLE 40804 . 42049)) (42379 43288 (\TEDIT.WHEELSCROLL 42389 . 43286)) (43441 
-49021 (\TEDIT.CLIPBOARD 43451 . 45206) (\TEDIT.COPYTOCLIPBOARD 45208 . 45988) (
-\TEDIT.EXTRACTTOCLIPBOARD 45990 . 46185) (\TEDIT.WRITE.SEL 46187 . 49019)))))
+  (FILEMAP (NIL (8312 26689 (\TEDIT.INTERRUPT.SETUP 8322 . 9969) (\TEDIT.MARKACTIVE 9971 . 10300) (
+\TEDIT.MARKINACTIVE 10302 . 10518) (\TEDIT.COMMAND.LOOP 10520 . 20097) (\TEDIT.COMMAND.RESET.SETUP 
+20099 . 26687)) (26973 42170 (\TEDIT.READTABLE 26983 . 28640) (\TEDIT.WORDBOUND.READTABLE 28642 . 
+31235) (TEDIT.GETSYNTAX 31237 . 33676) (TEDIT.SETSYNTAX 33678 . 36156) (TEDIT.GETFUNCTION 36158 . 
+37518) (TEDIT.SETFUNCTION 37520 . 39959) (TEDIT.WORDGET 39961 . 40222) (TEDIT.WORDSET 40224 . 40921) (
+TEDIT.ATOMBOUND.READTABLE 40923 . 42168)) (42498 43407 (\TEDIT.WHEELSCROLL 42508 . 43405)) (43560 
+49140 (\TEDIT.CLIPBOARD 43570 . 45325) (\TEDIT.COPYTOCLIPBOARD 45327 . 46107) (
+\TEDIT.EXTRACTTOCLIPBOARD 46109 . 46304) (\TEDIT.WRITE.SEL 46306 . 49138)))))
 STOP
diff --git a/library/tedit/TEDIT-COMMAND.LCOM b/library/tedit/TEDIT-COMMAND.LCOM
index 976127b3..435beb7f 100644
Binary files a/library/tedit/TEDIT-COMMAND.LCOM and b/library/tedit/TEDIT-COMMAND.LCOM differ
diff --git a/library/tedit/TEDIT-FILE b/library/tedit/TEDIT-FILE
index 5ea4c9bf..cebe32bb 100644
--- a/library/tedit/TEDIT-FILE
+++ b/library/tedit/TEDIT-FILE
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "19-Jan-2025 15:03:01" {WMEDLEY}<library>TEDIT>TEDIT-FILE.;595 159113 
+(FILECREATED "22-Feb-2025 16:00:43" {WMEDLEY}<library>TEDIT>TEDIT-FILE.;604 161000 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.PUT.UTF8.SPLITPIECES)
+      :CHANGES-TO (FNS TEDIT.PUT)
 
-      :PREVIOUS-DATE " 7-Jan-2025 12:28:41" {WMEDLEY}<library>TEDIT>TEDIT-FILE.;593)
+      :PREVIOUS-DATE "19-Feb-2025 12:11:42" {WMEDLEY}<library>TEDIT>TEDIT-FILE.;603)
 
 
 (PRETTYCOMPRINT TEDIT-FILECOMS)
@@ -249,7 +249,8 @@
                  (GDATE IDATE)))])
 
 (TEDIT.INCLUDE
-  [LAMBDA (TSTREAM FILE START END SAFE PLAINTEXT)            (* ; "Edited 25-Nov-2024 20:17 by rmk")
+  [LAMBDA (TSTREAM FILE START END SAFE PLAINTEXT)            (* ; "Edited  8-Feb-2025 20:56 by rmk")
+                                                             (* ; "Edited 25-Nov-2024 20:17 by rmk")
                                                              (* ; "Edited 22-Sep-2024 18:43 by rmk")
                                                              (* ; "Edited 11-Aug-2024 12:30 by rmk")
                                                              (* ; "Edited  7-Jul-2024 22:03 by rmk")
@@ -364,7 +365,7 @@
               [SETQ FTSTREAM (OPENTEXTSTREAM FROMFILE NIL START END
                                     `(FONT ,(\TEDIT.GET.INSERT.CHARLOOKS TOOBJ TSEL)
                                            PARALOOKS
-                                           ,(GETTOBJ TOOBJ FMTSPEC)
+                                           ,(GETTOBJ TOOBJ DEFAULTPARALOOKS)
                                            PLAINTEXT
                                            ,PLAINTEXT]
 
@@ -389,7 +390,8 @@
     (TEDIT.INCLUDE TSTREAM INFILE START END SAFE T])
 
 (TEDIT.PUT
-  [LAMBDA (TSTREAM FILE FORCENEW UNFORMATTED? FORMAT)        (* ; "Edited 23-Dec-2024 23:02 by rmk")
+  [LAMBDA (TSTREAM FILE FORCENEW UNFORMATTED? FORMAT QUIET)  (* ; "Edited 22-Feb-2025 15:56 by rmk")
+                                                             (* ; "Edited 23-Dec-2024 23:02 by rmk")
                                                              (* ; "Edited 11-Aug-2024 12:30 by rmk")
                                                              (* ; "Edited 29-Jun-2024 10:31 by rmk")
                                                              (* ; "Edited 26-Jun-2024 15:46 by rmk")
@@ -479,9 +481,10 @@
                          '(AND RESETSTATE (DELFILE (CLOSEF? OLDVALUE]
                   [RESETSAVE (\TEDIT.PUTRESET (CONS (THIS.PROCESS)
                                                     'DON'T]
-                  (SETQ PUTSTRING (CONCAT "Put to " (FULLNAME CHARSTREAM)
-                                         "..."))
-                  (TEDIT.PROMPTPRINT TEXTOBJ PUTSTRING T)
+                  (CL:UNLESS QUIET
+                      (SETQ PUTSTRING (CONCAT "Put to " (FULLNAME CHARSTREAM)
+                                             "..."))
+                      (TEDIT.PROMPTPRINT TEXTOBJ PUTSTRING T))
 
              (* ;; "")
 
@@ -508,8 +511,9 @@
 
              (* ;; "")
 
-                  (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT PUTSTRING "done")
-                         T)
+                  (CL:UNLESS QUIET
+                      (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT PUTSTRING "done")
+                             T))
 
              (* ;; "")
 
@@ -572,7 +576,9 @@
 (DEFINEQ
 
 (\TEDIT.GET.FOREIGN.FILE
-  [LAMBDA (TEXT TSTREAM START END PROPS)                     (* ; "Edited 17-Mar-2024 00:21 by rmk")
+  [LAMBDA (TEXT TSTREAM START END PROPS)                     (* ; "Edited  8-Feb-2025 20:20 by rmk")
+                                                             (* ; "Edited  7-Feb-2025 08:10 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 00:21 by rmk")
                                                              (* ; "Edited 22-Oct-2023 20:40 by rmk")
                                                              (* ; "Edited 18-Sep-2023 16:40 by rmk")
                                                              (* ; "Edited 10-Aug-2023 17:26 by rmk")
@@ -606,15 +612,16 @@
                  (SETQ FTEXTOBJ (TEXTOBJ FSTREAM))
                  (\TEDIT.INSERTPIECES (\TEDIT.FIRSTPIECE FTEXTOBJ)
                         NIL TTEXTOBJ)
-                 (FSETTOBJ TTEXTOBJ LASTPIECE (FGETTOBJ FTEXTOBJ LASTPIECE))
+                 (FSETTOBJ TTEXTOBJ SUFFIXPIECE (FGETTOBJ FTEXTOBJ SUFFIXPIECE))
                                                              (* ; "Last piece  have different looks")
                  (FSETTOBJ TTEXTOBJ TXTPAGEFRAMES (FGETTOBJ FTEXTOBJ TXTPAGEFRAMES))
-                 (FSETTOBJ TTEXTOBJ FMTSPEC (FGETTOBJ FTEXTOBJ FMTSPEC))
+                 (FSETTOBJ TTEXTOBJ DEFAULTPARALOOKS (FGETTOBJ FTEXTOBJ DEFAULTPARALOOKS))
                  (FSETTOBJ TTEXTOBJ DEFAULTCHARLOOKS (FGETTOBJ FTEXTOBJ DEFAULTCHARLOOKS)))
              TSTREAM)])
 
 (\TEDIT.GET.UNFORMATTED.FILE
-  [LAMBDA (STREAM TSTREAM START END PROPS)                   (* ; "Edited 17-Mar-2024 00:21 by rmk")
+  [LAMBDA (STREAM TSTREAM START END PROPS)                   (* ; "Edited  8-Feb-2025 20:21 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 00:21 by rmk")
                                                              (* ; "Edited  5-Feb-2024 09:26 by rmk")
                                                              (* ; "Edited 21-Jan-2024 09:42 by rmk")
                                                              (* ; "Edited 29-Dec-2023 11:52 by rmk")
@@ -633,7 +640,7 @@
               DEFAULTCHARLOOKS DEFAULTPARALOOKS PIECES)
              (PUTTEXTPROP TEXTOBJ 'CLEARGET T)
              (SETQ DEFAULTCHARLOOKS (GETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
-             (SETQ DEFAULTPARALOOKS (GETTOBJ TEXTOBJ FMTSPEC))
+             (SETQ DEFAULTPARALOOKS (GETTOBJ TEXTOBJ DEFAULTPARALOOKS))
              (CL:WHEN (AND (EQ FORMAT :STRING)
                            (\IOMODEP STREAM 'OUTPUT T))
                  (SETQ STREAM (COPYFILE STREAM '{NODIRCORE})))
@@ -675,7 +682,8 @@
              (\TEDIT.INSERTPIECES PIECES NIL TEXTOBJ)))])
 
 (\TEDIT.GET.FORMATTED.FILE
-  [LAMBDA (TEXT TSTREAM START END PROPS)                     (* ; "Edited 28-Oct-2024 17:48 by rmk")
+  [LAMBDA (TEXT TSTREAM START END PROPS)                     (* ; "Edited  7-Feb-2025 08:19 by rmk")
+                                                             (* ; "Edited 28-Oct-2024 17:48 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 29-Apr-2024 10:25 by rmk")
                                                              (* ; "Edited 17-Mar-2024 00:21 by rmk")
@@ -709,13 +717,14 @@
                     (\TEDIT.GET.PCTB0 TEXT TSTREAM (CADR PCCOUNT)
                            PCCOUNT START END))
                  (\TEDIT.THELP "File format version incompatible with this version of TEdit."))
-             (CL:WHEN (SETQ PC (PREVPIECE (\TEDIT.LASTPIECE TEXTOBJ)))
+             (CL:WHEN (SETQ PC (\TEDIT.LASTPIECE TEXTOBJ))
                     (FSETPC PC PPARALAST T))
              (\TEDIT.TRANSLATE.ASCIICHARS TEXTOBJ NIL)
              TEXTOBJ)])
 
 (\TEDIT.FORMATTEDSTREAMP
-  [LAMBDA (TSTREAM)                                          (* ; "Edited 16-Mar-2024 10:03 by rmk")
+  [LAMBDA (TSTREAM)                                          (* ; "Edited  8-Feb-2025 20:21 by rmk")
+                                                             (* ; "Edited 16-Mar-2024 10:03 by rmk")
                                                              (* ; "Edited 22-Sep-2023 20:17 by rmk")
                                                              (* ; "Edited 15-Sep-2023 00:09 by rmk")
                                                              (* ; "Edited 15-Aug-2023 17:35 by rmk")
@@ -729,7 +738,7 @@
     (LET ((TEXTOBJ (TEXTOBJ TSTREAM)))
          (for PC (FORMATLEVEL _ 0)
               (DEFAULTCLOOKS _ (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
-              (DEFAULTPLOOKS _ (FGETTOBJ TEXTOBJ FMTSPEC))
+              (DEFAULTPLOOKS _ (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS))
               (TENTATIVE _ (GETTEXTPROP TEXTOBJ 'TEDIT.TENTATIVE)) inpieces (\TEDIT.FIRSTPIECE 
                                                                                    TEXTOBJ)
             do [COND
@@ -890,7 +899,8 @@
 (DEFINEQ
 
 (\TEDIT.GET.PIECES3
-  [LAMBDA (TEXT TSTREAM PCCOUNT CURFILEBYTE# END)            (* ; "Edited 30-Aug-2024 15:44 by rmk")
+  [LAMBDA (TEXT TSTREAM PCCOUNT CURFILEBYTE# END)            (* ; "Edited  8-Feb-2025 20:21 by rmk")
+                                                             (* ; "Edited 30-Aug-2024 15:44 by rmk")
                                                              (* ; "Edited 11-Jul-2024 13:20 by rmk")
                                                              (* ; "Edited 29-Apr-2024 10:37 by rmk")
                                                              (* ; "Edited  7-Apr-2024 17:20 by rmk")
@@ -914,7 +924,8 @@
                                                                                      DEFAULTCHARLOOKS
                                                                                           ))
                                                             (SETQ OLDPARALOOKS (FGETTOBJ TEXTOBJ 
-                                                                                      FMTSPEC))
+                                                                                     DEFAULTPARALOOKS
+                                                                                      ))
                                                             (SETQ FIRSTPC (CREATE PIECE)) 
                                                              (* ; "Throw away at the end")
                                                             (SETQ PREVPC FIRSTPC)
@@ -1530,7 +1541,9 @@
     (for I from 1 to (\WIN FILE) collect (\TEDIT.GET.SINGLE.PARALOOKS FILE TEXTOBJ])
 
 (\TEDIT.GET.SINGLE.PARALOOKS
-  [LAMBDA (FILE TEXTOBJ)                                     (* ; "Edited 22-Nov-2024 23:55 by rmk")
+  [LAMBDA (FILE TEXTOBJ)                                     (* ; "Edited 19-Feb-2025 12:10 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:04 by rmk")
+                                                             (* ; "Edited 22-Nov-2024 23:55 by rmk")
                                                              (* ; "Edited 23-Oct-2024 16:03 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited  5-Aug-2024 09:47 by rmk")
@@ -1545,31 +1558,31 @@
                                                         "Edited  2-Jul-93 21:31 by sybalskY:MV:ENVOS")
                                                              (* ; 
                            "Read a paragraph format spec from the FILE, and return it for later use.")
-    (LET ((FMT (create FMTSPEC))
+    (LET ((PARALOOKS (create PARALOOKS))
           (FILEPOS (GETFILEPTR FILE))
           (LOOKSLEN (\WIN FILE))
           TABFLG DEFTAB TABS)
-         (FSETPARA FMT 1STLEFTMAR (\SMALLPIN FILE))          (* ; 
+         (FSETPLOOKS PARALOOKS 1STLEFTMAR (\SMALLPIN FILE))  (* ; 
                                                     "Left margin for the first line of the paragraph")
-         (FSETPARA FMT LEFTMAR (\SMALLPIN FILE))             (* ; 
+         (FSETPLOOKS PARALOOKS LEFTMAR (\SMALLPIN FILE))     (* ; 
                                                           "Left margin for the rest of the paragraph")
-         (FSETPARA FMT RIGHTMAR (\SMALLPIN FILE))            (* ; "Right margin for the paragraph")
-         (FSETPARA FMT LEADBEFORE (\SMALLPIN FILE))          (* ; "Leading before the paragraph")
-         (FSETPARA FMT LEADAFTER (\SMALLPIN FILE))           (* ; "Lead after the paragraph")
-         (FSETPARA FMT LINELEAD (\SMALLPIN FILE))            (* ; "inter-line leading")
+         (FSETPLOOKS PARALOOKS RIGHTMAR (\SMALLPIN FILE))    (* ; "Right margin for the paragraph")
+         (FSETPLOOKS PARALOOKS LEADBEFORE (\SMALLPIN FILE))  (* ; "Leading before the paragraph")
+         (FSETPLOOKS PARALOOKS LEADAFTER (\SMALLPIN FILE))   (* ; "Lead after the paragraph")
+         (FSETPLOOKS PARALOOKS LINELEAD (\SMALLPIN FILE))    (* ; "inter-line leading")
          (SETQ TABFLG (BIN FILE))
-         (FSETPARA FMT QUAD (SELECTC (BIN FILE)
-                                (1 'LEFT)
-                                (2 'RIGHT)
-                                (3 'CENTERED)
-                                (4 'JUSTIFIED)
-                                (\TEDIT.THELP "UNRECOGNIZED QUAD BYTE")))
+         (FSETPLOOKS PARALOOKS QUAD (SELECTC (BIN FILE)
+                                        (1 'LEFT)
+                                        (2 'RIGHT)
+                                        (3 'CENTERED)
+                                        (4 'JUSTIFIED)
+                                        (\TEDIT.THELP "UNRECOGNIZED QUAD BYTE")))
          (CL:UNLESS (ZEROP (LOGAND TABFLG 1))                (* ; "There are tabs to read")
              (SETQ DEFTAB (\SMALLPIN FILE))
              (CL:WHEN (ILEQ DEFTAB 1)                        (* ; 
                                                        "0/1 don't make sense, seemed to code default")
                  (SETQ DEFTAB DEFAULTTAB))
-             (FSETPARA FMT FMTDEFAULTTAB DEFTAB)
+             (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFTAB)
              [SETQ TABS (for TAB# from 1 to (BIN FILE) collect (create TAB
                                                                       TABX _ (\SMALLPIN FILE)
                                                                       TABKIND _
@@ -1583,41 +1596,42 @@
                                                                           (6 'DOTTEDCENTERED)
                                                                           (7 'DOTTEDDECIMAL)
                                                                           (\TEDIT.THELP]
-             (FSETPARA FMT FMTTABS TABS))
-         (CL:UNLESS (FGETPARA FMT FMTDEFAULTTAB)
-                (FSETPARA FMT FMTDEFAULTTAB DEFAULTTAB))
+             (FSETPLOOKS PARALOOKS FMTTABS TABS))
+         (CL:UNLESS (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)
+                (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFAULTTAB))
          (CL:UNLESS (ZEROP (LOGAND TABFLG 2))                (* ; 
                                                    "There are other paragraph parameters to be read.")
-             (FSETPARA FMT FMTSPECIALX (\SMALLPIN FILE))     (* ; 
+             (FSETPLOOKS PARALOOKS FMTSPECIALX (\SMALLPIN FILE))
+                                                             (* ; 
                                                       "Special X location on page for this paragraph")
-             (FSETPARA FMT FMTSPECIALY (\SMALLPIN FILE))
-             (FSETPARA FMT FMTUSERINFO (\ARBIN FILE))
-             (FSETPARA FMT FMTPARATYPE (\ATMIN FILE))
-             (FSETPARA FMT FMTPARASUBTYPE (\ATMIN FILE))
-             (FSETPARA FMT FMTSTYLE (\ARBIN FILE))
-             (FSETPARA FMT FMTCHARSTYLES (\ARBIN FILE))
-             (FSETPARA FMT FMTNEWPAGEBEFORE (\ARBIN FILE))
-             (FSETPARA FMT FMTNEWPAGEAFTER (\ARBIN FILE))
-             (FSETPARA FMT FMTHEADINGKEEP (\ARBIN FILE))
-             (FSETPARA FMT FMTKEEP (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTSPECIALY (\SMALLPIN FILE))
+             (FSETPLOOKS PARALOOKS FMTUSERINFO (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTPARATYPE (\ATMIN FILE))
+             (FSETPLOOKS PARALOOKS FMTPARASUBTYPE (\ATMIN FILE))
+             (FSETPLOOKS PARALOOKS FMTSTYLE (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTCHARSTYLES (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTNEWPAGEBEFORE (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTNEWPAGEAFTER (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTHEADINGKEEP (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTKEEP (\ARBIN FILE))
              (CL:WHEN (ILESSP (GETFILEPTR FILE)
                              (IPLUS FILEPOS LOOKSLEN))
-                 (FSETPARA FMT FMTBASETOBASE (\ARBIN FILE)))
+                 (FSETPLOOKS PARALOOKS FMTBASETOBASE (\ARBIN FILE)))
              (CL:WHEN (ILESSP (GETFILEPTR FILE)
                              (IPLUS FILEPOS LOOKSLEN))
-                 (FSETPARA FMT FMTREVISED (\ARBIN FILE)))
+                 (FSETPLOOKS PARALOOKS FMTREVISED (\ARBIN FILE)))
              (CL:WHEN (ILESSP (GETFILEPTR FILE)
                              (IPLUS FILEPOS LOOKSLEN))
-                 (FSETPARA FMT FMTCOLUMN (\ARBIN FILE)))
+                 (FSETPLOOKS PARALOOKS FMTCOLUMN (\ARBIN FILE)))
              (CL:WHEN (ILESSP (GETFILEPTR FILE)
                              (IPLUS FILEPOS LOOKSLEN))
-                 (FSETPARA FMT FMTCHARSTYLES (\ARBIN FILE))))
+                 (FSETPLOOKS PARALOOKS FMTCHARSTYLES (\ARBIN FILE))))
          (CL:WHEN (ILESSP (GETFILEPTR FILE)
                          (IPLUS FILEPOS LOOKSLEN))           (* ; 
                                "There is more PARALOOKS info in this piece -- we probably lost data.")
              (TEDIT.PROMPTPRINT TEXTOBJ "WARNING: Newer file version; you lost PARALOOKS info" T)
              (SETFILEPTR FILE (IPLUS FILEPOS LOOKSLEN)))
-         FMT])
+         PARALOOKS])
 )
 (DEFINEQ
 
@@ -2340,7 +2354,8 @@
                                         (PUTHASH PL I PARAHASH])
 
 (\TEDIT.PUT.SINGLE.PARALOOKS
-  [LAMBDA (FONTFILE LOOKS)                                   (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (FONTFILE LOOKS)                                   (* ; "Edited 19-Feb-2025 12:11 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 28-Jul-2024 21:29 by rmk")
                                                              (* ; "Edited 16-Jan-2024 23:00 by rmk")
                                                              (* ; "Edited 19-Dec-2023 10:14 by rmk")
@@ -2355,23 +2370,23 @@
           DEFTAB TABS LEN)
          (\SMALLPOUT FONTFILE 0)                             (* ; 
                                                              "Reserve space to store the look length")
-         (\SMALLPOUT FONTFILE (FGETPARA LOOKS 1STLEFTMAR))   (* ; 
+         (\SMALLPOUT FONTFILE (FGETPLOOKS LOOKS 1STLEFTMAR)) (* ; 
                                                     "Left margin for the first line of the paragraph")
-         (\SMALLPOUT FONTFILE (FGETPARA LOOKS LEFTMAR))      (* ; 
+         (\SMALLPOUT FONTFILE (FGETPLOOKS LOOKS LEFTMAR))    (* ; 
                                                           "Left margin for the rest of the paragraph")
-         (\SMALLPOUT FONTFILE (FGETPARA LOOKS RIGHTMAR))     (* ; "Right margin for the paragraph")
-         (\SMALLPOUT FONTFILE (FGETPARA LOOKS LEADBEFORE))   (* ; "Leading before the paragraph")
-         (\SMALLPOUT FONTFILE (FGETPARA LOOKS LEADAFTER))    (* ; "Lead after the paragraph")
-         (\SMALLPOUT FONTFILE (FGETPARA LOOKS LINELEAD))     (* ; "inter-line leading")
-         (SETQ DEFTAB (FGETPARA LOOKS FMTDEFAULTTAB))
-         (SETQ TABS (FGETPARA LOOKS FMTTABS))
+         (\SMALLPOUT FONTFILE (FGETPLOOKS LOOKS RIGHTMAR))   (* ; "Right margin for the paragraph")
+         (\SMALLPOUT FONTFILE (FGETPLOOKS LOOKS LEADBEFORE)) (* ; "Leading before the paragraph")
+         (\SMALLPOUT FONTFILE (FGETPLOOKS LOOKS LEADAFTER))  (* ; "Lead after the paragraph")
+         (\SMALLPOUT FONTFILE (FGETPLOOKS LOOKS LINELEAD))   (* ; "inter-line leading")
+         (SETQ DEFTAB (FGETPLOOKS LOOKS FMTDEFAULTTAB))
+         (SETQ TABS (FGETPLOOKS LOOKS FMTTABS))
 
          (* ;; "Indicate whether there are tab specs  or a default tab setting to save")
 
          (\BOUT FONTFILE (CL:IF (OR DEFTAB TABS)
                              3
                              2))
-         (\BOUT FONTFILE (SELECTQ (FGETPARA LOOKS QUAD)
+         (\BOUT FONTFILE (SELECTQ (FGETPLOOKS LOOKS QUAD)
                              (LEFT 1)
                              (RIGHT 2)
                              ((CENTER CENTERED) 
@@ -2398,23 +2413,23 @@
                                                           6)
                                                      (DOTTEDDECIMAL 7)
                                                      (\TEDIT.THELP])
-         (\SMALLPOUT FONTFILE (OR (FGETPARA LOOKS FMTSPECIALX)
+         (\SMALLPOUT FONTFILE (OR (FGETPLOOKS LOOKS FMTSPECIALX)
                                   0))
-         (\SMALLPOUT FONTFILE (OR (FGETPARA LOOKS FMTSPECIALY)
+         (\SMALLPOUT FONTFILE (OR (FGETPLOOKS LOOKS FMTSPECIALY)
                                   0))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTUSERINFO))
-         (\ATMOUT FONTFILE (FGETPARA LOOKS FMTPARATYPE))
-         (\ATMOUT FONTFILE (FGETPARA LOOKS FMTPARASUBTYPE))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTSTYLE))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTCHARSTYLES))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTNEWPAGEBEFORE))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTNEWPAGEAFTER))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTHEADINGKEEP))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTKEEP))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTBASETOBASE))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTREVISED))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTCOLUMN))
-         (\ARBOUT FONTFILE (FGETPARA LOOKS FMTCHARSTYLES))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTUSERINFO))
+         (\ATMOUT FONTFILE (FGETPLOOKS LOOKS FMTPARATYPE))
+         (\ATMOUT FONTFILE (FGETPLOOKS LOOKS FMTPARASUBTYPE))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTSTYLE))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTCHARSTYLES))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTNEWPAGEBEFORE))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTNEWPAGEAFTER))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTHEADINGKEEP))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTKEEP))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTBASETOBASE))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTREVISED))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTCOLUMN))
+         (\ARBOUT FONTFILE (FGETPLOOKS LOOKS FMTCHARSTYLES))
 
 (* ;;; "Now go fill in the length field at the front of the LOOKS.  (ALL looks info should be written out BEFORE this comment.)")
 
@@ -2448,7 +2463,8 @@
 (DEFINEQ
 
 (TEDITFROMLISPSOURCE
-  [LAMBDA (SOURCEFILE TSTREAM PROPS USERTEMP START END)      (* ; "Edited 17-Nov-2024 10:03 by rmk")
+  [LAMBDA (SOURCEFILE TSTREAM PROPS USERTEMP START END)      (* ; "Edited 18-Feb-2025 23:34 by rmk")
+                                                             (* ; "Edited 17-Nov-2024 10:03 by rmk")
                                                              (* ; "Edited 25-Dec-2023 12:28 by rmk")
                                                              (* ; "Edited  5-Dec-2023 23:46 by rmk")
                                                              (* ; "Edited 26-Oct-2023 11:22 by rmk")
@@ -2465,16 +2481,17 @@
     (CL:UNLESS TSTREAM
         (SETQ TSTREAM (OPENTEXTSTREAM)))
 
-    (* ;; "An empty window for TSTREAM may already be up on the screen.  Since this conversion can take awhile, we tell the user what's going on")
+    (* ;; "Estimate 110 characters per line in the default font?")
 
-    (TEXTPROP TSTREAM 'PARABREAKCHARS NIL)
-    (TEXTPROP TSTREAM 'BOUNDTABLE (TEDIT.ATOMBOUND.READTABLE (fetch (READER-ENVIRONMENT REREADTABLE)
-                                                                of USERTEMP)))
+    [PUTTEXTPROPS TSTREAM `(PARABREAKCHARS NIL OPENWIDTH ,(TIMES 110 (CHARWIDTH (CHARCODE SPACE)
+                                                                            DEFAULTFONT))
+                                  BOUNDTABLE
+                                  ,(TEDIT.ATOMBOUND.READTABLE (fetch (READER-ENVIRONMENT REREADTABLE)
+                                                                 of USERTEMP]
     (TEDIT.PROMPTPRINT TSTREAM (CONCAT "Fetching " (FULLNAME SOURCEFILE)
                                       " ...")
            T)
     (COPY.TEXT.TO.IMAGE SOURCEFILE TSTREAM)
-    (TEXTPROP TSTREAM 'PARABREAKCHARS NIL)
     TSTREAM])
 
 (SHELLSCRIPTP
@@ -2502,28 +2519,28 @@
 
 (RPAQ? *TEDIT-FILE-READTABLE* (COPYREADTABLE \ORIGREADTABLE))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (5017 33942 (TEDIT.GET 5027 . 11036) (TEDIT.FORMATTEDFILEP 11038 . 12354) (
-TEDIT.FILEDATE 12356 . 13527) (TEDIT.INCLUDE 13529 . 21440) (TEDIT.RAW.INCLUDE 21442 . 22250) (
-TEDIT.PUT 22252 . 30107) (TEDIT.PUT.STREAM 30109 . 33940)) (33943 53140 (\TEDIT.GET.FOREIGN.FILE 33953
- . 37138) (\TEDIT.GET.UNFORMATTED.FILE 37140 . 41014) (\TEDIT.GET.FORMATTED.FILE 41016 . 43837) (
-\TEDIT.FORMATTEDSTREAMP 43839 . 46739) (\ARBIN 46741 . 47461) (\ATMIN 47463 . 48000) (\DWIN 48002 . 
-48381) (\STRINGIN 48383 . 49091) (\TEDIT.GET.TRAILER 49093 . 51609) (\TEDIT.CACHEFILE 51611 . 53138)) 
-(53306 66856 (\TEDIT.GET.PIECES3 53316 . 63618) (\TEDIT.GET.IDATE3 63620 . 65015) (
-\TEDIT.MAKE.STRINGPIECE 65017 . 66854)) (66857 79232 (\TEDIT.GET.UNFORMATTED.FILE.XCCS 66867 . 72983) 
-(\TEDIT.INTERPRET.XCCS.SHIFTS 72985 . 79230)) (79254 85276 (\TEDIT.GET.UNFORMATTED.FILE.UTF8 79264 . 
-85274)) (85299 93924 (\TEDIT.GET.CHARLOOKS.LIST 85309 . 86040) (\TEDIT.GET.SINGLE.CHARLOOKS 86042 . 
-90736) (\TEDIT.GET.CHARLOOKS 90738 . 92068) (\TEDIT.GET.PARALOOKS.INDEX 92070 . 92614) (
-\TEDIT.GET.CHARLOOKS.INDEX 92616 . 93922)) (93925 101093 (\TEDIT.GET.PARALOOKS.LIST 93935 . 94557) (
-\TEDIT.GET.SINGLE.PARALOOKS 94559 . 101091)) (101094 104684 (\TEDIT.GET.OBJECT 101104 . 104682)) (
-104746 136623 (\TEDIT.PUT.PCTB 104756 . 114406) (\TEDIT.PUT.PCTB.PIECEDATA 114408 . 117606) (
-\TEDIT.PUT.TRAILER 117608 . 118375) (\TEDIT.PUT.PCTB.MERGEABLE 118377 . 121811) (
-\TEDIT.PUT.UTF8.SPLITPIECES 121813 . 126515) (\TEDIT.PUT.PCTB.NEXTNEW 126517 . 130784) (
-\TEDIT.INSERT.NEWPIECES 130786 . 134221) (\TEDIT.PUTRESET 134223 . 134465) (\ARBOUT 134467 . 135191) (
-\ATMOUT 135193 . 135798) (\DWOUT 135800 . 136079) (\STRINGOUT 136081 . 136621)) (136624 148699 (
-\TEDIT.PUT.CHARLOOKS.LIST 136634 . 138306) (\TEDIT.PUT.SINGLE.CHARLOOKS 138308 . 144043) (
-\TEDIT.PUT.CHARLOOKS 144045 . 145270) (\TEDIT.PUT.CHARLOOKS1 145272 . 146323) (\TEDIT.PUT.OBJECT 
-146325 . 148697)) (148700 156194 (\TEDIT.PUT.PARALOOKS.LIST 148710 . 149612) (
-\TEDIT.PUT.SINGLE.PARALOOKS 149614 . 155053) (\TEDIT.PUT.PARALOOKS 155055 . 156192)) (156289 158883 (
-TEDITFROMLISPSOURCE 156299 . 158132) (SHELLSCRIPTP 158134 . 158363) (TEDITFROMSHELLSCRIPT 158365 . 
-158881)))))
+  (FILEMAP (NIL (4999 34243 (TEDIT.GET 5009 . 11018) (TEDIT.FORMATTEDFILEP 11020 . 12336) (
+TEDIT.FILEDATE 12338 . 13509) (TEDIT.INCLUDE 13511 . 21540) (TEDIT.RAW.INCLUDE 21542 . 22350) (
+TEDIT.PUT 22352 . 30408) (TEDIT.PUT.STREAM 30410 . 34241)) (34244 54014 (\TEDIT.GET.FOREIGN.FILE 34254
+ . 37679) (\TEDIT.GET.UNFORMATTED.FILE 37681 . 41673) (\TEDIT.GET.FORMATTED.FILE 41675 . 44593) (
+\TEDIT.FORMATTEDSTREAMP 44595 . 47613) (\ARBIN 47615 . 48335) (\ATMIN 48337 . 48874) (\DWIN 48876 . 
+49255) (\STRINGIN 49257 . 49965) (\TEDIT.GET.TRAILER 49967 . 52483) (\TEDIT.CACHEFILE 52485 . 54012)) 
+(54180 67934 (\TEDIT.GET.PIECES3 54190 . 64696) (\TEDIT.GET.IDATE3 64698 . 66093) (
+\TEDIT.MAKE.STRINGPIECE 66095 . 67932)) (67935 80310 (\TEDIT.GET.UNFORMATTED.FILE.XCCS 67945 . 74061) 
+(\TEDIT.INTERPRET.XCCS.SHIFTS 74063 . 80308)) (80332 86354 (\TEDIT.GET.UNFORMATTED.FILE.UTF8 80342 . 
+86352)) (86377 95002 (\TEDIT.GET.CHARLOOKS.LIST 86387 . 87118) (\TEDIT.GET.SINGLE.CHARLOOKS 87120 . 
+91814) (\TEDIT.GET.CHARLOOKS 91816 . 93146) (\TEDIT.GET.PARALOOKS.INDEX 93148 . 93692) (
+\TEDIT.GET.CHARLOOKS.INDEX 93694 . 95000)) (95003 102660 (\TEDIT.GET.PARALOOKS.LIST 95013 . 95635) (
+\TEDIT.GET.SINGLE.PARALOOKS 95637 . 102658)) (102661 106251 (\TEDIT.GET.OBJECT 102671 . 106249)) (
+106313 138190 (\TEDIT.PUT.PCTB 106323 . 115973) (\TEDIT.PUT.PCTB.PIECEDATA 115975 . 119173) (
+\TEDIT.PUT.TRAILER 119175 . 119942) (\TEDIT.PUT.PCTB.MERGEABLE 119944 . 123378) (
+\TEDIT.PUT.UTF8.SPLITPIECES 123380 . 128082) (\TEDIT.PUT.PCTB.NEXTNEW 128084 . 132351) (
+\TEDIT.INSERT.NEWPIECES 132353 . 135788) (\TEDIT.PUTRESET 135790 . 136032) (\ARBOUT 136034 . 136758) (
+\ATMOUT 136760 . 137365) (\DWOUT 137367 . 137646) (\STRINGOUT 137648 . 138188)) (138191 150266 (
+\TEDIT.PUT.CHARLOOKS.LIST 138201 . 139873) (\TEDIT.PUT.SINGLE.CHARLOOKS 139875 . 145610) (
+\TEDIT.PUT.CHARLOOKS 145612 . 146837) (\TEDIT.PUT.CHARLOOKS1 146839 . 147890) (\TEDIT.PUT.OBJECT 
+147892 . 150264)) (150267 157906 (\TEDIT.PUT.PARALOOKS.LIST 150277 . 151179) (
+\TEDIT.PUT.SINGLE.PARALOOKS 151181 . 156765) (\TEDIT.PUT.PARALOOKS 156767 . 157904)) (158001 160770 (
+TEDITFROMLISPSOURCE 158011 . 160019) (SHELLSCRIPTP 160021 . 160250) (TEDITFROMSHELLSCRIPT 160252 . 
+160768)))))
 STOP
diff --git a/library/tedit/TEDIT-FILE.LCOM b/library/tedit/TEDIT-FILE.LCOM
index b1633684..2cb945a6 100644
Binary files a/library/tedit/TEDIT-FILE.LCOM and b/library/tedit/TEDIT-FILE.LCOM differ
diff --git a/library/tedit/TEDIT-FIND b/library/tedit/TEDIT-FIND
index 8551e495..aa4d5ab1 100644
--- a/library/tedit/TEDIT-FIND
+++ b/library/tedit/TEDIT-FIND
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 8-Dec-2024 15:49:12" {WMEDLEY}<library>tedit>TEDIT-FIND.;134 36434  
+(FILECREATED "17-Feb-2025 12:25:36" {WMEDLEY}<library>tedit>TEDIT-FIND.;136 36884  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS TEDIT.SUBSTITUTE)
+      :CHANGES-TO (FNS \TEDIT.BASICFIND)
 
-      :PREVIOUS-DATE "26-Nov-2024 23:53:41" {WMEDLEY}<library>TEDIT>TEDIT-FIND.;132)
+      :PREVIOUS-DATE "15-Feb-2025 18:08:55" {WMEDLEY}<library>tedit>TEDIT-FIND.;135)
 
 
 (PRETTYCOMPRINT TEDIT-FINDCOMS)
@@ -269,7 +269,8 @@
                   (RETURN NREPLACEMENTS))))])
 
 (TEDIT.NEXT
-  [LAMBDA (TSTREAM)                                          (* ; "Edited 21-Oct-2024 00:40 by rmk")
+  [LAMBDA (TSTREAM)                                          (* ; "Edited 15-Feb-2025 18:08 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:40 by rmk")
                                                              (* ; "Edited  7-Jul-2024 11:47 by rmk")
                                                              (* ; "Edited 18-May-2024 16:23 by rmk")
                                                              (* ; "Edited 12-May-2024 21:10 by rmk")
@@ -310,8 +311,9 @@
                             'RIGHT
                             'PENDINGDEL)
                      (\TEDIT.FIXSEL SEL TEXTOBJ)             (* ; "Always selected normally")
+                     (\TEDIT.SHOWSEL SEL T TEXTOBJ)
                      (TEDIT.NORMALIZECARET TEXTOBJ)          (* ; "And get it into the window")
-                     (\TEDIT.SHOWSEL SEL T TEXTOBJ))
+                     )
              (FIELD                                          (* ; 
    "Update the selection for this textobj from the scratch sel returned from MBUTTON.FIND.NEXT.FIELD")
                     (FSETTOBJ TEXTOBJ BLUEPENDINGDELETE T)
@@ -322,6 +324,7 @@
                            'LEFT
                            'PENDINGDEL)                      (* ; "And get it into the window")
                     (\TEDIT.FIXSEL SEL TEXTOBJ)
+                    (\TEDIT.SHOWSEL SEL T TEXTOBJ)
                     (TEDIT.NORMALIZECARET TEXTOBJ))
              (NEITHER (TEDIT.PROMPTPRINT TEXTOBJ "No more blanks to fill in." T)
                       (SETQ SEL NIL))
@@ -391,7 +394,8 @@
                       then (RETURN NIL])])
 
 (\TEDIT.BASICFIND
-  [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED)          (* ; "Edited 23-Jun-2024 12:03 by rmk")
+  [LAMBDA (TSTREAM TARGETSTRING START END ANCHORED)          (* ; "Edited 17-Feb-2025 12:24 by rmk")
+                                                             (* ; "Edited 23-Jun-2024 12:03 by rmk")
                                                              (* ; "Edited 22-Jun-2024 12:01 by rmk")
                                                              (* ; "Edited 19-May-2024 23:18 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:06 by rmk")
@@ -421,7 +425,9 @@
                                              (BIN TSTREAM))
                                      (RETURN NIL))
                               (CL:WHEN (EQ I NCHARS)         (* ; "Matched the last char")
-                                  (RETURN T))) do (RETURN (LIST ANCHOR (IPLUS ANCHOR (SUB1 NCHARS])
+                                  (RETURN T))) do (FSETTOBJ (GETTSTR TSTREAM TEXTOBJ)
+                                                         LASTARROWX NIL)
+                                                  (RETURN (LIST ANCHOR (IPLUS ANCHOR (SUB1 NCHARS])
 
 (\TEDIT.WCFIND.BACKWARD
   [LAMBDA (TSTREAM TARGETLIST START END)                     (* ; "Edited 26-Jun-2024 08:05 by rmk")
@@ -557,8 +563,8 @@
                                                     (DREVERSE $$VAL))])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (784 21950 (TEDIT.FIND 794 . 2793) (TEDIT.FIND.BACKWARD 2795 . 5117) (TEDIT.SUBSTITUTE 
-5119 . 17479) (TEDIT.NEXT 17481 . 21948)) (21983 36411 (\TEDIT.WCFIND 21993 . 25512) (\TEDIT.BASICFIND
- 25514 . 27605) (\TEDIT.WCFIND.BACKWARD 27607 . 31071) (\TEDIT.BASICFIND.BACKWARD 31073 . 33330) (
-\TEDIT.PARSE.SEARCHSTRING 33332 . 36409)))))
+  (FILEMAP (NIL (784 22132 (TEDIT.FIND 794 . 2793) (TEDIT.FIND.BACKWARD 2795 . 5117) (TEDIT.SUBSTITUTE 
+5119 . 17479) (TEDIT.NEXT 17481 . 22130)) (22165 36861 (\TEDIT.WCFIND 22175 . 25694) (\TEDIT.BASICFIND
+ 25696 . 28055) (\TEDIT.WCFIND.BACKWARD 28057 . 31521) (\TEDIT.BASICFIND.BACKWARD 31523 . 33780) (
+\TEDIT.PARSE.SEARCHSTRING 33782 . 36859)))))
 STOP
diff --git a/library/tedit/TEDIT-FIND.LCOM b/library/tedit/TEDIT-FIND.LCOM
index ed0153c4..782de847 100644
Binary files a/library/tedit/TEDIT-FIND.LCOM and b/library/tedit/TEDIT-FIND.LCOM differ
diff --git a/library/tedit/TEDIT-FNKEYS b/library/tedit/TEDIT-FNKEYS
index 03fdd216..86eb5d06 100644
--- a/library/tedit/TEDIT-FNKEYS
+++ b/library/tedit/TEDIT-FNKEYS
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "24-Jan-2025 15:31:33" {WMEDLEY}<library>TEDIT>TEDIT-FNKEYS.;109 40128  
+(FILECREATED "17-Feb-2025 09:12:22" {WMEDLEY}<library>tedit>TEDIT-FNKEYS.;121 48129  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.ONECHAR.BACKWARD \TEDIT.ONECHAR.FORWARD)
+      :CHANGES-TO (FNS \TEDIT.ONECHAR.FORWARD \TEDIT.ONECHAR.BACKWARD)
 
-      :PREVIOUS-DATE "18-Jan-2025 23:38:11" {WMEDLEY}<library>TEDIT>TEDIT-FNKEYS.;108)
+      :PREVIOUS-DATE "16-Feb-2025 20:44:51" {WMEDLEY}<library>tedit>TEDIT-FNKEYS.;120)
 
 
 (PRETTYCOMPRINT TEDIT-FNKEYSCOMS)
@@ -23,8 +23,9 @@
                    \TEDIT.SHOWCARETLOOKS \TEDIT.SMALLERSEL \TEDIT.SUBSCRIPTSEL \TEDIT.SUPERSCRIPTSEL
                    \TEDIT.UCASE.SEL \TEDIT.UNDERLINE.SEL.OFF \TEDIT.UNDERLINE.SEL.ON 
                    \TEDIT.STRIKEOUT.SEL.ON \TEDIT.STRIKEOUT.SEL.OFF \TEDIT.SELECT.ALL 
-                   \TEDIT.KEY.SUBSTITUTE \TEDIT.MANPAGE \TEDIT.CALL.ED \TEDIT.ONECHAR.BACKWARD 
-                   \TEDIT.ONECHAR.FORWARD))
+                   \TEDIT.KEY.SUBSTITUTE \TEDIT.MANPAGE \TEDIT.CALL.ED))
+        (FNS \TEDIT.ONECHAR.BACKWARD \TEDIT.ONECHAR.FORWARD \TEDIT.ONELINE.UP \TEDIT.ONELINE.DOWN 
+             \TEDIT.ONELINE.MOVE)
         (COMS 
               (* ;; "Auxiliary functions used in the above main functions:")
 
@@ -94,7 +95,9 @@
                              ("Meta,<" FN \TEDIT.ONECHAR.BACKWARD)
                              ("Meta,," FN \TEDIT.ONECHAR.BACKWARD)
                              ("Meta,>" FN \TEDIT.ONECHAR.FORWARD)
-                             ("Meta,." FN \TEDIT.ONECHAR.FORWARD]
+                             ("Meta,." FN \TEDIT.ONECHAR.FORWARD)
+                             ("Meta,^" FN \TEDIT.ONELINE.UP)
+                             ("Meta,LF" FN \TEDIT.ONELINE.DOWN]
         (P (MAPC \TEDIT.KEYS (FUNCTION (LAMBDA (ENTRY)
                                               (SELECTQ (CADR ENTRY)
                                                      (FN (TEDIT.SETFUNCTION (CAR ENTRY)
@@ -472,15 +475,24 @@
              then (ED SYMBOL `(:DONTWAIT :DISPLAY))
            else (TEDIT.PROMPTPRINT TSTREAM (CONCAT SYMBOL " has no definitions to edit")
                        T T])
+)
+(DEFINEQ
 
 (\TEDIT.ONECHAR.BACKWARD
-  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 24-Jan-2025 15:25 by rmk")
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 17-Feb-2025 09:12 by rmk")
+                                                             (* ; "Edited 24-Jan-2025 15:25 by rmk")
                                                              (* ; "Edited 21-Nov-2024 20:31 by rmk")
                                                              (* ; "Edited  1-Sep-2024 10:39 by rmk")
     (TEXTOBJ! TEXTOBJ)
     (SELECTION! SEL)
-    (LET ((PT (TEDIT.GETPOINT TSTREAM SEL)))
-         (CL:UNLESS (ILEQ PT 1)
+    (LET ((PT (TEDIT.GETPOINT TSTREAM SEL))
+          OBJ)
+         (CL:UNLESS [OR (ILEQ PT 1)
+                        (AND (FGETTOBJ TEXTOBJ MENUFLG)
+                             (SETQ OBJ (POBJ (\TEDIT.CHTOPC (SUB1 PT)
+                                                    TEXTOBJ)))
+                             (IMAGEOBJPROP OBJ 'FIELDPREFIX]
+             (FSETTOBJ TEXTOBJ LASTARROWX NIL)
              (\TEDIT.SHOWSEL SEL NIL TEXTOBJ)
              (\TEDIT.UPDATE.SEL SEL (SUB1 PT)
                     0
@@ -489,21 +501,128 @@
              (\TEDIT.SHOWSEL SEL T TEXTOBJ))])
 
 (\TEDIT.ONECHAR.FORWARD
-  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 24-Jan-2025 15:27 by rmk")
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 17-Feb-2025 09:11 by rmk")
+                                                             (* ; "Edited 15-Feb-2025 08:50 by rmk")
+                                                             (* ; "Edited 24-Jan-2025 15:27 by rmk")
                                                              (* ; "Edited 21-Nov-2024 20:31 by rmk")
                                                              (* ; "Edited  1-Sep-2024 10:39 by rmk")
 
     (* ;; "Moves caret to a point one character forward.")
 
+    (SELECTION! SEL)
     (TEXTOBJ! TEXTOBJ)
-    (LET ((PT (TEDIT.GETPOINT TSTREAM SEL)))
-         (CL:UNLESS (IGEQ PT (TEXTLEN TEXTOBJ))
+    (LET ((PT (TEDIT.GETPOINT TSTREAM SEL))
+          OBJ)
+         (CL:UNLESS [OR (IGREATERP PT (TEXTLEN TEXTOBJ))
+                        (AND (FGETTOBJ TEXTOBJ MENUFLG)
+                             (SETQ OBJ (POBJ (\TEDIT.CHTOPC PT TEXTOBJ)))
+                             (IMAGEOBJPROP OBJ 'FIELDSUFFIX]
+             (FSETTOBJ TEXTOBJ LASTARROWX NIL)
              (\TEDIT.SHOWSEL SEL NIL TEXTOBJ)
-             (\TEDIT.UPDATE.SEL SEL (ADD1 PT)
-                    0
-                    'LEFT)
+             (\TEDIT.UPDATE.SEL SEL PT 0 'RIGHT)
              (\TEDIT.FIXSEL SEL TEXTOBJ)
              (\TEDIT.SHOWSEL SEL T TEXTOBJ))])
+
+(\TEDIT.ONELINE.UP
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 13-Feb-2025 22:04 by rmk")
+                                                             (* ; "Edited 12-Feb-2025 19:46 by rmk")
+                                                             (* ; "Edited 24-Jan-2025 15:27 by rmk")
+                                                             (* ; "Edited 21-Nov-2024 20:31 by rmk")
+                                                             (* ; "Edited  1-Sep-2024 10:39 by rmk")
+
+    (* ;; "Moves caret to the same x position one line up.  It gets the current  X (X0 or XLIM) of the caret in the current selection, which is common to all panes in which the caret is visible. It then finds the line in the first pane where the caret is visible, formats the previous line, and then figures out the character in previousline that would come closest to X.")
+
+    (* ;; "We look for a pane that not only has a line with the caret, but also has the previous line.  Otherwise, we have to search backwards to find the start of that line.")
+
+    (TEXTOBJ! TEXTOBJ)
+    (SELECTION! SEL)
+    (LET (LINE LINEPANE (CHNO (TEDIT.GETPOINT TSTREAM SEL)))
+         (for PANE FIRSTONE inpanes (PROGN TEXTOBJ) as L1 in (FGETSEL SEL L1) as LN
+            in (FGETSEL SEL LN) when [SETQ LINE (OR (AND L1 (WITHINLINEP CHNO L1))
+                                                    (AND LN (WITHINLINEP CHNO LN]
+            do (CL:UNLESS (FGETLD (FGETLD LINE PREVLINE)
+                                 LDUMMY)
+                      (RETURN))
+               (CL:UNLESS FIRSTONE (SETQ FIRSTONE LINE)) finally 
+
+                                                 (* ;; "The caret is blinking nowhere, or in the top line of every pane, we have to create a prevline above.")
+
+                                                               (SETQ LINE FIRSTONE)
+                                                               (SETQ LINEPANE PANE))
+
+         (* ;; "Caret is blinking in LINE, move selection to the charno at the same X in the previous line, in all panes. ")
+
+         (CL:WHEN [AND LINE (ILEQ 1 (SUB1 (FGETLD LINE LCHAR1]
+             (\TEDIT.ONELINE.MOVE SEL (FGETLD (if (FGETLD (FGETLD LINE PREVLINE)
+                                                         LDUMMY)
+                                                  then 
+                                                       (* ;; 
+                                                       "Top of window, create the preceding line")
+
+                                                       (\TEDIT.LASTVALIDLINE LINE CHNO LINEPANE 
+                                                              TSTREAM)
+                                                else (FGETLD LINE PREVLINE))
+                                             LCHAR1)
+                    TSTREAM))])
+
+(\TEDIT.ONELINE.DOWN
+  [LAMBDA (TSTREAM TEXTOBJ SEL)                              (* ; "Edited 13-Feb-2025 22:05 by rmk")
+                                                             (* ; "Edited 12-Feb-2025 19:46 by rmk")
+                                                             (* ; "Edited 24-Jan-2025 15:27 by rmk")
+                                                             (* ; "Edited 21-Nov-2024 20:31 by rmk")
+                                                             (* ; "Edited  1-Sep-2024 10:39 by rmk")
+
+    (* ;; "Moves caret to the same x position one line down.  It gets the current  X (X0 or XLIM) of the caret in the current selection, which is common to all panes in which the caret is visible. It then finds the line in the first pane where the caret is visible, formats the nextline, and then figures out the character in nextline that would come closest to X.")
+
+    (TEXTOBJ! TEXTOBJ)
+    (SELECTION! SEL)
+    (LET (LINE NEXTLINE NEXTCHNO)
+         (for L1 (CHNO _ (TEDIT.GETPOINT TSTREAM SEL)) in (FGETSEL SEL L1) as LN
+            in (FGETSEL SEL LN) when [SETQ LINE (OR (AND L1 (WITHINLINEP CHNO L1))
+                                                    (AND LN (WITHINLINEP CHNO LN] do (RETURN))
+
+         (* ;; "Caret is blinking in LINE, move selection to the charno at the same X in the next line, in all panes. ")
+
+         (CL:WHEN (AND LINE (ILESSP (ADD1 (FGETLD LINE LCHARLAST))
+                                   (TEXTLEN TEXTOBJ)))
+             (\TEDIT.ONELINE.MOVE SEL (ADD1 (FGETLD LINE LCHARLAST))
+                    TSTREAM))])
+
+(\TEDIT.ONELINE.MOVE
+  [LAMBDA (SEL CHNO TSTREAM)                                 (* ; "Edited 16-Feb-2025 16:20 by rmk")
+                                                             (* ; "Edited 14-Feb-2025 09:49 by rmk")
+
+    (* ;; 
+    "Move caret from its previous X position to the same position in the line beginning at CHNO.")
+
+    (* ;; "The scan part is basically a specialized variant of \TEDIT.SCAN.LINE.  ")
+
+    (LET ((TARGETLINE (\TEDIT.FORMATLINE TSTREAM CHNO))
+          (TEXTOBJ (FGETTSTR TSTREAM TEXTOBJ)))
+         (CL:UNLESS (FGETTOBJ TEXTOBJ MENUFLG)
+             (for CHARSLOT (THISLINE _ (FGETTOBJ TEXTOBJ THISLINE))
+                  (TARGX _ (FGETLD TARGETLINE LX1))
+                  [X _ (OR (FGETTOBJ TEXTOBJ LASTARROWX)
+                           (FSETTOBJ TEXTOBJ LASTARROWX (SELECTQ (FGETSEL SEL POINT)
+                                                            (LEFT (FGETSEL SEL X0))
+                                                            (RIGHT (FGETSEL SEL XLIM))
+                                                            NIL] incharslots (FGETTOBJ TEXTOBJ 
+                                                                                    THISLINE)
+                when CHAR do (add TARGX CHARW)
+                             (CL:WHEN (IGEQ TARGX X)
+                                 (CL:WHEN (IGEQ X (IDIFFERENCE TARGX (FOLDLO CHARW 2)))
+                                                             (* ; 
+                                                      "To RIGHT of target char if more than half way")
+                                     (add CHNO 1))
+                                 (RETURN))
+                             (add CHNO 1) finally            (* ; 
+                                                           "TARGETLINE must have been shorter than X")
+                                                (SETQ CHNO (FGETLD TARGETLINE LCHARLAST)))
+             (\TEDIT.SHOWSEL SEL NIL TEXTOBJ)
+             (\TEDIT.UPDATE.SEL SEL CHNO 0 'LEFT)
+             (\TEDIT.FIXSEL SEL TEXTOBJ)
+             (\TEDIT.SHOWSEL SEL T TEXTOBJ)
+             (\TEDIT.SCROLL.CARET TSTREAM))])
 )
 
 
@@ -721,7 +840,9 @@
         ("Meta,<" FN \TEDIT.ONECHAR.BACKWARD)
         ("Meta,," FN \TEDIT.ONECHAR.BACKWARD)
         ("Meta,>" FN \TEDIT.ONECHAR.FORWARD)
-        ("Meta,." FN \TEDIT.ONECHAR.FORWARD)))
+        ("Meta,." FN \TEDIT.ONECHAR.FORWARD)
+        ("Meta,^" FN \TEDIT.ONELINE.UP)
+        ("Meta,LF" FN \TEDIT.ONELINE.DOWN)))
 
 [MAPC \TEDIT.KEYS (FUNCTION (LAMBDA (ENTRY)
                               (SELECTQ (CADR ENTRY)
@@ -730,23 +851,24 @@
                                   (TEDIT.SETSYNTAX (CAR ENTRY)
                                          (CADR ENTRY]
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (6251 29984 (\TEDIT.BOLD.SEL.OFF 6261 . 6599) (\TEDIT.BOLD.SEL.ON 6601 . 6929) (
-\TEDIT.CENTER.SEL 6931 . 8447) (\TEDIT.CENTER.SEL.REV 8449 . 8745) (\TEDIT.DEFAULTS.CARET 8747 . 9240)
- (\TEDIT.DEFAULTSSEL 9242 . 9689) (\TEDIT.SETDEFAULT.FROM.SEL 9691 . 10368) (\TEDIT.KEY.FIND 10370 . 
-15437) (\TEDIT.KEY.FIND.SEARCHSTRING 15439 . 16579) (\TEDIT.GET.TARGET.STRING 16581 . 18295) (
-\TEDIT.KEY.FIND.BACKWARD 18297 . 18602) (\TEDIT.FINDAGAIN.BACKWARD 18604 . 19015) (\TEDIT.FINDAGAIN 
-19017 . 19308) (\TEDIT.ITALIC.SEL.OFF 19310 . 19562) (\TEDIT.ITALIC.SEL.ON 19564 . 19757) (
-\TEDIT.LARGERSEL 19759 . 20047) (\TEDIT.LCASE.SEL 20049 . 21444) (\TEDIT.SHOWCARETLOOKS 21446 . 23046)
- (\TEDIT.SMALLERSEL 23048 . 23339) (\TEDIT.SUBSCRIPTSEL 23341 . 23544) (\TEDIT.SUPERSCRIPTSEL 23546 . 
-23750) (\TEDIT.UCASE.SEL 23752 . 25091) (\TEDIT.UNDERLINE.SEL.OFF 25093 . 25291) (
-\TEDIT.UNDERLINE.SEL.ON 25293 . 25489) (\TEDIT.STRIKEOUT.SEL.ON 25491 . 25687) (
-\TEDIT.STRIKEOUT.SEL.OFF 25689 . 25887) (\TEDIT.SELECT.ALL 25889 . 26205) (\TEDIT.KEY.SUBSTITUTE 26207
- . 26428) (\TEDIT.MANPAGE 26430 . 27677) (\TEDIT.CALL.ED 27679 . 28509) (\TEDIT.ONECHAR.BACKWARD 28511
- . 29216) (\TEDIT.ONECHAR.FORWARD 29218 . 29982)) (30056 36567 (\TEDIT.BOLD.CARET.OFF 30066 . 30601) (
-\TEDIT.BOLD.CARET.ON 30603 . 31135) (\TEDIT.ITALIC.CARET.OFF 31137 . 31674) (\TEDIT.ITALIC.CARET.ON 
-31676 . 32219) (\TEDIT.LARGER.CARET 32221 . 32756) (\TEDIT.SMALLER.CARET 32758 . 33295) (
-\TEDIT.SUBSCRIPT.CARET 33297 . 33838) (\TEDIT.SUPERSCRIPT.CARET 33840 . 34382) (
-\TEDIT.UNDERLINE.CARET.OFF 34384 . 34924) (\TEDIT.UNDERLINE.CARET.ON 34926 . 35464) (
-\TEDIT.STRIKEOUT.CARET.OFF 35466 . 36006) (\TEDIT.STRIKEOUT.CARET.ON 36008 . 36565)) (36636 37338 (
-\TK.DESCRIBEFONT 36646 . 37336)))))
+  (FILEMAP (NIL (6442 28702 (\TEDIT.BOLD.SEL.OFF 6452 . 6790) (\TEDIT.BOLD.SEL.ON 6792 . 7120) (
+\TEDIT.CENTER.SEL 7122 . 8638) (\TEDIT.CENTER.SEL.REV 8640 . 8936) (\TEDIT.DEFAULTS.CARET 8938 . 9431)
+ (\TEDIT.DEFAULTSSEL 9433 . 9880) (\TEDIT.SETDEFAULT.FROM.SEL 9882 . 10559) (\TEDIT.KEY.FIND 10561 . 
+15628) (\TEDIT.KEY.FIND.SEARCHSTRING 15630 . 16770) (\TEDIT.GET.TARGET.STRING 16772 . 18486) (
+\TEDIT.KEY.FIND.BACKWARD 18488 . 18793) (\TEDIT.FINDAGAIN.BACKWARD 18795 . 19206) (\TEDIT.FINDAGAIN 
+19208 . 19499) (\TEDIT.ITALIC.SEL.OFF 19501 . 19753) (\TEDIT.ITALIC.SEL.ON 19755 . 19948) (
+\TEDIT.LARGERSEL 19950 . 20238) (\TEDIT.LCASE.SEL 20240 . 21635) (\TEDIT.SHOWCARETLOOKS 21637 . 23237)
+ (\TEDIT.SMALLERSEL 23239 . 23530) (\TEDIT.SUBSCRIPTSEL 23532 . 23735) (\TEDIT.SUPERSCRIPTSEL 23737 . 
+23941) (\TEDIT.UCASE.SEL 23943 . 25282) (\TEDIT.UNDERLINE.SEL.OFF 25284 . 25482) (
+\TEDIT.UNDERLINE.SEL.ON 25484 . 25680) (\TEDIT.STRIKEOUT.SEL.ON 25682 . 25878) (
+\TEDIT.STRIKEOUT.SEL.OFF 25880 . 26078) (\TEDIT.SELECT.ALL 26080 . 26396) (\TEDIT.KEY.SUBSTITUTE 26398
+ . 26619) (\TEDIT.MANPAGE 26621 . 27868) (\TEDIT.CALL.ED 27870 . 28700)) (28703 37902 (
+\TEDIT.ONECHAR.BACKWARD 28713 . 29842) (\TEDIT.ONECHAR.FORWARD 29844 . 31062) (\TEDIT.ONELINE.UP 31064
+ . 34025) (\TEDIT.ONELINE.DOWN 34027 . 35684) (\TEDIT.ONELINE.MOVE 35686 . 37900)) (37974 44485 (
+\TEDIT.BOLD.CARET.OFF 37984 . 38519) (\TEDIT.BOLD.CARET.ON 38521 . 39053) (\TEDIT.ITALIC.CARET.OFF 
+39055 . 39592) (\TEDIT.ITALIC.CARET.ON 39594 . 40137) (\TEDIT.LARGER.CARET 40139 . 40674) (
+\TEDIT.SMALLER.CARET 40676 . 41213) (\TEDIT.SUBSCRIPT.CARET 41215 . 41756) (\TEDIT.SUPERSCRIPT.CARET 
+41758 . 42300) (\TEDIT.UNDERLINE.CARET.OFF 42302 . 42842) (\TEDIT.UNDERLINE.CARET.ON 42844 . 43382) (
+\TEDIT.STRIKEOUT.CARET.OFF 43384 . 43924) (\TEDIT.STRIKEOUT.CARET.ON 43926 . 44483)) (44554 45256 (
+\TK.DESCRIBEFONT 44564 . 45254)))))
 STOP
diff --git a/library/tedit/TEDIT-FNKEYS.LCOM b/library/tedit/TEDIT-FNKEYS.LCOM
index fa1d41fc..2b39e65e 100644
Binary files a/library/tedit/TEDIT-FNKEYS.LCOM and b/library/tedit/TEDIT-FNKEYS.LCOM differ
diff --git a/library/tedit/TEDIT-HCPY b/library/tedit/TEDIT-HCPY
index e49c13e8..02138ba6 100644
--- a/library/tedit/TEDIT-HCPY
+++ b/library/tedit/TEDIT-HCPY
@@ -1,12 +1,13 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "13-Dec-2024 23:51:23" {WMEDLEY}<library>tedit>TEDIT-HCPY.;164 32996  
+(FILECREATED "19-Feb-2025 13:34:37" {WMEDLEY}<library>tedit>TEDIT-HCPY.;170 33842  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.HARDCOPY.DISPLAYLINE TEDIT.HARDCOPYFN)
+      :CHANGES-TO (FNS \TEDIT.HARDCOPY.DISPLAYLINE \TEDIT.HARDCOPY.FORMATLINE.HEADINGS 
+                       \TEDIT.HCPYFMTSPEC)
 
-      :PREVIOUS-DATE "26-Oct-2024 11:05:00" {WMEDLEY}<library>tedit>TEDIT-HCPY.;160)
+      :PREVIOUS-DATE " 8-Feb-2025 23:42:18" {WMEDLEY}<library>tedit>TEDIT-HCPY.;169)
 
 
 (PRETTYCOMPRINT TEDIT-HCPYCOMS)
@@ -133,7 +134,9 @@
                else (TEDIT.PROMPTPRINT TSTREAM "No hardcopy file--aborted" T T)))])
 
 (\TEDIT.HARDCOPY.DISPLAYLINE
-  [LAMBDA (TEXTOBJ LINE REGION PRSTREAM FORMATTINGSTATE)     (* ; "Edited 13-Dec-2024 23:49 by rmk")
+  [LAMBDA (TEXTOBJ LINE REGION PRSTREAM FORMATTINGSTATE)     (* ; "Edited 19-Feb-2025 13:34 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:39 by rmk")
+                                                             (* ; "Edited 13-Dec-2024 23:49 by rmk")
                                                              (* ; "Edited 13-Jun-2024 17:13 by rmk")
                                                              (* ; "Edited 19-Apr-2024 09:09 by rmk")
                                                              (* ; "Edited 20-Mar-2024 11:04 by rmk")
@@ -267,16 +270,18 @@
                                                           (\TEDIT.HARDCOPY.MODIFYLOOKS LINE 
                                                                  LOOKSTARTX TX (FGETLD LINE YBASE)
                                                                  CLOOKS PRSTREAM))
-                                                      (CL:WHEN (fetch (FMTSPEC FMTREVISED)
-                                                                  of (FGETLD LINE LFMTSPEC))
+                                                      (CL:WHEN (GETPLOOKS (FGETLD LINE LPARALOOKS)
+                                                                      FMTREVISED)
                                                              (* ; 
                                                        "This paragraph has been revised, so mark it.")
                                                           (\TEDIT.MARK.REVISION TEXTOBJ
-                                                                 (FGETLD LINE LFMTSPEC)
+                                                                 (FGETLD LINE LPARALOOKS)
                                                                  PRSTREAM LINE))])])
 
 (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS
-  [LAMBDA (TEXTOBJ TSTREAM LINE FMTSPEC CHNO IMAGESTREAM FORMATTINGSTATE)
+  [LAMBDA (TEXTOBJ TSTREAM LINE PARALOOKS CHNO IMAGESTREAM FORMATTINGSTATE)
+                                                             (* ; "Edited 19-Feb-2025 13:34 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 21:13 by rmk")
                                                              (* ; "Edited 26-Oct-2024 11:04 by rmk")
                                                              (* ; "Edited 17-Mar-2024 17:22 by rmk")
                                                              (* ; "Edited 19-Jan-2024 23:19 by rmk")
@@ -284,20 +289,20 @@
 
     (* ;; "Return setup LINE to skip a sequence of heading pieces STATE")
 
-    (SELECTQ (GETPARA FMTSPEC FMTPARATYPE)
+    (SELECTQ (GETPLOOKS PARALOOKS FMTPARATYPE)
         (PAGEHEADING 
                      (* ;; "This paragraph is the content for a page heading. The pieces are stashed away in the FORMATTING STATE.")
 
-                     (\TEDIT.HARDCOPY.PAGEHEADING TEXTOBJ TSTREAM LINE FMTSPEC CHNO IMAGESTREAM 
+                     (\TEDIT.HARDCOPY.PAGEHEADING TEXTOBJ TSTREAM LINE PARALOOKS CHNO IMAGESTREAM 
                             FORMATTINGSTATE)
                      T)
         (EVEN                                                (* ; "Skip an odd page.")
               (CL:WHEN (ODDP (GETPFS FORMATTINGSTATE PAGE#))
-                  (\TEDIT.SKIP.SPECIALCOND TSTREAM LINE FMTSPEC CHNO)
+                  (\TEDIT.SKIP.SPECIALCOND TSTREAM LINE PARALOOKS CHNO)
                   T))
         (ODD                                                 (* ; "Skip an even page")
              (CL:WHEN (EVENP (GETPFS FORMATTINGSTATE PAGE#))
-                 (\TEDIT.SKIP.SPECIALCOND TSTREAM LINE FMTSPEC CHNO)
+                 (\TEDIT.SKIP.SPECIALCOND TSTREAM LINE PARALOOKS CHNO)
                  T))
         NIL])
 
@@ -343,7 +348,9 @@
     (MOVETO CURX CURY PRSTREAM])
 
 (\TEDIT.HCPYFMTSPEC
-  [LAMBDA (DISPLAYFMT IMAGESTREAM)                           (* ; "Edited 28-Jul-2024 22:25 by rmk")
+  [LAMBDA (DISPLAYFMT IMAGESTREAM)                           (* ; "Edited 19-Feb-2025 13:34 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:36 by rmk")
+                                                             (* ; "Edited 28-Jul-2024 22:25 by rmk")
                                                              (* ; "Edited 15-Mar-2024 19:34 by rmk")
                                                              (* ; "Edited  7-Mar-2023 21:03 by rmk")
                                                              (* ; "Edited  6-Mar-2023 15:14 by rmk")
@@ -351,33 +358,34 @@
                                                              (* ; "Edited 29-Sep-2022 23:32 by rmk")
                                                              (* ; "Edited 30-May-91 21:18 by jds")
 
-    (* ;; "Given a display-type FMTSPEC, create a hardcopy equivalent.  (Special positions are made paper-relative first.).  ")
+    (* ;; "Given a display-type PARALOOKS, create a hardcopy equivalent.  (Special positions are made paper-relative first.).  ")
 
     (LET* ((SCALE (DSPSCALE NIL IMAGESTREAM)))
-          (create FMTSPEC using DISPLAYFMT FMTHARDCOPYSCALE _ SCALE 1STLEFTMAR _
-                                (HCSCALE SCALE (FGETPARA DISPLAYFMT 1STLEFTMAR))
-                                LEFTMAR _ (HCSCALE SCALE (FGETPARA DISPLAYFMT LEFTMAR))
-                                RIGHTMAR _ (HCSCALE SCALE (FGETPARA DISPLAYFMT RIGHTMAR))
-                                QUAD _ (FGETPARA DISPLAYFMT QUAD DISPLAYFMT)
-                                FMTDEFAULTTAB _ (HCSCALE SCALE (FGETPARA DISPLAYFMT FMTDEFAULTTAB))
-                                FMTTABS _ (\TEDIT.SCALE.TABS (FGETPARA DISPLAYFMT FMTTABS)
-                                                 SCALE)
-                                FMTSPECIALX _ (AND (FGETPARA DISPLAYFMT FMTSPECIALX)
-                                                   (HCSCALE SCALE (SCALEPAGEUNITS (FGETPARA 
-                                                                                         DISPLAYFMT 
-                                                                                         FMTSPECIALX)
-                                                                         1.0 NIL)))
-                                FMTSPECIALY _ (AND (FGETPARA DISPLAYFMT FMTSPECIALY)
-                                                   (HCSCALE SCALE (SCALEPAGEUNITS (FGETPARA 
-                                                                                         DISPLAYFMT 
-                                                                                         FMTSPECIALY)
-                                                                         1.0 NIL)))
-                                LEADBEFORE _ (HCSCALE SCALE (FGETPARA DISPLAYFMT LEADBEFORE))
-                                LEADAFTER _ (HCSCALE SCALE (FGETPARA DISPLAYFMT LEADAFTER))
-                                LINELEAD _ (HCSCALE SCALE (FGETPARA DISPLAYFMT LINELEAD))
-                                FMTBASETOBASE _ (AND (FGETPARA DISPLAYFMT FMTBASETOBASE)
-                                                     (HCSCALE SCALE (FGETPARA DISPLAYFMT 
-                                                                           FMTBASETOBASE])
+          (create PARALOOKS using DISPLAYFMT FMTHARDCOPYSCALE _ SCALE 1STLEFTMAR _
+                                  (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT 1STLEFTMAR))
+                                  LEFTMAR _ (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT LEFTMAR))
+                                  RIGHTMAR _ (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT RIGHTMAR))
+                                  QUAD _ (FGETPLOOKS DISPLAYFMT QUAD DISPLAYFMT)
+                                  FMTDEFAULTTAB _ (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT FMTDEFAULTTAB
+                                                                        ))
+                                  FMTTABS _ (\TEDIT.SCALE.TABS (FGETPLOOKS DISPLAYFMT FMTTABS)
+                                                   SCALE)
+                                  FMTSPECIALX _ (AND (FGETPLOOKS DISPLAYFMT FMTSPECIALX)
+                                                     (HCSCALE SCALE (SCALEPAGEUNITS (FGETPLOOKS
+                                                                                     DISPLAYFMT 
+                                                                                     FMTSPECIALX)
+                                                                           1.0 NIL)))
+                                  FMTSPECIALY _ (AND (FGETPLOOKS DISPLAYFMT FMTSPECIALY)
+                                                     (HCSCALE SCALE (SCALEPAGEUNITS (FGETPLOOKS
+                                                                                     DISPLAYFMT 
+                                                                                     FMTSPECIALY)
+                                                                           1.0 NIL)))
+                                  LEADBEFORE _ (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT LEADBEFORE))
+                                  LEADAFTER _ (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT LEADAFTER))
+                                  LINELEAD _ (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT LINELEAD))
+                                  FMTBASETOBASE _ (AND (FGETPLOOKS DISPLAYFMT FMTBASETOBASE)
+                                                       (HCSCALE SCALE (FGETPLOOKS DISPLAYFMT 
+                                                                             FMTBASETOBASE])
 
 (\TEDIT.INTEGER.IMAGEBOX
   [LAMBDA (OLDBOX)                                           (* jds "23-Oct-84 13:52")
@@ -555,11 +563,11 @@
          (CLOSEF DOC])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3492 26205 (TEDIT.HARDCOPY 3502 . 4635) (\TEDIT.PRINT.MENU 4637 . 5603) (TEDIT.HCPYFILE
- 5605 . 7779) (\TEDIT.HARDCOPY.DISPLAYLINE 7781 . 17682) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 17684 . 
-19183) (\TEDIT.HARDCOPY.MODIFYLOOKS 19185 . 21419) (\TEDIT.HCPYFMTSPEC 21421 . 24534) (
-\TEDIT.INTEGER.IMAGEBOX 24536 . 25207) (\TEDIT.DISPLAY.DIACRITIC 25209 . 26203)) (26280 27110 (
-\TEDIT.SCALEREGION 26290 . 27108)) (27369 30909 (TEDIT.HARDCOPYFN 27379 . 28684) (
-\TEDIT.HARDCOPYFILEFN 28686 . 29247) (\TEDIT.POSTSCRIPT.HARDCOPY 29249 . 30180) (\TEDIT.PRESS.HARDCOPY
- 30182 . 30907)) (32172 32973 (TEDIT-BOOK 32182 . 32971)))))
+  (FILEMAP (NIL (3554 27051 (TEDIT.HARDCOPY 3564 . 4697) (\TEDIT.PRINT.MENU 4699 . 5665) (TEDIT.HCPYFILE
+ 5667 . 7841) (\TEDIT.HARDCOPY.DISPLAYLINE 7843 . 17953) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 17955 . 
+19684) (\TEDIT.HARDCOPY.MODIFYLOOKS 19686 . 21920) (\TEDIT.HCPYFMTSPEC 21922 . 25380) (
+\TEDIT.INTEGER.IMAGEBOX 25382 . 26053) (\TEDIT.DISPLAY.DIACRITIC 26055 . 27049)) (27126 27956 (
+\TEDIT.SCALEREGION 27136 . 27954)) (28215 31755 (TEDIT.HARDCOPYFN 28225 . 29530) (
+\TEDIT.HARDCOPYFILEFN 29532 . 30093) (\TEDIT.POSTSCRIPT.HARDCOPY 30095 . 31026) (\TEDIT.PRESS.HARDCOPY
+ 31028 . 31753)) (33018 33819 (TEDIT-BOOK 33028 . 33817)))))
 STOP
diff --git a/library/tedit/TEDIT-HCPY.LCOM b/library/tedit/TEDIT-HCPY.LCOM
index d766b2f0..62c40ed7 100644
Binary files a/library/tedit/TEDIT-HCPY.LCOM and b/library/tedit/TEDIT-HCPY.LCOM differ
diff --git a/library/tedit/TEDIT-HISTORY b/library/tedit/TEDIT-HISTORY
index d0ea1a3a..2bbc317e 100644
--- a/library/tedit/TEDIT-HISTORY
+++ b/library/tedit/TEDIT-HISTORY
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 2-Feb-2025 11:32:56" {WMEDLEY}<library>tedit>TEDIT-HISTORY.;220 52908  
+(FILECREATED " 6-Feb-2025 15:42:44" {WMEDLEY}<library>TEDIT>TEDIT-HISTORY.;221 53072  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS TEDIT.REDO)
+      :CHANGES-TO (FNS \TEDIT.HISTORYADD.COMPOSITE)
 
-      :PREVIOUS-DATE " 8-Dec-2024 19:41:55" {WMEDLEY}<library>tedit>TEDIT-HISTORY.;219)
+      :PREVIOUS-DATE " 2-Feb-2025 11:32:56" {WMEDLEY}<library>TEDIT>TEDIT-HISTORY.;220)
 
 
 (PRETTYCOMPRINT TEDIT-HISTORYCOMS)
@@ -225,10 +225,12 @@
     EVENT])
 
 (\TEDIT.HISTORYADD.COMPOSITE
-  [LAMBDA (TEXTOBJ EVENTS)                                   (* ; "Edited  8-Dec-2024 19:31 by rmk")
+  [LAMBDA (TEXTOBJ EVENTS)                                   (* ; "Edited  6-Feb-2025 15:31 by rmk")
+                                                             (* ; "Edited  8-Dec-2024 19:31 by rmk")
                                                              (* ; "Edited 22-Sep-2024 18:47 by rmk")
                                                              (* ; "Edited  3-Jul-2024 08:02 by rmk")
                                                              (* ; "Edited  8-May-2024 12:34 by rmk")
+    (SETQ EVENTS (REMOVE NIL EVENTS))
     (CL:WHEN EVENTS
         (\TEDIT.HISTORYADD TEXTOBJ (CL:IF (CDR EVENTS)
                                        (\TEDIT.HISTORY.EVENT TEXTOBJ :Composite NIL NIL NIL NIL 
@@ -837,14 +839,14 @@
     (\TEDIT.THELP 'Redo-composite])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (4896 5917 (\TEDIT.HISTORYEVENT.DEFPRINT 4906 . 5915)) (7007 17445 (\TEDIT.HISTORYADD 
-7017 . 11878) (\TEDIT.HISTORYADD.COMPOSITE 11880 . 12639) (\TEDIT.CUMULATE.EVENTS 12641 . 14235) (
-\TEDIT.COMPOSITE.EVENT 14237 . 14973) (\TEDIT.HISTORY.PROP 14975 . 16338) (\TEDIT.HISTORY.EVENT 16340
- . 17269) (\TEDIT.POPEVENT 17271 . 17443)) (17498 35437 (TEDIT.UNDO 17508 . 21902) (\TEDIT.UNDO1 21904
- . 26116) (TEDIT.REDO 26118 . 32591) (\TEDIT.UNDO.UNDO 32593 . 35435)) (35438 50524 (
-\TEDIT.UNDO.INSERT 35448 . 36361) (\TEDIT.UNDO.DELETE 36363 . 37157) (\TEDIT.UNDO.MOVE 37159 . 38748) 
-(\TEDIT.UNDO.REPLACE 38750 . 39846) (\TEDIT.UNDO.CHARLOOKS 39848 . 44422) (\TEDIT.UNDO.PARALOOKS 44424
- . 48656) (\TEDIT.UNDO.PAGELOOKS 48658 . 49067) (\TEDIT.UNDO.COMPOSITE 49069 . 50296) (
-\TEDIT.UNDO.REPLACECODE 50298 . 50522)) (50525 52885 (\TEDIT.REDO.INSERT 50535 . 51268) (
-\TEDIT.REDO.REPLACE 51270 . 52601) (\TEDIT.REDO.COMPOSITE 52603 . 52883)))))
+  (FILEMAP (NIL (4913 5934 (\TEDIT.HISTORYEVENT.DEFPRINT 4923 . 5932)) (7024 17609 (\TEDIT.HISTORYADD 
+7034 . 11895) (\TEDIT.HISTORYADD.COMPOSITE 11897 . 12803) (\TEDIT.CUMULATE.EVENTS 12805 . 14399) (
+\TEDIT.COMPOSITE.EVENT 14401 . 15137) (\TEDIT.HISTORY.PROP 15139 . 16502) (\TEDIT.HISTORY.EVENT 16504
+ . 17433) (\TEDIT.POPEVENT 17435 . 17607)) (17662 35601 (TEDIT.UNDO 17672 . 22066) (\TEDIT.UNDO1 22068
+ . 26280) (TEDIT.REDO 26282 . 32755) (\TEDIT.UNDO.UNDO 32757 . 35599)) (35602 50688 (
+\TEDIT.UNDO.INSERT 35612 . 36525) (\TEDIT.UNDO.DELETE 36527 . 37321) (\TEDIT.UNDO.MOVE 37323 . 38912) 
+(\TEDIT.UNDO.REPLACE 38914 . 40010) (\TEDIT.UNDO.CHARLOOKS 40012 . 44586) (\TEDIT.UNDO.PARALOOKS 44588
+ . 48820) (\TEDIT.UNDO.PAGELOOKS 48822 . 49231) (\TEDIT.UNDO.COMPOSITE 49233 . 50460) (
+\TEDIT.UNDO.REPLACECODE 50462 . 50686)) (50689 53049 (\TEDIT.REDO.INSERT 50699 . 51432) (
+\TEDIT.REDO.REPLACE 51434 . 52765) (\TEDIT.REDO.COMPOSITE 52767 . 53047)))))
 STOP
diff --git a/library/tedit/TEDIT-HISTORY.LCOM b/library/tedit/TEDIT-HISTORY.LCOM
index 0b0e9fba..f6374c41 100644
Binary files a/library/tedit/TEDIT-HISTORY.LCOM and b/library/tedit/TEDIT-HISTORY.LCOM differ
diff --git a/library/tedit/TEDIT-LOOKS b/library/tedit/TEDIT-LOOKS
index 8e3799ad..fa1ea94d 100644
--- a/library/tedit/TEDIT-LOOKS
+++ b/library/tedit/TEDIT-LOOKS
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "31-Jan-2025 11:11:09" {WMEDLEY}<library>tedit>TEDIT-LOOKS.;373 161481 
+(FILECREATED "21-Feb-2025 09:49:05" {WMEDLEY}<library>TEDIT>TEDIT-LOOKS.;392 151574 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.CHANGE.PARALOOKS \TEDIT.CHANGE.CHARLOOKS TEDIT.PARALOOKS)
+      :CHANGES-TO (FNS TEDIT.CARETLOOKS)
 
-      :PREVIOUS-DATE "30-Jan-2025 11:52:58" {WMEDLEY}<library>tedit>TEDIT-LOOKS.;371)
+      :PREVIOUS-DATE "19-Feb-2025 12:00:37" {WMEDLEY}<library>TEDIT>TEDIT-LOOKS.;390)
 
 
 (PRETTYCOMPRINT TEDIT-LOOKSCOMS)
@@ -15,14 +15,17 @@
        [
         (* ;; "Support for Character looks (font, italic/bold, sub/superscripting, etc) and paragraph looks (margins, centered/justified, tabs, etc.). Uses compiled create functions in case DWIM is not available at loadup time.")
 
-        (DECLARE%: EVAL@COMPILE DONTCOPY
-               (EXPORT (RECORDS CHARLOOKS FMTSPEC)
-                      (MACROS \WORDSETA)
-                      (MACROS ONOFF)
-                      (MACROS FSETPARA FGETPARA GETPARA SETPARA GETCLOOKS SETCLOOKS FGETCLOOKS 
-                             FSETCLOOKS PARALOOKS! CHARLOOKS!)))
-        (INITRECORDS CHARLOOKS FMTSPEC PENDINGTAB)
-        (FNS \TEDIT.CHARLOOKS.DEFPRINT \TEDIT.FMTSPEC.DEFPRINT)
+        (DECLARE%: EVAL@COMPILE DONTCOPY (EXPORT (RECORDS CHARLOOKS PARALOOKS)
+                                                (MACROS \WORDSETA)
+                                                (MACROS ONOFF)
+                                                (MACROS GETCLOOKS SETCLOOKS FGETCLOOKS FSETCLOOKS 
+                                                       CHARLOOKS!)
+                                                (MACROS GETPLOOKS SETPLOOKS FGETPLOOKS FSETPLOOKS 
+                                                       PARALOOKS!)
+                                                             (* ; "TO BE REMOVED")
+                                                (MACROS FSETPARA FGETPARA GETPARA SETPARA)))
+        (INITRECORDS CHARLOOKS PARALOOKS PENDINGTAB)
+        (FNS \TEDIT.CHARLOOKS.DEFPRINT \TEDIT.PARALOOKS.DEFPRINT)
         (COMS 
               (* ;; 
               "Added by yabu.fx, for SUNLOADUP without DWIM.  Not sure any of these are needed/used.")
@@ -68,30 +71,8 @@
               (* ;; "For making paragraph-looks substitutions.")
 
               (FNS TEDIT.SUBPARALOOKS SAMEPARALOOKS))
-        (COMS                                                (* ; "Revision-mark support")
-              (FNS \TEDIT.MARK.REVISION))
-        (COMS                                                (* ; "Style-sheet support")
-              (FNS \TEDIT.APPLY.STYLES \TEDIT.APPLY.PARASTYLES TEDIT.STYLESHEET TEDIT.POP.STYLESHEET
-                   TEDIT.PUSH.STYLESHEET TEDIT.ADD.STYLESHEET)
-              
-              (* ;; "*TEDIT-PARASTYLE-CACHE* is an ALIST of  original char/para looks to styled char/para looks.  It is used to cache stylings, and is reset when the main stylesheet changes, and when we change paragraph looks, given paras that have private char styles.")
-
-              
-              (* ;; "*TEDIT-CURRENTPARA-CACHE* is NIL if we're not in a para that has private char styles, or is the FMTSPEC (styled!) for that para, if we are.  Used to decide when we have to flush *TEDIT-PARASTYLE-CACHE* at paragraph boundaries.  Mostly, this'll be NIL and not interesting.")
-
-              
-              (* ;; "*TEDIT-STYLESHEET-SAVE-LIST* is a list of points inside TEDIT.STYLES, so we can %"push%" new style sheets on the front, and %"pop%" them off sensibly.  This is the push-stack, in effect.  Used by TEDIT.ADD.STYLESHEET, TEDIT.PUSH.STYLESHEET, and TEDIT.POP.STYLESHEET")
-
-              (INITVARS (TEDIT.STYLES))
-              
-              (* ;; "RMK 2023: Maybe this should be one of the later ones? Only partly implemented")
-
-              (GLOBALVARS TEDIT.STYLES)
-              (INITVARS (*TEDIT-PARASTYLE-CACHE*)
-                     (*TEDIT-CURRENTPARA-CACHE*)
-                     (*TEDIT-STYLESHEET-SAVE-LIST*))
-              (GLOBALVARS *TEDIT-PARASTYLE-CACHE* *TEDIT-CURRENTPARA-CACHE* 
-                     *TEDIT-STYLESHEET-SAVE-LIST*))
+        (FNS \TEDIT.MARK.REVISION)
+                                                             (* ; "Revision-mark support")
         (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA)
                                                                              (NLAML)
                                                                              (LAMA])
@@ -168,56 +149,56 @@
                     (ACCESSFNS (CLNAME (fetch (CHARLOOKS CLFONTUNPARSE) of DATUM)
                                       (replace (CHARLOOKS CLFONTUNPARSE) of DATUM with NEWVALUE))))
 
-(DATATYPE FMTSPEC (
-                   (* ;; "Describe the paragraph formatting for a paragraph in a TEdit document.")
+(DATATYPE PARALOOKS (
+                     (* ;; "Describe the paragraph formatting for a paragraph in a TEdit document.")
 
-                   1STLEFTMAR                                (* ; 
+                     1STLEFTMAR                              (* ; 
                                                      "Left margin of the first line of the paragraph")
-                   LEFTMAR                                   (* ; 
+                     LEFTMAR                                 (* ; 
                                               "Left margin of the rest of the lines in the paragraph")
-                   RIGHTMAR                                  (* ; "Right margin for the paragraph")
-                   LEADBEFORE                                (* ; 
+                     RIGHTMAR                                (* ; "Right margin for the paragraph")
+                     LEADBEFORE                              (* ; 
                                                 "Leading above the paragraph's first line, in points")
-                   LEADAFTER                                 (* ; 
+                     LEADAFTER                               (* ; 
                             "Leading below the paragraph's bottom line, in points.  NOT IMPLEMENTED.")
-                   LINELEAD                                  (* ; "Leading between lines, in points.  This space is added BELOW each line in the para when TEDIT.LINELEADING.BELOW, otherwise above, which is how it is documented.")
-                   FMTBASETOBASE                             (* ; "The baseline-to-baseline spacing between lines in this paragraph.  THIS  OVERRIDES THE LINE LEADING")
-                   NIL                                       (* ; 
+                     LINELEAD                                (* ; "Leading between lines, in points.  This space is added BELOW each line in the para when TEDIT.LINELEADING.BELOW, otherwise above, which is how it is documented.")
+                     FMTBASETOBASE                           (* ; "The baseline-to-baseline spacing between lines in this paragraph.  THIS  OVERRIDES THE LINE LEADING")
+                     NIL                                     (* ; 
             "Was TABSPEC: The list of tabs for this paragraph, including CAR for a default tab width")
-                   QUAD                                      (* ; 
+                     QUAD                                    (* ; 
                                  "How the para is formatted: one of LEFT, RIGHT, CENTERED, JUSTIFIED")
-                   FMTSTYLE                                  (* ; 
+                     FMTSTYLE                                (* ; 
                                                 "The STYLE that controls this paragraph's appearance")
-                   FMTCHARSTYLES                             (* ; "The characterstyles that control the appearance of characters in this para (maybe?  may be part of the fmtstyle.)")
-                   FMTUSERINFO                               (* ; "Space for a PLIST of user info")
-                   FMTSPECIALX                               (* ; 
+                     FMTCHARSTYLES                           (* ; "The characterstyles that control the appearance of characters in this para (maybe?  may be part of the fmtstyle.)")
+                     FMTUSERINFO                             (* ; "Space for a PLIST of user info")
+                     FMTSPECIALX                             (* ; 
                                    "A special horizontal location on the printed page for this para.")
-                   FMTSPECIALY                               (* ; 
+                     FMTSPECIALY                             (* ; 
                                               "A special vertical location on the page for this para")
-                   (FMTHEADINGKEEP FLAG)                     (* ; 
+                     (FMTHEADINGKEEP FLAG)                   (* ; 
                                 "This para should be kept with the top line or so of the next para..")
-                   FMTPARATYPE                               (* ; 
+                     FMTPARATYPE                             (* ; 
                                              "What kind of para this is: TEXT, PAGEHEADING, whatever")
-                   FMTPARASUBTYPE                            (* ; 
+                     FMTPARASUBTYPE                          (* ; 
                                      "Sub type of the type, e.g., what KIND of page heading this is.")
-                   FMTNEWPAGEBEFORE                          (* ; "Start a new box (if T) or back up the page formatting tree to make a new box of the type named in the value -- by going the least distance back up the tree, then back down until you find that kind of box.")
-                   FMTNEWPAGEAFTER                           (* ; "Similarly")
-                   FMTKEEP                                   (* ; 
+                     FMTNEWPAGEBEFORE                        (* ; "Start a new box (if T) or back up the page formatting tree to make a new box of the type named in the value -- by going the least distance back up the tree, then back down until you find that kind of box.")
+                     FMTNEWPAGEAFTER                         (* ; "Similarly")
+                     FMTKEEP                                 (* ; 
                       "For information about how this paragraph is to be kept with other paragraphs.")
-                   FMTCOLUMN                                 (* ; 
+                     FMTCOLUMN                               (* ; 
                                            "For setting up side-by-side paragraphs easily ala BravoX")
-                   FMTVERTRULES                              (* ; 
+                     FMTVERTRULES                            (* ; 
                                                        "For Keeping track of vertical rules in force")
-                   (FMTMARK FLAG)                            (* ; "Used to keep track of which PARALOOKSs are really being used -- a mark & collect is done just before a PUT, so that only 'real' PARALOOKSs make it into the file")
+                     (FMTMARK FLAG)                          (* ; "Used to keep track of which PARALOOKSs are really being used -- a mark & collect is done just before a PUT, so that only 'real' PARALOOKSs make it into the file")
                                                              (* ; "Used for a mark&sweep of para looks at PUT time -- T means this looks really IS in use in the document, so it makes sense to save it on the file.")
-                   (FMTHARDCOPY FLAG)                        (* ; 
+                     (FMTHARDCOPY FLAG)                      (* ; 
                                          "T if this paragraph is to be displayed in hardcopy-format.")
-                   FMTREVISED                                (* ; "T (or perhaps a revision level or revision-mark spec??) if this paragraph is to be marked as changed on output.")
-                   FMTHARDCOPYSCALE                          (* ; "The units-per-point (DSPSCALE) of the hardcopy stream that is simulated in hardcopy-display mode (FMTHARDCOPY=T")
-                   FMTDEFAULTTAB                             (* ; "Default tab in points)")
-                   FMTTABS)                                  (* ; "List of tabs (in points)")
-                  (INIT (DEFPRINT 'FMTSPEC (FUNCTION \TEDIT.FMTSPEC.DEFPRINT)))
-                  LEADBEFORE _ 0 LEADAFTER _ 0 LINELEAD _ 0)
+                     FMTREVISED                              (* ; "T (or perhaps a revision level or revision-mark spec??) if this paragraph is to be marked as changed on output.")
+                     FMTHARDCOPYSCALE                        (* ; "The units-per-point (DSPSCALE) of the hardcopy stream that is simulated in hardcopy-display mode (FMTHARDCOPY=T")
+                     FMTDEFAULTTAB                           (* ; "Default tab in points)")
+                     FMTTABS)                                (* ; "List of tabs (in points)")
+                    (INIT (DEFPRINT 'PARALOOKS (FUNCTION \TEDIT.PARALOOKS.DEFPRINT)))
+                    LEADBEFORE _ 0 LEADAFTER _ 0 LINELEAD _ 0)
 )
 
 (/DECLAREDATATYPE 'CHARLOOKS
@@ -249,41 +230,41 @@
 
 (DEFPRINT 'CHARLOOKS (FUNCTION \TEDIT.CHARLOOKS.DEFPRINT))
 
-(/DECLAREDATATYPE 'FMTSPEC
+(/DECLAREDATATYPE 'PARALOOKS
        '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
                POINTER POINTER POINTER FLAG POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
                FLAG FLAG POINTER POINTER POINTER POINTER)
-       '((FMTSPEC 0 POINTER)
-         (FMTSPEC 2 POINTER)
-         (FMTSPEC 4 POINTER)
-         (FMTSPEC 6 POINTER)
-         (FMTSPEC 8 POINTER)
-         (FMTSPEC 10 POINTER)
-         (FMTSPEC 12 POINTER)
-         (FMTSPEC 14 POINTER)
-         (FMTSPEC 16 POINTER)
-         (FMTSPEC 18 POINTER)
-         (FMTSPEC 20 POINTER)
-         (FMTSPEC 22 POINTER)
-         (FMTSPEC 24 POINTER)
-         (FMTSPEC 26 POINTER)
-         (FMTSPEC 26 (FLAGBITS . 0))
-         (FMTSPEC 28 POINTER)
-         (FMTSPEC 30 POINTER)
-         (FMTSPEC 32 POINTER)
-         (FMTSPEC 34 POINTER)
-         (FMTSPEC 36 POINTER)
-         (FMTSPEC 38 POINTER)
-         (FMTSPEC 40 POINTER)
-         (FMTSPEC 40 (FLAGBITS . 0))
-         (FMTSPEC 40 (FLAGBITS . 16))
-         (FMTSPEC 42 POINTER)
-         (FMTSPEC 44 POINTER)
-         (FMTSPEC 46 POINTER)
-         (FMTSPEC 48 POINTER))
+       '((PARALOOKS 0 POINTER)
+         (PARALOOKS 2 POINTER)
+         (PARALOOKS 4 POINTER)
+         (PARALOOKS 6 POINTER)
+         (PARALOOKS 8 POINTER)
+         (PARALOOKS 10 POINTER)
+         (PARALOOKS 12 POINTER)
+         (PARALOOKS 14 POINTER)
+         (PARALOOKS 16 POINTER)
+         (PARALOOKS 18 POINTER)
+         (PARALOOKS 20 POINTER)
+         (PARALOOKS 22 POINTER)
+         (PARALOOKS 24 POINTER)
+         (PARALOOKS 26 POINTER)
+         (PARALOOKS 26 (FLAGBITS . 0))
+         (PARALOOKS 28 POINTER)
+         (PARALOOKS 30 POINTER)
+         (PARALOOKS 32 POINTER)
+         (PARALOOKS 34 POINTER)
+         (PARALOOKS 36 POINTER)
+         (PARALOOKS 38 POINTER)
+         (PARALOOKS 40 POINTER)
+         (PARALOOKS 40 (FLAGBITS . 0))
+         (PARALOOKS 40 (FLAGBITS . 16))
+         (PARALOOKS 42 POINTER)
+         (PARALOOKS 44 POINTER)
+         (PARALOOKS 46 POINTER)
+         (PARALOOKS 48 POINTER))
        '50)
 
-(DEFPRINT 'FMTSPEC (FUNCTION \TEDIT.FMTSPEC.DEFPRINT))
+(DEFPRINT 'PARALOOKS (FUNCTION \TEDIT.PARALOOKS.DEFPRINT))
 (DECLARE%: EVAL@COMPILE 
 
 (PUTPROPS \WORDSETA DMACRO (OPENLAMBDA (A J V)
@@ -306,18 +287,6 @@
 )
 (DECLARE%: EVAL@COMPILE 
 
-(PUTPROPS FSETPARA MACRO ((F FIELD NEWVALUE)
-                          (freplace (FMTSPEC FIELD) of F with NEWVALUE)))
-
-(PUTPROPS FGETPARA MACRO ((F FIELD)
-                          (ffetch (FMTSPEC FIELD) of F)))
-
-(PUTPROPS GETPARA MACRO ((F FIELD)
-                         (fetch (FMTSPEC FIELD) of F)))
-
-(PUTPROPS SETPARA MACRO ((F FIELD NEWVALUE)
-                         (replace (FMTSPEC FIELD) of F with NEWVALUE)))
-
 (PUTPROPS GETCLOOKS MACRO ((CL FIELD)
                            (fetch (CHARLOOKS FIELD) of CL)))
 
@@ -330,12 +299,40 @@
 (PUTPROPS FSETCLOOKS MACRO ((CL FIELD NEWVALUE)
                             (freplace (CHARLOOKS FIELD) of CL with NEWVALUE)))
 
-(PUTPROPS PARALOOKS! MACRO ((PL)
-                            (\DTEST PL 'FMTSPEC)))
-
 (PUTPROPS CHARLOOKS! MACRO ((CL)
                             (\DTEST CL 'CHARLOOKS)))
 )
+(DECLARE%: EVAL@COMPILE 
+
+(PUTPROPS GETPLOOKS MACRO ((PLOOKS FIELD)
+                           (fetch (PARALOOKS FIELD) of PLOOKS)))
+
+(PUTPROPS SETPLOOKS MACRO ((PLOOKS FIELD NEWVALUE)
+                           (replace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)))
+
+(PUTPROPS FGETPLOOKS MACRO ((PLOOKS FIELD)
+                            (ffetch (PARALOOKS FIELD) of PLOOKS)))
+
+(PUTPROPS FSETPLOOKS MACRO ((PLOOKS FIELD NEWVALUE)
+                            (freplace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)))
+
+(PUTPROPS PARALOOKS! MACRO ((PL)
+                            (\DTEST PL 'PARALOOKS)))
+)
+(DECLARE%: EVAL@COMPILE 
+
+(PUTPROPS FSETPARA MACRO ((PLOOKS FIELD NEWVALUE)
+                          (freplace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)))
+
+(PUTPROPS FGETPARA MACRO ((PLOOKS FIELD)
+                          (ffetch (PARALOOKS FIELD) of PLOOKS)))
+
+(PUTPROPS GETPARA MACRO ((PLOOKS FIELD)
+                         (fetch (PARALOOKS FIELD) of PLOOKS)))
+
+(PUTPROPS SETPARA MACRO ((PLOOKS FIELD NEWVALUE)
+                         (replace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)))
+)
 
 (* "END EXPORTED DEFINITIONS")
 
@@ -370,41 +367,41 @@
 
 (DEFPRINT 'CHARLOOKS (FUNCTION \TEDIT.CHARLOOKS.DEFPRINT))
 
-(/DECLAREDATATYPE 'FMTSPEC
+(/DECLAREDATATYPE 'PARALOOKS
        '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
                POINTER POINTER POINTER FLAG POINTER POINTER POINTER POINTER POINTER POINTER POINTER 
                FLAG FLAG POINTER POINTER POINTER POINTER)
-       '((FMTSPEC 0 POINTER)
-         (FMTSPEC 2 POINTER)
-         (FMTSPEC 4 POINTER)
-         (FMTSPEC 6 POINTER)
-         (FMTSPEC 8 POINTER)
-         (FMTSPEC 10 POINTER)
-         (FMTSPEC 12 POINTER)
-         (FMTSPEC 14 POINTER)
-         (FMTSPEC 16 POINTER)
-         (FMTSPEC 18 POINTER)
-         (FMTSPEC 20 POINTER)
-         (FMTSPEC 22 POINTER)
-         (FMTSPEC 24 POINTER)
-         (FMTSPEC 26 POINTER)
-         (FMTSPEC 26 (FLAGBITS . 0))
-         (FMTSPEC 28 POINTER)
-         (FMTSPEC 30 POINTER)
-         (FMTSPEC 32 POINTER)
-         (FMTSPEC 34 POINTER)
-         (FMTSPEC 36 POINTER)
-         (FMTSPEC 38 POINTER)
-         (FMTSPEC 40 POINTER)
-         (FMTSPEC 40 (FLAGBITS . 0))
-         (FMTSPEC 40 (FLAGBITS . 16))
-         (FMTSPEC 42 POINTER)
-         (FMTSPEC 44 POINTER)
-         (FMTSPEC 46 POINTER)
-         (FMTSPEC 48 POINTER))
+       '((PARALOOKS 0 POINTER)
+         (PARALOOKS 2 POINTER)
+         (PARALOOKS 4 POINTER)
+         (PARALOOKS 6 POINTER)
+         (PARALOOKS 8 POINTER)
+         (PARALOOKS 10 POINTER)
+         (PARALOOKS 12 POINTER)
+         (PARALOOKS 14 POINTER)
+         (PARALOOKS 16 POINTER)
+         (PARALOOKS 18 POINTER)
+         (PARALOOKS 20 POINTER)
+         (PARALOOKS 22 POINTER)
+         (PARALOOKS 24 POINTER)
+         (PARALOOKS 26 POINTER)
+         (PARALOOKS 26 (FLAGBITS . 0))
+         (PARALOOKS 28 POINTER)
+         (PARALOOKS 30 POINTER)
+         (PARALOOKS 32 POINTER)
+         (PARALOOKS 34 POINTER)
+         (PARALOOKS 36 POINTER)
+         (PARALOOKS 38 POINTER)
+         (PARALOOKS 40 POINTER)
+         (PARALOOKS 40 (FLAGBITS . 0))
+         (PARALOOKS 40 (FLAGBITS . 16))
+         (PARALOOKS 42 POINTER)
+         (PARALOOKS 44 POINTER)
+         (PARALOOKS 46 POINTER)
+         (PARALOOKS 48 POINTER))
        '50)
 
-(DEFPRINT 'FMTSPEC (FUNCTION \TEDIT.FMTSPEC.DEFPRINT))
+(DEFPRINT 'PARALOOKS (FUNCTION \TEDIT.PARALOOKS.DEFPRINT))
 
 (/DECLAREDATATYPE 'PENDINGTAB '(POINTER POINTER POINTER POINTER FULLXPOINTER POINTER)
        '((PENDINGTAB 0 POINTER)
@@ -441,19 +438,21 @@
                            (CDR LOC)
                            ":" INFO "}"))])
 
-(\TEDIT.FMTSPEC.DEFPRINT
-  [LAMBDA (FMTSPEC STREAM)                                   (* ; "Edited 26-Aug-2023 11:11 by rmk")
-    (LET ((LOC (LOC FMTSPEC)))
-         (CONS (CONCAT "{FMT" (CAR LOC)
+(\TEDIT.PARALOOKS.DEFPRINT
+  [LAMBDA (PARALOOKS STREAM)                                 (* ; "Edited 19-Feb-2025 11:52 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:27 by rmk")
+                                                             (* ; "Edited 26-Aug-2023 11:11 by rmk")
+    (LET ((LOC (LOC PARALOOKS)))
+         (CONS (CONCAT "{PL" (CAR LOC)
                       "/"
                       (CDR LOC)
                       ":"
-                      (SUBSTRING (fetch (FMTSPEC QUAD) of FMTSPEC)
+                      (SUBSTRING (GETPLOOKS PARALOOKS QUAD)
                              1 2)
                       "-"
-                      (fetch (FMTSPEC LEFTMAR) of FMTSPEC)
+                      (GETPLOOKS PARALOOKS LEFTMAR)
                       "-"
-                      (fetch (FMTSPEC RIGHTMAR) of FMTSPEC)
+                      (GETPLOOKS PARALOOKS RIGHTMAR)
                       "}"])
 )
 
@@ -464,10 +463,11 @@
 (DEFINEQ
 
 (\TEDIT.CREATE.DEFAULT.FMTSPEC
-  [LAMBDA NIL                                                (* ; "Edited  4-Aug-2024 17:13 by rmk")
+  [LAMBDA NIL                                                (* ; "Edited  8-Feb-2025 22:05 by rmk")
+                                                             (* ; "Edited  4-Aug-2024 17:13 by rmk")
                                                              (* ; "Edited 28-Jul-2024 12:57 by rmk")
                                                              (* ; "Edited 24-Aug-2023 23:31 by rmk")
-    (create FMTSPEC
+    (create PARALOOKS
            QUAD _ 'LEFT
            1STLEFTMAR _ 0
            LEFTMAR _ 0
@@ -653,18 +653,21 @@
                                 " is an unknown feature of character looks.  Detected in SAMECLOOKS"])
 
 (TEDIT.CARETLOOKS
-  [LAMBDA (STREAM LOOKS)                                     (* ; "Edited 15-Oct-2023 17:12 by rmk")
+  [LAMBDA (STREAM LOOKS)                                     (* ; "Edited 21-Feb-2025 09:48 by rmk")
+                                                             (* ; "Edited 15-Oct-2023 17:12 by rmk")
                                                              (* ; "Edited 28-May-2023 14:15 by rmk")
                                                              (* ; "Edited  6-Apr-2023 21:42 by rmk")
                                                              (* ; "Edited  8-Sep-2022 11:25 by rmk")
                                                              (* ; "Edited 30-May-91 21:40 by jds")
 
-    (* ;; "Set the 'Caret looks' for a TEdit document, i.e., the looks that will be applied to newly-typed characters from here on.")
+    (* ;; "Set the 'Caret looks' for a TEdit document, i.e., the looks that will be applied to newly-typed characters from here on.  Returns the previous caret looks")
 
     (LET ((TEXTOBJ (TEXTOBJ STREAM)))                        (* ; 
                               "Parse up the looks he gave us, to make sure they're a valid CHARLOOKS")
-         (change (FGETTOBJ TEXTOBJ CARETLOOKS)
-                (\TEDIT.CARETLOOKS.VERIFY TEXTOBJ (\TEDIT.PARSE.CHARLOOKS.LIST LOOKS DATUM TEXTOBJ])
+         (PROG1 (FGETTOBJ TEXTOBJ CARETLOOKS)
+             (change (FGETTOBJ TEXTOBJ CARETLOOKS)
+                    (\TEDIT.CARETLOOKS.VERIFY TEXTOBJ (\TEDIT.PARSE.CHARLOOKS.LIST LOOKS DATUM 
+                                                             TEXTOBJ))))])
 
 (TEDIT.COPY.LOOKS
   [LAMBDA (STREAM SOURCE DEST)                               (* ; "Edited 25-Nov-2024 14:38 by rmk")
@@ -1171,7 +1174,8 @@
                                          (RETURN NEWLOOK])
 
 (\TEDIT.UNIQUIFY.ALL
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited 16-Mar-2024 10:03 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  8-Feb-2025 20:24 by rmk")
+                                                             (* ; "Edited 16-Mar-2024 10:03 by rmk")
                                                              (* ; "Edited 14-Nov-2023 16:20 by rmk")
                                                              (* ; "Edited 25-Aug-2023 08:57 by rmk")
                                                              (* ; "Edited 15-Aug-2023 22:04 by rmk")
@@ -1194,11 +1198,13 @@
                (\TEDIT.UNIQUIFY.CHARLOOKS DATUM TEXTOBJ)))
     (change (GETTOBJ TEXTOBJ CARETLOOKS)
            (\TEDIT.UNIQUIFY.CHARLOOKS DATUM TEXTOBJ))
-    (change (GETTOBJ TEXTOBJ FMTSPEC)
+    (change (GETTOBJ TEXTOBJ DEFAULTPARALOOKS)
            (\TEDIT.UNIQUIFY.PARALOOKS DATUM TEXTOBJ])
 
 (\TEDIT.FLUSH.UNUSED.LOOKS
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited 16-Mar-2024 10:03 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited 19-Feb-2025 11:56 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 20:36 by rmk")
+                                                             (* ; "Edited 16-Mar-2024 10:03 by rmk")
                                                              (* ; "Edited 25-Aug-2023 08:03 by rmk")
                                                              (* ; "Edited 15-Aug-2023 22:11 by rmk")
                                                              (* ; "Edited 30-May-91 21:47 by jds")
@@ -1210,27 +1216,23 @@
 
          (* ;; "Reset the in-use mark in all looks")
 
-         (for LOOKS in CHARLOOKS do (replace (CHARLOOKS CLMARK) of LOOKS with NIL))
-         (for LOOKS in PARALOOKS do (replace (FMTSPEC FMTMARK) of LOOKS with NIL))
+         (for LOOKS in CHARLOOKS do (SETCLOOKS LOOKS CLMARK NIL))
+         (for LOOKS in PARALOOKS do (SETPLOOKS LOOKS FMTMARK NIL))
 
          (* ;; "Run thru the pieces in the document, marking the looks that are really in use.")
 
-         (for PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) do (replace (CHARLOOKS CLMARK)
-                                                            of (PLOOKS PC) with T)
-                                                         (replace (FMTSPEC FMTMARK)
-                                                            of (PPARALOOKS PC) with T))
+         (for PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ) do (FSETCLOOKS (PLOOKS PC)
+                                                                CLMARK T)
+                                                         (FSETPLOOKS (PPARALOOKS PC)
+                                                                FMTMARK T))
 
          (* ;; "Keep only those char and para looks that ARE being used.")
 
-         (SETTOBJ TEXTOBJ TXTCHARLOOKSLIST (for LOOKS in CHARLOOKS when (fetch (CHARLOOKS CLMARK)
-                                                                           of LOOKS)
-                                              collect (replace (CHARLOOKS CLMARK) of LOOKS
-                                                         with NIL)
+         (SETTOBJ TEXTOBJ TXTCHARLOOKSLIST (for LOOKS in CHARLOOKS when (FGETCLOOKS LOOKS CLMARK)
+                                              collect (FSETCLOOKS LOOKS CLMARK NIL)
                                                     LOOKS))
-         (SETTOBJ TEXTOBJ TXTPARALOOKSLIST (for LOOKS in PARALOOKS when (fetch (FMTSPEC FMTMARK)
-                                                                           of LOOKS)
-                                              collect (replace (FMTSPEC FMTMARK) of LOOKS
-                                                         with NIL)
+         (SETTOBJ TEXTOBJ TXTPARALOOKSLIST (for LOOKS in PARALOOKS when (FGETPLOOKS LOOKS FMTMARK)
+                                              collect (FSETPLOOKS LOOKS FMTMARK NIL)
                                                     LOOKS])
 )
 
@@ -1809,64 +1811,70 @@
 (DEFINEQ
 
 (\TEDIT.EQFMTSPEC
-  [LAMBDA (PARALOOK1 PARALOOK2)                              (* ; "Edited 28-Jul-2024 21:29 by rmk")
+  [LAMBDA (PARALOOK1 PARALOOK2)                              (* ; "Edited 19-Feb-2025 11:53 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 20:43 by rmk")
+                                                             (* ; "Edited 28-Jul-2024 21:29 by rmk")
                                                              (* ; 
                                                         "Edited  2-Jul-93 21:32 by sybalskY:MV:ENVOS")
 
     (* ;; "Given two sets of FMTSPECS, are they effectively the same?")
 
+    (PARALOOKS! PARALOOK1)
+    (PARALOOKS! PARALOOK2)
     (OR (EQ PARALOOK1 PARALOOK2)
-        (AND (EQ (fetch (FMTSPEC QUAD) of PARALOOK1)
-                 (fetch (FMTSPEC QUAD) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTNEWPAGEBEFORE) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTNEWPAGEBEFORE) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTNEWPAGEAFTER) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTNEWPAGEAFTER) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTSTYLE) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTSTYLE) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTSPECIALX) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTSPECIALX) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTSPECIALY) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTSPECIALY) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTHEADINGKEEP) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTHEADINGKEEP) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTKEEP) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTKEEP) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTPARATYPE) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTPARATYPE) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTPARASUBTYPE) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTPARASUBTYPE) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTHARDCOPY) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTHARDCOPY) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTREVISED) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTREVISED) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTCOLUMN) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTCOLUMN) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC 1STLEFTMAR) of PARALOOK1)
-                  (ffetch (FMTSPEC 1STLEFTMAR) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC LEFTMAR) of PARALOOK1)
-                  (ffetch (FMTSPEC LEFTMAR) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC RIGHTMAR) of PARALOOK1)
-                  (ffetch (FMTSPEC RIGHTMAR) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC LEADBEFORE) of PARALOOK1)
-                  (ffetch (FMTSPEC LEADBEFORE) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC LEADAFTER) of PARALOOK1)
-                  (ffetch (FMTSPEC LEADAFTER) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC LINELEAD) of PARALOOK1)
-                  (ffetch (FMTSPEC LINELEAD) of PARALOOK2))
-             (EQP (ffetch (FMTSPEC FMTBASETOBASE) of PARALOOK1)
-                  (ffetch (FMTSPEC FMTBASETOBASE) of PARALOOK2))
-             (EQUAL (ffetch (FMTSPEC FMTUSERINFO) of PARALOOK1)
-                    (ffetch (FMTSPEC FMTUSERINFO) of PARALOOK2))
-             (EQUAL (ffetch (FMTSPEC FMTCHARSTYLES) of PARALOOK1)
-                    (ffetch (FMTSPEC FMTCHARSTYLES) of PARALOOK2))
-             (EQ (ffetch (FMTSPEC FMTDEFAULTTAB) of PARALOOK1)
-                 (ffetch (FMTSPEC FMTDEFAULTTAB) of PARALOOK2))
-             (EQUAL (ffetch (FMTSPEC FMTTABS) of PARALOOK1)
-                    (ffetch (FMTSPEC FMTTABS) of PARALOOK2])
+        (AND (EQ (FGETPLOOKS PARALOOK1 QUAD)
+                 (FGETPLOOKS PARALOOK2 QUAD))
+             (EQ (FGETPLOOKS PARALOOK1 FMTNEWPAGEBEFORE)
+                 (FGETPLOOKS PARALOOK2 FMTNEWPAGEBEFORE))
+             (EQ (FGETPLOOKS PARALOOK1 FMTNEWPAGEAFTER)
+                 (FGETPLOOKS PARALOOK2 FMTNEWPAGEAFTER))
+             (EQ (FGETPLOOKS PARALOOK1 FMTSTYLE)
+                 (FGETPLOOKS PARALOOK2 FMTSTYLE))
+             (EQ (FGETPLOOKS PARALOOK1 FMTSPECIALX)
+                 (FGETPLOOKS PARALOOK2 FMTSPECIALX))
+             (EQ (FGETPLOOKS PARALOOK1 FMTSPECIALY)
+                 (FGETPLOOKS PARALOOK2 FMTSPECIALY))
+             (EQ (FGETPLOOKS PARALOOK1 FMTHEADINGKEEP)
+                 (FGETPLOOKS PARALOOK2 FMTHEADINGKEEP))
+             (EQ (FGETPLOOKS PARALOOK1 FMTKEEP)
+                 (FGETPLOOKS PARALOOK2 FMTKEEP))
+             (EQ (FGETPLOOKS PARALOOK1 FMTPARATYPE)
+                 (FGETPLOOKS PARALOOK2 FMTPARATYPE))
+             (EQ (FGETPLOOKS PARALOOK1 FMTPARASUBTYPE)
+                 (FGETPLOOKS PARALOOK2 FMTPARASUBTYPE))
+             (EQ (FGETPLOOKS PARALOOK1 FMTHARDCOPY)
+                 (FGETPLOOKS PARALOOK2 FMTHARDCOPY))
+             (EQ (FGETPLOOKS PARALOOK1 FMTREVISED)
+                 (FGETPLOOKS PARALOOK2 FMTREVISED))
+             (EQ (FGETPLOOKS PARALOOK1 FMTCOLUMN)
+                 (FGETPLOOKS PARALOOK2 FMTCOLUMN))
+             (EQP (FGETPLOOKS PARALOOK1 1STLEFTMAR)
+                  (FGETPLOOKS PARALOOK2 1STLEFTMAR))
+             (EQP (FGETPLOOKS PARALOOK1 LEFTMAR)
+                  (FGETPLOOKS PARALOOK2 LEFTMAR))
+             (EQP (FGETPLOOKS PARALOOK1 RIGHTMAR)
+                  (FGETPLOOKS PARALOOK2 RIGHTMAR))
+             (EQP (FGETPLOOKS PARALOOK1 LEADBEFORE)
+                  (FGETPLOOKS PARALOOK2 LEADBEFORE))
+             (EQP (FGETPLOOKS PARALOOK1 LEADAFTER)
+                  (FGETPLOOKS PARALOOK2 LEADAFTER))
+             (EQP (FGETPLOOKS PARALOOK1 LINELEAD)
+                  (FGETPLOOKS PARALOOK2 LINELEAD))
+             (EQP (FGETPLOOKS PARALOOK1 FMTBASETOBASE)
+                  (FGETPLOOKS PARALOOK2 FMTBASETOBASE))
+             (EQUAL (FGETPLOOKS PARALOOK1 FMTUSERINFO)
+                    (FGETPLOOKS PARALOOK2 FMTUSERINFO))
+             (EQUAL (FGETPLOOKS PARALOOK1 FMTCHARSTYLES)
+                    (FGETPLOOKS PARALOOK2 FMTCHARSTYLES))
+             (EQ (FGETPLOOKS PARALOOK1 FMTDEFAULTTAB)
+                 (FGETPLOOKS PARALOOK2 FMTDEFAULTTAB))
+             (EQUAL (FGETPLOOKS PARALOOK1 FMTTABS)
+                    (FGETPLOOKS PARALOOK2 FMTTABS])
 
 (TEDIT.GET.PARALOOKS
-  [LAMBDA (TSTREAM SELORCH#)                                 (* ; "Edited  4-Aug-2024 17:17 by rmk")
+  [LAMBDA (TSTREAM SELORCH#)                                 (* ; "Edited 19-Feb-2025 12:00 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 20:55 by rmk")
+                                                             (* ; "Edited  4-Aug-2024 17:17 by rmk")
                                                              (* ; "Edited 28-Jul-2024 16:25 by rmk")
                                                              (* ; "Edited 17-Mar-2024 00:27 by rmk")
                                                              (* ; "Edited 11-Dec-2023 10:12 by rmk")
@@ -1890,41 +1898,43 @@
                                                    else (\ILLEGAL.ARG SELORCH#))
                                                 CH#))
                              TEXTOBJ)))
-           (FMTSPEC (CL:IF PC
-                        (PPARALOOKS PC)
-                        (fetch (TEXTOBJ FMTSPEC) of TEXTOBJ))]
-          (for PROP in (LIST (FGETPARA FMTSPEC QUAD)
-                             (FGETPARA FMTSPEC 1STLEFTMAR)
-                             (FGETPARA FMTSPEC LEFTMAR)
-                             (FGETPARA FMTSPEC RIGHTMAR)
-                             (FGETPARA FMTSPEC LEADBEFORE)
-                             (FGETPARA FMTSPEC LEADAFTER)
-                             (FGETPARA FMTSPEC LINELEAD)
-                             (FGETPARA FMTSPEC FMTBASETOBASE)
+           (PARALOOKS (CL:IF PC
+                          (PPARALOOKS PC)
+                          (GETTOBJ TEXTOBJ DEFAULTPARALOOKS))]
+          (for PROP in (LIST (FGETPLOOKS PARALOOKS QUAD)
+                             (FGETPLOOKS PARALOOKS 1STLEFTMAR)
+                             (FGETPLOOKS PARALOOKS LEFTMAR)
+                             (FGETPLOOKS PARALOOKS RIGHTMAR)
+                             (FGETPLOOKS PARALOOKS LEADBEFORE)
+                             (FGETPLOOKS PARALOOKS LEADAFTER)
+                             (FGETPLOOKS PARALOOKS LINELEAD)
+                             (FGETPLOOKS PARALOOKS FMTBASETOBASE)
                              (create TABSPEC
-                                    DEFAULTTAB _ (FGETPARA FMTSPEC FMTDEFAULTTAB)
-                                    TABS _ (COPY (FGETPARA FMTSPEC FMTTABS)))
-                             (FGETPARA FMTSPEC FMTSTYLE)
-                             (FGETPARA FMTSPEC FMTCHARSTYLES)
-                             (FGETPARA FMTSPEC FMTUSERINFO)
-                             (FGETPARA FMTSPEC FMTSPECIALX)
-                             (FGETPARA FMTSPEC FMTSPECIALY)
-                             (FGETPARA FMTSPEC FMTPARATYPE)
-                             (FGETPARA FMTSPEC FMTPARASUBTYPE)
-                             (ONOFF (FGETPARA FMTSPEC FMTNEWPAGEBEFORE))
-                             (ONOFF (FGETPARA FMTSPEC FMTNEWPAGEAFTER))
-                             (ONOFF (FGETPARA FMTSPEC FMTHEADINGKEEP))
-                             (FGETPARA FMTSPEC FMTKEEP)
-                             (ONOFF (FGETPARA FMTSPEC FMTHARDCOPY))
-                             (FGETPARA FMTSPEC FMTREVISED)
-                             (FGETPARA FMTSPEC FMTCOLUMN)) as PROPNAME
+                                    DEFAULTTAB _ (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)
+                                    TABS _ (COPY (FGETPLOOKS PARALOOKS FMTTABS)))
+                             (FGETPLOOKS PARALOOKS FMTSTYLE)
+                             (FGETPLOOKS PARALOOKS FMTCHARSTYLES)
+                             (FGETPLOOKS PARALOOKS FMTUSERINFO)
+                             (FGETPLOOKS PARALOOKS FMTSPECIALX)
+                             (FGETPLOOKS PARALOOKS FMTSPECIALY)
+                             (FGETPLOOKS PARALOOKS FMTPARATYPE)
+                             (FGETPLOOKS PARALOOKS FMTPARASUBTYPE)
+                             (ONOFF (FGETPLOOKS PARALOOKS FMTNEWPAGEBEFORE))
+                             (ONOFF (FGETPLOOKS PARALOOKS FMTNEWPAGEAFTER))
+                             (ONOFF (FGETPLOOKS PARALOOKS FMTHEADINGKEEP))
+                             (FGETPLOOKS PARALOOKS FMTKEEP)
+                             (ONOFF (FGETPLOOKS PARALOOKS FMTHARDCOPY))
+                             (FGETPLOOKS PARALOOKS FMTREVISED)
+                             (FGETPLOOKS PARALOOKS FMTCOLUMN)) as PROPNAME
              in '(QUAD 1STLEFTMARGIN LEFTMARGIN RIGHTMARGIN PARALEADING POSTPARALEADING LINELEADING 
                        BASETOBASE TABS STYLE CHARSTYLES USERINFO SPECIALX SPECIALY TYPE SUBTYPE 
                        NEWPAGEBEFORE NEWPAGEAFTER HEADINGKEEP KEEP HARDCOPY REVISED COLUMN)
              join (LIST PROPNAME PROP])
 
 (\TEDIT.PARSE.PARALOOKS.LIST
-  [LAMBDA (NEWLOOKS OLDLOOKS TEXTOBJ)                        (* ; "Edited 28-Jul-2024 22:14 by rmk")
+  [LAMBDA (NEWLOOKS OLDLOOKS TEXTOBJ)                        (* ; "Edited 19-Feb-2025 11:57 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:27 by rmk")
+                                                             (* ; "Edited 28-Jul-2024 22:14 by rmk")
                                                              (* ; "Edited 29-Apr-2024 11:03 by rmk")
                                                              (* ; "Edited 17-Oct-2023 12:08 by rmk")
                                                              (* ; "Edited  9-May-2023 13:20 by rmk")
@@ -1933,15 +1943,15 @@
                                                         "Edited  3-Jul-93 21:49 by sybalskY:MV:ENVOS")
                                                              (* ; 
                         "Apply a given format spec to the paragraphs which are included in this guy.")
-    (if (type? FMTSPEC NEWLOOKS)
+    (if (type? PARALOOKS NEWLOOKS)
         then                                                 (* ; 
-                           "if we were given a FMTSPEC it replace the FMTSPEC of all pieces affected")
+                       "if we were given a PARALOOKS it replace the PARALOOKS of all pieces affected")
              NEWLOOKS
       else (LET (NEWFMT 1STLEFT LEFT RIGHT LEADB LEADA LLEAD TABSPEC QUADD NLOOKSAVE TYPE SUBTYPE 
                        TYPESET SUBTYPESET NEWBEFORESET NEWBEFORE NEWAFTERSET NEWAFTER KEEP KEEPSET 
                        HEADINGKEEP BASETOBASE BASESET REVISED REVISEDSET COLUMN COLUMNSET USERINFO 
                        USERINFOSET SPECIALX SPECXSET SPECIALY SPECYSET STYLE STYLESET CHARSTYLES 
-                       CHARSTYLESSET DEFTAB TABS)            (* ; "create an FMTSPEC from the Plist")
+                       CHARSTYLESSET DEFTAB TABS)            (* ; "create PARALOOKS from the Plist")
                 (SETQ 1STLEFT (LISTGET NEWLOOKS '1STLEFTMARGIN))
                 (SETQ LEFT (LISTGET NEWLOOKS 'LEFTMARGIN))
                 (SETQ RIGHT (LISTGET NEWLOOKS 'RIGHTMARGIN))
@@ -2001,34 +2011,32 @@
                                   T)
                            (SETQ QUADD 'LEFT]
 
-                (* ;; "change from the users list to the real tabspec 
+                (* ;; "change from the users list to the real tabspec, a CONS pair of default width and LIST of TAB record instances")
 
-CONS pair of default width and LIST of TAB record instances")
-
-                (SETQ NEWFMT (create FMTSPEC using (OR OLDLOOKS TEDIT.DEFAULT.FMTSPEC)))
-                (AND 1STLEFT (FSETPARA NEWFMT 1STLEFTMAR 1STLEFT))
-                (AND LEFT (FSETPARA NEWFMT LEFTMAR LEFT))
-                (AND RIGHT (FSETPARA NEWFMT RIGHTMAR RIGHT))
-                (AND LEADB (FSETPARA NEWFMT LEADBEFORE LEADB))
-                (AND LEADA (FSETPARA NEWFMT LEADAFTER LEADA))
-                (AND LLEAD (FSETPARA NEWFMT LINELEAD LLEAD))
-                (AND TABS (FSETPARA NEWFMT FMTTABS TABS))
-                (AND DEFTAB (FSETPARA NEWFMT FMTDEFAULTTAB DEFTAB))
-                (AND QUADD (FSETPARA NEWFMT QUAD QUADD))
-                (AND TYPESET (FSETPARA NEWFMT FMTPARATYPE TYPE))
-                (AND SUBTYPESET (FSETPARA NEWFMT FMTPARASUBTYPE SUBTYPE))
-                (AND NEWBEFORESET (FSETPARA NEWFMT FMTNEWPAGEBEFORE NEWBEFORE))
-                (AND NEWAFTERSET (FSETPARA NEWFMT FMTNEWPAGEAFTER NEWAFTER))
-                [AND HEADINGKEEP (FSETPARA NEWFMT FMTHEADINGKEEP (EQ HEADINGKEEP 'ON]
-                (AND KEEPSET (FSETPARA NEWFMT FMTKEEP KEEP))
-                (AND BASESET (FSETPARA NEWFMT FMTBASETOBASE BASETOBASE))
-                (AND REVISEDSET (FSETPARA NEWFMT FMTREVISED REVISED))
-                (AND COLUMNSET (FSETPARA NEWFMT FMTCOLUMN COLUMN))
-                (AND SPECXSET (FSETPARA NEWFMT FMTSPECIALX SPECIALX))
-                (AND SPECYSET (FSETPARA NEWFMT FMTSPECIALY SPECIALY))
-                (AND STYLESET (FSETPARA NEWFMT FMTSTYLE STYLE))
-                (AND CHARSTYLESSET (FSETPARA NEWFMT FMTCHARSTYLES CHARSTYLES))
-                (AND USERINFOSET (FSETPARA NEWFMT FMTUSERINFO USERINFO))
+                (SETQ NEWFMT (create PARALOOKS using (OR OLDLOOKS TEDIT.DEFAULT.FMTSPEC)))
+                (AND 1STLEFT (FSETPLOOKS NEWFMT 1STLEFTMAR 1STLEFT))
+                (AND LEFT (FSETPLOOKS NEWFMT LEFTMAR LEFT))
+                (AND RIGHT (FSETPLOOKS NEWFMT RIGHTMAR RIGHT))
+                (AND LEADB (FSETPLOOKS NEWFMT LEADBEFORE LEADB))
+                (AND LEADA (FSETPLOOKS NEWFMT LEADAFTER LEADA))
+                (AND LLEAD (FSETPLOOKS NEWFMT LINELEAD LLEAD))
+                (AND TABS (FSETPLOOKS NEWFMT FMTTABS TABS))
+                (AND DEFTAB (FSETPLOOKS NEWFMT FMTDEFAULTTAB DEFTAB))
+                (AND QUADD (FSETPLOOKS NEWFMT QUAD QUADD))
+                (AND TYPESET (FSETPLOOKS NEWFMT FMTPARATYPE TYPE))
+                (AND SUBTYPESET (FSETPLOOKS NEWFMT FMTPARASUBTYPE SUBTYPE))
+                (AND NEWBEFORESET (FSETPLOOKS NEWFMT FMTNEWPAGEBEFORE NEWBEFORE))
+                (AND NEWAFTERSET (FSETPLOOKS NEWFMT FMTNEWPAGEAFTER NEWAFTER))
+                [AND HEADINGKEEP (FSETPLOOKS NEWFMT FMTHEADINGKEEP (EQ HEADINGKEEP 'ON]
+                (AND KEEPSET (FSETPLOOKS NEWFMT FMTKEEP KEEP))
+                (AND BASESET (FSETPLOOKS NEWFMT FMTBASETOBASE BASETOBASE))
+                (AND REVISEDSET (FSETPLOOKS NEWFMT FMTREVISED REVISED))
+                (AND COLUMNSET (FSETPLOOKS NEWFMT FMTCOLUMN COLUMN))
+                (AND SPECXSET (FSETPLOOKS NEWFMT FMTSPECIALX SPECIALX))
+                (AND SPECYSET (FSETPLOOKS NEWFMT FMTSPECIALY SPECIALY))
+                (AND STYLESET (FSETPLOOKS NEWFMT FMTSTYLE STYLE))
+                (AND CHARSTYLESSET (FSETPLOOKS NEWFMT FMTCHARSTYLES CHARSTYLES))
+                (AND USERINFOSET (FSETPLOOKS NEWFMT FMTUSERINFO USERINFO))
                 NEWFMT])
 
 (TEDIT.PARALOOKS
@@ -2052,7 +2060,8 @@ CONS pair of default width and LIST of TAB record instances")
                  then (\TEDIT.CHANGE.PARALOOKS TSTREAM NEWLOOKS TARGETSEL)))])
 
 (\TEDIT.CHANGE.PARALOOKS
-  [LAMBDA (TSTREAM NEWLOOKS TARGETSEL)                       (* ; "Edited 31-Jan-2025 09:45 by rmk")
+  [LAMBDA (TSTREAM NEWLOOKS TARGETSEL)                       (* ; "Edited  8-Feb-2025 22:30 by rmk")
+                                                             (* ; "Edited 31-Jan-2025 09:45 by rmk")
                                                              (* ; "Edited  6-Jan-2025 23:41 by rmk")
                                                              (* ; "Edited  5-Jan-2025 16:01 by rmk")
                                                              (* ; "Edited 26-Nov-2024 23:51 by rmk")
@@ -2068,7 +2077,7 @@ CONS pair of default width and LIST of TAB record instances")
 
     (* ;; "Apply new looks to the piece that begins the paragraph containing the first selected character, the piece that ends the paragraph containing the last piece of the selection, and all pieces in between. All the pieces within a paragraph have the same looks.")
 
-    (* ;; "If we are given a FMTSPEC we replace the FMTSPEC of all pieces in all selected paragraphs.  Otherwise, we just override particular values in the selected-paragraph looks.")
+    (* ;; "If we are given a PARALOOKS we replace the PARALOOKS of all pieces in all selected paragraphs.  Otherwise, we just override particular values in the selected-paragraph looks.")
 
     (PROG ((TEXTOBJ (TEXTOBJ TSTREAM))
            (PROPNAMES '(1STLEFTMARGIN LEFTMARGIN RIGHTMARGIN PARALEADING POSTPARALEADING LINELEADING
@@ -2085,7 +2094,7 @@ CONS pair of default width and LIST of TAB record instances")
                           (IGEQ (GETSEL TARGETSEL CH#)
                                 1))
                  (RETURN NIL))
-          (if (type? FMTSPEC NEWLOOKS)
+          (if (type? PARALOOKS NEWLOOKS)
               then (SETQ NEWLOOKS (\TEDIT.UNIQUIFY.PARALOOKS NEWLOOKS TEXTOBJ))
             elseif (for PTAIL on NEWLOOKS by (CDDR PTAIL) unless (OR (MEMB (CAR PTAIL)
                                                                            PROPNAMES)
@@ -2105,11 +2114,11 @@ CONS pair of default width and LIST of TAB record instances")
 
           (SETQ PARAPIECES (\TEDIT.PARAPIECES TARGETSEL NIL TEXTOBJ))
 
-     (* ;; "Testing LASTFMTSPEC will typically avoid repeated calculation of the same NEWFMTSPEC, given the uniquifying.")
+     (* ;; "Testing OLDPARALOOKS will typically avoid repeated calculation of the same NEWPARALOOKS, given the uniquifying.")
 
      (* ;; "For each changed paragraph we keep track of its first character number and its prior looks, for history. That's because the number of pieces in a paragraph may change by the doing and doing of future actions, but their character positions will be restored if undoing gets back to this event. No need to record prior looks for unchanged pieces.")
 
-          (for PC NEWFMTSPEC OLDFMTSPEC UNDOLIST (FIRSTPARAPIECE _ T)
+          (for PC NEWPARALOOKS OLDPARALOOKS UNDOLIST (FIRSTPARAPIECE _ T)
                (FIRSTCHAR _ (GETSPC PARAPIECES SPFIRSTCHAR))
                (ORIGFILEPTR _ (\TEDIT.TEXTGETFILEPTR TSTREAM)) inselpieces PARAPIECES
              do (CL:WHEN FIRSTPARAPIECE
@@ -2117,13 +2126,14 @@ CONS pair of default width and LIST of TAB record instances")
                     (* ;; "First piece of a new paragraph, get the NEWFMTSPEC for all its pieces")
 
                     (CL:UNLESS UNDOLIST (\TEDIT.SHOWSEL NIL NIL TEXTOBJ))
-                    (SETQ OLDFMTSPEC (PPARALOOKS PC))
-                    (SETQ NEWFMTSPEC (CL:IF (type? FMTSPEC NEWLOOKS)
-                                         NEWLOOKS
-                                         (\TEDIT.CHANGE.PARALOOKS.NEW NEWLOOKS OLDFMTSPEC TEXTOBJ)))
-                    (CL:UNLESS (\TEDIT.EQFMTSPEC OLDFMTSPEC NEWFMTSPEC)
+                    (SETQ OLDPARALOOKS (PPARALOOKS PC))
+                    (SETQ NEWPARALOOKS (CL:IF (type? PARALOOKS NEWLOOKS)
+                                           NEWLOOKS
+                                           (\TEDIT.CHANGE.PARALOOKS.NEW NEWLOOKS OLDPARALOOKS TEXTOBJ
+                                                  )))
+                    (CL:UNLESS (\TEDIT.EQFMTSPEC OLDPARALOOKS NEWPARALOOKS)
                                                              (* ; "Something changed")
-                        (SETQ NEWFMTSPEC (\TEDIT.UNIQUIFY.PARALOOKS NEWFMTSPEC TEXTOBJ))
+                        (SETQ NEWPARALOOKS (\TEDIT.UNIQUIFY.PARALOOKS NEWPARALOOKS TEXTOBJ))
                         (CL:UNLESS (AND UNDOLIST (LISTP NEWLOOKS)
                                         (EQ 'HARDCOPY (CAR NEWLOOKS))
                                         (NULL (CDDR NEWLOOKS)))
@@ -2131,8 +2141,8 @@ CONS pair of default width and LIST of TAB record instances")
                             (* ;; "Resetting DIRTY is expensive, only do it once.  The document is %"dirty%" for the titlebar and saving only if something other than hardcopy-display mode was changed")
 
                             (FSETTOBJ TEXTOBJ \DIRTY T))
-                        (push UNDOLIST (CONS FIRSTCHAR OLDFMTSPEC))))
-                (FSETPC PC PPARALOOKS NEWFMTSPEC)
+                        (push UNDOLIST (CONS FIRSTCHAR OLDPARALOOKS))))
+                (FSETPC PC PPARALOOKS NEWPARALOOKS)
                 (add FIRSTCHAR (PLEN PC))
                 (SETQ FIRSTPARAPIECE (PPARALAST PC))
              finally 
@@ -2155,62 +2165,64 @@ CONS pair of default width and LIST of TAB record instances")
                    (\TEDIT.TEXTSETFILEPTR TSTREAM ORIGFILEPTR])
 
 (\TEDIT.CHANGE.PARALOOKS.NEW
-  [LAMBDA (NEWLOOKS OLDFMTSPEC TEXTOBJ)                      (* ; "Edited  5-Jan-2025 16:02 by rmk")
+  [LAMBDA (NEWLOOKS OLDPARALOOKS TEXTOBJ)                    (* ; "Edited 19-Feb-2025 11:57 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:31 by rmk")
+                                                             (* ; "Edited  5-Jan-2025 16:02 by rmk")
                                                              (* ; "Edited 31-Aug-2024 15:00 by rmk")
                                                              (* ; "Edited 29-Aug-2024 11:13 by rmk")
                                                              (* ; "Edited 23-Aug-2024 23:41 by rmk")
                                                              (* ; "Edited 11-Aug-2024 21:22 by rmk")
 
-    (* ;; "Make a new FMTSPEC reflecting the properties in NEWLOOKS, with defaults taken from OLDCHARFMTSPEC, if given, or the DEFAULTFMTSPEC of TEXTOBJ, if given,;")
+    (* ;; "Make a new PARALOOKS reflecting the properties in NEWLOOKS, with defaults taken from OLDPARALOOKS, if given, or the DEFAULTPARALOOKS of TEXTOBJ, if given,;")
 
-    (* ;; "OLDCHARLOOKS is also used as the base for increments.�")
+    (* ;; "OLDPARALOOKS is also used as the base for increments.�")
 
-    (CL:UNLESS OLDFMTSPEC
+    (CL:UNLESS OLDPARALOOKS
         (CL:WHEN TEXTOBJ
-            (SETQ OLDFMTSPEC (GETTOBJ TEXTOBJ FMTSPEC))))
-    (for NLTAIL VAL NEWFMTSPEC on NEWLOOKS by (CDDR NLTAIL)
-       first (SETQ NEWFMTSPEC (CL:IF OLDFMTSPEC
-                                  (create FMTSPEC using OLDFMTSPEC)
-                                  (create FMTSPEC)))
+            (SETQ OLDPARALOOKS (GETTOBJ TEXTOBJ DEFAULTPARALOOKS))))
+    (for NLTAIL VAL NEWPARALOOKS on NEWLOOKS by (CDDR NLTAIL)
+       first (SETQ NEWPARALOOKS (CL:IF OLDPARALOOKS
+                                    (create PARALOOKS using OLDPARALOOKS)
+                                    (create PARALOOKS)))
        do (SETQ VAL (CADR NLTAIL))
           (CL:WHEN (MEMB VAL '(NEUTRAL OFF))                 (* ; 
                                                              "NEUTRAL and OFF both turn off the flag")
               (SETQ VAL NIL))
           (SELECTQ (CAR NLTAIL)
-              (1STLEFTMARGIN (FSETPARA NEWFMTSPEC 1STLEFTMAR VAL))
-              (LEFTMARGIN (FSETPARA NEWFMTSPEC LEFTMAR VAL))
-              (RIGHTMARGIN (FSETPARA NEWFMTSPEC RIGHTMAR VAL))
-              (PARALEADING (FSETPARA NEWFMTSPEC LEADBEFORE VAL))
+              (1STLEFTMARGIN (FSETPLOOKS NEWPARALOOKS 1STLEFTMAR VAL))
+              (LEFTMARGIN (FSETPLOOKS NEWPARALOOKS LEFTMAR VAL))
+              (RIGHTMARGIN (FSETPLOOKS NEWPARALOOKS RIGHTMAR VAL))
+              (PARALEADING (FSETPLOOKS NEWPARALOOKS LEADBEFORE VAL))
               (POSTPARALEADING 
-                   (FSETPARA NEWFMTSPEC LEADAFTER VAL))
-              (LINELEADING (FSETPARA NEWFMTSPEC LINELEAD VAL))
-              (BASETOBASE (FSETPARA NEWFMTSPEC FMTBASETOBASE VAL))
+                   (FSETPLOOKS NEWPARALOOKS LEADAFTER VAL))
+              (LINELEADING (FSETPLOOKS NEWPARALOOKS LINELEAD VAL))
+              (BASETOBASE (FSETPLOOKS NEWPARALOOKS FMTBASETOBASE VAL))
               (QUAD (CL:WHEN VAL
-                        (FSETPARA NEWFMTSPEC QUAD (U-CASE VAL))))
-              (TYPE (FSETPARA NEWFMTSPEC FMTPARATYPE (CL:IF (EQ VAL 'ON)
-                                                            'PAGEHEADING)))
-              (SUBTYPE (FSETPARA NEWFMTSPEC FMTPARASUBTYPE VAL))
-              (SPECIALX (FSETPARA NEWFMTSPEC FMTSPECIALX VAL))
-              (SPECIALY (FSETPARA NEWFMTSPEC FMTSPECIALY VAL))
-              (NEWPAGEBEFORE (FSETPARA NEWFMTSPEC FMTNEWPAGEBEFORE VAL))
-              (NEWPAGEAFTER (FSETPARA NEWFMTSPEC FMTNEWPAGEAFTER VAL))
-              (HEADINGKEEP (FSETPARA NEWFMTSPEC FMTHEADINGKEEP VAL))
-              (KEEP (FSETPARA NEWFMTSPEC FMTKEEP VAL))
-              (HARDCOPY (FSETPARA NEWFMTSPEC FMTHARDCOPY VAL))
-              (USERINFO (FSETPARA NEWFMTSPEC FMTUSERINFO VAL))
-              (REVISED (FSETPARA NEWFMTSPEC FMTREVISED VAL))
-              (STYLE (FSETPARA NEWFMTSPEC FMTSTYLE VAL))
-              (CHARSTYLES (FSETPARA NEWFMTSPEC FMTCHARSTYLES VAL))
-              (COLUMN (FSETPARA NEWFMTSPEC FMTCOLUMN VAL))
+                        (FSETPLOOKS NEWPARALOOKS QUAD (U-CASE VAL))))
+              (TYPE (FSETPLOOKS NEWPARALOOKS FMTPARATYPE (CL:IF (EQ VAL 'ON)
+                                                                'PAGEHEADING)))
+              (SUBTYPE (FSETPLOOKS NEWPARALOOKS FMTPARASUBTYPE VAL))
+              (SPECIALX (FSETPLOOKS NEWPARALOOKS FMTSPECIALX VAL))
+              (SPECIALY (FSETPLOOKS NEWPARALOOKS FMTSPECIALY VAL))
+              (NEWPAGEBEFORE (FSETPLOOKS NEWPARALOOKS FMTNEWPAGEBEFORE VAL))
+              (NEWPAGEAFTER (FSETPLOOKS NEWPARALOOKS FMTNEWPAGEAFTER VAL))
+              (HEADINGKEEP (FSETPLOOKS NEWPARALOOKS FMTHEADINGKEEP VAL))
+              (KEEP (FSETPLOOKS NEWPARALOOKS FMTKEEP VAL))
+              (HARDCOPY (FSETPLOOKS NEWPARALOOKS FMTHARDCOPY VAL))
+              (USERINFO (FSETPLOOKS NEWPARALOOKS FMTUSERINFO VAL))
+              (REVISED (FSETPLOOKS NEWPARALOOKS FMTREVISED VAL))
+              (STYLE (FSETPLOOKS NEWPARALOOKS FMTSTYLE VAL))
+              (CHARSTYLES (FSETPLOOKS NEWPARALOOKS FMTCHARSTYLES VAL))
+              (COLUMN (FSETPLOOKS NEWPARALOOKS FMTCOLUMN VAL))
               (TABS [if (LISTP (CAR VAL))
-                        then (FSETPARA NEWFMTSPEC FMTTABS VAL)
+                        then (FSETPLOOKS NEWPARALOOKS FMTTABS VAL)
                       else                                   (* ; 
                                                              "Could be the old (DEF . TABS) format")
-                           (FSETPARA NEWFMTSPEC FMTTABS (CDR VAL))
+                           (FSETPLOOKS NEWPARALOOKS FMTTABS (CDR VAL))
                            (CL:WHEN (CAR VAL)
-                               (FSETPARA NEWFMTSPEC FMTDEFAULTTAB (CAR VAL)))])
-              (DEFAULTTAB (FSETPARA NEWFMTSPEC FMTDEFAULTTAB VAL))
-              NIL) finally (RETURN NEWFMTSPEC])
+                               (FSETPLOOKS NEWPARALOOKS FMTDEFAULTTAB (CAR VAL)))])
+              (DEFAULTTAB (FSETPLOOKS NEWPARALOOKS FMTDEFAULTTAB VAL))
+              NIL) finally (RETURN NEWPARALOOKS])
 
 (TEDIT.COPY.PARALOOKS
   [LAMBDA (TSTREAM SOURCE DEST)                              (* ; "Edited 25-Nov-2024 14:43 by rmk")
@@ -2329,57 +2341,56 @@ CONS pair of default width and LIST of TAB record instances")
                   (RETURN CHANGEMADE])
 
 (SAMEPARALOOKS
-  [LAMBDA (PARALOOK1 PARALOOK2 FEATURES)                     (* ; "Edited 29-Jul-2024 23:34 by rmk")
+  [LAMBDA (PARALOOKS1 PARALOOKS2 FEATURES)                   (* ; "Edited 19-Feb-2025 11:58 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 20:49 by rmk")
+                                                             (* ; "Edited 29-Jul-2024 23:34 by rmk")
                                                              (* ; "Edited 28-Jul-2024 16:27 by rmk")
                                                              (* ; "Edited  8-Dec-92 00:44 by jds")
 
     (* ;; "Predicate to determine if CLOOK1 and CLOOK2 are the same in all the characteristics listed in FEATURES")
 
+    (PARALOOKS! PARALOOKS1)
+    (PARALOOKS! PARALOOKS2)
     (for F in FEATURES always (SELECTQ F
-                                  (STYLE (EQUAL (fetch (FMTSPEC FMTSTYLE) of PARALOOK1)
-                                                (fetch (FMTSPEC FMTSTYLE) of PARALOOK2)))
-                                  (LEFTMARGIN (IEQP (fetch (FMTSPEC LEFTMAR) of PARALOOK1)
-                                                    (fetch (FMTSPEC LEFTMAR) of PARALOOK2)))
-                                  (1STLEFTMARGIN (IEQP (fetch (FMTSPEC 1STLEFTMAR) of PARALOOK1)
-                                                       (fetch (FMTSPEC 1STLEFTMAR) of PARALOOK2)))
-                                  (RIGHTMARGIN (IEQP (fetch (FMTSPEC RIGHTMAR) of PARALOOK1)
-                                                     (fetch (FMTSPEC RIGHTMAR) of PARALOOK2)))
-                                  (QUAD (EQ (fetch (FMTSPEC QUAD) of PARALOOK1)
-                                            (fetch (FMTSPEC QUAD) of PARALOOK2)))
+                                  (LEFTMARGIN (IEQP (FGETPLOOKS PARALOOKS1 LEFTMAR)
+                                                    (FGETPLOOKS PARALOOKS2 LEFTMAR)))
+                                  (1STLEFTMARGIN (IEQP (FGETPLOOKS PARALOOKS1 1STLEFTMAR)
+                                                       (FGETPLOOKS PARALOOKS2 1STLEFTMAR)))
+                                  (RIGHTMARGIN (IEQP (FGETPLOOKS PARALOOKS1 RIGHTMAR)
+                                                     (FGETPLOOKS PARALOOKS2 RIGHTMAR)))
+                                  (QUAD (EQ (FGETPLOOKS PARALOOKS1 QUAD)
+                                            (FGETPLOOKS PARALOOKS2 QUAD)))
                                   (POSTPARALEADING 
-                                       (IEQP (fetch (FMTSPEC LEADBEFORE) of PARALOOK1)
-                                             (fetch (FMTSPEC LEADBEFORE) of PARALOOK2)))
-                                  (PARALEADING (IEQP (fetch (FMTSPEC LEADBEFORE) of PARALOOK1)
-                                                     (fetch (FMTSPEC LEADBEFORE) of PARALOOK2)))
-                                  (LINELEADING (IEQP (fetch (FMTSPEC LINELEAD) of PARALOOK1)
-                                                     (fetch (FMTSPEC LINELEAD) of PARALOOK2)))
-                                  (DEFAULTTAB (EQ (FGETPARA PARALOOK1 FMTDEFAULTTAB)
-                                                  (FGETPARA PARALOOK2 FMTDEFAULTTAB)))
-                                  (TABS (EQUAL (FGETPARA PARALOOK1 FMTTABS)
-                                               (FGETPARA PARALOOK2 FMTTABS)))
-                                  (NEWPAGEBEFORE (EQ (fetch (FMTSPEC FMTNEWPAGEBEFORE) of PARALOOK1)
-                                                     (fetch (FMTSPEC FMTNEWPAGEBEFORE) of PARALOOK2)))
-                                  (NEWPAGEAFTER (EQ (fetch (FMTSPEC FMTNEWPAGEAFTER) of PARALOOK1)
-                                                    (fetch (FMTSPEC FMTNEWPAGEAFTER) of PARALOOK2)))
-                                  (SPECIALX (IEQP (fetch (FMTSPEC FMTSPECIALX) of PARALOOK1)
-                                                  (fetch (FMTSPEC FMTSPECIALX) of PARALOOK2)))
-                                  (SPECIALY (IEQP (fetch (FMTSPEC FMTSPECIALY) of PARALOOK1)
-                                                  (fetch (FMTSPEC FMTSPECIALY) of PARALOOK2)))
-                                  (HEADINGKEEP (EQ (fetch (FMTSPEC FMTHEADINGKEEP) of PARALOOK1)
-                                                   (fetch (FMTSPEC FMTHEADINGKEEP) of PARALOOK2)))
-                                  (ERROR (CONCAT F 
-                              " is an unknown feature of paragraph looks.  Detected in SAMEPARALOOKS"
-                                                ])
+                                       (IEQP (FGETPLOOKS PARALOOKS1 LEADBEFORE)
+                                             (FGETPLOOKS PARALOOKS2 LEADBEFORE)))
+                                  (PARALEADING (IEQP (FGETPLOOKS PARALOOKS1 LEADBEFORE)
+                                                     (FGETPLOOKS PARALOOKS2 LEADBEFORE)))
+                                  (LINELEADING (IEQP (FGETPLOOKS PARALOOKS1 LINELEAD)
+                                                     (FGETPLOOKS PARALOOKS2 LINELEAD)))
+                                  (DEFAULTTAB (EQ (FGETPLOOKS PARALOOKS1 FMTDEFAULTTAB)
+                                                  (FGETPLOOKS PARALOOKS2 FMTDEFAULTTAB)))
+                                  (TABS (EQUAL (FGETPLOOKS PARALOOKS1 FMTTABS)
+                                               (FGETPLOOKS PARALOOKS2 FMTTABS)))
+                                  (NEWPAGEBEFORE (EQ (FGETPLOOKS PARALOOKS1 FMTNEWPAGEBEFORE)
+                                                     (FGETPLOOKS PARALOOKS2 FMTNEWPAGEBEFORE)))
+                                  (NEWPAGEAFTER (EQ (FGETPLOOKS PARALOOKS1 FMTNEWPAGEAFTER)
+                                                    (FGETPLOOKS PARALOOKS2 FMTNEWPAGEAFTER)))
+                                  (SPECIALX (IEQP (FGETPLOOKS PARALOOKS1 FMTSPECIALX)
+                                                  (FGETPLOOKS PARALOOKS2 FMTSPECIALX)))
+                                  (SPECIALY (IEQP (FGETPLOOKS PARALOOKS1 FMTSPECIALY)
+                                                  (FGETPLOOKS PARALOOKS2 FMTSPECIALY)))
+                                  (HEADINGKEEP (EQ (FGETPLOOKS PARALOOKS1 FMTHEADINGKEEP)
+                                                   (FGETPLOOKS PARALOOKS2 FMTHEADINGKEEP)))
+                                  (STYLE (EQUAL (FGETPLOOKS PARALOOKS1 FMTSTYLE)
+                                                (FGETPLOOKS PARALOOKS2 FMTSTYLE)))
+                                  (\TEDIT.THELP (CONCAT F " is an unknown feature of paragraph looks"
+                                                       ])
 )
-
-
-
-(* ; "Revision-mark support")
-
 (DEFINEQ
 
 (\TEDIT.MARK.REVISION
-  [LAMBDA (TEXTOBJ FMTSPEC IMAGESTREAM LINE)                 (* ; "Edited 27-May-2023 12:12 by rmk")
+  [LAMBDA (TEXTOBJ PARALOOKS IMAGESTREAM LINE)               (* ; "Edited  8-Feb-2025 20:49 by rmk")
+                                                             (* ; "Edited 27-May-2023 12:12 by rmk")
                                                              (* ; "Edited 30-May-91 21:38 by jds")
     (LET ((SCALE (DSPSCALE NIL IMAGESTREAM)))
          (BLTSHADE BLACKSHADE IMAGESTREAM (IPLUS (GETLD LINE RIGHTMARGIN LINE)
@@ -2392,194 +2403,8 @@ CONS pair of default width and LIST of TAB record instances")
 
 
 
-(* ; "Style-sheet support")
+(* ; "Revision-mark support")
 
-(DEFINEQ
-
-(\TEDIT.APPLY.STYLES
-  [LAMBDA (LOOKS PC TSTREAM)                                 (* ; "Edited 12-Nov-2023 16:08 by rmk")
-                                                             (* ; "Edited 18-Mar-2023 21:45 by rmk")
-                                                             (* ; "Edited 25-Sep-2022 13:28 by rmk")
-                                                             (* ; "Edited 11-Sep-2022 14:45 by rmk")
-                                                             (* ; 
-                                                        "Edited  4-Jul-93 01:02 by sybalskY:MV:ENVOS")
-
-    (* ;; "Given a set of looks, return the looks with the proper styles expanded out.")
-
-    (SETQ TSTREAM (TEXTSTREAM TSTREAM))
-    (OR (CDR (ASSOC LOOKS *TEDIT-CURRENTPARA-CACHE*))
-        (CDR (ASSOC LOOKS *TEDIT-PARASTYLE-CACHE*))
-        (LET* ((TEXTOBJ (TEXTOBJ TSTREAM))
-               (STYLE (fetch (CHARLOOKS CLSTYLE) of LOOKS))
-               (STYLE-SHEET (OR (FGETTOBJ TEXTOBJ TXTSTYLESHEET)
-                                TEDIT.STYLES))
-               NOSTYLE CHARSTYLES CHARSTYLE IN-PARA FMTSPEC)
-              (SETQ STYLE (COND
-                             ((NULL STYLE)                   (* ; 
-                                       "STYLE of NIL means don't bother.  Just use the looks we got.")
-                              (SETQ NOSTYLE T)
-                              LOOKS)
-                             ((AND [SETQ CHARSTYLES (AND (fetch (TEXTSTREAM CURRENTPARALOOKS)
-                                                            of TSTREAM)
-                                                         (fetch (FMTSPEC FMTCHARSTYLES)
-                                                            of (fetch (TEXTSTREAM CURRENTPARALOOKS)
-                                                                  of TSTREAM]
-                                   (SETQ CHARSTYLE (FASSOC STYLE CHARSTYLES)))
-                                                             (* ; 
-                   "If the paragraph we're in has character styles, and this is one of them, use it.")
-                              (SETQ IN-PARA T)
-                              CHARSTYLE)
-                             ((CDR (SASSOC STYLE STYLE-SHEET)))
-                             ((AND (LITATOM STYLE)
-                                   (DEFINEDP STYLE))         (* ; 
-                                                      "Call the guy's function to find the new looks")
-                              (APPLY* STYLE LOOKS PC TEXTOBJ))
-                             (T                              (* ; 
-                                                "If all else fails, return the original set of looks")
-                                (SETQ NOSTYLE T)
-                                LOOKS)))
-              (SETQ STYLE (COND
-                             ((LISTP STYLE)
-                              (\TEDIT.PARSE.CHARLOOKS.LIST (APPEND STYLE '(STYLE NIL))
-                                     LOOKS TEXTOBJ))
-                             (T STYLE)))
-
-              (* ;; "Cache the looks->styled-looks mapping, either in the cache for this kind of paragraph (which gets wiped when we hit a new para type), or in the global cache.")
-
-              [OR NOSTYLE (CL:IF IN-PARA
-                              (push *TEDIT-CURRENTPARA-CACHE* (CONS LOOKS STYLE))
-                              (push *TEDIT-PARASTYLE-CACHE* (CONS LOOKS STYLE)))]
-              STYLE])
-
-(\TEDIT.APPLY.PARASTYLES
-  [LAMBDA (PARALOOKS PC TEXTOBJ)                             (* ; "Edited  4-Aug-2024 14:48 by rmk")
-                                                             (* ; "Edited 29-Apr-2024 11:06 by rmk")
-                                                             (* ; "Edited  4-Mar-2023 22:23 by rmk")
-                                                             (* ; "Edited 25-Sep-2022 13:26 by rmk")
-                                                             (* ; 
-                                                        "Edited  3-Jul-93 23:15 by sybalskY:MV:ENVOS")
-
-    (* ;; "Given a set of looks, return the looks with the proper styles expanded out.")
-
-    (\TEDIT.CHECK (type? FMTSPEC PARALOOKS))                 (* ; "Incoming thing has to be a LOOKS.")
-    (OR (CDR (ASSOC PARALOOKS *TEDIT-PARASTYLE-CACHE*))
-        (LET* [NOSTYLE (STYLE-SHEET (OR (fetch (TEXTOBJ TXTSTYLESHEET) of TEXTOBJ)
-                                        TEDIT.STYLES))
-                     (STYLE (COND
-                               ((NULL (fetch (FMTSPEC FMTSTYLE) of PARALOOKS))
-                                (SETQ NOSTYLE T)
-                                PARALOOKS)
-                               ((CDR (SASSOC (fetch (FMTSPEC FMTSTYLE) of PARALOOKS)
-                                            STYLE-SHEET)))
-                               ((AND (LITATOM (fetch (FMTSPEC FMTSTYLE) of PARALOOKS))
-                                     (DEFINEDP (fetch (FMTSPEC FMTSTYLE) of PARALOOKS)))
-                                                             (* ; 
-                                                      "Call the guy's function to find the new looks")
-                                (APPLY* (fetch (FMTSPEC FMTSTYLE) of PARALOOKS)
-                                       PARALOOKS PC TEXTOBJ))
-                               (T (SETQ NOSTYLE T)
-                                  PARALOOKS]
-              (CL:WHEN (LISTP STYLE)
-                  (SETQ STYLE (\TEDIT.PARSE.PARALOOKS.LIST (APPEND STYLE '(STYLE NIL))
-                                     PARALOOKS TEXTOBJ)))
-              (CL:UNLESS NOSTYLE
-                  (push *TEDIT-PARASTYLE-CACHE* (CONS PARALOOKS STYLE)))
-              STYLE])
-
-(TEDIT.STYLESHEET
-  [LAMBDA (SHEET TEXTSTREAM)                                 (* ; 
-                                                        "Edited  3-Jul-93 23:19 by sybalskY:MV:ENVOS")
-
-    (* ;; "Put a new stylesheet into force.  This REPLACES any existing style sheets, and forgets any pushed sheets.")
-
-    (LET [(TEXTOBJ (AND TEXTSTREAM (TEXTOBJ TEXTSTREAM]
-         (COND
-            (TEXTOBJ (SETQ *TEDIT-PARASTYLE-CACHE* NIL)      (* ; 
-                                                             "Clear the cache, to force reformatting")
-                   (replace (TEXTOBJ TXTSTYLESHEET) of TEXTOBJ with SHEET))
-            (T 
-               (* ;; "No specific document given; change the global style sheet TEDIT.STYLES")
-
-               (SETQ *TEDIT-PARASTYLE-CACHE* NIL)            (* ; 
-                                                             "Clear the cache, to force reformatting")
-               (SETQ TEDIT.STYLES SHEET)
-               (SETQ *TEDIT-STYLESHEET-SAVE-LIST* (LIST TEDIT.STYLES])
-
-(TEDIT.POP.STYLESHEET
-  [LAMBDA NIL                                                (* ; 
-                                                        "Edited  3-Jul-93 17:42 by sybalskY:MV:ENVOS")
-
-    (* ;; "Go back to an earlier stylesheet, by popping the stack of saved sheets.  You can't pop back to no sheet -- you'll always bottom out at the original style sheet.")
-
-    (SETQ *TEDIT-PARASTYLE-CACHE* NIL)                       (* ; 
-                                                             "Clear the cache, to force reformatting")
-    (SETQ TEDIT.STYLES (OR (CL:POP *TEDIT-STYLESHEET-SAVE-LIST*)
-                           TEDIT.STYLES])
-
-(TEDIT.PUSH.STYLESHEET
-  [LAMBDA (SHEET)                                            (* ; 
-                                                        "Edited  3-Jul-93 17:40 by sybalskY:MV:ENVOS")
-
-    (* ;; "Add more style definitions to the current style sheet, and remember how to get back to the old one.  Think of this as PUSHING onto a stack of stylesheets, with the new sheet being a composition of SHEET and the existing styles.  ")
-
-    (SETQ *TEDIT-PARASTYLE-CACHE* NIL)                       (* ; 
-                                                             "Clear the cache, to force reformatting")
-    (SETQ TEDIT.STYLES (APPEND SHEET TEDIT.STYLES))
-    (CL:PUSH TEDIT.STYLES *TEDIT-STYLESHEET-SAVE-LIST*])
-
-(TEDIT.ADD.STYLESHEET
-  [LAMBDA (SHEET)                                            (* ; 
-                                                        "Edited  3-Jul-93 17:38 by sybalskY:MV:ENVOS")
-
-    (* ;; "Add more style definitions to the current style sheet.  This ADDS entries, without remembering that there was an earlier sheet. ")
-
-    (SETQ *TEDIT-PARASTYLE-CACHE* NIL)                       (* ; 
-                                                             "Clear the cache, to force reformatting")
-    (SETQ TEDIT.STYLES (APPEND SHEET TEDIT.STYLES))
-    (SETQ *TEDIT-STYLESHEET-SAVE-LIST* (LIST TEDIT.STYLES])
-)
-
-
-
-(* ;; 
-"*TEDIT-PARASTYLE-CACHE* is an ALIST of  original char/para looks to styled char/para looks.  It is used to cache stylings, and is reset when the main stylesheet changes, and when we change paragraph looks, given paras that have private char styles."
-)
-
-
-
-
-(* ;; 
-"*TEDIT-CURRENTPARA-CACHE* is NIL if we're not in a para that has private char styles, or is the FMTSPEC (styled!) for that para, if we are.  Used to decide when we have to flush *TEDIT-PARASTYLE-CACHE* at paragraph boundaries.  Mostly, this'll be NIL and not interesting."
-)
-
-
-
-
-(* ;; 
-"*TEDIT-STYLESHEET-SAVE-LIST* is a list of points inside TEDIT.STYLES, so we can %"push%" new style sheets on the front, and %"pop%" them off sensibly.  This is the push-stack, in effect.  Used by TEDIT.ADD.STYLESHEET, TEDIT.PUSH.STYLESHEET, and TEDIT.POP.STYLESHEET"
-)
-
-
-(RPAQ? TEDIT.STYLES )
-
-
-
-(* ;; "RMK 2023: Maybe this should be one of the later ones? Only partly implemented")
-
-(DECLARE%: DOEVAL@COMPILE DONTCOPY
-
-(GLOBALVARS TEDIT.STYLES)
-)
-
-(RPAQ? *TEDIT-PARASTYLE-CACHE* )
-
-(RPAQ? *TEDIT-CURRENTPARA-CACHE* )
-
-(RPAQ? *TEDIT-STYLESHEET-SAVE-LIST* )
-(DECLARE%: DOEVAL@COMPILE DONTCOPY
-
-(GLOBALVARS *TEDIT-PARASTYLE-CACHE* *TEDIT-CURRENTPARA-CACHE* *TEDIT-STYLESHEET-SAVE-LIST*)
-)
 (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 
 
 (ADDTOVAR NLAMA )
@@ -2589,27 +2414,25 @@ CONS pair of default width and LIST of TAB record instances")
 (ADDTOVAR LAMA )
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (23015 24781 (\TEDIT.CHARLOOKS.DEFPRINT 23025 . 24161) (\TEDIT.FMTSPEC.DEFPRINT 24163 . 
-24779)) (24885 25870 (\TEDIT.CREATE.DEFAULT.FMTSPEC 24895 . 25492) (\TEDIT.CREATE.FACE.MENU 25494 . 
-25666) (\TEDIT.CREATE.SIZE.MENU 25668 . 25868)) (26771 26960 (\TEDIT.CHARLOOK.FEATUREP 26781 . 26958))
- (27262 49897 (\TEDIT.CHARLOOKS.FROM.FONT 27272 . 29352) (\TEDIT.EQCLOOKS 29354 . 31976) (
-\TEDIT.SAMECLOOKS 31978 . 34648) (TEDIT.CARETLOOKS 34650 . 35692) (TEDIT.COPY.LOOKS 35694 . 38977) (
-\TEDIT.UNPARSE.CHARLOOKS.LIST 38979 . 41946) (\TEDIT.MODIFYLOOKS 41948 . 43942) (TEDIT.NEW.FONT 43944
- . 44391) (\TEDIT.CARETLOOKS.VERIFY 44393 . 45230) (\TEDIT.CARETPIECE 45232 . 45537) (
-\TEDIT.GET.INSERT.CHARLOOKS 45539 . 48275) (\TEDIT.GET.TERMSA.WIDTHS 48277 . 48693) (
-\TEDIT.PARSE.CHARLOOKS.LIST 48695 . 49895)) (49898 66416 (\TEDIT.TRANSLATE.ASCIICHARS 49908 . 60394) (
-\TEDIT.CONVERT.TO.FORMATTED 60396 . 66414)) (67428 74663 (\TEDIT.UNIQUIFY.CHARLOOKS 67438 . 69098) (
-\TEDIT.UNIQUIFY.PARALOOKS 69100 . 70367) (\TEDIT.UNIQUIFY.ALL 70369 . 72226) (
-\TEDIT.FLUSH.UNUSED.LOOKS 72228 . 74661)) (74696 85792 (TEDIT.LOOKS 74706 . 77095) (TEDIT.GET.LOOKS 
-77097 . 79126) (TEDIT.SUBLOOKS 79128 . 83156) (TEDIT.FINDLOOKS 83158 . 85790)) (85867 112115 (
-\TEDIT.CHANGE.CHARLOOKS 85877 . 94873) (\TEDIT.CHANGE.CHARLOOKS.NEW 94875 . 98500) (
-\TEDIT.CHARLOOKS.CHANGE.FONT 98502 . 106126) (\TEDIT.LOOKS 106128 . 109457) (\TEDIT.FONTCOPY 109459 . 
-110960) (\TEDIT.COERCE.FONTCLASS 110962 . 112113)) (112158 142731 (\TEDIT.EQFMTSPEC 112168 . 115925) (
-TEDIT.GET.PARALOOKS 115927 . 119664) (\TEDIT.PARSE.PARALOOKS.LIST 119666 . 126740) (TEDIT.PARALOOKS 
-126742 . 127782) (\TEDIT.CHANGE.PARALOOKS 127784 . 134763) (\TEDIT.CHANGE.PARALOOKS.NEW 134765 . 
-138389) (TEDIT.COPY.PARALOOKS 138391 . 141065) (\TEDIT.PARABOUNDS 141067 . 142729)) (142791 150338 (
-TEDIT.SUBPARALOOKS 142801 . 146585) (SAMEPARALOOKS 146587 . 150336)) (150377 150955 (
-\TEDIT.MARK.REVISION 150387 . 150953)) (150992 160044 (\TEDIT.APPLY.STYLES 151002 . 154567) (
-\TEDIT.APPLY.PARASTYLES 154569 . 156918) (TEDIT.STYLESHEET 156920 . 157987) (TEDIT.POP.STYLESHEET 
-157989 . 158657) (TEDIT.PUSH.STYLESHEET 158659 . 159399) (TEDIT.ADD.STYLESHEET 159401 . 160042)))))
+  (FILEMAP (NIL (22500 24442 (\TEDIT.CHARLOOKS.DEFPRINT 22510 . 23646) (\TEDIT.PARALOOKS.DEFPRINT 23648
+ . 24440)) (24546 25642 (\TEDIT.CREATE.DEFAULT.FMTSPEC 24556 . 25264) (\TEDIT.CREATE.FACE.MENU 25266
+ . 25438) (\TEDIT.CREATE.SIZE.MENU 25440 . 25640)) (26543 26732 (\TEDIT.CHARLOOK.FEATUREP 26553 . 
+26730)) (27034 49932 (\TEDIT.CHARLOOKS.FROM.FONT 27044 . 29124) (\TEDIT.EQCLOOKS 29126 . 31748) (
+\TEDIT.SAMECLOOKS 31750 . 34420) (TEDIT.CARETLOOKS 34422 . 35727) (TEDIT.COPY.LOOKS 35729 . 39012) (
+\TEDIT.UNPARSE.CHARLOOKS.LIST 39014 . 41981) (\TEDIT.MODIFYLOOKS 41983 . 43977) (TEDIT.NEW.FONT 43979
+ . 44426) (\TEDIT.CARETLOOKS.VERIFY 44428 . 45265) (\TEDIT.CARETPIECE 45267 . 45572) (
+\TEDIT.GET.INSERT.CHARLOOKS 45574 . 48310) (\TEDIT.GET.TERMSA.WIDTHS 48312 . 48728) (
+\TEDIT.PARSE.CHARLOOKS.LIST 48730 . 49930)) (49933 66451 (\TEDIT.TRANSLATE.ASCIICHARS 49943 . 60429) (
+\TEDIT.CONVERT.TO.FORMATTED 60431 . 66449)) (67463 74574 (\TEDIT.UNIQUIFY.CHARLOOKS 67473 . 69133) (
+\TEDIT.UNIQUIFY.PARALOOKS 69135 . 70402) (\TEDIT.UNIQUIFY.ALL 70404 . 72379) (
+\TEDIT.FLUSH.UNUSED.LOOKS 72381 . 74572)) (74607 85703 (TEDIT.LOOKS 74617 . 77006) (TEDIT.GET.LOOKS 
+77008 . 79037) (TEDIT.SUBLOOKS 79039 . 83067) (TEDIT.FINDLOOKS 83069 . 85701)) (85778 112026 (
+\TEDIT.CHANGE.CHARLOOKS 85788 . 94784) (\TEDIT.CHANGE.CHARLOOKS.NEW 94786 . 98411) (
+\TEDIT.CHARLOOKS.CHANGE.FONT 98413 . 106037) (\TEDIT.LOOKS 106039 . 109368) (\TEDIT.FONTCOPY 109370 . 
+110871) (\TEDIT.COERCE.FONTCLASS 110873 . 112024)) (112069 143234 (\TEDIT.EQFMTSPEC 112079 . 115294) (
+TEDIT.GET.PARALOOKS 115296 . 119343) (\TEDIT.PARSE.PARALOOKS.LIST 119345 . 126687) (TEDIT.PARALOOKS 
+126689 . 127729) (\TEDIT.CHANGE.PARALOOKS 127731 . 134907) (\TEDIT.CHANGE.PARALOOKS.NEW 134909 . 
+138892) (TEDIT.COPY.PARALOOKS 138894 . 141568) (\TEDIT.PARABOUNDS 141570 . 143232)) (143294 150692 (
+TEDIT.SUBPARALOOKS 143304 . 147088) (SAMEPARALOOKS 147090 . 150690)) (150693 151380 (
+\TEDIT.MARK.REVISION 150703 . 151378)))))
 STOP
diff --git a/library/tedit/TEDIT-LOOKS.LCOM b/library/tedit/TEDIT-LOOKS.LCOM
index c1d71742..6e5303e4 100644
Binary files a/library/tedit/TEDIT-LOOKS.LCOM and b/library/tedit/TEDIT-LOOKS.LCOM differ
diff --git a/library/tedit/TEDIT-MENU b/library/tedit/TEDIT-MENU
index 40d3171b..c9796673 100644
--- a/library/tedit/TEDIT-MENU
+++ b/library/tedit/TEDIT-MENU
@@ -1,12 +1,13 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "27-Jan-2025 08:55:22" {WMEDLEY}<library>tedit>TEDIT-MENU.;450 160064 
+(FILECREATED "19-Feb-2025 13:27:11" {WMEDLEY}<library>tedit>TEDIT-MENU.;454 160645 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.PAGEMENU.CREATE \TEDIT.CHARMENU.SPEC)
+      :CHANGES-TO (FNS \TEDIT.PARAMENU.FILLIN \TEDIT.PARALOOKS.TO.MARBAR)
+                  (VARS TEDIT-MENUCOMS)
 
-      :PREVIOUS-DATE "12-Jan-2025 13:12:23" {WMEDLEY}<library>TEDIT>TEDIT-MENU.;448)
+      :PREVIOUS-DATE " 8-Feb-2025 23:19:34" {WMEDLEY}<library>tedit>TEDIT-MENU.;453)
 
 
 (PRETTYCOMPRINT TEDIT-MENUCOMS)
@@ -31,7 +32,7 @@
                    MB.MARGINBAR.SELFN.TABS MB.MARGINBAR.SELFN.TABS.KIND MARGINBAR.GETSTATEFN 
                    MARGINBAR.SETSTATEFN MARGINBAR.NEUTRALIZE MARGINBAR.LOOKS MB.MARGINBAR.SIZEFN 
                    MB.MARGINBAR.DISPLAYFN MDESCALE MSCALE MB.MARGINBAR.SHOWTAB MB.MARGINBAR.TABTRACK
-                   MARGINBAR.INIT \TEDIT.FMTSPECTOMARBAR)
+                   MARGINBAR.INIT \TEDIT.PARALOOKS.TO.MARBAR)
               (BITMAPS \TEDIT.LEFTTAB \TEDIT.CENTERTAB \TEDIT.RIGHTTAB \TEDIT.DECIMALTAB 
                      \TEDIT.DOTTED.LEFTTAB \TEDIT.DOTTED.CENTERTAB \TEDIT.DOTTED.RIGHTTAB 
                      \TEDIT.DOTTED.DECIMALTAB TEDIT.EXTENDEDRIGHTMARK)
@@ -892,22 +893,24 @@
                                    'NILL
                                    'MarginRuler])
 
-(\TEDIT.FMTSPECTOMARBAR
-  [LAMBDA (FMTSPEC UNIT)                                     (* ; "Edited  4-Aug-2024 22:50 by rmk")
+(\TEDIT.PARALOOKS.TO.MARBAR
+  [LAMBDA (PARALOOKS UNIT)                                   (* ; "Edited 19-Feb-2025 13:25 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 21:08 by rmk")
+                                                             (* ; "Edited  4-Aug-2024 22:50 by rmk")
 
-    (* ;; "Creates a margin bar reflecting the properties of FMTSPEC, for PARAMENU display.  Assumes that UNIT is the conversion factor (presumably PTSPERPICA) that takes FMTSPEC screen-point numbers into MARGINBAR numbers.  No rounding.")
+    (* ;; "Creates a margin bar reflecting the properties of PARALOOKS, for PARAMENU display.  Assumes that UNIT is the conversion factor (presumably PTSPERPICA) that takes PARALOOKS screen-point numbers into MARGINBAR numbers.  No rounding.")
 
     (* ;; "Hardcopy scaling isn't relevant for menus.")
 
     (create MARGINBAR
-           MARL1 _ (FQUOTIENT (FGETPARA FMTSPEC 1STLEFTMAR)
+           MARL1 _ (FQUOTIENT (FGETPLOOKS PARALOOKS 1STLEFTMAR)
                           UNIT)
-           MARLN _ (FQUOTIENT (FGETPARA FMTSPEC LEFTMAR)
+           MARLN _ (FQUOTIENT (FGETPLOOKS PARALOOKS LEFTMAR)
                           UNIT)
-           MARR _ (FQUOTIENT (FGETPARA FMTSPEC RIGHTMAR)
+           MARR _ (FQUOTIENT (FGETPLOOKS PARALOOKS RIGHTMAR)
                          UNIT)
            MARUNIT _ UNIT
-           MARTABS _ (for TAB in (FGETPARA FMTSPEC FMTTABS)
+           MARTABS _ (for TAB in (FGETPLOOKS PARALOOKS FMTTABS)
                         collect (create TAB using TAB TABX _ (QUOTIENT (fetch (TAB TABX) of TAB)
                                                                     UNIT])
 )
@@ -1633,7 +1636,9 @@
               (TEDIT.BACKTOMAIN MENUSTREAM))])
 
 (\TEDIT.PARAMENU.FILLIN
-  [LAMBDA (MENUSTREAM FMTSPEC)                               (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (MENUSTREAM PARALOOKS)                             (* ; "Edited 19-Feb-2025 13:27 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:53 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 29-Sep-2024 12:53 by rmk")
                                                              (* ; "Edited 31-Aug-2024 11:29 by rmk")
                                                              (* ; "Edited 25-Aug-2024 23:48 by rmk")
@@ -1643,10 +1648,9 @@
                                                              (* ; "Edited  9-Aug-2024 12:00 by rmk")
                                                              (* ; "Edited  5-Aug-2024 00:40 by rmk")
 
-    (* ;; "For the paragraph menu SHOW command, fills in the with values drawn from the FMTSPEC of the main documents selectiont. The strategy is to iterate through the image objects in the MENUTEXTOBJ and figure out from their property what aspect of FMTSPEC they depict.")
+    (* ;; "For the paragraph menu SHOW command, fills in the with values drawn from the PARALOOKS of the main documents selectiont. The strategy is to iterate through the image objects in the MENUTEXTOBJ and figure out from their property what aspect of PARALOOKS they depict.")
 
-    (for PC OBJ VAL PROP SETSTATEFN inpieces (\TEDIT.FIRSTPIECE (fetch (TEXTSTREAM TEXTOBJ)
-                                                                   of MENUSTREAM))
+    (for PC OBJ VAL PROP SETSTATEFN inpieces (\TEDIT.FIRSTPIECE (GETTSTR MENUSTREAM TEXTOBJ))
        when [SETQ SETSTATEFN (AND (SETQ OBJ (POBJ PC))
                                   (SETQ PROP (IMAGEOBJPROP OBJ 'IDENTIFIER))
                                   (IMAGEOBJPROP OBJ 'SETSTATEFN]
@@ -1654,37 +1658,38 @@
           (* ;; "These are the properties of the PARAMENU image objects. ")
 
           (SETQ VAL (SELECTQ PROP
-                        (QUAD (FGETPARA FMTSPEC QUAD))
-                        (LINELEADING (FGETPARA FMTSPEC LINELEAD))
-                        (PARALEADING (FGETPARA FMTSPEC LEADBEFORE))
+                        (QUAD (FGETPLOOKS PARALOOKS QUAD))
+                        (LINELEADING (FGETPLOOKS PARALOOKS LINELEAD))
+                        (PARALEADING (FGETPLOOKS PARALOOKS LEADBEFORE))
                         (SPECIALX                            (* ; "0 means don't for these")
-                                  (CL:IF (AND (FGETPARA FMTSPEC FMTSPECIALX)
-                                              (IGREATERP (FGETPARA FMTSPEC FMTSPECIALX)
+                                  (CL:IF (AND (FGETPLOOKS PARALOOKS FMTSPECIALX)
+                                              (IGREATERP (FGETPLOOKS PARALOOKS FMTSPECIALX)
                                                      0))
-                                      (FGETPARA FMTSPEC FMTSPECIALX)
+                                      (FGETPLOOKS PARALOOKS FMTSPECIALX)
                                       '**EMPTY**))
-                        (SPECIALY (CL:IF (AND (FGETPARA FMTSPEC FMTSPECIALY)
-                                              (IGREATERP (FGETPARA FMTSPEC FMTSPECIALY)
+                        (SPECIALY (CL:IF (AND (FGETPLOOKS PARALOOKS FMTSPECIALY)
+                                              (IGREATERP (FGETPLOOKS PARALOOKS FMTSPECIALY)
                                                      0))
-                                      (FGETPARA FMTSPEC FMTSPECIALY)
+                                      (FGETPLOOKS PARALOOKS FMTSPECIALY)
                                       '**EMPTY**))
-                        (NEWPAGEBEFORE (FGETPARA FMTSPEC FMTNEWPAGEBEFORE))
-                        (NEWPAGEAFTER (FGETPARA FMTSPEC FMTNEWPAGEAFTER))
-                        (HEADINGKEEP (FGETPARA FMTSPEC FMTHEADINGKEEP))
-                        (HARDCOPY (FGETPARA FMTSPEC FMTHARDCOPY))
-                        (DEFAULTTAB (FGETPARA FMTSPEC FMTDEFAULTTAB))
+                        (NEWPAGEBEFORE (FGETPLOOKS PARALOOKS FMTNEWPAGEBEFORE))
+                        (NEWPAGEAFTER (FGETPLOOKS PARALOOKS FMTNEWPAGEAFTER))
+                        (HEADINGKEEP (FGETPLOOKS PARALOOKS FMTHEADINGKEEP))
+                        (HARDCOPY (FGETPLOOKS PARALOOKS FMTHARDCOPY))
+                        (DEFAULTTAB (FGETPLOOKS PARALOOKS FMTDEFAULTTAB))
                         (TABTYPE                             (* ; "Doesn't change")
                                  (IMAGEOBJPROP OBJ 'STATE))
                         (TYPE                                (* ; "Presumably PAGEHEADING here")
-                              (CL:IF (EQ 'PAGEHEADING (FGETPARA FMTSPEC FMTPARATYPE))
+                              (CL:IF (EQ 'PAGEHEADING (FGETPLOOKS PARALOOKS FMTPARATYPE))
                                   'ON
                                   'OFF))
-                        (SUBTYPE (FGETPARA FMTSPEC FMTPARASUBTYPE))
+                        (SUBTYPE (FGETPLOOKS PARALOOKS FMTPARASUBTYPE))
                         (DOTTEDLEADER                        (* ; 
                                                              "Ephemeral property of individual tabs")
                                       'OFF)
-                        (MARGINBAR [\TEDIT.FMTSPECTOMARBAR FMTSPEC (fetch (MARGINBAR MARUNIT)
-                                                                      of (IMAGEOBJPROP OBJ
+                        (MARGINBAR [\TEDIT.PARALOOKS.TO.MARBAR PARALOOKS (fetch (MARGINBAR MARUNIT)
+                                                                            of (IMAGEOBJPROP
+                                                                                OBJ
                                                                                 'OBJECTDATUM])
                         (TABTYPE (\TEDIT.THELP))
                         (\TEDIT.THELP PROP))) 
@@ -2614,28 +2619,28 @@
 (ADDTOVAR LAMA )
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (5033 51162 (DRAWMARGINSCALE 5043 . 8502) (MARGINBAR 8504 . 15629) (MARGINBAR.CREATE 
-15631 . 19050) (MB.MARGINBAR.BUTTONEVENTINFN 19052 . 26691) (MB.MARGINBAR.SELFN.TABS 26693 . 31933) (
-MB.MARGINBAR.SELFN.TABS.KIND 31935 . 32870) (MARGINBAR.GETSTATEFN 32872 . 36750) (MARGINBAR.SETSTATEFN
- 36752 . 36962) (MARGINBAR.NEUTRALIZE 36964 . 37377) (MARGINBAR.LOOKS 37379 . 40485) (
-MB.MARGINBAR.SIZEFN 40487 . 41090) (MB.MARGINBAR.DISPLAYFN 41092 . 44153) (MDESCALE 44155 . 44695) (
-MSCALE 44697 . 45027) (MB.MARGINBAR.SHOWTAB 45029 . 47352) (MB.MARGINBAR.TABTRACK 47354 . 48739) (
-MARGINBAR.INIT 48741 . 50134) (\TEDIT.FMTSPECTOMARBAR 50136 . 51160)) (51987 58204 (\TEDIT.MENU.START 
-51997 . 57628) (\TEDIT.MENU.BUTTONEVENTFN 57630 . 58202)) (58523 66445 (\TEDIT.MENU.CREATE 58533 . 
-60344) (\TEDIT.MENU.PARSE 60346 . 64035) (\TEDIT.MENU.NEUTRALIZE 64037 . 66108) (
-\TEDITMENU.RECORD.UNFORMATTED 66110 . 66443)) (66511 86444 (\TEDIT.EXPANDEDMENU.CREATE 66521 . 71816) 
-(\TEDIT.EXPANDEDMENU.START 71818 . 73192) (\TEDIT.EXPANDEDMENU.FN 73194 . 76449) (
-\TEDIT.EXPANDEDMENU.ACTIONFN 76451 . 85885) (TEDIT.MENUSTREAM 85887 . 86442)) (86506 101708 (
-\TEDIT.PARAMENU.CREATE 86516 . 92537) (\TEDIT.PARAMENU.START 92539 . 93405) (\TEDIT.APPLY.PARALOOKS 
-93407 . 94459) (\TEDIT.SHOW.PARALOOKS 94461 . 97244) (\TEDIT.PARAMENU.FILLIN 97246 . 101706)) (101827 
-127603 (\TEDIT.CHARMENU.CREATE 101837 . 104441) (\TEDIT.CHARMENU.START 104443 . 105474) (
-\TEDIT.CHARMENU.SPEC 105476 . 109925) (\TEDIT.CHARMENU.PARSE 109927 . 113095) (\TEDIT.CHARMENU.FILLIN 
-113097 . 117442) (\TEDIT.SHOW.CHARLOOKS 117444 . 120701) (\TEDIT.APPLY.CHARLOOKS 120703 . 121864) (
-\TEDIT.OFFSETTYPE.STATEFN 121866 . 123829) (\TEDIT.OTHER.STATECHANGEFN 123831 . 125476) (
-\TEDIT.OTHER.SELECTFN 125478 . 127601)) (127665 154104 (\TEDIT.PAGEMENU.CREATE 127675 . 134869) (
-\TEDIT.SHOW.PAGELOOKS 134871 . 136666) (\TEDIT.PAGEMENU.FILLIN 136668 . 138218) (
-\TEDIT.PAGEREGION.UNPARSE 138220 . 147410) (\TEDIT.APPLY.PAGELOOKS 147412 . 149339) (
-\TEDIT.CHANGE.PAGELOOKS 149341 . 153260) (\TEDIT.PAGEMENU.CHARLOOKS.STATEFN 153262 . 154102)) (154105 
-159908 (\TEDIT.PAGEMENU.CREATE.HEADINGS 154115 . 156927) (\TEDIT.PAGEMENU.HEADINGS.SETSTATEFN 156929
- . 158354) (\TEDIT.PAGEMENU.HEADINGS.STATEFN 158356 . 159906)))))
+  (FILEMAP (NIL (5083 51454 (DRAWMARGINSCALE 5093 . 8552) (MARGINBAR 8554 . 15679) (MARGINBAR.CREATE 
+15681 . 19100) (MB.MARGINBAR.BUTTONEVENTINFN 19102 . 26741) (MB.MARGINBAR.SELFN.TABS 26743 . 31983) (
+MB.MARGINBAR.SELFN.TABS.KIND 31985 . 32920) (MARGINBAR.GETSTATEFN 32922 . 36800) (MARGINBAR.SETSTATEFN
+ 36802 . 37012) (MARGINBAR.NEUTRALIZE 37014 . 37427) (MARGINBAR.LOOKS 37429 . 40535) (
+MB.MARGINBAR.SIZEFN 40537 . 41140) (MB.MARGINBAR.DISPLAYFN 41142 . 44203) (MDESCALE 44205 . 44745) (
+MSCALE 44747 . 45077) (MB.MARGINBAR.SHOWTAB 45079 . 47402) (MB.MARGINBAR.TABTRACK 47404 . 48789) (
+MARGINBAR.INIT 48791 . 50184) (\TEDIT.PARALOOKS.TO.MARBAR 50186 . 51452)) (52279 58496 (
+\TEDIT.MENU.START 52289 . 57920) (\TEDIT.MENU.BUTTONEVENTFN 57922 . 58494)) (58815 66737 (
+\TEDIT.MENU.CREATE 58825 . 60636) (\TEDIT.MENU.PARSE 60638 . 64327) (\TEDIT.MENU.NEUTRALIZE 64329 . 
+66400) (\TEDITMENU.RECORD.UNFORMATTED 66402 . 66735)) (66803 86736 (\TEDIT.EXPANDEDMENU.CREATE 66813
+ . 72108) (\TEDIT.EXPANDEDMENU.START 72110 . 73484) (\TEDIT.EXPANDEDMENU.FN 73486 . 76741) (
+\TEDIT.EXPANDEDMENU.ACTIONFN 76743 . 86177) (TEDIT.MENUSTREAM 86179 . 86734)) (86798 102289 (
+\TEDIT.PARAMENU.CREATE 86808 . 92829) (\TEDIT.PARAMENU.START 92831 . 93697) (\TEDIT.APPLY.PARALOOKS 
+93699 . 94751) (\TEDIT.SHOW.PARALOOKS 94753 . 97536) (\TEDIT.PARAMENU.FILLIN 97538 . 102287)) (102408 
+128184 (\TEDIT.CHARMENU.CREATE 102418 . 105022) (\TEDIT.CHARMENU.START 105024 . 106055) (
+\TEDIT.CHARMENU.SPEC 106057 . 110506) (\TEDIT.CHARMENU.PARSE 110508 . 113676) (\TEDIT.CHARMENU.FILLIN 
+113678 . 118023) (\TEDIT.SHOW.CHARLOOKS 118025 . 121282) (\TEDIT.APPLY.CHARLOOKS 121284 . 122445) (
+\TEDIT.OFFSETTYPE.STATEFN 122447 . 124410) (\TEDIT.OTHER.STATECHANGEFN 124412 . 126057) (
+\TEDIT.OTHER.SELECTFN 126059 . 128182)) (128246 154685 (\TEDIT.PAGEMENU.CREATE 128256 . 135450) (
+\TEDIT.SHOW.PAGELOOKS 135452 . 137247) (\TEDIT.PAGEMENU.FILLIN 137249 . 138799) (
+\TEDIT.PAGEREGION.UNPARSE 138801 . 147991) (\TEDIT.APPLY.PAGELOOKS 147993 . 149920) (
+\TEDIT.CHANGE.PAGELOOKS 149922 . 153841) (\TEDIT.PAGEMENU.CHARLOOKS.STATEFN 153843 . 154683)) (154686 
+160489 (\TEDIT.PAGEMENU.CREATE.HEADINGS 154696 . 157508) (\TEDIT.PAGEMENU.HEADINGS.SETSTATEFN 157510
+ . 158935) (\TEDIT.PAGEMENU.HEADINGS.STATEFN 158937 . 160487)))))
 STOP
diff --git a/library/tedit/TEDIT-MENU.LCOM b/library/tedit/TEDIT-MENU.LCOM
index 5ded5acf..f83bc840 100644
Binary files a/library/tedit/TEDIT-MENU.LCOM and b/library/tedit/TEDIT-MENU.LCOM differ
diff --git a/library/tedit/TEDIT-OLDFILE b/library/tedit/TEDIT-OLDFILE
index 1987872a..5c26b365 100644
--- a/library/tedit/TEDIT-OLDFILE
+++ b/library/tedit/TEDIT-OLDFILE
@@ -1,13 +1,13 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 7-Jan-2025 12:29:36" {WMEDLEY}<library>tedit>TEDIT-OLDFILE.;29 70509  
+(FILECREATED "19-Feb-2025 12:09:40" {WMEDLEY}<library>tedit>TEDIT-OLDFILE.;33 72260  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.GET.SINGLE.CHARLOOKS2 \TEDIT.GET.CHARLOOKS0 \TEDIT.GET.CHARLOOKS1 
-                       \TEDIT.PUT.SINGLE.CHARLOOKS2)
+      :CHANGES-TO (FNS \TEDIT.PUT.SINGLE.PARALOOKS2 \TEDIT.GET.SINGLE.PARALOOKS2 
+                       \TEDIT.GET.PARALOOKS1 \TEDIT.GET.PARALOOKS0)
 
-      :PREVIOUS-DATE "23-Oct-2024 16:09:28" {WMEDLEY}<library>tedit>TEDIT-OLDFILE.;27)
+      :PREVIOUS-DATE " 8-Feb-2025 22:08:39" {WMEDLEY}<library>tedit>TEDIT-OLDFILE.;31)
 
 
 (PRETTYCOMPRINT TEDIT-OLDFILECOMS)
@@ -47,7 +47,8 @@
 (DEFINEQ
 
 (\TEDIT.GET.PCTB2
-  [LAMBDA (TEXT TSTREAM PCCOUNT START END)                   (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (TEXT TSTREAM PCCOUNT START END)                   (* ; "Edited  8-Feb-2025 20:21 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 29-Apr-2024 10:28 by rmk")
                                                              (* ; "Edited 20-Mar-2024 11:00 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:41 by rmk")
@@ -77,7 +78,7 @@
          (SETQ PIECEINFOCH# (\DWIN TEXT))
          (SETFILEPTR TEXT PIECEINFOCH#)
          (bind PC TYPECODE PCLEN OLDPC (DEFAULTCHARLOOKS _ (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
-               (OLDPARALOOKS _ (FGETTOBJ TEXTOBJ FMTSPEC))
+               (OLDPARALOOKS _ (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS))
                (SBINABLE _ (fetch (STREAM BINABLE) of TEXT)) for I from 1 to PCCOUNT
             do (SETQ PC NIL)                                 (* ; 
                         "This loop may not really read a piece, so we have to distinguish that case.")
@@ -323,7 +324,8 @@
            (RETURN LOOKS])
 
 (\TEDIT.PUT.SINGLE.PARALOOKS2
-  [LAMBDA (FILE LOOKS)                                       (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (FILE LOOKS)                                       (* ; "Edited 19-Feb-2025 12:09 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 29-Jul-2024 23:25 by rmk")
                                                              (* ; "Edited 28-Jul-2024 16:07 by rmk")
                                                              (* ; "Edited 16-Jan-2024 23:01 by rmk")
@@ -333,16 +335,16 @@
                                                              (* ; 
                   "Put a description of LOOKS into FILE.  LOOKS apply to characters CH1 thru CHLIM-1")
     (PROG (DEFTAB TABS OUTPUTFORMAT LEN)
-          (\SMALLPOUT FILE (FGETPARA LOOKS 1STLEFTMAR))      (* ; 
+          (\SMALLPOUT FILE (FGETPLOOKS LOOKS 1STLEFTMAR))    (* ; 
                                                     "Left margin for the first line of the paragraph")
-          (\SMALLPOUT FILE (FGETPARA LOOKS LEFTMAR))         (* ; 
+          (\SMALLPOUT FILE (FGETPLOOKS LOOKS LEFTMAR))       (* ; 
                                                           "Left margin for the rest of the paragraph")
-          (\SMALLPOUT FILE (FGETPARA LOOKS RIGHTMAR))        (* ; "Right margin for the paragraph")
-          (\SMALLPOUT FILE (FGETPARA LOOKS LEADBEFORE))      (* ; "Leading before the paragraph")
-          (\SMALLPOUT FILE (FGETPARA LOOKS LEADAFTER))       (* ; "Lead after the paragraph")
-          (\SMALLPOUT FILE (FGETPARA LOOKS LINELEAD))        (* ; "inter-line leading")
-          (SETQ DEFTAB (FGETPARA LOOKS FMTDEFAULTTAB))
-          (SETQ TABS (FGETPARA LOOKS FMTTABS))
+          (\SMALLPOUT FILE (FGETPLOOKS LOOKS RIGHTMAR))      (* ; "Right margin for the paragraph")
+          (\SMALLPOUT FILE (FGETPLOOKS LOOKS LEADBEFORE))    (* ; "Leading before the paragraph")
+          (\SMALLPOUT FILE (FGETPLOOKS LOOKS LEADAFTER))     (* ; "Lead after the paragraph")
+          (\SMALLPOUT FILE (FGETPLOOKS LOOKS LINELEAD))      (* ; "inter-line leading")
+          (SETQ DEFTAB (FGETPLOOKS LOOKS FMTDEFAULTTAB))
+          (SETQ TABS (FGETPLOOKS LOOKS FMTTABS))
           (COND
              ((AND (OR DEFTAB TABS))                         (* ; 
                              "There are tab specs to save, or there is a default tab setting to save")
@@ -350,7 +352,7 @@
              (T                                              (* ; 
                                                           "There are no tab looks.  Just let him go.")
                 (\BOUT FILE 2)))
-          (\BOUT FILE (SELECTQ (FGETPARA LOOKS QUAD)
+          (\BOUT FILE (SELECTQ (FGETPLOOKS LOOKS QUAD)
                           (LEFT 1)
                           (RIGHT 2)
                           ((CENTER CENTERED) 
@@ -370,17 +372,17 @@
                                                       (CENTERED 2)
                                                       (DECIMAL 3)
                                                       (\TEDIT.THELP]))
-          (\SMALLPOUT FILE (OR (FGETPARA LOOKS FMTSPECIALX)
+          (\SMALLPOUT FILE (OR (FGETPLOOKS LOOKS FMTSPECIALX)
                                0))
-          (\SMALLPOUT FILE (OR (FGETPARA LOOKS FMTSPECIALY)
+          (\SMALLPOUT FILE (OR (FGETPLOOKS LOOKS FMTSPECIALY)
                                0))
-          (\ARBOUT FILE (FGETPARA LOOKS FMTUSERINFO))
-          (\ATMOUT FILE (FGETPARA LOOKS FMTPARATYPE))
-          (\ATMOUT FILE (FGETPARA LOOKS FMTPARASUBTYPE))
-          (\ARBOUT FILE (FGETPARA LOOKS FMTSTYLE))
-          (\ARBOUT FILE (FGETPARA LOOKS FMTCHARSTYLES))
-          (\ARBOUT FILE (FGETPARA LOOKS FMTNEWPAGEBEFORE))
-          (\ARBOUT FILE (FGETPARA LOOKS FMTNEWPAGEAFTER])
+          (\ARBOUT FILE (FGETPLOOKS LOOKS FMTUSERINFO))
+          (\ATMOUT FILE (FGETPLOOKS LOOKS FMTPARATYPE))
+          (\ATMOUT FILE (FGETPLOOKS LOOKS FMTPARASUBTYPE))
+          (\ARBOUT FILE (FGETPLOOKS LOOKS FMTSTYLE))
+          (\ARBOUT FILE (FGETPLOOKS LOOKS FMTCHARSTYLES))
+          (\ARBOUT FILE (FGETPLOOKS LOOKS FMTNEWPAGEBEFORE))
+          (\ARBOUT FILE (FGETPLOOKS LOOKS FMTNEWPAGEAFTER])
 
 (\TEDIT.PUT.SINGLE.CHARLOOKS2
   [LAMBDA (FILE LOOKS)                                       (* ; "Edited  2-Jan-2025 10:51 by rmk")
@@ -458,7 +460,9 @@
     (for I from 1 to (\WIN FILE) collect (\TEDIT.GET.SINGLE.PARALOOKS2 FILE])
 
 (\TEDIT.GET.SINGLE.PARALOOKS2
-  [LAMBDA (FILE)                                             (* ; "Edited 23-Oct-2024 16:07 by rmk")
+  [LAMBDA (FILE)                                             (* ; "Edited 19-Feb-2025 12:09 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:05 by rmk")
+                                                             (* ; "Edited 23-Oct-2024 16:07 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited  5-Aug-2024 09:48 by rmk")
                                                              (* ; "Edited 29-Jul-2024 23:22 by rmk")
@@ -470,28 +474,28 @@
                                                              (* ; "Edited 30-May-91 20:33 by jds")
                                                              (* ; 
                            "Read a paragraph format spec from the FILE, and return it for later use.")
-    (LET ((FMT (create FMTSPEC))
+    (LET ((PARALOOKS (create PARALOOKS))
           TABFLG DEFTAB TABS)
-         (FSETPARA FMT 1STLEFTMAR (\SMALLPIN FILE))          (* ; 
+         (FSETPLOOKS PARALOOKS 1STLEFTMAR (\SMALLPIN FILE))  (* ; 
                                                     "Left margin for the first line of the paragraph")
-         (FSETPARA FMT LEFTMAR (\SMALLPIN FILE))             (* ; 
+         (FSETPLOOKS PARALOOKS LEFTMAR (\SMALLPIN FILE))     (* ; 
                                                           "Left margin for the rest of the paragraph")
-         (FSETPARA FMT RIGHTMAR (\SMALLPIN FILE))            (* ; "Right margin for the paragraph")
-         (FSETPARA FMT LEADBEFORE (\SMALLPIN FILE))          (* ; "Leading before the paragraph")
-         (FSETPARA FMT LEADAFTER (\SMALLPIN FILE))           (* ; "Lead after the paragraph")
-         (FSETPARA FMT LINELEAD (\SMALLPIN FILE))            (* ; "inter-line leading")
+         (FSETPLOOKS PARALOOKS RIGHTMAR (\SMALLPIN FILE))    (* ; "Right margin for the paragraph")
+         (FSETPLOOKS PARALOOKS LEADBEFORE (\SMALLPIN FILE))  (* ; "Leading before the paragraph")
+         (FSETPLOOKS PARALOOKS LEADAFTER (\SMALLPIN FILE))   (* ; "Lead after the paragraph")
+         (FSETPLOOKS PARALOOKS LINELEAD (\SMALLPIN FILE))    (* ; "inter-line leading")
          (SETQ TABFLG (BIN FILE))
-         (FSETPARA FMT QUAD (SELECTC (BIN FILE)
-                                (1 'LEFT)
-                                (2 'RIGHT)
-                                (3 'CENTERED)
-                                (4 'JUSTIFIED)
-                                (\TEDIT.THELP)))
+         (FSETPLOOKS PARALOOKS QUAD (SELECTC (BIN FILE)
+                                        (1 'LEFT)
+                                        (2 'RIGHT)
+                                        (3 'CENTERED)
+                                        (4 'JUSTIFIED)
+                                        (\TEDIT.THELP)))
          (CL:UNLESS (ZEROP (LOGAND TABFLG 1))                (* ; "There are tabs to read")
              (SETQ DEFTAB (\SMALLPIN FILE))
              (CL:WHEN (ILEQ DEFTAB 1)
                     (SETQ DEFTAB DEFAULTTAB))
-             (FSETPARA FMT FMTDEFAULTTAB DEFTAB)
+             (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFTAB)
              [SETQ TABS (for TAB# from 1 to (BIN FILE) collect (create TAB
                                                                       TABX _ (\SMALLPIN FILE)
                                                                       TABKIND _
@@ -501,22 +505,23 @@
                                                                           (2 'CENTERED)
                                                                           (3 'DECIMAL)
                                                                           (\TEDIT.THELP]
-             (FSETPARA FMT FMTTABS TABS))
-         (CL:UNLESS (FGETPARA FMT FMTDEFAULTTAB)
-                (FSETPARA FMT FMTDEFAULTTAB DEFAULTTAB))
+             (FSETPLOOKS PARALOOKS FMTTABS TABS))
+         (CL:UNLESS (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)
+                (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFAULTTAB))
          (CL:UNLESS (ZEROP (LOGAND TABFLG 2))                (* ; 
                                                    "There are other paragraph parameters to be read.")
-             (FSETPARA FMT FMTSPECIALX (\SMALLPIN FILE))     (* ; 
+             (FSETPLOOKS PARALOOKS FMTSPECIALX (\SMALLPIN FILE))
+                                                             (* ; 
                                                       "Special X location on page for this paragraph")
-             (FSETPARA FMT FMTSPECIALY (\SMALLPIN FILE))
-             (FSETPARA FMT FMTUSERINFO (\ARBIN FILE))
-             (FSETPARA FMT FMTPARATYPE (\ATMIN FILE))
-             (FSETPARA FMT FMTPARASUBTYPE (\ATMIN FILE))
-             (FSETPARA FMT FMTSTYLE (\ARBIN FILE))
-             (FSETPARA FMT FMTCHARSTYLES (\ARBIN FILE))
-             (FSETPARA FMT FMTNEWPAGEBEFORE (\ARBIN FILE))
-             (FSETPARA FMT FMTNEWPAGEAFTER (\ARBIN FILE)))
-         FMT])
+             (FSETPLOOKS PARALOOKS FMTSPECIALY (\SMALLPIN FILE))
+             (FSETPLOOKS PARALOOKS FMTUSERINFO (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTPARATYPE (\ATMIN FILE))
+             (FSETPLOOKS PARALOOKS FMTPARASUBTYPE (\ATMIN FILE))
+             (FSETPLOOKS PARALOOKS FMTSTYLE (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTCHARSTYLES (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTNEWPAGEBEFORE (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTNEWPAGEAFTER (\ARBIN FILE)))
+         PARALOOKS])
 
 (\TEDIT.PUT.CHARLOOKS.LIST2
   [LAMBDA (FILE LOOKSLIST)                                   (* ; "Edited 16-Jan-2024 23:02 by rmk")
@@ -570,7 +575,8 @@
 (DEFINEQ
 
 (\TEDIT.GET.PCTB1
-  [LAMBDA (TEXT TSTREAM PCCOUNT START END)                   (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (TEXT TSTREAM PCCOUNT START END)                   (* ; "Edited  8-Feb-2025 20:22 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 29-Apr-2024 10:28 by rmk")
                                                              (* ; "Edited 20-Mar-2024 11:00 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:41 by rmk")
@@ -599,7 +605,7 @@
          (SETQ PIECEINFOCH# (\DWIN TEXT))
          (SETFILEPTR TEXT PIECEINFOCH#)
          (bind PC TYPECODE PCLEN OLDPC (DEFAULTCHARLOOKS _ (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
-               (OLDPARALOOKS _ (FGETTOBJ TEXTOBJ FMTSPEC))
+               (OLDPARALOOKS _ (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS))
                (SBINABLE _ (fetch (STREAM BINABLE) of TEXT)) for I from 1 to PCCOUNT
             do (SETQ PC NIL)                                 (* ; 
                         "This loop may not really read a piece, so we have to distinguish that case.")
@@ -776,7 +782,9 @@
          (FSETCLOOKS LOOKS CLFONT FONT])
 
 (\TEDIT.GET.PARALOOKS1
-  [LAMBDA (FILE)                                             (* ; "Edited 23-Oct-2024 16:08 by rmk")
+  [LAMBDA (FILE)                                             (* ; "Edited 19-Feb-2025 12:09 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:05 by rmk")
+                                                             (* ; "Edited 23-Oct-2024 16:08 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited  5-Aug-2024 09:48 by rmk")
                                                              (* ; "Edited 28-Jul-2024 22:00 by rmk")
@@ -788,53 +796,54 @@
                                                              (* ; "Edited 30-May-91 20:34 by jds")
                                                              (* ; 
                            "Read a paragraph format spec from the FILE, and return it for later use.")
-    (LET ((FMT (create FMTSPEC))
+    (LET ((PARALOOKS (create PARALOOKS))
           TABFLG DEFTAB)
-         (FSETPARA FMT 1STLEFTMAR (\SMALLPIN FILE))          (* ; 
+         (FSETPLOOKS PARALOOKS 1STLEFTMAR (\SMALLPIN FILE))  (* ; 
                                                     "Left margin for the first line of the paragraph")
-         (FSETPARA FMT LEFTMAR (\SMALLPIN FILE))             (* ; 
+         (FSETPLOOKS PARALOOKS LEFTMAR (\SMALLPIN FILE))     (* ; 
                                                           "Left margin for the rest of the paragraph")
-         (FSETPARA FMT RIGHTMAR (\SMALLPIN FILE))            (* ; "Right margin for the paragraph")
-         (FSETPARA FMT LEADBEFORE (\SMALLPIN FILE))          (* ; "Leading before the paragraph")
-         (FSETPARA FMT LEADAFTER (\SMALLPIN FILE))           (* ; "Lead after the paragraph")
-         (FSETPARA FMT LINELEAD (\SMALLPIN FILE))            (* ; "inter-line leading")
+         (FSETPLOOKS PARALOOKS RIGHTMAR (\SMALLPIN FILE))    (* ; "Right margin for the paragraph")
+         (FSETPLOOKS PARALOOKS LEADBEFORE (\SMALLPIN FILE))  (* ; "Leading before the paragraph")
+         (FSETPLOOKS PARALOOKS LEADAFTER (\SMALLPIN FILE))   (* ; "Lead after the paragraph")
+         (FSETPLOOKS PARALOOKS LINELEAD (\SMALLPIN FILE))    (* ; "inter-line leading")
                                                              (* ; "Will be tab specs")
          (SETQ TABFLG (BIN FILE))
-         (FSETPARA FMT QUAD (SELECTC (BIN FILE)
-                                (1 'LEFT)
-                                (2 'RIGHT)
-                                (3 'CENTERED)
-                                (4 'JUSTIFIED)
-                                (\TEDIT.THELP)))
+         (FSETPLOOKS PARALOOKS QUAD (SELECTC (BIN FILE)
+                                        (1 'LEFT)
+                                        (2 'RIGHT)
+                                        (3 'CENTERED)
+                                        (4 'JUSTIFIED)
+                                        (\TEDIT.THELP)))
          (CL:UNLESS (ZEROP (LOGAND TABFLG 1))                (* ; "There are tabs to read")
              (SETQ DEFTAB (\SMALLPIN FILE))
              (CL:WHEN (ILEQ DEFTAB 1)
                     (SETQ DEFTAB DEFAULTTAB))
-             (FSETPARA FMT FMTDEFAULTTAB DEFTAB)
-             [FSETPARA FMT FMTTABS (for TAB# from 1 to (BIN FILE)
-                                      collect (create TAB
-                                                     TABX _ (\SMALLPIN FILE)
-                                                     TABKIND _ (SELECTQ (BIN FILE)
-                                                                   (0 'LEFT)
-                                                                   (1 'RIGHT)
-                                                                   (2 'CENTERED)
-                                                                   (3 'DECIMAL)
-                                                                   (\TEDIT.THELP])
-         (CL:UNLESS (FGETPARA FMT FMTDEFAULTTAB)
-                (FSETPARA FMT FMTDEFAULTTAB DEFAULTTAB))
+             (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFTAB)
+             [FSETPLOOKS PARALOOKS FMTTABS (for TAB# from 1 to (BIN FILE)
+                                              collect (create TAB
+                                                             TABX _ (\SMALLPIN FILE)
+                                                             TABKIND _ (SELECTQ (BIN FILE)
+                                                                           (0 'LEFT)
+                                                                           (1 'RIGHT)
+                                                                           (2 'CENTERED)
+                                                                           (3 'DECIMAL)
+                                                                           (\TEDIT.THELP])
+         (CL:UNLESS (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)
+                (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFAULTTAB))
          (CL:UNLESS (ZEROP (LOGAND TABFLG 2))                (* ; 
                                                    "There are other paragraph parameters to be read.")
-             (FSETPARA FMT FMTSPECIALX (\SMALLPIN FILE))     (* ; 
+             (FSETPLOOKS PARALOOKS FMTSPECIALX (\SMALLPIN FILE))
+                                                             (* ; 
                                                       "Special X location on page for this paragraph")
-             (FSETPARA FMT FMTSPECIALY (\SMALLPIN FILE))
-             (FSETPARA FMT FMTUSERINFO (\ARBIN FILE))
-             (FSETPARA FMT FMTPARATYPE (\ATMIN FILE))
-             (FSETPARA FMT FMTPARASUBTYPE (\ATMIN FILE))
-             (FSETPARA FMT FMTSTYLE (\ARBIN FILE))
-             (FSETPARA FMT FMTCHARSTYLES (\ARBIN FILE))
-             (FSETPARA FMT FMTNEWPAGEBEFORE (\ARBIN FILE))
-             (FSETPARA FMT FMTNEWPAGEAFTER (\ARBIN FILE)))
-         FMT])
+             (FSETPLOOKS PARALOOKS FMTSPECIALY (\SMALLPIN FILE))
+             (FSETPLOOKS PARALOOKS FMTUSERINFO (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTPARATYPE (\ATMIN FILE))
+             (FSETPLOOKS PARALOOKS FMTPARASUBTYPE (\ATMIN FILE))
+             (FSETPLOOKS PARALOOKS FMTSTYLE (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTCHARSTYLES (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTNEWPAGEBEFORE (\ARBIN FILE))
+             (FSETPLOOKS PARALOOKS FMTNEWPAGEAFTER (\ARBIN FILE)))
+         PARALOOKS])
 
 (TEDIT.GET.OBJECT1
   [LAMBDA (STREAM PIECE FILE CURCH#)                         (* ; "Edited 31-Jul-2024 12:09 by rmk")
@@ -873,7 +882,8 @@
 (DEFINEQ
 
 (\TEDIT.GET.PCTB0
-  [LAMBDA (TEXT TSTREAM PCCOUNT START END)                   (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (TEXT TSTREAM PCCOUNT START END)                   (* ; "Edited  8-Feb-2025 20:22 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 29-Apr-2024 10:27 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:41 by rmk")
                                                              (* ; "Edited 15-Mar-2024 14:47 by rmk")
@@ -894,8 +904,8 @@
                                  8))
          (SETQ PIECEINFOCH# (\DWIN TEXT))
          (SETFILEPTR TEXT PIECEINFOCH#)
-         (bind PC TYPECODE PCLEN OLDPC (DEFAULTPARALOOKS _ (FGETTOBJ TEXTOBJ FMTSPEC)) for I
-            from 1 to PCCOUNT
+         (bind PC TYPECODE PCLEN OLDPC (DEFAULTPARALOOKS _ (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS))
+            for I from 1 to PCCOUNT
             do (SETQ PCLEN (\DWIN TEXT))
                (SETQ PC
                 (create PIECE
@@ -1029,7 +1039,9 @@
          OBJ])
 
 (\TEDIT.GET.PARALOOKS0
-  [LAMBDA (PC FILE)                                          (* ; "Edited 23-Oct-2024 16:09 by rmk")
+  [LAMBDA (PC FILE)                                          (* ; "Edited 19-Feb-2025 12:09 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:05 by rmk")
+                                                             (* ; "Edited 23-Oct-2024 16:09 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited  5-Aug-2024 09:47 by rmk")
                                                              (* ; "Edited 29-Jul-2024 23:23 by rmk")
@@ -1041,29 +1053,29 @@
                                                              (* ; "Edited 30-May-91 20:34 by jds")
                                                              (* ; 
                   "Put a description of LOOKS into FILE.  LOOKS apply to characters CH1 thru CHLIM-1")
-    (LET ((FMT (create FMTSPEC))
+    (LET ((PARALOOKS (create PARALOOKS))
           TABFLG DEFTAB TABS)
-         (SETPC PC PPARALOOKS FMT)
-         (FSETPARA FMT 1STLEFTMAR (\SMALLPIN FILE))          (* ; 
+         (SETPC PC PPARALOOKS PARALOOKS)
+         (FSETPLOOKS PARALOOKS 1STLEFTMAR (\SMALLPIN FILE))  (* ; 
                                                     "Left margin for the first line of the paragraph")
-         (FSETPARA FMT LEFTMAR (\SMALLPIN FILE))             (* ; 
+         (FSETPLOOKS PARALOOKS LEFTMAR (\SMALLPIN FILE))     (* ; 
                                                           "Left margin for the rest of the paragraph")
-         (FSETPARA FMT RIGHTMAR (\SMALLPIN FILE))            (* ; "Right margin for the paragraph")
-         (FSETPARA FMT LEADBEFORE (\SMALLPIN FILE))          (* ; "Leading before the paragraph")
-         (FSETPARA FMT LEADAFTER (\SMALLPIN FILE))           (* ; "Lead after the paragraph")
-         (FSETPARA FMT LINELEAD (\SMALLPIN FILE))            (* ; "inter-line leading")
+         (FSETPLOOKS PARALOOKS RIGHTMAR (\SMALLPIN FILE))    (* ; "Right margin for the paragraph")
+         (FSETPLOOKS PARALOOKS LEADBEFORE (\SMALLPIN FILE))  (* ; "Leading before the paragraph")
+         (FSETPLOOKS PARALOOKS LEADAFTER (\SMALLPIN FILE))   (* ; "Lead after the paragraph")
+         (FSETPLOOKS PARALOOKS LINELEAD (\SMALLPIN FILE))    (* ; "inter-line leading")
          (SETQ TABFLG (BIN FILE))
-         (FSETPARA FMT QUAD (SELECTC (BIN FILE)
-                                (1 'LEFT)
-                                (2 'RIGHT)
-                                (3 'CENTERED)
-                                (4 'JUSTIFIED)
-                                (\TEDIT.THELP)))
+         (FSETPLOOKS PARALOOKS QUAD (SELECTC (BIN FILE)
+                                        (1 'LEFT)
+                                        (2 'RIGHT)
+                                        (3 'CENTERED)
+                                        (4 'JUSTIFIED)
+                                        (\TEDIT.THELP)))
          (CL:UNLESS (ZEROP TABFLG)                           (* ; "There are tabs to read")
              (SETQ DEFTAB (\SMALLPIN FILE))
              (CL:WHEN (ILEQ DEFTAB 1)
                     (SETQ DEFTAB DEFAULTTAB))
-             (FSETPARA FMT FMTDEFAULTTAB DEFTAB)
+             (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFTAB)
              [SETQ TABS (for TAB# from 1 to (BIN FILE) collect (create TAB
                                                                       TABX _ (\SMALLPIN FILE)
                                                                       TABKIND _
@@ -1073,20 +1085,20 @@
                                                                           (2 'CENTERED)
                                                                           (3 'DECIMAL)
                                                                           (\TEDIT.THELP]
-             (FSETPARA FMT FMTTABS TABS))
-         (CL:UNLESS (FGETPARA FMT FMTDEFAULTTAB)
-                (FSETPARA FMT FMTDEFAULTTAB DEFAULTTAB))
-         FMT])
+             (FSETPLOOKS PARALOOKS FMTTABS TABS))
+         (CL:UNLESS (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)
+                (FSETPLOOKS PARALOOKS FMTDEFAULTTAB DEFAULTTAB))
+         PARALOOKS])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (1758 36532 (\TEDIT.GET.PCTB2 1768 . 12063) (\TEDIT.GET.PARALOOKS2 12065 . 12654) (
-\TEDIT.GET.CHARLOOKS2 12656 . 13987) (\TEDIT.PARSE.PAGEFRAMES2 13989 . 16728) (
-\TEDIT.GET.CHARLOOKS.LIST2 16730 . 17237) (\TEDIT.GET.SINGLE.CHARLOOKS2 17239 . 20450) (
-\TEDIT.PUT.SINGLE.PARALOOKS2 20452 . 24569) (\TEDIT.PUT.SINGLE.CHARLOOKS2 24571 . 28281) (
-\TEDIT.GET.PARALOOKS.LIST2 28283 . 28790) (\TEDIT.GET.SINGLE.PARALOOKS2 28792 . 33250) (
-\TEDIT.PUT.CHARLOOKS.LIST2 33252 . 35331) (\TEDIT.PUT.PARALOOKS.LIST2 35333 . 36530)) (36609 56608 (
-\TEDIT.GET.PCTB1 36619 . 43310) (\TEDIT.GET.PAGEFRAMES1 43312 . 43764) (\TEDIT.PARSE.PAGEFRAMES1 43766
- . 46419) (\TEDIT.GET.CHARLOOKS1 46421 . 50466) (\TEDIT.GET.PARALOOKS1 50468 . 54874) (
-TEDIT.GET.OBJECT1 54876 . 56606)) (56668 70486 (\TEDIT.GET.PCTB0 56678 . 60641) (\TEDIT.GET.CHARLOOKS0
- 60643 . 64738) (\TEDIT.GET.OBJECT0 64740 . 66799) (\TEDIT.GET.PARALOOKS0 66801 . 70484)))))
+  (FILEMAP (NIL (1758 37224 (\TEDIT.GET.PCTB2 1768 . 12181) (\TEDIT.GET.PARALOOKS2 12183 . 12772) (
+\TEDIT.GET.CHARLOOKS2 12774 . 14105) (\TEDIT.PARSE.PAGEFRAMES2 14107 . 16846) (
+\TEDIT.GET.CHARLOOKS.LIST2 16848 . 17355) (\TEDIT.GET.SINGLE.CHARLOOKS2 17357 . 20568) (
+\TEDIT.PUT.SINGLE.PARALOOKS2 20570 . 24820) (\TEDIT.PUT.SINGLE.CHARLOOKS2 24822 . 28532) (
+\TEDIT.GET.PARALOOKS.LIST2 28534 . 29041) (\TEDIT.GET.SINGLE.PARALOOKS2 29043 . 33942) (
+\TEDIT.PUT.CHARLOOKS.LIST2 33944 . 36023) (\TEDIT.PUT.PARALOOKS.LIST2 36025 . 37222)) (37301 57923 (
+\TEDIT.GET.PCTB1 37311 . 44120) (\TEDIT.GET.PAGEFRAMES1 44122 . 44574) (\TEDIT.PARSE.PAGEFRAMES1 44576
+ . 47229) (\TEDIT.GET.CHARLOOKS1 47231 . 51276) (\TEDIT.GET.PARALOOKS1 51278 . 56189) (
+TEDIT.GET.OBJECT1 56191 . 57921)) (57983 72237 (\TEDIT.GET.PCTB0 57993 . 62074) (\TEDIT.GET.CHARLOOKS0
+ 62076 . 66171) (\TEDIT.GET.OBJECT0 66173 . 68232) (\TEDIT.GET.PARALOOKS0 68234 . 72235)))))
 STOP
diff --git a/library/tedit/TEDIT-OLDFILE.LCOM b/library/tedit/TEDIT-OLDFILE.LCOM
index 192baa6a..a54a5480 100644
Binary files a/library/tedit/TEDIT-OLDFILE.LCOM and b/library/tedit/TEDIT-OLDFILE.LCOM differ
diff --git a/library/tedit/TEDIT-PAGE b/library/tedit/TEDIT-PAGE
index c7e1460a..ca48a190 100644
--- a/library/tedit/TEDIT-PAGE
+++ b/library/tedit/TEDIT-PAGE
@@ -1,13 +1,14 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "12-Jan-2025 23:09:11" {WMEDLEY}<library>tedit>TEDIT-PAGE.;204 131960 
+(FILECREATED "19-Feb-2025 13:33:12" {WMEDLEY}<library>tedit>TEDIT-PAGE.;207 133407 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.FORMATFOLIO \TEDIT.FORMATHEADING \TEDIT.HARDCOPY.PAGEHEADINGS 
-                       TEDIT.SINGLE.PAGEFORMAT)
+      :CHANGES-TO (MACROS \FIRST-COLUMN-START)
+                  (FNS \TEDIT.FORMATPAGE \TEDIT.FORMATTEXTBOX \TEDIT.SKIP.SPECIALCOND 
+                       \TEDIT.HARDCOPY.PAGEHEADINGS \TEDIT.HARDCOPY-COLUMN-END)
 
-      :PREVIOUS-DATE " 7-Jan-2025 22:54:12" {WMEDLEY}<library>tedit>TEDIT-PAGE.;203)
+      :PREVIOUS-DATE " 8-Feb-2025 23:42:12" {WMEDLEY}<library>tedit>TEDIT-PAGE.;206)
 
 
 (PRETTYCOMPRINT TEDIT-PAGECOMS)
@@ -186,10 +187,9 @@
 
 (DECLARE%: EVAL@COMPILE 
 
-(PUTPROPS \FIRST-COLUMN-START MACRO [(LINE FMTSPEC)
+(PUTPROPS \FIRST-COLUMN-START MACRO [(LINE PARALOOKS)
                                      (AND (FGETLD LINE 1STLN)
-                                          (EQ (FFETCH (FMTSPEC FMTCOLUMN) OF FMTSPEC)
-                                              'FIRST])
+                                          (EQ 'FIRST (FGETPLOOKS PARALOOKS FMTCOLUMN])
 )
 
 (DECLARE%: EVAL@COMPILE 
@@ -1005,7 +1005,9 @@
                       LINE))])
 
 (\TEDIT.FORMATPAGE
-  [LAMBDA (TEXTOBJ PRSTREAM CHNO PAGEREGION FORMATTINGSTATE) (* ; "Edited 11-Dec-2024 22:39 by rmk")
+  [LAMBDA (TEXTOBJ PRSTREAM CHNO PAGEREGION FORMATTINGSTATE) (* ; "Edited 19-Feb-2025 13:32 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 21:13 by rmk")
+                                                             (* ; "Edited 11-Dec-2024 22:39 by rmk")
                                                              (* ; "Edited 17-Mar-2024 00:24 by rmk")
                                                              (* ; "Edited 13-Mar-2024 10:28 by rmk")
                                                              (* ; "Edited 19-Jan-2024 23:10 by rmk")
@@ -1050,7 +1052,7 @@
               (SETQ NEWPARALOOKS (\TEDIT.APPLY.PARASTYLES (PPARALOOKS PC)
                                         PC TEXTOBJ))         (* ; 
                                                 "RMK: Why both 'NEWPAGELAYOUT and :NEW-PAGE-LAYOUT ?")
-              (CL:WHEN (EQ 'NEWPAGELAYOUT (fetch (FMTSPEC FMTPARATYPE) of NEWPARALOOKS))
+              (CL:WHEN (EQ 'NEWPAGELAYOUT (GETPLOOKS NEWPARALOOKS FMTPARATYPE))
 
                   (* ;; "The first paragra ph on this page starts a new page layout.")
 
@@ -1059,10 +1061,11 @@
                   (* ;; "The first character of the paragraph after the one containing PC:")
 
                   [SETPFS FORMATTINGSTATE CHNO (ADD1 (CAR (\TEDIT.PARA.LAST TEXTOBJ PC]
-                  [SETPFS FORMATTINGSTATE NEWPAGELAYOUT (\TEDIT.PARSE.PAGEFRAMES
-                                                         (LISTGET (fetch (FMTSPEC FMTUSERINFO)
-                                                                     of NEWPARALOOKS)
-                                                                'NEWPAGELAYOUT]
+                  [SETPFS FORMATTINGSTATE NEWPAGELAYOUT (\TEDIT.PARSE.PAGEFRAMES (LISTGET
+                                                                                  (GETPLOOKS 
+                                                                                         NEWPARALOOKS
+                                                                                         FMTUSERINFO)
+                                                                                  'NEWPAGELAYOUT]
                   (RETURN))
 
          (* ;; "")
@@ -1142,7 +1145,9 @@
          1])
 
 (\TEDIT.FORMATTEXTBOX
-  [LAMBDA (TEXTOBJ PRSTREAM CHNO PAGEREGION FORMATTINGSTATE) (* ; "Edited 11-Dec-2024 22:37 by rmk")
+  [LAMBDA (TEXTOBJ PRSTREAM CHNO PAGEREGION FORMATTINGSTATE) (* ; "Edited 19-Feb-2025 13:32 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:39 by rmk")
+                                                             (* ; "Edited 11-Dec-2024 22:37 by rmk")
                                                              (* ; "Edited 24-Nov-2024 11:46 by rmk")
                                                              (* ; "Edited 20-Nov-2024 12:37 by rmk")
                                                              (* ; "Edited 17-Nov-2024 19:16 by rmk")
@@ -1201,7 +1206,7 @@
               (SETPFS FORMATTINGSTATE PAGEFOOTNOTELINES FOOTNOTELINES)
                                                              (* ; "Remember any remaining footnotes")
               [SETQ LINES
-               (bind LINE FMTSPEC LHEIGHT PREVLINE SPECIALYPOS BREAKAFTERLASTPARA YBOT NEWPAGETYPE 
+               (bind LINE PARALOOKS LHEIGHT PREVLINE SPECIALYPOS BREAKAFTERLASTPARA YBOT NEWPAGETYPE
                      COLUMN-YBASE (TEXTLEN _ (TEXTLEN TEXTOBJ)) while (AND (ILEQ CHNO TEXTLEN)
                                                                            (NOT FORCENEXTPAGE))
                   collect (BLOCK) 
@@ -1217,7 +1222,7 @@
                                                      (FGETLD LINE FORCED-END))
                                                  'USERBREAK))
                         (SETQ LHEIGHT (FGETLD LINE LHEIGHT))
-                        (SETQ FMTSPEC (FGETLD LINE LFMTSPEC))
+                        (SETQ PARALOOKS (FGETLD LINE LPARALOOKS))
                         (COND
                            ((FGETLD LINE LMARK)
 
@@ -1225,7 +1230,7 @@
 
                             (SETQ CHNO (FGETLD LINE LCHARLIM))
                             LINE)
-                           ((LISTGET (FGETPARA FMTSPEC FMTUSERINFO)
+                           ((LISTGET (FGETPLOOKS PARALOOKS FMTUSERINFO)
                                    'FOOTNOTE)
 
                             (* ;; "This paragraph is a footnote para.")
@@ -1279,14 +1284,14 @@
                               (* ;; "So that only the first line of a specially-placed paragraph is guaranteed to appear in the current box.")
 
                               [SETQ YBOT (COND
-                                            ((AND (FGETPARA FMTSPEC FMTSPECIALY)
-                                                  (NOT (ZEROP (FGETPARA FMTSPEC FMTSPECIALY)))
+                                            ((AND (FGETPLOOKS PARALOOKS FMTSPECIALY)
+                                                  (NOT (ZEROP (FGETPLOOKS PARALOOKS FMTSPECIALY)))
                                                   (FGETLD LINE 1STLN))
                                                              (* ; 
                                       "There is a special Y location for this paragraph.  Move there")
-                                             (SETQ SPECIALYPOS (FGETPARA FMTSPEC FMTSPECIALY)))
+                                             (SETQ SPECIALYPOS (FGETPLOOKS PARALOOKS FMTSPECIALY)))
                                             ((AND COLUMN-YBASE (FGETLD LINE 1STLN)
-                                                  (EQ (FGETPARA FMTSPEC FMTCOLUMN)
+                                                  (EQ (FGETPLOOKS PARALOOKS FMTCOLUMN)
                                                       'NEXT))
 
                                              (* ;; 
@@ -1297,20 +1302,22 @@
 
                                  (* ;; "We're into it;  take account of this line's height. Original code did the complicated LHEIGHT calculation and threw it away.  I assume that that was an error, that the new setting of LHEIGHT is for the benefit of the new YBOT value (which I pulled out of an alternative branch of a COND.")
 
-                                                  (CL:WHEN (FGETPARA FMTSPEC FMTBASETOBASE)
+                                                  (CL:WHEN (FGETPLOOKS PARALOOKS FMTBASETOBASE)
                                                       [SETQ LHEIGHT
                                                        (IPLUS (FGETLD LINE LDESCENT)
-                                                              (FGETPARA FMTSPEC FMTBASETOBASE)
+                                                              (FGETPLOOKS PARALOOKS FMTBASETOBASE)
                                                               (COND
                                                                  ((FGETLD LINE 1STLN)
-                                                                  (IPLUS (FGETPARA FMTSPEC LEADBEFORE
-                                                                                )
-                                                                         (FGETPARA (GETLD PREVLINE 
-                                                                                          LFMTSPEC)
+                                                                  (IPLUS (FGETPLOOKS PARALOOKS 
+                                                                                LEADBEFORE)
+                                                                         (FGETPLOOKS (GETLD PREVLINE
+                                                                                            
+                                                                                           LPARALOOKS
+                                                                                            )
                                                                                 LEADAFTER)))
                                                                  (T 0])
                                                   (COND
-                                                     ((\FIRST-COLUMN-START LINE FMTSPEC)
+                                                     ((\FIRST-COLUMN-START LINE PARALOOKS)
                                                       (IDIFFERENCE (IMIN PRIOR-COLUMN-YBOT YBOT)
                                                              LHEIGHT))
                                                      (T (IDIFFERENCE YBOT LHEIGHT]
@@ -1329,7 +1336,7 @@
                                   NIL)
                                  ((AND (NOT FIRSTLINE)
                                        (FGETLD LINE 1STLN)
-                                       (SETQ NEWPAGETYPE (OR (FGETPARA (FGETLD LINE LFMTSPEC)
+                                       (SETQ NEWPAGETYPE (OR (FGETPLOOKS (FGETLD LINE LPARALOOKS)
                                                                     FMTNEWPAGEBEFORE)
                                                              BREAKAFTERLASTPARA)))
 
@@ -1346,7 +1353,7 @@
                                       (SETPFS FORMATTINGSTATE REQUIREDREGIONTYPE NEWPAGETYPE))
                                   NIL)
                                  (T                          (* ; "This line is good;  use it.")
-                                    (CL:WHEN (AND (FGETPARA FMTSPEC FMTNEWPAGEAFTER))
+                                    (CL:WHEN (AND (FGETPLOOKS PARALOOKS FMTNEWPAGEAFTER))
                                                              (* ; 
    "We're supposed to put the line after this one at the start of a new page/column (any box, later)")
                                         (SETQ BREAKAFTERLASTPARA T))
@@ -1354,7 +1361,7 @@
                                                                 (IMIN PRIOR-COLUMN-YBOT YBOT)
                                                                 YBOT))
                                     (SETYBOT LINE YBOT)
-                                    (CL:WHEN (\FIRST-COLUMN-START LINE FMTSPEC)
+                                    (CL:WHEN (\FIRST-COLUMN-START LINE PARALOOKS)
 
                                    (* ;; "This is the start of a new group of paragraphs to be lined up in columns.  Save the YBASE for these guys for the other columns.")
 
@@ -1474,7 +1481,8 @@
         T])
 
 (\TEDIT.SKIP.SPECIALCOND
-  [LAMBDA (TSTREAM LINE PARALOOKS CHNO)                      (* ; "Edited 20-Nov-2024 12:37 by rmk")
+  [LAMBDA (TSTREAM LINE PARALOOKS CHNO)                      (* ; "Edited 19-Feb-2025 13:32 by rmk")
+                                                             (* ; "Edited 20-Nov-2024 12:37 by rmk")
                                                              (* ; "Edited 17-Nov-2024 19:35 by rmk")
                                                              (* ; "Edited 26-Oct-2024 10:27 by rmk")
                                                              (* ; "Edited  5-Jul-2023 14:19 by rmk")
@@ -1493,11 +1501,11 @@
     (FSETLD LINE LDESCENT 0)
     (FSETLD LINE LTRUEASCENT 0)
     (FSETLD LINE LTRUEDESCENT 0)
-    (FSETLD LINE LCHARLIM (IPLUS CHNO (for PC (HEADINGTYPE _ (GETPARA PARALOOKS FMTPARASUBTYPE))
+    (FSETLD LINE LCHARLIM (IPLUS CHNO (for PC (HEADINGTYPE _ (GETPLOOKS PARALOOKS FMTPARASUBTYPE))
                                          inpieces (fetch (TEXTSTREAM PIECE) of TSTREAM)
-                                         while (AND (EQ 'PAGEHEADING (GETPARA (PPARALOOKS PC)
+                                         while (AND (EQ 'PAGEHEADING (GETPLOOKS (PPARALOOKS PC)
                                                                             FMTPARATYPE))
-                                                    (EQ HEADINGTYPE (GETPARA (PPARALOOKS PC)
+                                                    (EQ HEADINGTYPE (GETPLOOKS (PPARALOOKS PC)
                                                                            FMTPARASUBTYPE)))
                                          sum (PLEN PC])
 )
@@ -1509,7 +1517,8 @@
 (DEFINEQ
 
 (\TEDIT.HARDCOPY.PAGEHEADINGS
-  [LAMBDA (TEXTOBJ CHNO FORMATTINGSTATE)                     (* ; "Edited 12-Jan-2025 17:31 by rmk")
+  [LAMBDA (TEXTOBJ CHNO FORMATTINGSTATE)                     (* ; "Edited 19-Feb-2025 13:32 by rmk")
+                                                             (* ; "Edited 12-Jan-2025 17:31 by rmk")
                                                              (* ; "Edited 10-Jan-2025 15:42 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 17-Mar-2024 00:27 by rmk")
@@ -1524,13 +1533,14 @@
                                                      "If it isn't there, we would loose the headings")
         (\TEDIT.THELP "NIL FORMATTINGSTATE"))
     (bind HEADINGSUBTYPE (PC _ (\TEDIT.CHTOPC CHNO TEXTOBJ))
-       while (AND PC (EQ 'PAGEHEADING (GETPARA (PPARALOOKS PC)
+       while (AND PC (EQ 'PAGEHEADING (GETPLOOKS (PPARALOOKS PC)
                                              FMTPARATYPE)))
-       do (SETQ HEADINGSUBTYPE (GETPARA (PPARALOOKS PC)
+       do (SETQ HEADINGSUBTYPE (GETPLOOKS (PPARALOOKS PC)
                                       FMTPARASUBTYPE))
-          (for P (START _ CHNO) inpieces PC while (AND (EQ 'PAGEHEADING (GETPARA (PPARALOOKS P)
+          (for P (START _ CHNO) inpieces PC while (AND (EQ 'PAGEHEADING (GETPLOOKS (PPARALOOKS P)
                                                                                FMTPARATYPE))
-                                                       (EQ HEADINGSUBTYPE (GETPARA (PPARALOOKS P)
+                                                       (EQ HEADINGSUBTYPE (GETPLOOKS (PPARALOOKS
+                                                                                      P)
                                                                                  FMTPARASUBTYPE)))
              do 
                 (* ;; "We loop at least once, because P=PC satisfies the while. We need the CHNO, not the piece for the selpieces")
@@ -1579,7 +1589,9 @@
 
 (\TEDIT.HARDCOPY-COLUMN-END
   [LAMBDA (ORIGINAL-LINES ORPHAN FORCENEXTPAGE CHNO FOOTNOTELINES REGION TEXTOBJ FORMATTINGSTATE 
-                 FINAL-CHNO DONT-KEEP-SINGLE-LINE)           (* ; "Edited 11-Dec-2024 20:52 by rmk")
+                 FINAL-CHNO DONT-KEEP-SINGLE-LINE)           (* ; "Edited 19-Feb-2025 13:32 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:39 by rmk")
+                                                             (* ; "Edited 11-Dec-2024 20:52 by rmk")
                                                              (* ; "Edited 24-Nov-2024 11:46 by rmk")
                                                              (* ; "Edited 20-Nov-2024 12:37 by rmk")
                                                              (* ; "Edited 17-Nov-2024 19:22 by rmk")
@@ -1642,23 +1654,24 @@
                                              LCHARLIM))]
                 ([AND (NEQ FORCENEXTPAGE 'USERBREAK)
                       (ILEQ CHNO (TEXTLEN TEXTOBJ))
-                      (OR (GETPARA (GETLD LASTLINE LFMTSPEC)
+                      (OR (GETPLOOKS (GETLD LASTLINE LPARALOOKS)
                                  FMTHEADINGKEEP)
-                          (AND (GETPARA (GETLD LASTLINE LFMTSPEC)
+                          (AND (GETPLOOKS (GETLD LASTLINE LPARALOOKS)
                                       FMTKEEP)
                                (NOT (GETLD LASTLINE LSTLN]
 
                  (* ;; "Only do widow/orphan detection if this is NOT a page break the user asked for.  And this isn't the end of the document.")
 
-                 (for LASTLINE in (REVERSE LINES) while [OR (GETPARA (GETLD LASTLINE LFMTSPEC)
+                 (for LASTLINE in (REVERSE LINES) while [OR (GETPLOOKS (GETLD LASTLINE LPARALOOKS)
                                                                    FMTHEADINGKEEP)
-                                                            (AND (GETPARA (GETLD LASTLINE LFMTSPEC)
+                                                            (AND (GETPLOOKS (GETLD LASTLINE 
+                                                                                   LPARALOOKS)
                                                                         FMTKEEP)
                                                                  (NOT (GETLD LASTLINE LSTLN]
                     do 
                        (* ;; "Run thru, removing any trailing headings.  However, assure that there's at least one line on a page.")
  finally (COND
-            ((AND LASTLINE (AND (NOT (GETPARA (GETLD LASTLINE LFMTSPEC)
+            ((AND LASTLINE (AND (NOT (GETPLOOKS (GETLD LASTLINE LPARALOOKS)
                                             FMTHEADINGKEEP))
                                 (GETLD LASTLINE LSTLN)))
 
@@ -2071,18 +2084,18 @@
                         (RETURN (DREMOVE NIL $$VAL])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (12253 15865 (\TEDIT.PARSE.PAGEFRAMES 12263 . 14042) (\TEDIT.PUT.PAGEFRAMES 14044 . 
-14868) (\TEDIT.UNPARSE.PAGEFRAMES 14870 . 15863)) (15928 37826 (TEDIT.SINGLE.PAGEFORMAT 15938 . 26812)
- (TEDIT.COMPOUND.PAGEFORMAT 26814 . 27793) (TEDIT.PAGEFORMAT 27795 . 35084) (TEDIT.GET.PAGEFORMAT 
-35086 . 37824)) (38113 48615 (TEDIT.FORMAT.HARDCOPY 38123 . 48613)) (48702 100270 (\TEDIT.FORMATBOX 
-48712 . 61815) (\TEDIT.FORMATHEADING 61817 . 66463) (\TEDIT.FORMATPAGE 66465 . 74995) (
-\TEDIT.FORMATTEXTBOX 74997 . 90921) (\TEDIT.FORMATFOLIO 90923 . 96240) (\TEDIT.FORMAT.FOUNDBOX? 96242
- . 98281) (\TEDIT.SKIP.SPECIALCOND 98283 . 100268)) (100350 104856 (\TEDIT.HARDCOPY.PAGEHEADINGS 
-100360 . 104854)) (104965 112694 (\TEDIT.HARDCOPY-COLUMN-END 104975 . 112692)) (112739 117680 (
-SCALEPAGEUNITS 112749 . 113890) (SCALEPAGEXUNITS 113892 . 114662) (SCALEPAGEYUNITS 114664 . 115435) (
-\TEDIT.PAPERHEIGHT 115437 . 116372) (\TEDIT.PAPERWIDTH 116374 . 117678)) (118096 121664 (ROMANNUMERALS
- 118106 . 121662)) (121703 128969 (TEDIT.PAGENO.CREATE 121713 . 122089) (\TEDIT.PAGENO.OBJINIT 122091
- . 123374) (\TEDIT.PAGENO.BUTTONEVENTINFN 123376 . 124442) (\TEDIT.PAGENO.IMAGEBOXFN 124444 . 126594) 
-(\TEDIT.PAGENO.DISPLAYFN 126596 . 128246) (\TEDIT.PAGENO.GETFN 128248 . 128640) (\TEDIT.PAGENO.PUTFN 
-128642 . 128967)) (129034 131937 (\TEDIT.FORMAT.FOOTNOTE 129044 . 131935)))))
+  (FILEMAP (NIL (12266 15878 (\TEDIT.PARSE.PAGEFRAMES 12276 . 14055) (\TEDIT.PUT.PAGEFRAMES 14057 . 
+14881) (\TEDIT.UNPARSE.PAGEFRAMES 14883 . 15876)) (15941 37839 (TEDIT.SINGLE.PAGEFORMAT 15951 . 26825)
+ (TEDIT.COMPOUND.PAGEFORMAT 26827 . 27806) (TEDIT.PAGEFORMAT 27808 . 35097) (TEDIT.GET.PAGEFORMAT 
+35099 . 37837)) (38126 48628 (TEDIT.FORMAT.HARDCOPY 38136 . 48626)) (48715 101192 (\TEDIT.FORMATBOX 
+48725 . 61828) (\TEDIT.FORMATHEADING 61830 . 66476) (\TEDIT.FORMATPAGE 66478 . 75345) (
+\TEDIT.FORMATTEXTBOX 75347 . 91728) (\TEDIT.FORMATFOLIO 91730 . 97047) (\TEDIT.FORMAT.FOUNDBOX? 97049
+ . 99088) (\TEDIT.SKIP.SPECIALCOND 99090 . 101190)) (101272 105981 (\TEDIT.HARDCOPY.PAGEHEADINGS 
+101282 . 105979)) (106090 114141 (\TEDIT.HARDCOPY-COLUMN-END 106100 . 114139)) (114186 119127 (
+SCALEPAGEUNITS 114196 . 115337) (SCALEPAGEXUNITS 115339 . 116109) (SCALEPAGEYUNITS 116111 . 116882) (
+\TEDIT.PAPERHEIGHT 116884 . 117819) (\TEDIT.PAPERWIDTH 117821 . 119125)) (119543 123111 (ROMANNUMERALS
+ 119553 . 123109)) (123150 130416 (TEDIT.PAGENO.CREATE 123160 . 123536) (\TEDIT.PAGENO.OBJINIT 123538
+ . 124821) (\TEDIT.PAGENO.BUTTONEVENTINFN 124823 . 125889) (\TEDIT.PAGENO.IMAGEBOXFN 125891 . 128041) 
+(\TEDIT.PAGENO.DISPLAYFN 128043 . 129693) (\TEDIT.PAGENO.GETFN 129695 . 130087) (\TEDIT.PAGENO.PUTFN 
+130089 . 130414)) (130481 133384 (\TEDIT.FORMAT.FOOTNOTE 130491 . 133382)))))
 STOP
diff --git a/library/tedit/TEDIT-PAGE.LCOM b/library/tedit/TEDIT-PAGE.LCOM
index 8ae75a33..70ea0cab 100644
Binary files a/library/tedit/TEDIT-PAGE.LCOM and b/library/tedit/TEDIT-PAGE.LCOM differ
diff --git a/library/tedit/TEDIT-PCTREE b/library/tedit/TEDIT-PCTREE
index c535abee..f2372469 100644
--- a/library/tedit/TEDIT-PCTREE
+++ b/library/tedit/TEDIT-PCTREE
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "27-Nov-2024 23:12:27" {WMEDLEY}<library>tedit>TEDIT-PCTREE.;243 67795  
+(FILECREATED " 8-Feb-2025 20:56:54" {WMEDLEY}<library>tedit>TEDIT-PCTREE.;248 68998  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.DELETEPIECES)
+      :CHANGES-TO (FNS \TEDIT.MAKEPCTB)
 
-      :PREVIOUS-DATE "21-Oct-2024 00:42:44" {WMEDLEY}<library>tedit>TEDIT-PCTREE.;242)
+      :PREVIOUS-DATE " 7-Feb-2025 08:31:28" {WMEDLEY}<library>tedit>TEDIT-PCTREE.;246)
 
 
 (PRETTYCOMPRINT TEDIT-PCTREECOMS)
@@ -25,7 +25,7 @@
                       (RECORDS BTREENODE BTSLOT)
                       (MACROS \NTHSLOT \NEXTSLOT \PREVSLOT \LASTSLOT \FIRSTSLOT \MOVESLOT \FILLSLOT 
                              \FINDSLOT)
-                      (MACROS \LASTPIECEP)
+                      (MACROS \SUFFIXPIECEP)
                       (I.S.OPRS inslots inpieces backpieces))
                (MACROS \INSURE.VACANT.BTREESLOT)
                (ADDVARS (INSPECTDONTSORTFIELDS BTREENODE)))
@@ -138,9 +138,9 @@
 )
 (DECLARE%: EVAL@COMPILE 
 
-(PUTPROPS \LASTPIECEP MACRO (OPENLAMBDA (PC TOBJ)
-                              (AND (EQ PC (ffetch (TEXTOBJ LASTPIECE) of TOBJ))
-                                   PC)))
+(PUTPROPS \SUFFIXPIECEP MACRO (OPENLAMBDA (PC TOBJ)
+                                (AND (EQ PC (FGETTOBJ TOBJ SUFFIXPIECE))
+                                     PC)))
 )
 (DECLARE%: EVAL@COMPILE 
 
@@ -215,7 +215,9 @@
 (DEFINEQ
 
 (\TEDIT.MAKEPCTB
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  7-Dec-2023 12:41 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  8-Feb-2025 20:14 by rmk")
+                                                             (* ; "Edited  7-Feb-2025 08:02 by rmk")
+                                                             (* ; "Edited  7-Dec-2023 12:41 by rmk")
                                                              (* ; "Edited 31-Oct-2023 10:09 by rmk")
                                                              (* ; "Edited  8-Sep-2023 16:30 by rmk")
                                                              (* ; "Edited 26-Apr-2023 14:03 by rmk")
@@ -236,8 +238,8 @@
                         PLEN _ 0
                         PTREENODE _ NODE
                         PLOOKS _ (GETTOBJ TEXTOBJ DEFAULTCHARLOOKS)
-                        PPARALOOKS _ (GETTOBJ TEXTOBJ FMTSPEC)))
-         (FSETTOBJ TEXTOBJ LASTPIECE (ffetch (BTREENODE DOWN1) of NODE))
+                        PPARALOOKS _ (GETTOBJ TEXTOBJ DEFAULTPARALOOKS)))
+         (FSETTOBJ TEXTOBJ SUFFIXPIECE (ffetch (BTREENODE DOWN1) of NODE))
          (FSETTOBJ TEXTOBJ HINTPC NIL)
          (FSETTOBJ TEXTOBJ TEXTLEN 0)
          (FSETTOBJ TEXTOBJ PCTB (CONS NODE])
@@ -272,7 +274,8 @@
                     DELTA])
 
 (\TEDIT.FIRSTPIECE
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited 21-Aug-2024 16:07 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  7-Feb-2025 08:02 by rmk")
+                                                             (* ; "Edited 21-Aug-2024 16:07 by rmk")
                                                              (* ; "Edited 31-Oct-2023 19:37 by rmk")
                                                              (* ; "Edited 11-Apr-2023 12:54 by rmk")
                                                              (* ; "Edited 24-Aug-2022 12:45 by rmk")
@@ -285,7 +288,7 @@
 
                                  (* ;; "If we don't bottom out in a piece, something else is screwed up.  But we return NIL for the last piece, which is only there to hold the PREV pointer to the real last piece (and maybe the initial looks).")
 
-                                        (RETURN (CL:UNLESS (EQ NODE (FGETTOBJ TEXTOBJ LASTPIECE))
+                                        (RETURN (CL:UNLESS (EQ NODE (FGETTOBJ TEXTOBJ SUFFIXPIECE))
                                                        NODE])
 
 (\TEDIT.DELETETREE
@@ -383,16 +386,16 @@
          NEW])
 
 (\TEDIT.LASTPIECE
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited 31-Oct-2023 10:20 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  7-Feb-2025 08:20 by rmk")
+                                                             (* ; "Edited 31-Oct-2023 10:20 by rmk")
                                                              (* ; "Edited 12-Apr-2023 19:23 by rmk")
                                                              (* ; "Edited 21-Aug-2022 17:13 by rmk")
                                                              (* ; "Edited 16-Aug-2022 10:16 by rmk")
                                                              (* ; "Edited 14-Apr-93 16:29 by jds")
 
-    (* ;; "Returns the LASTPIECE by running down the right side of the B-tree.  Should be the same as (fetch LASTPIECE of TEXTOBJ).  Argument can also be a node.")
+    (* ;; "Returns the last real piece of the text, NIL for an empty document.")
 
-    (bind [CHILD _ (CAR (LAST (GETTOBJ TEXTOBJ PCTB] while (type? BTREENODE CHILD)
-       do (SETQ CHILD (ffetch (BTSLOT DOWN) of (\LASTSLOT CHILD))) finally (RETURN CHILD])
+    (PREVPIECE (FGETTOBJ TEXTOBJ SUFFIXPIECE])
 
 (\TEDIT.PCTOCH
   [LAMBDA (PC TEXTOBJ)                                       (* ; "Edited 31-Oct-2023 21:05 by rmk")
@@ -421,7 +424,8 @@
                                                                           of TOPNODE])
 
 (\TEDIT.CHTOPC
-  [LAMBDA (CH# TEXTOBJ TELL-PC-START?)                       (* ; "Edited  4-Nov-2023 17:56 by rmk")
+  [LAMBDA (CH# TEXTOBJ TELL-PC-START?)                       (* ; "Edited  7-Feb-2025 08:29 by rmk")
+                                                             (* ; "Edited  4-Nov-2023 17:56 by rmk")
                                                              (* ; "Edited  1-Nov-2023 23:29 by rmk")
                                                              (* ; "Edited 13-Apr-2023 22:22 by rmk")
                                                              (* ; "Edited 12-Apr-2023 09:49 by rmk")
@@ -435,7 +439,7 @@
 
     (* ;; "There are 2 acceleration cases:")
 
-    (* ;; "     if CH# is after the current text length, the pseudo LASTPIECE is returned to the caller wo can retrieve its looks and PREV (the piece containing the last actual character.")
+    (* ;; "     if CH# is after the current text length, the pseudo SUFFIXPIECE is returned to the caller wo can retrieve its looks and PREV (the piece containing the last actual character.")
 
     (* ;; "    If the TEXTOBJ contains a HINTPC and CH# is in the range HINTPCSTARTCH# and HINTPCSTARTCH#+PLEN-1, then HINTPC is returned. Others may cache that, but we cache it here too for repeated sequential calls.")
 
@@ -447,7 +451,7 @@
      (if (IGREATERP CH# (FGETTOBJ TEXTOBJ TEXTLEN))
          then (CL:WHEN TELL-PC-START?
                   (SETQ START-OF-PIECE (ADD1 (FGETTOBJ TEXTOBJ TEXTLEN))))
-              (FGETTOBJ TEXTOBJ LASTPIECE)
+              (FGETTOBJ TEXTOBJ SUFFIXPIECE)
        elseif (AND (SETQ HINTPC (FGETTOBJ TEXTOBJ HINTPC))
                    (IGEQ CH# (SETQ STARTCH (FGETTOBJ TEXTOBJ HINTPCSTARTCH#)))
                    (ILESSP (IDIFFERENCE CH# STARTCH)
@@ -463,7 +467,7 @@
 
                           (* ;; "When PCTB is a list of top-level BTNODES, we find the sub-tree that contains the global CH# piece, sum the TOTLEN's of all prior top-level nodes, retrieve the piece from the identified subtree after adjusting to its LOCAL#.  START-OF-PIECE, if required, is globally correct.")
 
-                          (* ;; "This is a performance optimization for \UPDATEPCNODES in the case of building a textstream for a large file (longer than MAXSMALLP characters) by successive BOUT's at the end (e.g. seeing a large Lisp source file). Also look at the LASTPIECE case above. Also look at \INSERTPIECE.")
+                          (* ;; "This is a performance optimization for \UPDATEPCNODES in the case of building a textstream for a large file (longer than MAXSMALLP characters) by successive BOUT's at the end (e.g. seeing a large Lisp source file). Also look at the SUFFIXPIECE case above. Also look at \INSERTPIECE.")
 
                           (for old BASE-NODE NEXT in (FGETTOBJ TEXTOBJ PCTB)
                              do (SETQ NEXT (IPLUS ALLPRIOR (ffetch (BTREENODE TOTLEN) of BASE-NODE)))
@@ -628,16 +632,17 @@
              (\TEDIT.BTVALIDATE '\TEDIT.MAKE.VACANT.BTREESLOT 'END TEXTOBJ)))])
 
 (\TEDIT.LINKNEWPIECE
-  [LAMBDA (NEW NEXT TEXTOBJ)                                 (* ; "Edited 29-May-2023 23:16 by rmk")
+  [LAMBDA (NEW NEXT TEXTOBJ)                                 (* ; "Edited  7-Feb-2025 08:26 by rmk")
+                                                             (* ; "Edited 29-May-2023 23:16 by rmk")
 
     (* ;; "Set up the linear-chain links to insert the piece NEW in front of the piece NEXT in its piece-chain.  This doesn't deal with the btree.")
 
-    (* ;; "NEXT=NIL denotes the last piece LASTPIECE of TEXTOBJ whose NEXTPIECE is NIL and whose PREVPIECE is always the last real piece of the text stream.")
+    (* ;; "NEXT=NIL denotes the last piece SUFFIXPIECE of TEXTOBJ whose NEXTPIECE is NIL and whose PREVPIECE is always the last real piece of the text stream.")
 
     (CL:UNLESS NEXT
-        (SETQ NEXT (ffetch (TEXTOBJ LASTPIECE) of TEXTOBJ)))
+        (SETQ NEXT (FGETTOBJ TEXTOBJ SUFFIXPIECE)))
     (LET ((NEXTPREV (PREVPIECE NEXT)))
-         (freplace (PIECE NEXTPIECE) of NEW with (CL:UNLESS (\LASTPIECEP NEXT TEXTOBJ)
+         (freplace (PIECE NEXTPIECE) of NEW with (CL:UNLESS (\SUFFIXPIECEP NEXT TEXTOBJ)
                                                         NEXT))
                                                              (* ; "NIL for last piece")
          (freplace (PIECE PREVPIECE) of NEW with NEXTPREV)   (* ; 
@@ -651,7 +656,8 @@
          NEW])
 
 (\TEDIT.UNLINKPIECE
-  [LAMBDA (PREV PC TEXTOBJ)                                  (* ; "Edited 21-Oct-2024 00:26 by rmk")
+  [LAMBDA (PREV PC TEXTOBJ)                                  (* ; "Edited  7-Feb-2025 08:04 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:26 by rmk")
                                                              (* ; "Edited 21-Oct-2023 17:24 by rmk")
                                                              (* ; "Edited 30-May-2023 00:31 by rmk")
 
@@ -661,7 +667,7 @@
     (CL:WHEN PREV
         (freplace (PIECE NEXTPIECE) of PREV with (NEXTPIECE PC)))
     (freplace (PIECE PREVPIECE) of (OR (NEXTPIECE PC)
-                                       (ffetch (TEXTOBJ LASTPIECE) of TEXTOBJ)) with PREV])
+                                       (FGETTOBJ TEXTOBJ SUFFIXPIECE)) with PREV])
 
 (\TEDIT.SPLITPIECE
   [LAMBDA (PC CHOFFSET TEXTOBJ)                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
@@ -732,7 +738,8 @@
     PC])
 
 (\TEDIT.INSERTPIECE
-  [LAMBDA (NEWPC NEXTPC TEXTOBJ)                             (* ; "Edited 17-Mar-2024 00:11 by rmk")
+  [LAMBDA (NEWPC NEXTPC TEXTOBJ)                             (* ; "Edited  7-Feb-2025 08:28 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 00:11 by rmk")
                                                              (* ; "Edited  7-Dec-2023 21:07 by rmk")
                                                              (* ; "Edited 31-Oct-2023 23:05 by rmk")
                                                              (* ; "Edited  9-Jun-2023 22:40 by rmk")
@@ -741,15 +748,15 @@
 
     (* ;; "Insert the piece NEWPC in front of the piece NEXTPC.  At the end, NEWPC appears before NEXTPC in the piece tree, and all counts and lengths are consistent.")
 
-    (* ;; "The last piece LASTPIECE is always a piece in the last node whose NEXTPIECE is NIL and whose PREVPIECE is always the last real piece in the chain. But the lastpiece has its rightful place in the tree.")
+    (* ;; "The last piece SUFFIXPIECE is always a piece in the last node whose NEXTPIECE is NIL and whose PREVPIECE is always the last real piece in the chain. But the  suffix piece has its rightful place in the tree.")
 
     (* ;; "Caller guarantees that the chain links of NEW can be smashed.")
 
     (\TEDIT.BTVALIDATE '\TEDIT.INSERTPIECE 'START TEXTOBJ)
     (FSETTOBJ TEXTOBJ HINTPC NIL)
     (CL:UNLESS NEXTPC
-        (SETQ NEXTPC (FGETTOBJ TEXTOBJ LASTPIECE)))
-    (CL:WHEN (AND MULTIPLE-PIECE-TABLES (EQ NEXTPC (FGETTOBJ TEXTOBJ LASTPIECE)))
+        (SETQ NEXTPC (FGETTOBJ TEXTOBJ SUFFIXPIECE)))
+    (CL:WHEN (AND MULTIPLE-PIECE-TABLES (EQ NEXTPC (FGETTOBJ TEXTOBJ SUFFIXPIECE)))
                                                              (* ; "Inserting at the very end")
         (LET ((PCTB (FGETTOBJ TEXTOBJ PCTB))
               LASTTREECONS)
@@ -785,7 +792,8 @@
     NEWPC])
 
 (\TEDIT.INSERTPIECES
-  [LAMBDA (PIECES NEXTPC TEXTOBJ)                            (* ; "Edited 20-Mar-2024 10:55 by rmk")
+  [LAMBDA (PIECES NEXTPC TEXTOBJ)                            (* ; "Edited  7-Feb-2025 08:04 by rmk")
+                                                             (* ; "Edited 20-Mar-2024 10:55 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:41 by rmk")
                                                              (* ; "Edited 16-Mar-2024 10:23 by rmk")
                                                              (* ; "Edited  7-Dec-2023 21:08 by rmk")
@@ -803,7 +811,7 @@
         (FSETTOBJ TEXTOBJ HINTPC NIL)
         (FSETTOBJ TEXTOBJ \DIRTY T)
         (CL:UNLESS NEXTPC
-            (SETQ NEXTPC (FGETTOBJ TEXTOBJ LASTPIECE)))
+            (SETQ NEXTPC (FGETTOBJ TEXTOBJ SUFFIXPIECE)))
         (for PC (PREVPC _ (PREVPIECE NEXTPC)) inpieces PIECES
            do 
               (* ;; "This is a variant of \INSERTPIECE specialized for filling in an empty TEXTOBJ from a piece chain.  Insertion always happens before NEXTPC,  and the chain-links are not smashed. ")
@@ -819,7 +827,7 @@
 
                                          (* ;; "PC is the final piece of the chain")
 
-                                         (CL:UNLESS (EQ NEXTPC (FGETTOBJ TEXTOBJ LASTPIECE))
+                                         (CL:UNLESS (EQ NEXTPC (FGETTOBJ TEXTOBJ SUFFIXPIECE))
                                                 (FSETPC PC NEXTPIECE NEXTPC))
                                          (FSETPC NEXTPC PREVPIECE PC)
                                          (CL:WHEN PREVPC (FSETPC PREVPC NEXTPIECE PIECES))
@@ -827,7 +835,8 @@
     PIECES])
 
 (\TEDIT.DELETEPIECES
-  [LAMBDA (SELPIECES TEXTOBJ)                                (* ; "Edited 26-Nov-2024 10:50 by rmk")
+  [LAMBDA (SELPIECES TEXTOBJ)                                (* ; "Edited  7-Feb-2025 08:08 by rmk")
+                                                             (* ; "Edited 26-Nov-2024 10:50 by rmk")
                                                              (* ; "Edited 16-Mar-2024 10:00 by rmk")
                                                              (* ; "Edited 25-Nov-2023 12:12 by rmk")
                                                              (* ; "Edited  4-Nov-2023 23:03 by rmk")
@@ -840,7 +849,7 @@
 
     (* ;; "As the PC is deleted from the tree on each iteration, the original previous PREV piece is linked to PC's next, and the next PREVPIECE is linked to PREV so that the tree and the links are uninterruptably consistent.")
 
-    (* ;; "PREV is NIL if SPFIRST=\FIRSTPIECE; in that case the tree itself manages the connection.  If SPLAST is the final actual piece (its NEXTPIECE is NIL), then LASTPIECE's PREVPIECE will be updated.")
+    (* ;; "PREV is NIL if SPFIRST=\FIRSTPIECE; in that case the tree itself manages the connection.  If SPLAST is the final actual piece (its NEXTPIECE is NIL), then SUFFIXPIECE's PREVPIECE will be updated.")
 
     (* ;; " Since the pieces are not unlinked on the fly, the tree may be invalid until all the pieces are gone.")
 
@@ -851,7 +860,7 @@
                             (SETQ PREV (PREVPIECE (GETSPC SELPIECES SPFIRST))) 
                                                              (* ; "For incremental chain-update")
                             (SETQ NEXT (OR (NEXTPIECE (GETSPC SELPIECES SPLAST))
-                                           (FGETTOBJ TEXTOBJ LASTPIECE)))
+                                           (FGETTOBJ TEXTOBJ SUFFIXPIECE)))
                             (FSETTOBJ TEXTOBJ \DIRTY T) inselpieces SELPIECES
        do (UNINTERRUPTABLY
               (\TEDIT.UPDATEPCNODES PC (IMINUS (PLEN PC))
@@ -875,7 +884,8 @@
     (\TEDIT.BTVALIDATE '\TEDIT.DELETEPIECES 'AFTER TEXTOBJ])
 
 (\TEDIT.ALIGNEDPIECE
-  [LAMBDA (CHNO TEXTOBJ)                                     (* ; "Edited 17-Mar-2024 00:27 by rmk")
+  [LAMBDA (CHNO TEXTOBJ)                                     (* ; "Edited  7-Feb-2025 08:05 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 00:27 by rmk")
                                                              (* ; "Edited 31-Oct-2023 19:37 by rmk")
                                                              (* ; "Edited 29-May-2023 23:48 by rmk")
                                                              (* ; "Edited 20-May-2023 13:53 by rmk")
@@ -890,7 +900,7 @@
         then 
              (* ;; "Doesn't return NIL in this case, returns the last piece.")
 
-             (FGETTOBJ TEXTOBJ LASTPIECE)
+             (FGETTOBJ TEXTOBJ SUFFIXPIECE)
       elseif (ILEQ CHNO 1)
         then (\TEDIT.FIRSTPIECE TEXTOBJ)
       else (LET (PC START-OF-PIECE)
@@ -956,13 +966,14 @@
            T])
 
 (\TEDIT.CHECK-BTREE
-  [LAMBDA (TEXTOBJ EMBEDDED)                                 (* ; "Edited 17-Mar-2024 00:25 by rmk")
+  [LAMBDA (TEXTOBJ EMBEDDED)                                 (* ; "Edited  7-Feb-2025 08:07 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 00:25 by rmk")
                                                              (* ; "Edited 21-Oct-2023 17:33 by rmk")
                                                              (* ; "Edited  7-Sep-2022 09:43 by rmk")
                                                              (* ; "Edited  4-Sep-2022 16:37 by rmk")
     (SETQ TEXTOBJ (TEXTOBJ TEXTOBJ))
-    (for BT (LASTPIECE _ (FGETTOBJ TEXTOBJ LASTPIECE)) inside (FGETTOBJ TEXTOBJ PCTB)
-       declare (SPECVARS LASTPIECE) do (\TEDIT.CHECK-BTREE1 BT 0 NIL))
+    (for BT (SUFFIXPIECE _ (FGETTOBJ TEXTOBJ SUFFIXPIECE)) inside (FGETTOBJ TEXTOBJ PCTB)
+       declare (SPECVARS SUFFIXPIECE) do (\TEDIT.CHECK-BTREE1 BT 0 NIL))
     (for PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ)
        do (SELECTC (PTYPE PC)
               (FILE.PTYPES (CL:UNLESS (STREAMP (PCONTENTS PC))
@@ -989,7 +1000,8 @@
     'VALID])
 
 (\TEDIT.CHECK-BTREE1
-  [LAMBDA (NODE DEPTH PARENT)                                (* ; "Edited 31-Oct-2023 10:35 by rmk")
+  [LAMBDA (NODE DEPTH PARENT)                                (* ; "Edited  7-Feb-2025 08:31 by rmk")
+                                                             (* ; "Edited 31-Oct-2023 10:35 by rmk")
                                                              (* ; "Edited 30-May-2023 00:06 by rmk")
                                                              (* ; "Edited 27-May-2023 15:00 by rmk")
                                                              (* ; "Edited  1-Sep-2022 09:49 by rmk")
@@ -999,30 +1011,30 @@
     (* ;; 
   "Returns the TOTLEN/PLEN of NODE, after verifying that all of the nodes underneath are consistent.")
 
-    (DECLARE (USEDFREE DEPTHHIST COUNTHIST PLENHIST NNODES NPIECES TEXTOBJ LASTPIECE))
+    (DECLARE (USEDFREE DEPTHHIST COUNTHIST PLENHIST NNODES NPIECES TEXTOBJ SUFFIXPIECE))
     (ADD DEPTH 1)
     (if (type? PIECE NODE)
-        then [if (EQ NODE LASTPIECE)
-                 then (CL:WHEN (AND (PREVPIECE LASTPIECE)
-                                    (NEXTPIECE (PREVPIECE LASTPIECE)))
-                             (\TEDIT.BTFAIL "(NEXT (PPREV of LASTPIECE is not NULL" LASTPIECE))
+        then [if (EQ NODE SUFFIXPIECE)
+                 then (CL:WHEN (AND (PREVPIECE SUFFIXPIECE)
+                                    (NEXTPIECE (PREVPIECE SUFFIXPIECE)))
+                             (\TEDIT.BTFAIL "(NEXT (PPREV of SUFFIXPIECE is not NULL" SUFFIXPIECE))
                else (CL:UNLESS (IGEQ (PLEN NODE)
                                      0)
                            (\TEDIT.BTFAIL "Negative PLEN" NODE))
                     (CL:UNLESS (OR (NEXTPIECE NODE)
-                                   (EQ NODE (PREVPIECE LASTPIECE)))
-                           (\TEDIT.BTFAIL "PIECE with no NEXT is not PREV of LASTPIECE" NODE))
+                                   (EQ NODE (PREVPIECE SUFFIXPIECE)))
+                           (\TEDIT.BTFAIL "PIECE with no NEXT is not PREV of SUFFIXPIECE" NODE))
                     (CL:UNLESS (EQ PARENT (fetch (PIECE PTREENODE) of NODE))
                            (\TEDIT.BTFAIL "Piece with wrong PTREENODE" NODE))
                     (CL:WHEN (PREVPIECE NODE)
                         (CL:UNLESS (OR (EQ NODE (NEXTPIECE (PREVPIECE NODE)))
                                        (AND (NULL (NEXTPIECE (PREVPIECE NODE)))
-                                            (EQ NODE LASTPIECE)))
+                                            (EQ NODE SUFFIXPIECE)))
                                (\TEDIT.BTFAIL "PREVPIECE is not consistent" NODE)))
                     (CL:WHEN (OR (NEXTPIECE NODE)
-                                 LASTPIECE)
+                                 SUFFIXPIECE)
                         (CL:UNLESS (EQ NODE (PREVPIECE (OR (NEXTPIECE NODE)
-                                                           LASTPIECE)))
+                                                           SUFFIXPIECE)))
                                (\TEDIT.BTFAIL "NEXTPIECE is not consistent" NODE)))]
              (add NPIECES 1)
              (add [CDR (OR (SASSOC DEPTH DEPTHHIST)
@@ -1098,13 +1110,13 @@
 (GLOBALVARS BTVALIDATETAGS)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (8698 55567 (\TEDIT.MAKEPCTB 8708 . 10259) (\TEDIT.UPDATEPCNODES 10261 . 12555) (
-\TEDIT.FIRSTPIECE 12557 . 13853) (\TEDIT.DELETETREE 13855 . 17129) (\TEDIT.INSERTTREE 17131 . 19876) (
-\TEDIT.LASTPIECE 19878 . 20814) (\TEDIT.PCTOCH 20816 . 22913) (\TEDIT.CHTOPC 22915 . 28977) (
-\TEDIT.SET-TOTLEN 28979 . 29767) (\TEDIT.MAKE.VACANT.BTREESLOT 29769 . 36499) (\TEDIT.LINKNEWPIECE 
-36501 . 37994) (\TEDIT.UNLINKPIECE 37996 . 38724) (\TEDIT.SPLITPIECE 38726 . 43382) (
-\TEDIT.INSERTPIECE 43384 . 46537) (\TEDIT.INSERTPIECES 46539 . 49518) (\TEDIT.DELETEPIECES 49520 . 
-53561) (\TEDIT.ALIGNEDPIECE 53563 . 55565)) (55595 67672 (\TEDIT.BTVALIDATE 55605 . 57146) (
-\TEDIT.BTVALIDATE.PRINT 57148 . 58513) (\TEDIT.CHECK-BTREE 58515 . 60727) (\TEDIT.CHECK-BTREE1 60729
- . 66229) (\TEDIT.BTFAIL 66231 . 66653) (\TEDIT.MATCHPCS 66655 . 67670)))))
+  (FILEMAP (NIL (8685 56524 (\TEDIT.MAKEPCTB 8695 . 10475) (\TEDIT.UPDATEPCNODES 10477 . 12771) (
+\TEDIT.FIRSTPIECE 12773 . 14180) (\TEDIT.DELETETREE 14182 . 17456) (\TEDIT.INSERTTREE 17458 . 20203) (
+\TEDIT.LASTPIECE 20205 . 21012) (\TEDIT.PCTOCH 21014 . 23111) (\TEDIT.CHTOPC 23113 . 29290) (
+\TEDIT.SET-TOTLEN 29292 . 30080) (\TEDIT.MAKE.VACANT.BTREESLOT 30082 . 36812) (\TEDIT.LINKNEWPIECE 
+36814 . 38403) (\TEDIT.UNLINKPIECE 38405 . 39225) (\TEDIT.SPLITPIECE 39227 . 43883) (
+\TEDIT.INSERTPIECE 43885 . 47157) (\TEDIT.INSERTPIECES 47159 . 50251) (\TEDIT.DELETEPIECES 50253 . 
+54407) (\TEDIT.ALIGNEDPIECE 54409 . 56522)) (56552 68875 (\TEDIT.BTVALIDATE 56562 . 58103) (
+\TEDIT.BTVALIDATE.PRINT 58105 . 59470) (\TEDIT.CHECK-BTREE 59472 . 61799) (\TEDIT.CHECK-BTREE1 61801
+ . 67432) (\TEDIT.BTFAIL 67434 . 67856) (\TEDIT.MATCHPCS 67858 . 68873)))))
 STOP
diff --git a/library/tedit/TEDIT-PCTREE.LCOM b/library/tedit/TEDIT-PCTREE.LCOM
index 1eda0712..2d6910c0 100644
Binary files a/library/tedit/TEDIT-PCTREE.LCOM and b/library/tedit/TEDIT-PCTREE.LCOM differ
diff --git a/library/tedit/TEDIT-SCREEN b/library/tedit/TEDIT-SCREEN
index 69fa4bdb..ff0e6570 100644
--- a/library/tedit/TEDIT-SCREEN
+++ b/library/tedit/TEDIT-SCREEN
@@ -1,12 +1,15 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 1-Feb-2025 10:36:27" {WMEDLEY}<library>TEDIT>TEDIT-SCREEN.;850 186125 
+(FILECREATED "19-Feb-2025 13:38:09" {WMEDLEY}<library>tedit>TEDIT-SCREEN.;864 188987 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.UPDATE.LINES)
+      :CHANGES-TO (FNS \TEDIT.FORMATLINE \TEDIT.FORMATLINE.SETUP.PARA \TEDIT.FORMATLINE.HORIZONTAL 
+                       \TEDIT.FORMATLINE.VERTICAL \TEDIT.FORMATLINE.TABS \TEDIT.FORMATLINE.EMPTY 
+                       \TEDIT.DISPLAYLINE \TEDIT.DISPLAYLINE.TABS \TEDIT.LINE.BOTTOM 
+                       \TEDIT.LASTVALIDLINE)
 
-      :PREVIOUS-DATE "21-Jan-2025 16:05:23" {WMEDLEY}<library>TEDIT>TEDIT-SCREEN.;849)
+      :PREVIOUS-DATE "12-Feb-2025 19:34:33" {WMEDLEY}<library>tedit>TEDIT-SCREEN.;862)
 
 
 (PRETTYCOMPRINT TEDIT-SCREENCOMS)
@@ -53,9 +56,9 @@
         (GLOBALVARS TEDIT.LINELEADING.BELOW)
         (FNS \TLVALIDATE)
                                                              (* ; "Consistency checking")
-        (INITVARS *TEDIT-CACHED-FMTSPEC*)
+        (INITVARS *TEDIT-CACHED-PARALOOKS*)
                                                              (* ; "Heuristic for \FORMATLINE")
-        (GLOBALVARS *TEDIT-CACHED-FMTSPEC*)
+        (GLOBALVARS *TEDIT-CACHED-PARALOOKS*)
         (FNS \TEDIT.DISPLAYLINE \TEDIT.DISPLAYLINE.TABS \TEDIT.LINECACHE \TEDIT.CREATE.LINECACHE 
              \TEDIT.BLTCHAR \TEDIT.DIACRITIC.SHIFT)
         (DECLARE%: EVAL@COMPILE DONTCOPY 
@@ -136,8 +139,8 @@
            NIL                                               (* ; "Was CACHE: A cached THISLINE, for keeping hardcopy info around while we crunch with the line descriptors to make things fit.  Now:  THISLINE comes from TEXTOBJ")
            NIL                                               (* ; 
                       "Was LDOBJ: The object which lies behind this line of text, for updating, etc.")
-           LFMTSPEC                                          (* ; 
-                                             "The format spec for this line's paragraph (eventually)")
+           LPARALOOKS                                        (* ; 
+                                         "The paragraph looks for this line's paragraph (eventually)")
            (NIL FLAG)                                        (* ; 
                                 "Was LDIRTY: T if this line has changed since it was last formatted.")
            (NIL FLAG)                                        (* ; "Was FORCED-END flag")
@@ -687,6 +690,9 @@
 
 (\TEDIT.FORMATLINE
   [LAMBDA (TSTREAM CH#1 LINE REGION IMAGESTREAM FORMATTINGSTATE)
+                                                             (* ; "Edited 19-Feb-2025 13:36 by rmk")
+                                                             (* ; "Edited 10-Feb-2025 09:59 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:36 by rmk")
                                                              (* ; "Edited 24-Dec-2024 22:15 by rmk")
                                                              (* ; "Edited 23-Dec-2024 19:47 by rmk")
                                                              (* ; "Edited 13-Dec-2024 23:46 by rmk")
@@ -709,7 +715,7 @@
     (DECLARE (SPECVARS TSTREAM))
 
     (* ;; 
-    "Note that lines lie within paragraphs, and all pieces within a paragraph have the same FMTSPEC.")
+  "Note that lines lie within paragraphs, and all pieces within a paragraph have the same PARALOOKS.")
 
     (* ;; "The SPECVARS are accessed and reset under the subfunction\FORMATLINE.UPDATELOOKS,  IMAGESTREAM and FORMATTINGSTATE are passed only for hardcopy. ")
 
@@ -755,8 +761,8 @@
            (SPACELEFT 0)
            (TX 0)
            (BOXSTREAM IMAGESTREAM)
-           THISLINE LINETYPE WIDTH WMARGIN SCALE FMTSPEC RIGHTMARGIN HASKERN PC CHARSLOT PREVSP 1STLN
-           CHNOB FORCED-END CHNO LX1 TX TXB FONT CHARSLOTB TABPENDING PREVHYPH PREVDHYPH 
+           THISLINE LINETYPE WIDTH WMARGIN SCALE PARALOOKS RIGHTMARGIN HASKERN PC CHARSLOT PREVSP 
+           1STLN CHNOB FORCED-END CHNO LX1 TX TXB FONT CHARSLOTB TABPENDING PREVHYPH PREVDHYPH 
            START-OF-PIECE UNBREAKABLE OLDPIECE OLDPCCHARSLEFT OLDCARETLOOKS)
           (DECLARE (SPECVARS TEXTOBJ LINETYPE CHARSLOT CHNO OFFSET ASCENTC DESCENTC FONT 
                           START-OF-PIECE HASKERN UNBREAKABLE))
@@ -817,16 +823,16 @@
 
           (SETQ LINETYPE (if (NOT (DISPLAYSTREAMP IMAGESTREAM))
                              then 'TRUEHARDCOPY
-                           elseif (FGETPARA (PPARALOOKS PC)
+                           elseif (FGETPLOOKS (PPARALOOKS PC)
                                          FMTHARDCOPY)
                              then 'HARDCOPYDISPLAY
                            else 'TRUEDISPLAY))
           (SETQ IMAGESTREAM (\TEDIT.FORMATLINE.SETUP.PARA TEXTOBJ PC LINE IMAGESTREAM LINETYPE))
 
-     (* ;; "The unchanging paragraph look has now been established and scaled appropriately. It is returned in the LFMTSPEC, the IMAGESTREAM is unmodified.")
+     (* ;; "The unchanging paragraph look has now been established and scaled appropriately. It is returned in the LPARALOOKS, the IMAGESTREAM is unmodified.")
 
-          (SETQ FMTSPEC (FGETLD LINE LFMTSPEC))
-          (SETQ SCALE (FGETPARA FMTSPEC FMTHARDCOPYSCALE))
+          (SETQ PARALOOKS (FGETLD LINE LPARALOOKS))
+          (SETQ SCALE (FGETPLOOKS PARALOOKS FMTHARDCOPYSCALE))
           [if (REGIONP REGION)
               then (SETQ WMARGIN (ffetch (REGION LEFT) of REGION)) 
                                                              (* ; 
@@ -836,14 +842,14 @@
                                                          "A little more display margin on both sides")
                  (SETQ WIDTH (IDIFFERENCE (FGETTOBJ TEXTOBJ WRIGHT)
                                     (UNFOLD WMARGIN 2]
-          (SETQ RIGHTMARGIN (if (ZEROP (FGETPARA FMTSPEC RIGHTMAR))
+          (SETQ RIGHTMARGIN (if (ZEROP (FGETPLOOKS PARALOOKS RIGHTMAR))
                                 then 
                                      (* ;; "RIGHTMAR = 0 => follow the window/region's width")
 
                                      (CL:IF (EQ LINETYPE 'HARDCOPYDISPLAY)
                                          (ITIMES SCALE WIDTH)
                                          WIDTH)
-                              else (FGETPARA FMTSPEC RIGHTMAR)))
+                              else (FGETPLOOKS PARALOOKS RIGHTMAR)))
 
      (* ;; "Account for first-line indentation from the true left margin (LEFTMAR)")
 
@@ -854,8 +860,8 @@
                                (OR (NOT (\PREV.VISIBLE.PIECE PC))
                                    (PPARALAST (\PREV.VISIBLE.PIECE PC]
           (SETQ LX1 (CL:IF 1STLN
-                        (FGETPARA FMTSPEC 1STLEFTMAR)
-                        (FGETPARA FMTSPEC LEFTMAR)))
+                        (FGETPLOOKS PARALOOKS 1STLEFTMAR)
+                        (FGETPLOOKS PARALOOKS LEFTMAR)))
           (SETQ WIDTH (IDIFFERENCE RIGHTMARGIN LX1))
 
      (* ;; "")
@@ -881,7 +887,7 @@
           (bind CH DX BOX INSPACES FIRSTWHITESLOT PREVCH KERN (FIRSTWHITEX _ TX)
                 (INWORD _ T)
                 (LASTCHARSLOT _ (LASTCHARSLOT THISLINE))
-                (JUSTIFIED _ (EQ 'JUSTIFIED (FGETPARA FMTSPEC QUAD)))
+                (JUSTIFIED _ (EQ 'JUSTIFIED (FGETPLOOKS PARALOOKS QUAD)))
                 (TEXTLEN _ (TEXTLEN TEXTOBJ)) for old CHNO by 1 while (ILEQ CHNO TEXTLEN)
              while (SETQ CH (BIN TSTREAM))
              do 
@@ -986,8 +992,8 @@
                                                              (* ; 
                                                        "Start with 0 width, then set up the next tab")
                           (FILLCHARSLOT CHARSLOT CH 0)
-                          (SETQ TABPENDING (\TEDIT.FORMATLINE.TABS TEXTOBJ FMTSPEC SCALE CHARSLOT LX1
-                                                  TX TABPENDING))
+                          (SETQ TABPENDING (\TEDIT.FORMATLINE.TABS TEXTOBJ PARALOOKS SCALE CHARSLOT 
+                                                  LX1 TX TABPENDING))
                                                              (* ; 
                                                              "Proper width is already in CHARSLOT")
                           (SETQ DX (CL:IF (FIXP TABPENDING)
@@ -1084,8 +1090,8 @@
                                               DX)            (* ; 
                "Adjust the tab stop's X value so that the LEFT edge of the decimal point goes there.")
                                          (SETQ TABPENDING
-                                          (\TEDIT.FORMATLINE.TABS TEXTOBJ FMTSPEC SCALE CHARSLOT LX1
-                                                 TX TABPENDING T))
+                                          (\TEDIT.FORMATLINE.TABS TEXTOBJ PARALOOKS SCALE CHARSLOT 
+                                                 LX1 TX TABPENDING T))
                                                              (* ; 
                                                     "Tab over to the LEFT side of the decimal point.")
                                          (add TX (CL:IF (FIXP TABPENDING)
@@ -1161,8 +1167,8 @@
           (CL:WHEN TABPENDING
               (SETQ PREVSP (\TEDIT.FORMATLINE.PURGE.SPACES PREVSP))
                                                              (* ; "Don't justify spaces before tabs")
-              (add TX (\TEDIT.FORMATLINE.TABS TEXTOBJ FMTSPEC SCALE (fetch (PENDINGTAB PTCHARSLOT)
-                                                                       of TABPENDING)
+              (add TX (\TEDIT.FORMATLINE.TABS TEXTOBJ PARALOOKS SCALE (fetch (PENDINGTAB PTCHARSLOT)
+                                                                         of TABPENDING)
                              LX1
                              (IDIFFERENCE TX OVERHANG)
                              TABPENDING T)))
@@ -1184,19 +1190,19 @@
      (* ;; "For display, the value of LMARK (GREY) just causes the little grey box to show up in the left margin, but is not interpreted in any other way. The hardcopy code uses this field for other purposes.")
 
           (FSETLD LINE LMARK (CL:WHEN [AND 1STLN (NEQ LINETYPE 'TRUEHARDCOPY)
-                                           (OR (EQ (FGETPARA FMTSPEC FMTPARATYPE)
+                                           (OR (EQ (FGETPLOOKS PARALOOKS FMTPARATYPE)
                                                    'PAGEHEADING)
-                                               (FGETPARA FMTSPEC FMTNEWPAGEBEFORE)
-                                               (FGETPARA FMTSPEC FMTNEWPAGEAFTER)
-                                               [AND (FGETPARA FMTSPEC FMTSPECIALX)
-                                                    (NOT (ZEROP (FGETPARA FMTSPEC FMTSPECIALX]
-                                               (AND (FGETPARA FMTSPEC FMTSPECIALY)
-                                                    (NOT (ZEROP (FGETPARA FMTSPEC FMTSPECIALY]
+                                               (FGETPLOOKS PARALOOKS FMTNEWPAGEBEFORE)
+                                               (FGETPLOOKS PARALOOKS FMTNEWPAGEAFTER)
+                                               [AND (FGETPLOOKS PARALOOKS FMTSPECIALX)
+                                                    (NOT (ZEROP (FGETPLOOKS PARALOOKS FMTSPECIALX]
+                                               (AND (FGETPLOOKS PARALOOKS FMTSPECIALY)
+                                                    (NOT (ZEROP (FGETPLOOKS PARALOOKS FMTSPECIALY]
                                     'GREY))
           (FSETLD LINE FORCED-END FORCED-END)
           (FSETLD LINE LEFTMARGIN (CL:IF 1STLN
-                                      (FGETPARA FMTSPEC 1STLEFTMAR)
-                                      (FGETPARA FMTSPEC LEFTMAR)))
+                                      (FGETPLOOKS PARALOOKS 1STLEFTMAR)
+                                      (FGETPLOOKS PARALOOKS LEFTMAR)))
           (FSETLD LINE RIGHTMARGIN RIGHTMARGIN)
           (CL:UNLESS FONT
 
@@ -1216,7 +1222,7 @@
 
      (* ;; "")
 
-          (FSETLD LINE LFMTSPEC FMTSPEC)
+          (FSETLD LINE LPARALOOKS PARALOOKS)
           (CL:WHEN (EQ LINETYPE 'TRUEHARDCOPY)
 
               (* ;; "Used temporarily and cleared by \TEDIT.FORMATBOX; not an XPOINTER")
@@ -1229,12 +1235,12 @@
      (* ;; "Finally translate to the left edge, perhsps a specialx if true hardcopy.")
 
           (CL:WHEN [AND (EQ LINETYPE 'TRUEHARDCOPY)
-                        (FGETPARA FMTSPEC FMTSPECIALX)
-                        (NOT (ZEROP (FGETPARA FMTSPEC FMTSPECIALX]
+                        (FGETPLOOKS PARALOOKS FMTSPECIALX)
+                        (NOT (ZEROP (FGETPLOOKS PARALOOKS FMTSPECIALX]
 
               (* ;; "Maybe SETQ instead of add ??")
 
-              (add WMARGIN (FGETPARA FMTSPEC FMTSPECIALX)))
+              (add WMARGIN (FGETPLOOKS PARALOOKS FMTSPECIALX)))
           (add (FGETLD LINE LEFTMARGIN)
                WMARGIN)
           (add (FGETLD LINE RIGHTMARGIN)
@@ -1253,7 +1259,10 @@
           (RETURN LINE])
 
 (\TEDIT.FORMATLINE.SETUP.PARA
-  [LAMBDA (TEXTOBJ PC LINE IMAGESTREAM LINETYPE)             (* ; "Edited 22-Nov-2024 11:14 by rmk")
+  [LAMBDA (TEXTOBJ PC LINE IMAGESTREAM LINETYPE)             (* ; "Edited 19-Feb-2025 13:37 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:36 by rmk")
+                                                             (* ; "Edited  7-Feb-2025 08:09 by rmk")
+                                                             (* ; "Edited 22-Nov-2024 11:14 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited  4-Aug-2024 15:08 by rmk")
                                                              (* ; "Edited 28-Jul-2024 21:01 by rmk")
@@ -1264,57 +1273,59 @@
                                                              (* ; "Edited  6-Mar-2023 00:25 by rmk")
                                                              (* ; "Edited  2-Mar-2023 12:06 by rmk")
 
-    (* ;; "The paragraph looks of a line are the same for every piece of every line in a paragraph, only the character looks can change from piece to piece.  We retrieve the para looks from the starting piece, or the stream's default.   The possibly-modified FMTSPEC of PC is stored in LINE.")
+    (* ;; "The paragraph looks of a line are the same for every piece of every line in a paragraph, only the character looks can change from piece to piece.  We retrieve the para looks from the starting piece, or the stream's default.   The possibly-modified PARALOOKS of PC is stored in LINE.")
 
-    (* ;; "The global variable *TEDIT-CACHED-FMTSPEC* is a heuristic optimization to speed up construction of the FMTSPEC for successive lines in the same paragraph (or maybe even in a sequence of same-format paragraphs.")
+    (* ;; "The global variable *TEDIT-CACHED-PARALOOKS* is a heuristic optimization to speed up construction of the PARALOOKS for successive lines in the same paragraph (or maybe even in a sequence of same-format paragraphs.")
 
-    (* ;; "In hardcopy-display mode, the verticals (lineleading etc.) are in screen points, only the horizontals are upscaled according to the points-to-hardcopy scalefactor installed in the retrieved FMTSPEC.")
+    (* ;; "In hardcopy-display mode, the verticals (lineleading etc.) are in screen points, only the horizontals are upscaled according to the points-to-hardcopy scalefactor installed in the retrieved PARALOOKS.")
 
     (* ;; "See comments in TEDIT-LOOKSCOMS about the style-cache variables.  Probably not completely or correctly coordinated with this code.")
 
     (TEXTOBJ! TEXTOBJ)
-    (LET ([PLOOKS (PARALOOKS! (PPARALOOKS (OR PC (\PREV.VISIBLE.PIECE (FGETTOBJ TEXTOBJ LASTPIECE))
-                                              (FGETTOBJ TEXTOBJ LASTPIECE]
+    (LET ([PLOOKS (PARALOOKS! (PPARALOOKS (OR PC (\PREV.VISIBLE.PIECE (FGETTOBJ TEXTOBJ SUFFIXPIECE))
+                                              (FGETTOBJ TEXTOBJ SUFFIXPIECE]
           SCALE)
          (SETQ PLOOKS (\TEDIT.APPLY.PARASTYLES PLOOKS PC TEXTOBJ))
          (SELECTQ LINETYPE
              (TRUEHARDCOPY (SETQ PLOOKS (\TEDIT.HCPYFMTSPEC PLOOKS IMAGESTREAM)))
-             (TRUEDISPLAY (CL:UNLESS (FGETPARA PLOOKS FMTHARDCOPYSCALE)
-                                 (FSETPARA PLOOKS FMTHARDCOPYSCALE 1)))
+             (TRUEDISPLAY (CL:UNLESS (FGETPLOOKS PLOOKS FMTHARDCOPYSCALE)
+                                 (FSETPLOOKS PLOOKS FMTHARDCOPYSCALE 1)))
              (HARDCOPYDISPLAY 
-                              (* ;; "Coerce the image stream and FMTSPEC for HARDCOPYDISPLAY.")
+                              (* ;; "Coerce the image stream and PARALOOKS for HARDCOPYDISPLAY.")
 
                   [SETQ IMAGESTREAM (OR (FGETTOBJ TEXTOBJ DISPLAYHCPYDS)
                                         (FSETTOBJ TEXTOBJ DISPLAYHCPYDS (OPENIMAGESTREAM 
                                                                                '{NODIRCORE}
                                                                                'POSTSCRIPT]
                   (SETQ SCALE (DSPSCALE NIL IMAGESTREAM))
-                  [SETQ PLOOKS (create FMTSPEC using PLOOKS FMTHARDCOPYSCALE _ SCALE RIGHTMAR _
-                                                     (SCALEUP SCALE (FGETPARA PLOOKS RIGHTMAR))
-                                                     1STLEFTMAR _ (SCALEUP SCALE (FGETPARA PLOOKS 
-                                                                                        1STLEFTMAR))
-                                                     LEFTMAR _ (SCALEUP SCALE (FGETPARA PLOOKS 
-                                                                                     LEFTMAR))
-                                                     FMTTABS _ (\TEDIT.SCALE.TABS (FGETPARA PLOOKS 
-                                                                                         FMTTABS)
-                                                                      SCALE)
-                                                     FMTDEFAULTTAB _ (SCALEUP SCALE (FGETPARA PLOOKS
-                                                                                           
-                                                                                        FMTDEFAULTTAB
-                                                                                           ])
+                  [SETQ PLOOKS (create PARALOOKS using PLOOKS FMTHARDCOPYSCALE _ SCALE RIGHTMAR _
+                                                       (SCALEUP SCALE (FGETPLOOKS PLOOKS RIGHTMAR))
+                                                       1STLEFTMAR _ (SCALEUP SCALE (FGETPLOOKS PLOOKS
+                                                                                          1STLEFTMAR)
+                                                                           )
+                                                       LEFTMAR _ (SCALEUP SCALE (FGETPLOOKS PLOOKS 
+                                                                                       LEFTMAR))
+                                                       FMTTABS _ (\TEDIT.SCALE.TABS (FGETPLOOKS
+                                                                                     PLOOKS FMTTABS)
+                                                                        SCALE)
+                                                       FMTDEFAULTTAB _ (SCALEUP SCALE
+                                                                              (FGETPLOOKS PLOOKS 
+                                                                                     FMTDEFAULTTAB])
              (\TEDIT.THELP "BAD LINE TYPE" LINETYPE))
-         (CL:UNLESS (OR (EQ PLOOKS *TEDIT-CACHED-FMTSPEC*)
-                        (NOT (FGETPARA PLOOKS FMTCHARSTYLES)))
+         (CL:UNLESS (OR (EQ PLOOKS *TEDIT-CACHED-PARALOOKS*)
+                        (NOT (FGETPLOOKS PLOOKS FMTCHARSTYLES)))
 
              (* ;; "The cache of styles for the current paragraph is invalid; flush it, and note the new paragraph to cache for.")
 
              (SETQ *TEDIT-CURRENTPARA-CACHE* NIL)
-             (SETQ *TEDIT-CACHED-FMTSPEC* PLOOKS))
-         (SETLD LINE LFMTSPEC PLOOKS)
+             (SETQ *TEDIT-CACHED-PARALOOKS* PLOOKS))
+         (SETLD LINE LPARALOOKS PLOOKS)
          IMAGESTREAM])
 
 (\TEDIT.FORMATLINE.HORIZONTAL
-  [LAMBDA (LINE THISLINE PREVSP SPACELEFT OVERHANG LINETYPE) (* ; "Edited 15-Mar-2024 19:35 by rmk")
+  [LAMBDA (LINE THISLINE PREVSP SPACELEFT OVERHANG LINETYPE) (* ; "Edited 19-Feb-2025 13:35 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:37 by rmk")
+                                                             (* ; "Edited 15-Mar-2024 19:35 by rmk")
                                                              (* ; "Edited  3-Dec-2023 16:49 by rmk")
                                                              (* ; "Edited 29-Oct-2023 18:24 by rmk")
                                                              (* ; "Edited  2-Jul-2023 15:15 by rmk")
@@ -1337,13 +1348,13 @@
 
     (* ;; "Also for HARDCOPYDISPLAY the horizontal positions (margins and character widths) are in hardcopy units.  At the end we scale them back to screen points.  ")
 
-    (LET* ((FMTSPEC (FGETLD LINE LFMTSPEC))
-           (SCALE (ffetch (FMTSPEC FMTHARDCOPYSCALE) of FMTSPEC)))
+    (LET* ((PARALOOKS (FGETLD LINE LPARALOOKS))
+           (SCALE (FGETPLOOKS PARALOOKS FMTHARDCOPYSCALE)))
 
           (* ;; "Distribute SPACELEFT according to QUAD.   ")
 
           (freplace (THISLINE TLSPACEFACTOR) of THISLINE with 1)
-          (CL:WHEN (EQ 'JUSTIFIED (fetch (FMTSPEC QUAD) of FMTSPEC))
+          (CL:WHEN (EQ 'JUSTIFIED (GETPLOOKS PARALOOKS QUAD))
                  (\TEDIT.FORMATLINE.JUSTIFY LINE THISLINE PREVSP SPACELEFT LINETYPE))
           (\TEDIT.FORMATLINE.PURGE.SPACES PREVSP)
 
@@ -1370,7 +1381,7 @@
 
           (* ;; "")
 
-          (SELECTQ (ffetch (FMTSPEC QUAD) of FMTSPEC)
+          (SELECTQ (FGETPLOOKS PARALOOKS QUAD)
               (RIGHT                                         (* ; "Move over to the right margin")
                      (add (FGETLD LINE LX1 LINE)
                           SPACELEFT)
@@ -1384,7 +1395,9 @@
               NIL])
 
 (\TEDIT.FORMATLINE.VERTICAL
-  [LAMBDA (LINE TEXTOBJ)                                     (* ; "Edited 29-Oct-2024 11:07 by rmk")
+  [LAMBDA (LINE TEXTOBJ)                                     (* ; "Edited 19-Feb-2025 13:37 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:37 by rmk")
+                                                             (* ; "Edited 29-Oct-2024 11:07 by rmk")
                                                              (* ; "Edited 26-Oct-2024 10:26 by rmk")
                                                              (* ; "Edited 20-Mar-2024 07:26 by rmk")
                                                              (* ; "Edited 17-Dec-2023 00:43 by rmk")
@@ -1395,17 +1408,17 @@
 
     (* ;; "This calculates vertical sizes based on inherent line/paragraph parameters.It cannot deal with base-to-base positioning because that is context dependent, involving the position and descent of the previous line (\TEDIT.LINE.BOTTOM).")
 
-    (LET ((FMTSPEC (FGETLD LINE LFMTSPEC))
+    (LET ((PARALOOKS (FGETLD LINE LPARALOOKS))
           (ASCENT (FGETLD LINE LTRUEASCENT))
           (DESCENT (FGETLD LINE LTRUEDESCENT)))
          (CL:WHEN (FGETLD LINE 1STLN LINE)                   (* ; "Set pre-paragraph leading")
-             (add ASCENT (FGETPARA FMTSPEC LEADBEFORE)))
+             (add ASCENT (FGETPLOOKS PARALOOKS LEADBEFORE)))
          (CL:WHEN (FGETLD LINE LSTLN)                        (* ; "Set post-paragraph leading")
-             (add DESCENT (FGETPARA FMTSPEC LEADAFTER)))
+             (add DESCENT (FGETPLOOKS PARALOOKS LEADAFTER)))
 
          (* ;; "Documentation says that lineleading goes above the line, which automatically makes for reasonable selection marking.  It went below in the original implementation, selections were very odd for large line leadings.  Documentation also says that the lineleading is added to the paragraph leading, so we add it to the ascent even of the 1STLN.  I.e. it is not just between-the-lines spacing.")
 
-         (add ASCENT (FGETPARA FMTSPEC LINELEAD))
+         (add ASCENT (FGETPLOOKS PARALOOKS LINELEAD))
          (FSETLD LINE LASCENT ASCENT)
          (FSETLD LINE LDESCENT DESCENT)
          (FSETLD LINE LHEIGHT (IPLUS ASCENT DESCENT])
@@ -1487,7 +1500,9 @@
                                                                         NATURALWIDTHS))))])
 
 (\TEDIT.FORMATLINE.TABS
-  [LAMBDA (TEXTOBJ FMTSPEC SCALE CHARSLOT LX1 TX PRIORTAB CLEANINGUP)
+  [LAMBDA (TEXTOBJ PARALOOKS SCALE CHARSLOT LX1 TX PRIORTAB CLEANINGUP)
+                                                             (* ; "Edited 19-Feb-2025 13:37 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 20:18 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 27-Aug-2024 18:29 by rmk")
                                                              (* ; "Edited 28-Jul-2024 20:49 by rmk")
@@ -1520,8 +1535,8 @@
     (add TX LX1)                                             (* ; "Margin relative")
     (PROG (NEXTTAB NEXTTABTYPE NEXTTABX DFLTTABX GRAIN (PRIORTABWIDTH 0)
                  (THISTABWIDTH 0)
-                 (TABS (FGETPARA FMTSPEC FMTTABS))
-                 (DEFTAB (FGETPARA FMTSPEC FMTDEFAULTTAB)))
+                 (TABS (FGETPLOOKS PARALOOKS FMTTABS))
+                 (DEFTAB (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)))
           (CL:WHEN PRIORTAB
 
               (* ;; "If there is a prior tab to resolve, do that first--it affects the perceived current X value, which affects later tabs")
@@ -1639,7 +1654,10 @@
            finally (RETURN CS)))])
 
 (\TEDIT.FORMATLINE.EMPTY
-  [LAMBDA (TEXTOBJ CH#1 LINE)                                (* ; "Edited 22-Nov-2024 22:29 by rmk")
+  [LAMBDA (TEXTOBJ CH#1 LINE)                                (* ; "Edited 19-Feb-2025 13:37 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:37 by rmk")
+                                                             (* ; "Edited  7-Feb-2025 08:09 by rmk")
+                                                             (* ; "Edited 22-Nov-2024 22:29 by rmk")
                                                              (* ; "Edited 17-Nov-2024 16:00 by rmk")
                                                              (* ; "Edited  4-Aug-2024 14:51 by rmk")
                                                              (* ; "Edited 25-Jun-2024 14:51 by rmk")
@@ -1666,17 +1684,17 @@
          (\TEDIT.FORMATLINE.SETUP.PARA TEXTOBJ NIL LINE (WINDOWPROP (\TEDIT.PRIMARYPANE TEXTOBJ)
                                                                'DSP)
                 'TRUEDISPLAY)
-         (SETQ PLOOKS (FGETLD LINE LFMTSPEC))
+         (SETQ PLOOKS (FGETLD LINE LPARALOOKS))
 
          (* ;; "Get the current caret looks, so that LHEIGHT and \DISPLAYLINE work.    Font preferences:  the font of the previous piece, else the default (from the last piece).  Previous code preferred the current caret looks, but that might have nothing to do with the end-of-document.")
 
-         [SETQ CLOOKS (PCHARLOOKS (OR (\PREV.VISIBLE.PIECE (FGETTOBJ TEXTOBJ LASTPIECE))
-                                      (FGETTOBJ TEXTOBJ LASTPIECE]
+         [SETQ CLOOKS (PCHARLOOKS (OR (\PREV.VISIBLE.PIECE (FGETTOBJ TEXTOBJ SUFFIXPIECE))
+                                      (FGETTOBJ TEXTOBJ SUFFIXPIECE]
          (SETQ FONT (GETCLOOKS CLOOKS CLFONT))
          (SETQ TRUEASCENT (FONTPROP FONT 'ASCENT))
          (SETQ TRUEDESCENT (FONTPROP FONT 'DESCENT))
          (SETQ LM (IPLUS \TEDIT.LINEREGION.WIDTH (FGETTOBJ TEXTOBJ WLEFT)
-                         (FGETPARA PLOOKS 1STLEFTMAR)))
+                         (FGETPLOOKS PLOOKS 1STLEFTMAR)))
          (with LINEDESCRIPTOR LINE (SETQ LDUMMY T)
                (SETQ LCHAR1 CH#1)
                (SETQ LCHARLAST CH#1)
@@ -1687,12 +1705,12 @@
                (SETQ LXLIM LM)
                (SETQ FORCED-END (CHARCODE EOL))
                (SETQ LHASPROT NIL)
-               (SETQ LFMTSPEC PLOOKS)
+               (SETQ LPARALOOKS PLOOKS)
                (SETQ LEFTMARGIN LM)
-               (SETQ RIGHTMARGIN (CL:IF (ZEROP (FGETPARA PLOOKS RIGHTMAR))
+               (SETQ RIGHTMARGIN (CL:IF (ZEROP (FGETPLOOKS PLOOKS RIGHTMAR))
                                      (IDIFFERENCE (FGETTOBJ TEXTOBJ WRIGHT)
                                             \TEDIT.LINEREGION.WIDTH)
-                                     (FGETPARA PLOOKS RIGHTMAR)))
+                                     (FGETPLOOKS PLOOKS RIGHTMAR)))
                (SETQ LTRUEASCENT TRUEASCENT)
                (SETQ LTRUEDESCENT TRUEDESCENT)
                (SETQ LHEIGHT (IPLUS TRUEASCENT TRUEDESCENT)))
@@ -1919,7 +1937,7 @@
 (* ; "Consistency checking")
 
 
-(RPAQ? *TEDIT-CACHED-FMTSPEC* NIL)
+(RPAQ? *TEDIT-CACHED-PARALOOKS* NIL)
 
 
 
@@ -1927,12 +1945,14 @@
 
 (DECLARE%: DOEVAL@COMPILE DONTCOPY
 
-(GLOBALVARS *TEDIT-CACHED-FMTSPEC*)
+(GLOBALVARS *TEDIT-CACHED-PARALOOKS*)
 )
 (DEFINEQ
 
 (\TEDIT.DISPLAYLINE
-  [LAMBDA (TEXTOBJ LINE PANE)                                (* ; "Edited 13-Dec-2024 23:51 by rmk")
+  [LAMBDA (TEXTOBJ LINE PANE)                                (* ; "Edited 19-Feb-2025 13:35 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:37 by rmk")
+                                                             (* ; "Edited 13-Dec-2024 23:51 by rmk")
                                                              (* ; "Edited 11-Dec-2024 23:14 by rmk")
                                                              (* ; "Edited 31-Oct-2024 09:56 by rmk")
                                                              (* ; "Edited 26-Oct-2024 10:43 by rmk")
@@ -2103,10 +2123,10 @@
                 'INPUT
                 'REPLACE)                                    (* ; 
                           "Paint the cached image on the screen (this lessens flicker during update)")
-         (CL:WHEN (fetch (FMTSPEC FMTREVISED) of (FGETLD LINE LFMTSPEC))
-                                                             (* ; 
+         (CL:WHEN (GETPLOOKS (FGETLD LINE LPARALOOKS)
+                         FMTREVISED)                         (* ; 
                                                        "This paragraph has been revised, so mark it.")
-             (\TEDIT.MARK.REVISION TEXTOBJ (FGETLD LINE LFMTSPEC)
+             (\TEDIT.MARK.REVISION TEXTOBJ (FGETLD LINE LPARALOOKS)
                     WINDOWDS LINE))
          (SELECTQ (FGETLD LINE LMARK)
              (GREY                                           (* ; 
@@ -2121,6 +2141,8 @@
 
 (\TEDIT.DISPLAYLINE.TABS
   [LAMBDA (CW DS TX TERMSA LINE CLOOKS DISPLAYDATA DDPILOTBBT CLIPRIGHT TEXTOBJ)
+                                                             (* ; "Edited 19-Feb-2025 13:36 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:37 by rmk")
                                                              (* ; "Edited 10-Oct-2023 23:29 by rmk")
                                                              (* ; "Edited  4-Oct-2023 21:16 by rmk")
                                                              (* ; "Edited  3-Jul-2023 22:02 by rmk")
@@ -2128,20 +2150,20 @@
                                                              (* ; "Edited  1-Oct-2022 11:35 by rmk")
                                                              (* ; "Edited 24-Sep-2022 21:19 by rmk")
 
-    (* ;; "Fills in tab-space CW with dotted leaders.  LINE is only needed to get the FMTSPEC.  TEXTOBJ only needed to get the hardcopy-display stream. ")
+    (* ;; "Fills in tab-space CW with dotted leaders.  LINE is only needed to get the PARALOOKS.  TEXTOBJ only needed to get the hardcopy-display stream. ")
 
-    (bind TTX DOTWIDTH (FMTSPEC _ (GETLD LINE LFMTSPEC))
+    (bind TTX DOTWIDTH (PARALOOKS _ (GETLD LINE LPARALOOKS))
        first 
              (* ;; "The dots on successive lines may not align so well, in hardcopy display mode.  But that's not a mode that looks good anyway.  The TERMSA probably screws it anyway.")
 
-             [SETQ DOTWIDTH (CL:IF (fetch (FMTSPEC FMTHARDCOPY) of FMTSPEC)
-                                [HCUNSCALE (fetch (FMTSPEC FMTHARDCOPYSCALE) of FMTSPEC)
+             [SETQ DOTWIDTH (CL:IF (GETPLOOKS PARALOOKS FMTHARDCOPY)
+                                [HCUNSCALE (FGETPLOOKS PARALOOKS FMTHARDCOPYSCALE)
                                        (CHARWIDTH (CHARCODE %.)
-                                              (FONTCOPY (fetch CLFONT of CLOOKS)
+                                              (FONTCOPY (GETCLOOKS CLOOKS CLFONT)
                                                      'DEVICE
                                                      (FGETTOBJ TEXTOBJ DISPLAYHCPYDS]
                                 (CHARWIDTH (CHARCODE %.)
-                                       (fetch CLFONT of CLOOKS)))]
+                                       (GETCLOOKS CLOOKS CLFONT)))]
              [SETQ TTX (IPLUS TX DOTWIDTH (IDIFFERENCE DOTWIDTH (IREMAINDER TX DOTWIDTH]
        while (ILEQ TTX (IPLUS TX CW)) do (if TERMSA
                                              then            (* ; "Using special instrns from TERMSA")
@@ -2388,7 +2410,8 @@
               (\TEDIT.SHIFTLINES LASTVALID PANE TEXTOBJ BITMAPLINES UPPERBITMAPLINES)))])
 
 (\TEDIT.PANE.CREATELINES
-  [LAMBDA (TEXTOBJ PANE LCHARLAST YBOT)                      (* ; "Edited 29-Nov-2024 09:14 by rmk")
+  [LAMBDA (TEXTOBJ PANE LCHARLAST YBOT)                      (* ; "Edited  8-Feb-2025 23:52 by rmk")
+                                                             (* ; "Edited 29-Nov-2024 09:14 by rmk")
                                                              (* ; "Edited 20-Nov-2024 14:26 by rmk")
                                                              (* ; "Edited 17-Nov-2024 19:53 by rmk")
                                                              (* ; "Edited 10-Nov-2024 18:45 by rmk")
@@ -2428,7 +2451,7 @@
                  LDESCENT _ 0
                  LTRUEASCENT _ 0
                  LTRUEDESCENT _ 0
-                 LFMTSPEC _ TEDIT.DEFAULT.FMTSPEC
+                 LPARALOOKS _ TEDIT.DEFAULT.FMTSPEC
                  1STLN _ NIL
                  LSTLN _ NIL))
          (SETYBOT PREFIX (OR YBOT (PANEHEIGHT PANE)))
@@ -2658,7 +2681,8 @@
               (RETURN (CONS LASTVALIDLINE NEXTVALIDLINE)))])
 
 (\TEDIT.LASTVALIDLINE
-  [LAMBDA (FIRSTCHANGEDLINE FIRSTCHANGEDCHNO PANE TSTREAM)   (* ; "Edited 29-Nov-2024 09:14 by rmk")
+  [LAMBDA (FIRSTCHANGEDLINE FIRSTCHANGEDCHNO PANE TSTREAM)   (* ; "Edited 18-Feb-2025 12:45 by rmk")
+                                                             (* ; "Edited 29-Nov-2024 09:14 by rmk")
                                                              (* ; "Edited 20-Nov-2024 12:37 by rmk")
                                                              (* ; "Edited 18-Nov-2024 23:16 by rmk")
                                                              (* ; "Edited 17-Nov-2024 19:08 by rmk")
@@ -2710,8 +2734,8 @@
                                                                           (SUB1 FIRSTPANECHAR)
                                                                           (FGETLD FIRSTCHANGEDLINE 
                                                                                  YTOP)))
-                    suchthat (IGREATERP (FGETLD L YBOT)
-                                    PTOP])
+                    suchthat (IGEQ (FGETLD L YBOT)
+                                   PTOP])
 
 (\TEDIT.NEXTVALIDLINE
   [LAMBDA (LASTCHANGEDLINE TSTREAM)                          (* ; "Edited 21-Jan-2025 15:27 by rmk")
@@ -2787,7 +2811,9 @@
          NEWLINE])
 
 (\TEDIT.LINE.BOTTOM
-  [LAMBDA (PREVLINE LINE)                                    (* ; "Edited 17-Nov-2024 00:38 by rmk")
+  [LAMBDA (PREVLINE LINE)                                    (* ; "Edited 19-Feb-2025 13:36 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:38 by rmk")
+                                                             (* ; "Edited 17-Nov-2024 00:38 by rmk")
                                                              (* ; "Edited  7-Nov-2024 16:57 by rmk")
                                                              (* ; "Edited 26-Oct-2024 15:45 by rmk")
                                                              (* ; "Edited 16-Jun-2024 23:43 by rmk")
@@ -2803,8 +2829,8 @@
     (LINEDESCRIPTOR! PREVLINE)
     (LINEDESCRIPTOR! LINE)
     (LET* ((PREVYBOT (FGETLD PREVLINE YBOT))
-           (FMTSPEC (FGETLD LINE LFMTSPEC))
-           (BASETOBASE (GETPARA FMTSPEC FMTBASETOBASE))
+           (PARALOOKS (FGETLD LINE LPARALOOKS))
+           (BASETOBASE (GETPLOOKS PARALOOKS FMTBASETOBASE))
            NEWYBOT)
           [SETQ NEWYBOT (if (NOT BASETOBASE)
                             then 
@@ -2816,9 +2842,9 @@
                             then 
                                  (* ;; "This is the first line of a new paragraph, and the previous line must therefore have been a last.  Both paragraph leadings apply in the gap, but the line leading is irrelevant.")
 
-                                 (IDIFFERENCE PREVYBOT (IPLUS (GETPARA (FGETLD PREVLINE LFMTSPEC)
+                                 (IDIFFERENCE PREVYBOT (IPLUS (GETPLOOKS (FGETLD PREVLINE LPARALOOKS)
                                                                      LEADAFTER)
-                                                              (GETPARA FMTSPEC LEADBEFORE)
+                                                              (GETPLOOKS PARALOOKS LEADBEFORE)
                                                               (FGETLD LINE LTRUEHEIGHT)))
                           else 
                                (* ;; "Between lines inside a paragraph, make the baselines BASETOBASE apart.  Oldcode subtracted paragraph leading")
@@ -2859,21 +2885,21 @@
                  (\TEDIT.LINE.TALLP LINE PHEIGHT))))])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (27981 30197 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 27991 . 30195)) (37602 118362 (
-\TEDIT.FORMATLINE 37612 . 72352) (\TEDIT.FORMATLINE.SETUP.PARA 72354 . 77177) (
-\TEDIT.FORMATLINE.HORIZONTAL 77179 . 81575) (\TEDIT.FORMATLINE.VERTICAL 81577 . 83794) (
-\TEDIT.FORMATLINE.JUSTIFY 83796 . 89817) (\TEDIT.FORMATLINE.TABS 89819 . 97619) (\TEDIT.SCALE.TABS 
-97621 . 98412) (\TEDIT.FORMATLINE.PURGE.SPACES 98414 . 99841) (\TEDIT.FORMATLINE.FLUSH.SOFTHYPHEN 
-99843 . 100744) (\TEDIT.FORMATLINE.EMPTY 100746 . 105432) (\TEDIT.FORMATLINE.UPDATELOOKS 105434 . 
-111556) (\TEDIT.FORMATLINE.LASTLEGAL 111558 . 115098) (\TEDIT.LINES.ABOVE 115100 . 118360)) (118479 
-120394 (\TLVALIDATE 118489 . 120392)) (120588 141752 (\TEDIT.DISPLAYLINE 120598 . 134045) (
-\TEDIT.DISPLAYLINE.TABS 134047 . 136670) (\TEDIT.LINECACHE 136672 . 137400) (\TEDIT.CREATE.LINECACHE 
-137402 . 138238) (\TEDIT.BLTCHAR 138240 . 140867) (\TEDIT.DIACRITIC.SHIFT 140869 . 141750)) (142367 
-186102 (\TEDIT.BACKFORMAT 142377 . 144931) (\TEDIT.PREVIOUS.LINEBREAK 144933 . 147656) (
-\TEDIT.UPDATE.LINES 147658 . 152528) (\TEDIT.PANE.CREATELINES 152530 . 155522) (
-\TEDIT.SUFFIXLINE.CREATE 155524 . 156899) (\TEDIT.LINES.BELOW 156901 . 161362) (\TEDIT.MEASURED.LINES 
-161364 . 163264) (\TEDIT.VALID.LINES 163266 . 171527) (\TEDIT.LASTVALIDLINE 171529 . 176351) (
-\TEDIT.NEXTVALIDLINE 176353 . 177783) (\TEDIT.CLEARPANE.BELOW.LINE 177785 . 179891) (\TEDIT.INSERTLINE
- 179893 . 181279) (\TEDIT.LINE.BOTTOM 181281 . 184277) (\TEDIT.SHOW.AT.BOTTOMP 184279 . 185389) (
-\TEDIT.SHOW.AT.TOPP 185391 . 186100)))))
+  (FILEMAP (NIL (28270 30486 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 28280 . 30484)) (37891 120398 (
+\TEDIT.FORMATLINE 37901 . 73065) (\TEDIT.FORMATLINE.SETUP.PARA 73067 . 78233) (
+\TEDIT.FORMATLINE.HORIZONTAL 78235 . 82808) (\TEDIT.FORMATLINE.VERTICAL 82810 . 85261) (
+\TEDIT.FORMATLINE.JUSTIFY 85263 . 91284) (\TEDIT.FORMATLINE.TABS 91286 . 99314) (\TEDIT.SCALE.TABS 
+99316 . 100107) (\TEDIT.FORMATLINE.PURGE.SPACES 100109 . 101536) (\TEDIT.FORMATLINE.FLUSH.SOFTHYPHEN 
+101538 . 102439) (\TEDIT.FORMATLINE.EMPTY 102441 . 107468) (\TEDIT.FORMATLINE.UPDATELOOKS 107470 . 
+113592) (\TEDIT.FORMATLINE.LASTLEGAL 113594 . 117134) (\TEDIT.LINES.ABOVE 117136 . 120396)) (120515 
+122430 (\TLVALIDATE 120525 . 122428)) (122628 144166 (\TEDIT.DISPLAYLINE 122638 . 136278) (
+\TEDIT.DISPLAYLINE.TABS 136280 . 139084) (\TEDIT.LINECACHE 139086 . 139814) (\TEDIT.CREATE.LINECACHE 
+139816 . 140652) (\TEDIT.BLTCHAR 140654 . 143281) (\TEDIT.DIACRITIC.SHIFT 143283 . 144164)) (144781 
+188964 (\TEDIT.BACKFORMAT 144791 . 147345) (\TEDIT.PREVIOUS.LINEBREAK 147347 . 150070) (
+\TEDIT.UPDATE.LINES 150072 . 154942) (\TEDIT.PANE.CREATELINES 154944 . 158047) (
+\TEDIT.SUFFIXLINE.CREATE 158049 . 159424) (\TEDIT.LINES.BELOW 159426 . 163887) (\TEDIT.MEASURED.LINES 
+163889 . 165789) (\TEDIT.VALID.LINES 165791 . 174052) (\TEDIT.LASTVALIDLINE 174054 . 178979) (
+\TEDIT.NEXTVALIDLINE 178981 . 180411) (\TEDIT.CLEARPANE.BELOW.LINE 180413 . 182519) (\TEDIT.INSERTLINE
+ 182521 . 183907) (\TEDIT.LINE.BOTTOM 183909 . 187139) (\TEDIT.SHOW.AT.BOTTOMP 187141 . 188251) (
+\TEDIT.SHOW.AT.TOPP 188253 . 188962)))))
 STOP
diff --git a/library/tedit/TEDIT-SCREEN.LCOM b/library/tedit/TEDIT-SCREEN.LCOM
index 2f89220d..8d58536e 100644
Binary files a/library/tedit/TEDIT-SCREEN.LCOM and b/library/tedit/TEDIT-SCREEN.LCOM differ
diff --git a/library/tedit/TEDIT-SELECTION b/library/tedit/TEDIT-SELECTION
index ec0502a9..ecdeb2ac 100644
--- a/library/tedit/TEDIT-SELECTION
+++ b/library/tedit/TEDIT-SELECTION
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 3-Feb-2025 09:32:02" {WMEDLEY}<library>TEDIT>TEDIT-SELECTION.;645 150146 
+(FILECREATED "18-Feb-2025 22:06:22" {WMEDLEY}<library>tedit>TEDIT-SELECTION.;656 152308 
 
       :EDIT-BY rmk
 
       :CHANGES-TO (FNS \TEDIT.SCAN.LINE)
 
-      :PREVIOUS-DATE "31-Jan-2025 12:45:17" {WMEDLEY}<library>TEDIT>TEDIT-SELECTION.;644)
+      :PREVIOUS-DATE "17-Feb-2025 12:26:54" {WMEDLEY}<library>tedit>TEDIT-SELECTION.;655)
 
 
 (PRETTYCOMPRINT TEDIT-SELECTIONCOMS)
@@ -569,16 +569,13 @@
              (\TEDIT.FIXSEL CURSEL TEXTOBJ)))])
 
 (\TEDIT.SCAN.LINE
-  [LAMBDA (LINE X Y NEWSEL SELOPERATION PANE BUTTON WORDSELFLG)
+  [LAMBDA (LINE X NEWSEL SELOPERATION TEXTOBJ BUTTON WORDSELFLG)
+                                                             (* ; "Edited 18-Feb-2025 22:04 by rmk")
+                                                             (* ; "Edited 14-Feb-2025 09:47 by rmk")
                                                              (* ; "Edited  3-Feb-2025 09:31 by rmk")
                                                              (* ; "Edited  6-Dec-2024 11:06 by rmk")
-                                                             (* ; "Edited  4-Dec-2024 12:06 by rmk")
                                                              (* ; "Edited 30-Nov-2024 09:52 by rmk")
-                                                             (* ; "Edited 28-Nov-2024 11:54 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:07 by rmk")
-                                                             (* ; "Edited 18-Oct-2024 22:42 by rmk")
-                                                             (* ; "Edited 17-Oct-2024 21:47 by rmk")
-                                                             (* ; "Edited  3-Oct-2024 23:31 by rmk")
                                                              (* ; "Edited  6-Sep-2024 00:07 by rmk")
                                                              (* ; "Edited  1-Aug-2024 17:13 by rmk")
                                                              (* ; "Edited 20-Jun-2024 11:36 by rmk")
@@ -589,26 +586,24 @@
                                                              (* ; "Edited  9-Apr-2023 18:21 by rmk")
                                                              (* ; "Edited 31-May-91 12:26 by jds")
 
-    (* ;; "Given that LINE meets the mouse-Y criterion, find the selection picked out by the mouse X  coordinate.  This may run to the right if the mouse-position is protected. This also expands to word selection in the current line, avoiding protected characters.")
+    (* ;; "Find the selection in LINE picked out by the mouse X  coordinate.  This may run to the right if the mouse-position is protected. This also expands to word selection in the current line, avoiding protected characters.")
 
     (* ;; "")
 
     (* ;; "Earlier versions had more complexity because it not ony figured out the character pointed at but also %"fixed%" the selection on the fly to avoid the more generic \TEDIT.FIXLINE.The generic fixline would scan through the lines of a tall window to find the line containing the selected CH#, and then apply \TEDIT.CHTOX to scan its (presumably cached) THISLINE to set up the X0 and XLIM. But not a noticeable delay for user interaction--not worth the complexity.")
 
-    (* ;; "The button pressed on an image object is decoded from the EXTENDFLG and WORDFLG.")
-
+    (LINEDESCRIPTOR! LINE)
+    (TEXTOBJ! TEXTOBJ)
     (SELECTION! NEWSEL)
     (FSETSEL NEWSEL SET NIL)
-    (PROG ((TSTREAM (PANESTREAM PANE))
-           (TEXTOBJ (PANETOBJ PANE))
-           CHARSLOT CLOOKS CHNO X0 XLIM SELCHAR PASTRIGHT THISLINE MOVED)
+    (PROG (CHARSLOT CLOOKS CHNO X0 XLIM SELCHAR PASTRIGHT THISLINE MOVED)
           (SETQ THISLINE (FGETTOBJ TEXTOBJ THISLINE))
           (CL:UNLESS (EQ LINE (fetch DESC of THISLINE))      (* ; 
                                                             "Make sure the cache describes this line")
-              (SETQ LINE (\TEDIT.FORMATLINE TSTREAM (GETLD LINE LCHAR1)
+              (SETQ LINE (\TEDIT.FORMATLINE TEXTOBJ (FGETLD LINE LCHAR1)
                                 LINE)))                      (* ; 
                                                           "Convert X's display units to LINE's scale")
-          (SETQ XLIM (GETLD LINE LX1))                       (* ; 
+          (SETQ XLIM (FGETLD LINE LX1))                      (* ; 
                                                  "Pretend the %"last%" character ended at the margin")
           (SETQ X (IMAX X XLIM))
           (SETQ CHNO (FGETLD LINE LCHAR1))
@@ -618,11 +613,11 @@
      (* ;; "Step 1:  Find the slot, character number, and ending TX for the character at the incoming mouse X position. ")
 
           (CL:WHEN (SETQ PASTRIGHT (IGREATERP X (FGETLD LINE LXLIM)))
-                                                             (* ; 
-                                "If not more than 20 past the end, put it inside the last character.")
-              (CL:WHEN (IGREATERP (IDIFFERENCE X (FGETLD LINE LXLIM))
-                              30)
-                     (RETURN NIL))
+                                                             (* (* ; 
+                                "If not more than 30 past the end, put it inside the last character.")
+                                                             (CL:WHEN (IGREATERP (IDIFFERENCE X
+                                                             (FGETLD LINE LXLIM)) 30)
+                                                             (RETURN NIL)))
               (SETQ X (SUB1 (FGETLD LINE LXLIM))))
           [SETQ CHARSLOT (for CS incharslots THISLINE
                             do (if CHAR
@@ -709,7 +704,8 @@
                  (FSETSEL NEWSEL HASCARET (EQ SELOPERATION 'NORMAL]
           (FSETSEL NEWSEL CHLIM (IPLUS (FGETSEL NEWSEL CH#)
                                        (FGETSEL NEWSEL DCH)))
-          (FSETSEL NEWSEL POINT (if (FGETLD LINE FORCED-END)
+          (FSETSEL NEWSEL POINT (if (EQ (CHARCODE EOL)
+                                        (CHAR CHARSLOT))
                                     then 
                                          (* ;; 
                                         "Always go to the left of an EOL, so caret stays on its line")
@@ -838,6 +834,7 @@
 
 (\TEDIT.XYTOSEL
   [LAMBDA (X Y NEWSEL TEXTOBJ SELOPERATION PANE BUTTON CURSEL REGIONTYPE)
+                                                             (* ; "Edited 13-Feb-2025 11:03 by rmk")
                                                              (* ; "Edited 17-Dec-2024 10:10 by rmk")
                                                              (* ; "Edited  6-Dec-2024 12:00 by rmk")
                                                              (* ; "Edited 30-Nov-2024 14:15 by rmk")
@@ -874,7 +871,7 @@
               "Y is below the last line of the text: force selection past the very end of that line.")
 
                        (SETQ X (ADD1 (GETLD LINE LXLIM))))
-                   (CL:WHEN (AND (\TEDIT.SCAN.LINE LINE X Y NEWSEL SELOPERATION PANE BUTTON
+                   (CL:WHEN (AND (\TEDIT.SCAN.LINE LINE X NEWSEL SELOPERATION TEXTOBJ BUTTON
                                         (SELECTQ BUTTON
                                             (RIGHT (MEMB (FGETSEL CURSEL SELKIND)
                                                          '(WORD PARA)))
@@ -1462,37 +1459,81 @@
     (for L in (GETSEL SEL LN) as P inpanes (PROGN TEXTOBJ) when (EQ P PANE) do (RETURN L])
 
 (\TEDIT.SEL.DELETEDCHARS
-  [LAMBDA (SELTOFIX FIRSTCHAR LEN)                           (* ; "Edited 26-Nov-2024 22:31 by rmk")
+  [LAMBDA (SELTOFIX FIRSTCHAR LEN)                           (* ; "Edited  6-Feb-2025 15:53 by rmk")
+                                                             (* ; "Edited  4-Feb-2025 23:05 by rmk")
+                                                             (* ; "Edited 26-Nov-2024 22:31 by rmk")
                                                              (* ; "Edited  7-Jul-2024 12:09 by rmk")
                                                              (* ; "Edited 20-Feb-2024 17:31 by rmk")
                                                              (* ; "Edited 15-Feb-2024 23:39 by rmk")
                                                              (* ; "Edited 14-Feb-2024 20:59 by rmk")
 
-    (* ;; "Adjust SELTOFIX to reflect character number translations after LEN characters starting at FIRSTCHAR have been removed.")
+    (* ;; "Adjust SELTOFIX to reflect character number translations after LEN characters starting at FIRSTCHAR have been or will be removed.")
 
     (CL:WHEN (type? SELECTION FIRSTCHAR)
         (SETQ LEN (FGETSEL FIRSTCHAR DCH))
         (SETQ FIRSTCHAR (FGETSEL FIRSTCHAR CH#)))
-    (CL:WHEN (IGEQ (FGETSEL SELTOFIX CHLIM)
-                   FIRSTCHAR)
+    (LET ((LASTCHAR (IPLUS FIRSTCHAR LEN -1))
+          (B (FGETSEL SELTOFIX CH#))
+          (E (FGETSEL SELTOFIX CHLAST))
+          (DCH (FGETSEL SELTOFIX DCH)))
 
-        (* ;; "Nothing to do if the deletion happened after the selection.")
+         (* ;; "No overlap")
 
-        [LET ((LASTCHAR (IPLUS FIRSTCHAR LEN -1)))
-             (if (ILESSP LASTCHAR (FGETSEL SELTOFIX CH#))
-                 then 
-                      (* ;; 
-                      "All deleted characters are in front of SELTOFIX, just move SELTOFIX forward")
+         (* ;; "   1                 FddL    F gt E")
 
-                      (add (FGETSEL SELTOFIX CH#)
-                           (IMINUS LEN))
-                      (add (FGETSEL SELTOFIX CHLIM)
-                           (IMINUS LEN))
-               else 
-                    (* ;; " SELTOFIX starts after the last pre-deletion character and is shortened so that it only covers its still-remaining characters. Because of IMAX, this reduces to a point selection if all of SELTOFIX's characters (and more) have been deleted.")
+         (* ;; "          B23E                       nothing")
 
-                    (\TEDIT.UPDATE.SEL SELTOFIX FIRSTCHAR (IMAX 0 (IDIFFERENCE LASTCHAR
-                                                                         (FGETSEL SELTOFIX CHLAST])])
+         (* ;; "   2    FddL                 L lt B")
+
+         (* ;; "                     B123E           B=B - LEN   ")
+
+         (* ;; "Overlaps:  NEWB=(MIN F B)  = X+1  NEWDCH = (IMAX 0, E-L)")
+
+         (* ;; "   3   XFddL                   F leq B     L lt E")
+
+         (* ;; "         X  [B23]45E                    45E at F  DCH=E-L   X45E")
+
+         (* ;; "          X45E          E-L")
+
+         (* ;; "   4   XFdddddddL        F leq B         L geq E")
+
+         (* ;; "         X[   B234E] ")
+
+         (* ;; 
+      "         X                               point selection at F DCH=0    E-L lt 0   DCH-LEN < 0")
+
+         (* ;; "   5     X      FddL              F geq B   L lt E")
+
+         (* ;; "          XB2[3456]7E                ")
+
+         (* ;; "          XB27E                    B27E at B  DCH = DCH - LEN   ")
+
+         (* ;; "   6      X       FddL           F geq B    L geq  E")
+
+         (* ;; "            XB2[3E ")
+
+         (* ;; "            XB2                       B2 at B                      ")
+
+         (if (IGREATERP FIRSTCHAR E)
+             then                                            (* ; "Case 1: Nothing")
+                  NIL
+           elseif (ILESSP LASTCHAR B)
+             then                                            (* ; "Case 2: move back")
+                  (add (FGETSEL SELTOFIX CH#)
+                       (IMINUS LEN))
+                  (add (FGETSEL SELTOFIX CHLIM)
+                       (IMINUS LEN))
+           else                                              (* ; "Overlaps")
+                (\TEDIT.UPDATE.SEL SELTOFIX (IMIN B FIRSTCHAR)
+                       [if (ILEQ FIRSTCHAR B)
+                           then                              (* ; "Cases 3 4")
+                                (IMAX 0 (IDIFFERENCE E LASTCHAR))
+                         elseif (ILEQ LASTCHAR E)
+                           then                              (* ; "Case 5")
+                                (IDIFFERENCE DCH LEN)
+                         else                                (* ; "Case 6")
+                              (IDIFFERENCE DCH (ADD1 (IDIFFERENCE E FIRSTCHAR]
+                       'LEFT])
 )
 (DEFINEQ
 
@@ -1938,7 +1979,8 @@
     SELPIECES])
 
 (\TEDIT.SELPIECES.FROM.STRING
-  [LAMBDA (STRING TEXTOBJ CHECKFOREOL CHARLOOKS PARALOOKS)   (* ; "Edited 20-Mar-2024 10:57 by rmk")
+  [LAMBDA (STRING TEXTOBJ CHECKFOREOL CHARLOOKS PARALOOKS)   (* ; "Edited  8-Feb-2025 20:14 by rmk")
+                                                             (* ; "Edited 20-Mar-2024 10:57 by rmk")
                                                              (* ; "Edited  3-Mar-2024 13:00 by rmk")
                                                              (* ; "Edited 28-Jan-2024 08:28 by rmk")
                                                              (* ; "Edited 11-Dec-2023 08:12 by rmk")
@@ -1953,7 +1995,7 @@
     (CL:UNLESS CHARLOOKS
         (SETQ CHARLOOKS (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS)))
     (CL:UNLESS PARALOOKS
-        (SETQ PARALOOKS (FGETTOBJ TEXTOBJ FMTSPEC)))
+        (SETQ PARALOOKS (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS)))
     (CL:WHEN (AND TEXTOBJ (FGETTOBJ TEXTOBJ FORMATTEDP))
            (SETQ CHECKFOREOL T))
     (LET (FIRSTPIECE EOLPOS (BYTESPERCHAR 1)
@@ -2097,7 +2139,8 @@
                 (FGETSEL SCRSEL CH#])
 
 (TEDIT.SELPROP
-  [LAMBDA X                                                  (* ; "Edited 31-Oct-2024 18:00 by rmk")
+  [LAMBDA X                                                  (* ; "Edited  6-Feb-2025 16:48 by rmk")
+                                                             (* ; "Edited 31-Oct-2024 18:00 by rmk")
                                                              (* ; "Edited 23-Sep-2024 23:11 by rmk")
                                                              (* ; "Edited 22-Sep-2024 11:20 by rmk")
                                                              (* ; "Edited 19-Aug-2024 13:55 by rmk")
@@ -2130,7 +2173,7 @@
                          (FGETSEL SEL SELKIND))
                     (CHLAST (if (EQ 0 (FGETSEL SEL DCH))
                                 then (FGETSEL SEL CH#)
-                              else (SUB1 (FGETSEL SEL CHLIM))))
+                              else (FGETSEL SEL CHLAST)))
                     (POINTCH# (TEDIT.GETPOINT (FGETSEL SEL SELTEXTSTREAM)
                                      SEL))
                     (SELOBJ (FGETSEL SEL SELOBJ))
@@ -2252,6 +2295,7 @@
 
 (TEDIT.SETSEL
   [LAMBDA (TSTREAM CH# LEN POINT PENDINGDELFLG LEAVECARETLOOKS OPERATION)
+                                                             (* ; "Edited 17-Feb-2025 12:26 by rmk")
                                                              (* ; "Edited 31-Jan-2025 12:43 by rmk")
                                                              (* ; "Edited 19-Jan-2025 08:32 by rmk")
                                                              (* ; "Edited  8-Jan-2025 00:20 by rmk")
@@ -2312,6 +2356,7 @@
               (SETTOBJ TEXTOBJ CARETLOOKS (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ SEL)))
           (\TEDIT.FIXSEL SEL TEXTOBJ)
           (\TEDIT.SHOWSEL SEL T TEXTOBJ)
+          (FSETTOBJ TEXTOBJ LASTARROWX NIL)
           (TEDIT.GETSEL TSTREAM])
 
 (TEDIT.SHOWSEL
@@ -2335,7 +2380,8 @@
              (\TEDIT.SHOWSEL SEL ONFLG TEXTOBJ))])
 
 (TEDIT.SEL.AS.STRING
-  [LAMBDA (TSTREAM SEL CODEFOROBJECT)                        (* ; "Edited 14-Jul-2024 00:12 by rmk")
+  [LAMBDA (TSTREAM SEL/CH# LEN CODEFOROBJECT)                (* ; "Edited 15-Feb-2025 12:47 by rmk")
+                                                             (* ; "Edited 14-Jul-2024 00:12 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:05 by rmk")
                                                              (* ; "Edited 27-Jan-2024 22:57 by rmk")
                                                              (* ; "Edited 23-May-2023 12:36 by rmk")
@@ -2348,27 +2394,30 @@
     "Given a text stream, go to the TEXTOBJ, get the current selection, and return it as a string.")
 
     (SETQ TSTREAM (TEXTSTREAM TSTREAM))
-    (CL:UNLESS SEL
-        (SETQ SEL (GETTOBJ (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM)
-                         SEL)))
-    (LET (RESULT (LEN (GETSEL SEL DCH)))
-         (COND
-            ((ZEROP LEN)                                     (* ; 
+    (CL:UNLESS SEL/CH#
+        (SETQ SEL/CH# (GETTOBJ (GETTSTR TSTREAM TEXTOBJ)
+                             SEL)))
+    (LET (RESULT CH#)
+         (if (type? SELECTION SEL/CH#)
+             then (SETQ LEN (GETSEL SEL/CH# DCH))
+                  (SETQ CH# (GETSEL SEL/CH# CH#))
+           else (SETQ CH# SEL/CH#))
+         (if (ZEROP LEN)
+             then                                            (* ; 
                                               "There is no selection, or it's zero-width.  Return ''")
-             (CONCAT ""))
-            (T (SETQ RESULT (ALLOCSTRING LEN (CHARCODE SPACE)))
+                  (CONCAT "")
+           else (SETQ RESULT (ALLOCSTRING LEN (CHARCODE SPACE))) 
                                                              (* ; "The resulting string")
-               (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 (GETSEL SEL CH#)))
-                                                             (* ; 
+                (\TEDIT.TEXTSETFILEPTR TSTREAM (SUB1 CH#))   (* ; 
                                                "Starting point for the string is start of selection.")
-               (for I C from 1 to LEN do (SETQ C (BIN TSTREAM))
-                                         (CL:WHEN (AND (IMAGEOBJP C)
-                                                       CODEFOROBJECT)
+                (for I C from 1 to LEN do (SETQ C (BIN TSTREAM))
+                                          (CL:WHEN (AND (IMAGEOBJP C)
+                                                        CODEFOROBJECT)
                                                              (* ; 
                                                          "RPLCHARCODE will cause an error on objects")
-                                             (SETQ C CODEFOROBJECT))
-                                         (RPLCHARCODE RESULT I C))
-               RESULT])
+                                              (SETQ C CODEFOROBJECT))
+                                          (RPLCHARCODE RESULT I C))
+                RESULT])
 
 (TEDIT.SEL.AS.SEXPR
   [LAMBDA (TSTREAM SEL RDTBL FLG)                            (* ; "Edited 29-Dec-2024 08:47 by rmk")
@@ -2405,22 +2454,22 @@
   (FILEMAP (NIL (15578 17399 (\TEDIT.SELECTION.DEFPRINT 15588 . 17397)) (17436 18941 (
 \TEDIT.SET.GLOBAL.SELECTIONS 17446 . 18939)) (18942 24811 (\TEDIT.SELECTED.PIECES 18952 . 20472) (
 \TEDIT.FIND.PROTECTED.END 20474 . 22143) (\TEDIT.FIND.PROTECTED.START 22145 . 24003) (
-\TEDIT.WORD.BOUND 24005 . 24809)) (24945 59336 (\TEDIT.EXTEND.SEL 24955 . 32043) (\TEDIT.SCAN.LINE 
-32045 . 44125) (\TEDIT.SCAN.LINE.WORD 44127 . 49488) (\TEDIT.XYTOSEL 49490 . 56489) (\TEDIT.REGIONTYPE
- 56491 . 57510) (\TEDIT.XYTOSEL.INLINEP 57512 . 57967) (\TEDIT.XYTOSEL.LINE 57969 . 59334)) (59337 
-72499 (\TEDIT.FIXSEL 59347 . 68960) (\TEDIT.CHTOLINEX 68962 . 72497)) (72500 76037 (
-\TEDIT.RESET.EXTEND.PENDING.DELETE 72510 . 73483) (\TEDIT.SET.SEL.LOOKS 73485 . 76035)) (76038 92338 (
-\TEDIT.SHOWSEL 76048 . 80508) (\TEDIT.SHOWSEL.HILIGHT 80510 . 85131) (\TEDIT.UPDATE.SEL 85133 . 88632)
- (\TEDIT.CARETLINE 88634 . 89348) (\TEDIT.SEL.L1 89350 . 89856) (\TEDIT.SEL.LN 89858 . 90364) (
-\TEDIT.SEL.DELETEDCHARS 90366 . 92336)) (92339 97045 (\TEDIT.COPYSEL 92349 . 94815) (
-\TEDIT.SEL.CHANGED? 94817 . 97043)) (97076 109805 (\TEDIT.SELECT.OBJECT 97086 . 101592) (
-\TEDIT.SHOWSEL.OBJECT 101594 . 103756) (\TEDIT.CLIP.OBJECT 103758 . 105762) (\TEDIT.OPERATE.OBJECT 
-105764 . 109803)) (109833 128062 (\TEDIT.SELPIECES 109843 . 113791) (\TEDIT.SELPIECES.COPY 113793 . 
-115831) (\TEDIT.SELPIECES.CONCAT 115833 . 117712) (\TEDIT.SELPIECES.CHARTRANSFORM 117714 . 120672) (
-\TEDIT.SELPIECES.FROM.STRING 120674 . 125697) (\TEDIT.SELPIECES.TO.STRING 125699 . 128060)) (128115 
-149977 (TEDIT.XYTOCH 128125 . 130509) (TEDIT.SELPROP 130511 . 134267) (TEDIT.GETPOINT 134269 . 136189)
- (TEDIT.GETSEL 136191 . 136925) (TEDIT.GETSEL.PARA 136927 . 137876) (TEDIT.SCANSEL 137878 . 138826) (
-TEDIT.SET.SEL.LOOKS 138828 . 140207) (TEDIT.SETSEL 140209 . 144820) (TEDIT.SHOWSEL 144822 . 146102) (
-TEDIT.SEL.AS.STRING 146104 . 148355) (TEDIT.SEL.AS.SEXPR 148357 . 149643) (TEDIT.SELECTALL 149645 . 
-149975)))))
+\TEDIT.WORD.BOUND 24005 . 24809)) (24945 59144 (\TEDIT.EXTEND.SEL 24955 . 32043) (\TEDIT.SCAN.LINE 
+32045 . 43823) (\TEDIT.SCAN.LINE.WORD 43825 . 49186) (\TEDIT.XYTOSEL 49188 . 56297) (\TEDIT.REGIONTYPE
+ 56299 . 57318) (\TEDIT.XYTOSEL.INLINEP 57320 . 57775) (\TEDIT.XYTOSEL.LINE 57777 . 59142)) (59145 
+72307 (\TEDIT.FIXSEL 59155 . 68768) (\TEDIT.CHTOLINEX 68770 . 72305)) (72308 75845 (
+\TEDIT.RESET.EXTEND.PENDING.DELETE 72318 . 73291) (\TEDIT.SET.SEL.LOOKS 73293 . 75843)) (75846 93892 (
+\TEDIT.SHOWSEL 75856 . 80316) (\TEDIT.SHOWSEL.HILIGHT 80318 . 84939) (\TEDIT.UPDATE.SEL 84941 . 88440)
+ (\TEDIT.CARETLINE 88442 . 89156) (\TEDIT.SEL.L1 89158 . 89664) (\TEDIT.SEL.LN 89666 . 90172) (
+\TEDIT.SEL.DELETEDCHARS 90174 . 93890)) (93893 98599 (\TEDIT.COPYSEL 93903 . 96369) (
+\TEDIT.SEL.CHANGED? 96371 . 98597)) (98630 111359 (\TEDIT.SELECT.OBJECT 98640 . 103146) (
+\TEDIT.SHOWSEL.OBJECT 103148 . 105310) (\TEDIT.CLIP.OBJECT 105312 . 107316) (\TEDIT.OPERATE.OBJECT 
+107318 . 111357)) (111387 129734 (\TEDIT.SELPIECES 111397 . 115345) (\TEDIT.SELPIECES.COPY 115347 . 
+117385) (\TEDIT.SELPIECES.CONCAT 117387 . 119266) (\TEDIT.SELPIECES.CHARTRANSFORM 119268 . 122226) (
+\TEDIT.SELPIECES.FROM.STRING 122228 . 127369) (\TEDIT.SELPIECES.TO.STRING 127371 . 129732)) (129787 
+152139 (TEDIT.XYTOCH 129797 . 132181) (TEDIT.SELPROP 132183 . 136042) (TEDIT.GETPOINT 136044 . 137964)
+ (TEDIT.GETSEL 137966 . 138700) (TEDIT.GETSEL.PARA 138702 . 139651) (TEDIT.SCANSEL 139653 . 140601) (
+TEDIT.SET.SEL.LOOKS 140603 . 141982) (TEDIT.SETSEL 141984 . 146748) (TEDIT.SHOWSEL 146750 . 148030) (
+TEDIT.SEL.AS.STRING 148032 . 150517) (TEDIT.SEL.AS.SEXPR 150519 . 151805) (TEDIT.SELECTALL 151807 . 
+152137)))))
 STOP
diff --git a/library/tedit/TEDIT-SELECTION.LCOM b/library/tedit/TEDIT-SELECTION.LCOM
index e0472227..549888de 100644
Binary files a/library/tedit/TEDIT-SELECTION.LCOM and b/library/tedit/TEDIT-SELECTION.LCOM differ
diff --git a/library/tedit/TEDIT-STREAM b/library/tedit/TEDIT-STREAM
index c594a280..5a302a2e 100644
--- a/library/tedit/TEDIT-STREAM
+++ b/library/tedit/TEDIT-STREAM
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "30-Jan-2025 11:15:51" {WMEDLEY}<library>TEDIT>TEDIT-STREAM.;840 173255 
+(FILECREATED "19-Feb-2025 13:39:40" {WMEDLEY}<library>tedit>TEDIT-STREAM.;862 175251 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS OPENTEXTSTREAM)
+      :CHANGES-TO (FNS \TEDIT.TEXTLEFTMARGIN \TEDIT.TEXTRIGHTMARGIN)
 
-      :PREVIOUS-DATE "12-Jan-2025 12:30:12" {WMEDLEY}<library>TEDIT>TEDIT-STREAM.;839)
+      :PREVIOUS-DATE "17-Feb-2025 12:25:59" {WMEDLEY}<library>tedit>TEDIT-STREAM.;861)
 
 
 (PRETTYCOMPRINT TEDIT-STREAMCOMS)
@@ -137,7 +137,7 @@
            PCTB                                              (* ; "The piece table")
            TEXTLEN                                           (* ; "# of chars in the text")
            PRIMARYPANE                                       (* ; "A sequence of panes (split subwindows) that are open on this document. Was INSERTPC: The string-piece that received the last insertion. Now HINTPC")
-           LASTPIECE                                         (* ; 
+           SUFFIXPIECE                                       (* ; 
                     "The last (end-of-stream) piece of the textstream, for easy insertion at the end")
            CHARFN                                            (* ; 
     "Was: INSERTNEXTCH CH# of next char which is typed into that piece. Taken over by HINTPCSTARTCH#")
@@ -159,8 +159,8 @@
   "NOTE:  THIS IS ONLY USED INCORRECTLY BY TEDIT-CHAT Display stream where this textobj is displayed")
            SEL                                               (* ; 
                                                              "The current selection within the text")
-           NIL                                               (* ; 
-                                                          "Was: Scratch space for the selection code")
+           LASTARROWX                                        (* ; 
+                       "X for next arrow up or arrow down. Was: Scratch space for the selection code")
            NIL                                               (* ; 
                                                       "Was MOVESEL: Source for the next MOVE of text")
            NIL                                               (* ; 
@@ -189,7 +189,7 @@
                                                "Cache of line-related info, to speed up selection &c")
            (MENUFLG FLAG)                                    (* ; 
                                                             "T if this TEXTOBJ is a tedit-style menu")
-           FMTSPEC                                           (* ; 
+           DEFAULTPARALOOKS                                  (* ; 
                                       "Default Formatting Spec to be used when formatting paragraphs")
            (FORMATTEDP FLAG)                                 (* ; 
  "Flag for paragraph formatting.  T if this document is to contain paragraph formatting information.")
@@ -227,7 +227,7 @@
            TXTCHARLOOKSLIST                                  (* ; 
                              "List of all the CHARLOOKSs in the document, so they can be kept unique")
            TXTPARALOOKSLIST                                  (* ; 
-                               "List of all the FMTSPECs in the document, so they can be kept unique")
+                              "List of all the PARALOOKS in the document, so they can be kept unique")
            (TXTAPPENDONLY FLAG)                              (* ; "Allows updates only at the end of the stream.  Was TXTNEEDSUPDATE: T => Screen invalid, need to run updater")
            (TXTDON'TUPDATE FLAG)                             (* ; "T if we're holding off on screen updates until later.  Used, e.g., by the menu-SHOW code so that you don't get piecemeal updates, but only one at the end of the SHOW.")
            TXTRAWINCLUDESTREAM                               (* ; 
@@ -238,13 +238,15 @@
                       "Style sheet local to this document.  Not currently saved as part of the file.")
            )
           [ACCESSFNS TEXTOBJ ((\DIRTY (ffetch (TEXTOBJ \XDIRTY) of DATUM)
-                                     (CL:UNLESS (EQ NEWVALUE (ffetch (TEXTOBJ \XDIRTY) of DATUM))
-                                         (\TEDIT.WINDOW.TITLE DATUM NEWVALUE)
-                                         (freplace \XDIRTY OF DATUM WITH NEWVALUE))]
+                                     (PROGN (FSETTOBJ DATUM LASTARROWX NIL)
+                                            (CL:UNLESS (EQ NEWVALUE (ffetch (TEXTOBJ \XDIRTY)
+                                                                       of DATUM))
+                                                (\TEDIT.WINDOW.TITLE DATUM NEWVALUE)
+                                                (freplace \XDIRTY OF DATUM WITH NEWVALUE))]
           SEL _ (create SELECTION)
           TEXTLEN _ 0 WRIGHT _ 0 WTOP _ 0 WLEFT _ 0 WBOTTOM _ 0 MOUSEREGION _ 'TEXT THISLINE _
           (create THISLINE)
-          FMTSPEC _ TEDIT.DEFAULT.FMTSPEC PARABREAKCHARS _ (CHARCODE (EOL FORM LF CR)))
+          DEFAULTPARALOOKS _ TEDIT.DEFAULT.FMTSPEC PARABREAKCHARS _ (CHARCODE (EOL FORM LF CR)))
 
 (ACCESSFNS TEXTSTREAM 
            (
@@ -267,10 +269,10 @@
                                                              "Runs from PLEN to 0: piece exhausted")
             (NIL)                                            (* ; "Was CURRENTLOOKS at F10: The CHARLOOKS that are currently applicable to characters being taken from the stream. This is now CARETLOOKS of the TEXTOBJ.")
             (CURRENTPARALOOKS (fetch (STREAM IMAGEDATA) of DATUM)
-                   (REPLACE (STREAM IMAGEDATA) of DATUM with NEWVALUE))
-                                                             (* ; "The FMTSPEC that is currently applicable to characters being taken from the stream. This was  the only residual field of TEXTIMAGEDATA, now gone.")
+                   (replace (STREAM IMAGEDATA) of DATUM with NEWVALUE))
+                                                             (* ; "THIS IS SOMEHOW INVOLVED IN STYLES, NOT SENSIBLE. REMOVE? The PARALOOKS that is currently applicable to characters being taken from the stream. This was  the only residual field of TEXTIMAGEDATA, now gone.")
             (APPLYLOOKSUPDATEFN (fetch (STREAM F4) of DATUM)
-                   (REPLACE (STREAM F4) OF DATUM with NEWVALUE))
+                   (replace (STREAM F4) OF DATUM with NEWVALUE))
                                                              (* ; "Determines whether to call \TEDIT.FORMATLINE.UPDATELOOKS at every piece change when line-formatting.")
             (STARTINGCOFFSET (fetch (STREAM F2) of DATUM)
                    (replace (STREAM F2) of DATUM with NEWVALUE)))
@@ -1229,6 +1231,8 @@
 (OPENTEXTSTREAM
   [LAMBDA (TEXT WINDOW START/PROPS END PROPS)
 
+    (* ;; "Edited 17-Feb-2025 08:57 by rmk")
+
     (* ;; "Edited 30-Jan-2025 11:15 by rmk")
 
     (* ;; "Edited 10-Jan-2025 11:17 by rmk")
@@ -1303,7 +1307,7 @@
                                        (NOT (LISTP PROPS)))
                              then (SETQ PROPS START/PROPS)
                                   NIL))
-             (if TSTREAM
+             [if TSTREAM
                  then (SETQ TEXTOBJ (TEXTOBJ TSTREAM))
                       (CL:WHEN (OR START END)                (* ; "Do the end first")
                           (CL:WHEN (AND END (ILESSP END (TEXTLEN TEXTOBJ)))
@@ -1316,14 +1320,13 @@
                                                           TEXTOBJ)
                                      TEXTOBJ)))
                       (\TEDIT.OPENTEXTSTREAM.PROPS TEXTOBJ PROPS)
+                      (\TEDIT.REOPENTEXTSTREAM TSTREAM)
                       (SETQ WINDOW (if [AND (SETQ PRIMPANE (OPENWP (\TEDIT.PRIMARYPANE TSTREAM)))
                                             (OR (NULL WINDOW)
                                                 (EQ WINDOW (CAR (WINDOWPROP PRIMPANE 'TYPED-REGION]
                                        then                  (* ; "Reuse the existing window/region")
                                             PRIMPANE
-                                     else (\TEDIT.CREATEW WINDOW TSTREAM PROPS)))
-                      (\TEDIT.OPENTEXTSTREAM.WINDOW WINDOW TSTREAM PROPS)
-                      (\TEDIT.REOPENTEXTSTREAM TSTREAM)
+                                     else (\TEDIT.WINDOW.CREATE WINDOW TSTREAM PROPS)))
                else (SETQ TSTREAM (\TEDIT.CREATE.TEXTSTREAM PROPS))
                     (SETQ TEXTOBJ (FGETTSTR TSTREAM TEXTOBJ))
                     (CL:WHEN TEXT                            (* ; 
@@ -1331,23 +1334,23 @@
                         (SETQ TEXT (\TEDIT.OPENTEXTFILE TEXT PROPS))
                         (FSETTOBJ TEXTOBJ TXTFILE TEXT)) 
 
-                    (* ;; "Get the window before populating pieces, so that the local promptwindow is availabe for messages and queries")
+                    (* ;; "If we swap the window before the pieces, the local promptwindow is availabe for messages and queries. Otherwise, those show up in the system prompt.  But if we do it in the opposite order, we don't know how to estimate the width for the window region.")
 
-                    (CL:WHEN WINDOW                          (* ; 
-                                      "If NIL, don't create a window.  It's Tedit on call from TEDIT")
-                        (SETQ WINDOW (\TEDIT.CREATEW WINDOW TSTREAM PROPS)))
                     (CL:WHEN TEXT
 
                         (* ;; "TEXT is a stream. The fresh TEXTSTREAM is updated to hold that text, ready for window and process attachments.")
 
-                        (\TEDIT.OPENTEXTSTREAM.PIECES TEXT TSTREAM START END PROPS)) 
+                        (\TEDIT.OPENTEXTSTREAM.PIECES TEXT TSTREAM START END PROPS))
+                    (CL:WHEN WINDOW                          (* ; 
+                                                             "WINDOW is Tedit on call from TEDIT")
+                        (SETQ WINDOW (\TEDIT.WINDOW.CREATE WINDOW TSTREAM PROPS)))]
 
-                    (* ;; "We now have all the pieces, even for TEXT=NIL (empty document) case.")
+             (* ;; "We now have all the pieces, even for TEXT=NIL (empty document) case.")
 
-                    (CL:WHEN WINDOW                          (* ; "Connect to the window")
-                        (\TEDIT.OPENTEXTSTREAM.WINDOW WINDOW TSTREAM PROPS))
-                    (\TEDIT.OPENTEXTSTREAM.SETUP.SEL TSTREAM)
-                    (\TEDIT.SCROLL.CARET TSTREAM))
+             (CL:WHEN WINDOW                                 (* ; "Connect to the window")
+                 (\TEDIT.OPENTEXTSTREAM.WINDOW WINDOW TSTREAM PROPS))
+             (\TEDIT.OPENTEXTSTREAM.SETUP.SEL TSTREAM)
+             (\TEDIT.SCROLL.CARET TSTREAM)
              (CL:UNLESS (FGETTOBJ TEXTOBJ TXTPAGEFRAMES)
                     (TEDIT.PAGEFORMAT TEXTOBJ TEDIT.PAGE.FRAMES))
              (for FORM in TEDIT.GET.FINISHEDFORMS do (EVAL FORM))
@@ -1357,7 +1360,8 @@
              TSTREAM))])
 
 (COPYTEXTSTREAM
-  [LAMBDA (ORIGINAL CROSSCOPY)                               (* ; "Edited 12-Jan-2025 12:16 by rmk")
+  [LAMBDA (ORIGINAL CROSSCOPY)                               (* ; "Edited  8-Feb-2025 20:10 by rmk")
+                                                             (* ; "Edited 12-Jan-2025 12:16 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:41 by rmk")
                                                              (* ; "Edited 16-Mar-2024 10:03 by rmk")
                                                              (* ; "Edited 16-Jan-2024 12:27 by rmk")
@@ -1387,7 +1391,7 @@
                (\TEDIT.INSERTPIECE NEWPC NIL NEWTEXTOBJ))
          (FSETTOBJ NEWTEXTOBJ FORMATTEDP (FGETTOBJ TEXTOBJ FORMATTEDP))
          (FSETTOBJ NEWTEXTOBJ DEFAULTCHARLOOKS (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
-         (FSETTOBJ NEWTEXTOBJ FMTSPEC (FGETTOBJ TEXTOBJ FMTSPEC))
+         (FSETTOBJ NEWTEXTOBJ DEFAULTPARALOOKS (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS))
          (FSETTOBJ NEWTEXTOBJ TXTRTBL (FGETTOBJ TEXTOBJ TXTRTBL))
          (FSETTOBJ NEWTEXTOBJ TXTWTBL (FGETTOBJ TEXTOBJ TXTWTBL))
          (FSETTOBJ NEWTEXTOBJ TXTSTYLESHEET (FGETTOBJ TEXTOBJ TXTSTYLESHEET))
@@ -1508,7 +1512,8 @@
     (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS TEXTOBJ])
 
 (\TEDIT.OPENTEXTSTREAM.SETUP.SEL
-  [LAMBDA (TSTREAM)                                          (* ; "Edited 25-Nov-2024 14:33 by rmk")
+  [LAMBDA (TSTREAM)                                          (* ; "Edited 17-Feb-2025 08:56 by rmk")
+                                                             (* ; "Edited 25-Nov-2024 14:33 by rmk")
                                                              (* ; "Edited 20-Nov-2024 23:56 by rmk")
                                                              (* ; "Edited 29-Sep-2024 10:51 by rmk")
                                                              (* ; "Edited  7-Jul-2024 11:42 by rmk")
@@ -1529,53 +1534,53 @@
     (LET* ((TEXTOBJ (GETTSTR TSTREAM TEXTOBJ))
            (SEL (TEXTSEL TEXTOBJ))
            SELPROP)
-          (SETQ SELPROP (GETTEXTPROP TEXTOBJ 'SEL))
-          (FSETSEL SEL SET T)
-          (\TEDIT.SHOWSEL SEL NIL TEXTOBJ)
-          (CL:UNLESS (EQ SELPROP 'DON'T)
-              (FSETSEL SEL SELKIND 'CHAR)                    (* ; "Default, maybe reset below")
-              (if (type? SELECTION SELPROP)
-                  then                                       (* ; 
+          (CL:UNLESS (AND SEL (GETSEL SEL SET))
+              (SETQ SELPROP (GETTEXTPROP TEXTOBJ 'SEL))
+              (FSETSEL SEL SET T)
+              (\TEDIT.SHOWSEL SEL NIL TEXTOBJ)
+              (CL:UNLESS (EQ SELPROP 'DON'T)
+                  (FSETSEL SEL SELKIND 'CHAR)                (* ; "Default, maybe reset below")
+                  (if (type? SELECTION SELPROP)
+                      then                                   (* ; 
                                          "We came in with an explicit initial selection.  Set it up.")
-                       (\TEDIT.COPYSEL SELPROP SEL)
-                elseif (LISTP SELPROP)
-                  then 
-                       (* ;; "Default to POINT selection")
+                           (\TEDIT.COPYSEL SELPROP SEL)
+                    elseif (LISTP SELPROP)
+                      then 
+                           (* ;; "Default to POINT selection")
 
-                       (\TEDIT.UPDATE.SEL SEL (CAR SELPROP)
-                              (OR (CADR SELPROP)
-                                  0)
-                              (OR (CADDR SELPROP)
-                                  'LEFT))
-                       (FSETSEL SEL SELKIND 'CHAR)
-                elseif (FIXP SELPROP)
-                  then (\TEDIT.UPDATE.SEL SEL SELPROP 0 'LEFT)
-                elseif (FGETTOBJ TEXTOBJ TXTAPPENDONLY)
-                  then 
-                       (* ;; "Default to after the last character")
+                           (\TEDIT.UPDATE.SEL SEL (CAR SELPROP)
+                                  (OR (CADR SELPROP)
+                                      0)
+                                  (OR (CADDR SELPROP)
+                                      'LEFT))
+                           (FSETSEL SEL SELKIND 'CHAR)
+                    elseif (FIXP SELPROP)
+                      then (\TEDIT.UPDATE.SEL SEL SELPROP 0 'LEFT)
+                    elseif (FGETTOBJ TEXTOBJ TXTAPPENDONLY)
+                      then 
+                           (* ;; "Default to after the last character")
 
-                       (\TEDIT.UPDATE.SEL SEL (FGETTOBJ TEXTOBJ TEXTLEN)
-                              0
-                              'RIGHT)
-                else 
-                     (* ;; "Default to before the first character. UPDATE.SEL screws up the CHLIM=CH#+DCH invariant when DCH=0, it adds 1,  But UPDATE.SEL adds 1 when DCH=0.  That's wrong for the initial caret, so brute-force fix it here.  Maybe it's wrong in general?")
+                           (\TEDIT.UPDATE.SEL SEL (FGETTOBJ TEXTOBJ TEXTLEN)
+                                  0
+                                  'RIGHT)
+                    else 
+                         (* ;; "Default to before the first character. UPDATE.SEL screws up the CHLIM=CH#+DCH invariant when DCH=0, it adds 1,  But UPDATE.SEL adds 1 when DCH=0.  That's wrong for the initial caret, so brute-force fix it here.  Maybe it's wrong in general?")
 
-                     (\TEDIT.UPDATE.SEL SEL 1 0 'LEFT)
-                     (FSETSEL SEL CHLIM 1))
-              [FSETTOBJ TEXTOBJ CARETLOOKS (if (FGETSEL SEL SET)
-                                               then          (* ; 
+                         (\TEDIT.UPDATE.SEL SEL 1 0 'LEFT)
+                         (FSETSEL SEL CHLIM 1))
+                  [FSETTOBJ TEXTOBJ CARETLOOKS (if (FGETSEL SEL SET)
+                                                   then      (* ; 
                                                   "An initial selection implies initial caret looks.")
-                                                    (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ SEL)
-                                             else (\TEDIT.CARETLOOKS.VERIFY TEXTOBJ (GETTOBJ TEXTOBJ
-                                                                                           
-                                                                                     DEFAULTCHARLOOKS
-                                                                                           ]
-              (CL:WHEN (OR (FGETTOBJ TEXTOBJ TXTREADONLY)
-                           (FGETTOBJ TEXTOBJ TXTAPPENDONLY)) (* ; 
+                                                        (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ SEL)
+                                                 else (\TEDIT.CARETLOOKS.VERIFY TEXTOBJ
+                                                             (GETTOBJ TEXTOBJ DEFAULTCHARLOOKS]
+                  (CL:WHEN (OR (FGETTOBJ TEXTOBJ TXTREADONLY)
+                               (FGETTOBJ TEXTOBJ TXTAPPENDONLY))
+                                                             (* ; 
                                                      "Don't blink for read-only, but do highlighting")
-                  (FSETSEL SEL HASCARET NIL))
-              (\TEDIT.FIXSEL SEL TEXTOBJ)
-              (\TEDIT.SHOWSEL SEL T TEXTOBJ))
+                      (FSETSEL SEL HASCARET NIL))
+                  (\TEDIT.FIXSEL SEL TEXTOBJ)
+                  (\TEDIT.SHOWSEL SEL T TEXTOBJ)))
           SEL])
 
 (\TEDIT.OPENTEXTSTREAM.WINDOW
@@ -1617,7 +1622,8 @@
          WINDOW])
 
 (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited 29-Dec-2024 20:37 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  8-Feb-2025 22:04 by rmk")
+                                                             (* ; "Edited 29-Dec-2024 20:37 by rmk")
                                                              (* ; "Edited 20-Dec-2024 11:56 by rmk")
                                                              (* ; "Edited 16-Dec-2024 13:14 by rmk")
                                                              (* ; "Edited 21-Nov-2024 14:35 by rmk")
@@ -1646,13 +1652,14 @@
          (SETQ CHARLOOKS (\TEDIT.UNIQUIFY.CHARLOOKS CHARLOOKS TEXTOBJ))
          (SETQ PARALOOKS (\TEDIT.UNIQUIFY.PARALOOKS (\TEDIT.PARSE.PARALOOKS.LIST
                                                      (OR (GETTEXTPROP TEXTOBJ 'PARALOOKS)
-                                                         (create FMTSPEC using TEDIT.DEFAULT.FMTSPEC)
-                                                         )
+                                                         (create PARALOOKS using 
+                                                                                TEDIT.DEFAULT.FMTSPEC
+                                                                ))
                                                      NIL TEXTOBJ)
                                 TEXTOBJ))
          (SETTOBJ TEXTOBJ DEFAULTCHARLOOKS CHARLOOKS)
          (SETTOBJ TEXTOBJ CARETLOOKS CHARLOOKS)
-         (SETTOBJ TEXTOBJ FMTSPEC PARALOOKS])
+         (SETTOBJ TEXTOBJ DEFAULTPARALOOKS PARALOOKS])
 
 (\TEDIT.OPENTEXTFILE
   [LAMBDA (TEXT PROPS)                                       (* ; "Edited 21-Nov-2024 11:38 by rmk")
@@ -1683,7 +1690,8 @@
                (ERROR TEXT " does not identify a Tedit document")))])
 
 (\TEDIT.CREATE.TEXTSTREAM
-  [LAMBDA (PROPS)                                            (* ; "Edited 16-Mar-2024 09:52 by rmk")
+  [LAMBDA (PROPS)                                            (* ; "Edited  7-Feb-2025 08:09 by rmk")
+                                                             (* ; "Edited 16-Mar-2024 09:52 by rmk")
                                                              (* ; "Edited 21-Jan-2024 15:16 by rmk")
                                                              (* ; "Edited 17-Sep-2023 00:38 by rmk")
                                                              (* ; "Edited 12-Sep-2023 11:27 by rmk")
@@ -1696,7 +1704,7 @@
          (SETTOBJ TEXTOBJ STREAMHINT TSTREAM)
          (\TEDIT.OPENTEXTSTREAM.PROPS TEXTOBJ PROPS)
          (\TEDIT.MAKEPCTB TEXTOBJ)
-         (\TEDIT.INSTALL.PIECE TSTREAM (FGETTOBJ TEXTOBJ LASTPIECE)
+         (\TEDIT.INSTALL.PIECE TSTREAM (FGETTOBJ TEXTOBJ SUFFIXPIECE)
                 0)
          TSTREAM])
 
@@ -1971,7 +1979,8 @@
                   (\TEDIT.DELETE TEXTOBJ TAILSEL)))])
 
 (\TEDIT.TEXTGETFILEPTR
-  [LAMBDA (TSTREAM)                                          (* ; "Edited  7-May-2024 21:14 by rmk")
+  [LAMBDA (TSTREAM)                                          (* ; "Edited  7-Feb-2025 08:12 by rmk")
+                                                             (* ; "Edited  7-May-2024 21:14 by rmk")
                                                              (* ; "Edited 19-Mar-2024 14:19 by rmk")
                                                              (* ; "Edited 17-Mar-2024 00:25 by rmk")
                                                              (* ; "Edited 21-Oct-2023 20:57 by rmk")
@@ -1985,7 +1994,7 @@
           (PC (ffetch (TEXTSTREAM PIECE) of TSTREAM))
           PCCHARSLEFT)
          (if (OR (NULL PC)
-                 (\LASTPIECEP PC TEXTOBJ))
+                 (\SUFFIXPIECEP PC TEXTOBJ))
              then 
                   (* ;; "Not set or off the end")
 
@@ -1994,7 +2003,7 @@
              then 
                   (* ;; "Replace a lingering piece from a delete-everything?")
 
-                  (freplace (TEXTSTREAM PIECE) of TSTREAM with (FGETTOBJ TEXTOBJ LASTPIECE))
+                  (freplace (TEXTSTREAM PIECE) of TSTREAM with (FGETTOBJ TEXTOBJ SUFFIXPIECE))
                   0
            else                                              (* ; "Somewhere inside the document")
                 (SETQ PCCHARSLEFT (ffetch (TEXTSTREAM PCCHARSLEFT) of TSTREAM))
@@ -2104,13 +2113,18 @@
              THEN (DIFFERENCE \#DISPLAYLINES \CURRENTDISPLAYLINE])
 
 (\TEDIT.TEXTLEFTMARGIN
-  [LAMBDA (TSTREAM XPOSITION)                                (* ; "Edited 17-Mar-2024 12:30 by rmk")
+  [LAMBDA (TSTREAM XPOSITION)                                (* ; "Edited 19-Feb-2025 13:39 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 17:13 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 12:30 by rmk")
                                                              (* ; "Edited 31-May-91 14:03 by jds")
-    (IPLUS 8 (fetch (FMTSPEC LEFTMAR) of (FGETTOBJ (TEXTOBJ TSTREAM)
-                                                FMTSPEC])
+    (IPLUS 8 (GETPLOOKS (FGETTOBJ (TEXTOBJ TSTREAM)
+                               DEFAULTPARALOOKS)
+                    LEFTMAR])
 
 (\TEDIT.TEXTRIGHTMARGIN
-  [LAMBDA (TSTREAM XPOSITION)                                (* ; "Edited 28-Jun-2024 22:07 by rmk")
+  [LAMBDA (TSTREAM XPOSITION)                                (* ; "Edited 19-Feb-2025 13:39 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:35 by rmk")
+                                                             (* ; "Edited 28-Jun-2024 22:07 by rmk")
                                                              (* ; "Edited 21-Sep-2023 12:38 by rmk")
                                                              (* ; "Edited 31-May-91 14:03 by jds")
 
@@ -2122,25 +2136,25 @@
 
     (* ;; "If RIGHTMAR is 0 and there is no window (WRIGHT), estimate from the stream's linelength.")
 
-    (* ;; "If \TEDIT.MINIMAL.WINDOW.SETUP sets WRIGHT, maybe that's enough?  I.e. the right margin is either the width of the window or calculated from the LINELENGTH.  It wouldn't depend on the default FMTSPEC or the FMTSPEC of the current piece.")
+    (* ;; "If \TEDIT.MINIMAL.WINDOW.SETUP sets WRIGHT, maybe that's enough?  I.e. the right margin is either the width of the window or calculated from the LINELENGTH.  It wouldn't depend on the default PARALOOKS or the PARALOOKS of the current piece.")
 
     (LET ((TEXTOBJ (TEXTOBJ TSTREAM)))
          (if (FGETTOBJ TEXTOBJ PRIMARYPANE)
-             then (LET* ((FMTSPEC (FGETTOBJ TEXTOBJ FMTSPEC))
-                         (RIGHTMAR (fetch (FMTSPEC RIGHTMAR) of FMTSPEC))
+             then (LET* ((PARALOOKS (FGETTOBJ TEXTOBJ DEFAULTPARALOOKS))
+                         (RIGHTMAR (FGETPLOOKS PARALOOKS RIGHTMAR))
                          LEFTMAR NEWPOS)
                         (CL:WHEN (ZEROP RIGHTMAR)
-                            (SETQ RIGHTMAR (fetch (TEXTOBJ WRIGHT) of TEXTOBJ)))
+                            (SETQ RIGHTMAR (FGETTOBJ TEXTOBJ WRIGHT)))
                         (CL:WHEN (AND XPOSITION (NEQ XPOSITION RIGHTMAR))
-                                                             (* ; "Changing the default FMTSPEC")
-                            (SETQ LEFTMAR (fetch (FMTSPEC LEFTMAR) of FMTSPEC))
+                                                             (* ; "Changing the default PARALOOKS")
+                            (SETQ LEFTMAR (FGETPLOOKS PARALOOKS LEFTMAR))
                             (CL:WHEN (ILEQ RIGHTMAR LEFTMAR)
                                    (\ILLEGAL.ARG XPOSITION))
-                            (FSETTOBJ TEXTOBJ FMTSPEC (\TEDIT.UNIQUIFY.PARALOOKS (create FMTSPEC
-                                                                                    using FMTSPEC 
-                                                                                          RIGHTMAR _
-                                                                                          XPOSITION)
-                                                             TEXTOBJ))
+                            (FSETTOBJ TEXTOBJ DEFAULTPARALOOKS
+                                   (\TEDIT.UNIQUIFY.PARALOOKS (create PARALOOKS
+                                                                 using PARALOOKS RIGHTMAR _ XPOSITION
+                                                                     )
+                                          TEXTOBJ))
                             (LINELENGTH (IQUOTIENT (IDIFFERENCE RIGHTMAR XPOSITION)
                                                (CHARWIDTH (CHARCODE A)
                                                       TSTREAM))
@@ -2208,7 +2222,8 @@
 (DEFINEQ
 
 (\TEDIT.DELETE.SELPIECES
-  [LAMBDA (TEXTOBJ FIRSTCHAR LEN)                            (* ; "Edited 26-Nov-2024 22:31 by rmk")
+  [LAMBDA (TEXTOBJ FIRSTCHAR LEN DONTCHECK)                  (* ; "Edited  5-Feb-2025 23:33 by rmk")
+                                                             (* ; "Edited 26-Nov-2024 22:31 by rmk")
                                                              (* ; "Edited 22-Sep-2024 18:34 by rmk")
                                                              (* ; "Edited  7-Jul-2024 09:09 by rmk")
                                                              (* ; "Edited  7-May-2024 21:14 by rmk")
@@ -2228,10 +2243,10 @@
     (CL:UNLESS (GETTOBJ TEXTOBJ TXTREADONLY)
         (\TEDIT.BTVALIDATE '\TEDIT.DELETE.SELPIECES 'START TEXTOBJ)
         (LET (SELPIECES PREVPC)
-             (CL:WHEN (AND (SETQ SELPIECES (\TEDIT.SELPIECES FIRSTCHAR (IPLUS FIRSTCHAR LEN -1)
+             (CL:WHEN [AND (SETQ SELPIECES (\TEDIT.SELPIECES FIRSTCHAR (IPLUS FIRSTCHAR LEN -1)
                                                   TEXTOBJ))
-                           (for PC inselpieces (PROGN SELPIECES) always (OBJECT.ALLOWS PC
-                                                                               'DELETE TEXTOBJ)))
+                           (OR DONTCHECK (for PC inselpieces (PROGN SELPIECES)
+                                            always (OBJECT.ALLOWS PC 'DELETE TEXTOBJ]
                  (SETQ PREVPC (PREVPIECE (FGETSPC SELPIECES SPFIRST)))
                  (\TEDIT.DELETEPIECES SELPIECES TEXTOBJ)
 
@@ -2698,7 +2713,9 @@
                                                        (CADR PTAIL])
 
 (\TEDIT.TEXTPROP
-  [LAMBDA (TEXTOBJ PROP SETNEWVALUE NEWVALUE)                (* ; "Edited 22-Dec-2024 00:23 by rmk")
+  [LAMBDA (TEXTOBJ PROP SETNEWVALUE NEWVALUE)                (* ; "Edited 16-Feb-2025 23:27 by rmk")
+                                                             (* ; "Edited 15-Feb-2025 14:02 by rmk")
+                                                             (* ; "Edited 22-Dec-2024 00:23 by rmk")
                                                              (* ; "Edited 23-Nov-2024 09:47 by rmk")
                                                              (* ; "Edited 21-Nov-2024 11:53 by rmk")
                                                              (* ; "Edited 18-Nov-2024 16:37 by rmk")
@@ -2740,7 +2757,7 @@
         (DON'TUPDATE (PROG1 (FGETTOBJ TEXTOBJ TXTDON'TUPDATE)
                          (CL:IF SETNEWVALUE (FSETTOBJ TEXTOBJ TXTDON'TUPDATE NEWVALUE))))
         (NOTSPLITTABLE (PROG1 (FGETTOBJ TEXTOBJ TXTNOTSPLITTABLE)
-                           (CL:IF SETNEWVALUE (FSETTOBJ TEXTOBJ TXTNOTSPLITTABLE T))))
+                           (CL:IF SETNEWVALUE (FSETTOBJ TEXTOBJ TXTNOTSPLITTABLE NEWVALUE))))
         (DIRTY (PROG1 (FGETTOBJ TEXTOBJ \XDIRTY)
                    (CL:IF SETNEWVALUE (FSETTOBJ TEXTOBJ \DIRTY NEWVALUE))))
         (LENGTH (PROG1 (FGETTOBJ TEXTOBJ TEXTLEN)
@@ -2768,6 +2785,11 @@
                              (fetch FULLFILENAME of (FGETTOBJ TEXTOBJ TXTFILE)))
                       (CL:WHEN (AND SETNEWVALUE (NEQ NEWVALUE NIL))
                              (ERROR "FILENAME cannot be changed"))))
+        (FILESTREAM (PROG1 (FGETTOBJ TEXTOBJ TXTFILE)
+                        (CL:WHEN SETNEWVALUE
+                            (CL:WHEN (AND NEWVALUE (NOT (type? STREAM NEWVALUE)))
+                                   (\ILLEGAL.ARG NEWVALUE))
+                            (FSETTOBJ TEXTOBJ TXTFILE NEWVALUE))))
         (PAGEFORMAT (PROG1 (FGETTOBJ TEXTOBJ TXTPAGEFRAMES)
                         (CL:WHEN SETNEWVALUE
                             (CL:UNLESS (type? PAGEREGION NEWVALUE)
@@ -2856,31 +2878,31 @@
 (ADDTOVAR LAMA TEXTPROP)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (36869 67470 (\TEDIT.TEXTBIN 36879 . 47629) (\TEDIT.TEXTPEEKBIN 47631 . 53181) (
-\TEDIT.TEXTBACKFILEPTR 53183 . 58856) (\TEDIT.TEXTBOUT 58858 . 63260) (\TEDIT.INSTALL.FILEBUFFER 63262
- . 67468)) (68368 72416 (\TEDIT.TEXTOUTCHARFN 68378 . 69934) (\TEDIT.TEXTINCCODEFN 69936 . 70675) (
-\TEDIT.TEXTBACKCCODEFN 70677 . 71269) (\TEDIT.TEXTFORMATBYTESTREAM 71271 . 71974) (
-\TEDIT.TEXTFORMATBYTESTRING 71976 . 72414)) (72463 83763 (OPENTEXTSTREAM 72473 . 79331) (
-COPYTEXTSTREAM 79333 . 82986) (TEDIT.STREAMCHANGEDP 82988 . 83290) (TXTFILE 83292 . 83761)) (83764 
-113041 (\TEDIT.REOPENTEXTSTREAM 83774 . 85126) (\TEDIT.OPENTEXTSTREAM.PIECES 85128 . 89558) (
-\TEDIT.OPENTEXTSTREAM.PROPS 89560 . 90662) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 90664 . 95599) (
-\TEDIT.OPENTEXTSTREAM.WINDOW 95601 . 98282) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 98284 . 100933) (
-\TEDIT.OPENTEXTFILE 100935 . 102648) (\TEDIT.CREATE.TEXTSTREAM 102650 . 103584) (\TEDIT.REOPEN.STREAM 
-103586 . 105922) (\TEDIT.TEXTINIT 105924 . 113039)) (113079 114267 (\TEDIT.TTYBOUT 113089 . 114265)) (
-114385 132762 (\TEDIT.TEXTCLOSEF 114395 . 115719) (\TEDIT.TEXTDSPFONT 115721 . 116691) (
-\TEDIT.TEXTEOFP 116693 . 118448) (\TEDIT.TEXTGETEOFPTR 118450 . 118773) (\TEDIT.TEXTSETEOFPTR 118775
- . 119865) (\TEDIT.TEXTGETFILEPTR 119867 . 122589) (\TEDIT.TEXTSETFILEINFO 122591 . 123099) (
-\TEDIT.TEXTOPENF 123101 . 124032) (\TEDIT.TEXTSETEOF 124034 . 124650) (\TEDIT.TEXTSETFILEPTR 124652 . 
-126693) (\TEDIT.TEXTDSPXPOSITION 126695 . 127712) (\TEDIT.TEXTDSPYPOSITION 127714 . 128455) (
-\TEDIT.TEXTLEFTMARGIN 128457 . 128834) (\TEDIT.TEXTRIGHTMARGIN 128836 . 131911) (
-\TEDIT.TEXTDSPCHARWIDTH 131913 . 132217) (\TEDIT.TEXTDSPSTRINGWIDTH 132219 . 132525) (
-\TEDIT.TEXTDSPLINEFEED 132527 . 132760)) (133809 154460 (\TEDIT.DELETE.SELPIECES 133819 . 137246) (
-\TEDIT.INSERTCH 137248 . 145042) (\TEDIT.INSERTCH.HISTORY 145044 . 148508) (\TEDIT.INSERTEOL 148510 . 
-150335) (\TEDIT.INSERTCH.INSERTION 150337 . 153174) (\TEDIT.INSERTCH.EXTEND 153176 . 154458)) (154461 
-155965 (\TEDIT.NEXTCHANGEABLE.CHNO 154471 . 155186) (\TEDIT.LASTCHANGEABLE.CHNO 155188 . 155963)) (
-155966 157670 (\SETUPGETCH 155976 . 157668)) (157728 162186 (\TEDIT.INSTALL.PIECE 157738 . 162184)) (
-162224 170436 (TEXTPROP 162234 . 162581) (GETTEXTPROP 162583 . 162827) (PUTTEXTPROP 162829 . 163086) (
-GETTEXTPROPS 163088 . 163532) (PUTTEXTPROPS 163534 . 164438) (\TEDIT.TEXTPROP 164440 . 170434)) (
-170437 172507 (\TEDIT.TEXTOBJ.PROPNAMES 170447 . 171399) (\TEDIT.TEXTOBJ.PROPFETCHFN 171401 . 171917) 
-(\TEDIT.TEXTOBJ.PROPSTOREFN 171919 . 172505)))))
+  (FILEMAP (NIL (37136 67737 (\TEDIT.TEXTBIN 37146 . 47896) (\TEDIT.TEXTPEEKBIN 47898 . 53448) (
+\TEDIT.TEXTBACKFILEPTR 53450 . 59123) (\TEDIT.TEXTBOUT 59125 . 63527) (\TEDIT.INSTALL.FILEBUFFER 63529
+ . 67735)) (68635 72683 (\TEDIT.TEXTOUTCHARFN 68645 . 70201) (\TEDIT.TEXTINCCODEFN 70203 . 70942) (
+\TEDIT.TEXTBACKCCODEFN 70944 . 71536) (\TEDIT.TEXTFORMATBYTESTREAM 71538 . 72241) (
+\TEDIT.TEXTFORMATBYTESTRING 72243 . 72681)) (72730 84251 (OPENTEXTSTREAM 72740 . 79692) (
+COPYTEXTSTREAM 79694 . 83474) (TEDIT.STREAMCHANGEDP 83476 . 83778) (TXTFILE 83780 . 84249)) (84252 
+113999 (\TEDIT.REOPENTEXTSTREAM 84262 . 85614) (\TEDIT.OPENTEXTSTREAM.PIECES 85616 . 90046) (
+\TEDIT.OPENTEXTSTREAM.PROPS 90048 . 91150) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 91152 . 96238) (
+\TEDIT.OPENTEXTSTREAM.WINDOW 96240 . 98921) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 98923 . 101780) (
+\TEDIT.OPENTEXTFILE 101782 . 103495) (\TEDIT.CREATE.TEXTSTREAM 103497 . 104542) (\TEDIT.REOPEN.STREAM 
+104544 . 106880) (\TEDIT.TEXTINIT 106882 . 113997)) (114037 115225 (\TEDIT.TTYBOUT 114047 . 115223)) (
+115343 134135 (\TEDIT.TEXTCLOSEF 115353 . 116677) (\TEDIT.TEXTDSPFONT 116679 . 117649) (
+\TEDIT.TEXTEOFP 117651 . 119406) (\TEDIT.TEXTGETEOFPTR 119408 . 119731) (\TEDIT.TEXTSETEOFPTR 119733
+ . 120823) (\TEDIT.TEXTGETFILEPTR 120825 . 123660) (\TEDIT.TEXTSETFILEINFO 123662 . 124170) (
+\TEDIT.TEXTOPENF 124172 . 125103) (\TEDIT.TEXTSETEOF 125105 . 125721) (\TEDIT.TEXTSETFILEPTR 125723 . 
+127764) (\TEDIT.TEXTDSPXPOSITION 127766 . 128783) (\TEDIT.TEXTDSPYPOSITION 128785 . 129526) (
+\TEDIT.TEXTLEFTMARGIN 129528 . 130119) (\TEDIT.TEXTRIGHTMARGIN 130121 . 133284) (
+\TEDIT.TEXTDSPCHARWIDTH 133286 . 133590) (\TEDIT.TEXTDSPSTRINGWIDTH 133592 . 133898) (
+\TEDIT.TEXTDSPLINEFEED 133900 . 134133)) (135182 155919 (\TEDIT.DELETE.SELPIECES 135192 . 138705) (
+\TEDIT.INSERTCH 138707 . 146501) (\TEDIT.INSERTCH.HISTORY 146503 . 149967) (\TEDIT.INSERTEOL 149969 . 
+151794) (\TEDIT.INSERTCH.INSERTION 151796 . 154633) (\TEDIT.INSERTCH.EXTEND 154635 . 155917)) (155920 
+157424 (\TEDIT.NEXTCHANGEABLE.CHNO 155930 . 156645) (\TEDIT.LASTCHANGEABLE.CHNO 156647 . 157422)) (
+157425 159129 (\SETUPGETCH 157435 . 159127)) (159187 163645 (\TEDIT.INSTALL.PIECE 159197 . 163643)) (
+163683 172432 (TEXTPROP 163693 . 164040) (GETTEXTPROP 164042 . 164286) (PUTTEXTPROP 164288 . 164545) (
+GETTEXTPROPS 164547 . 164991) (PUTTEXTPROPS 164993 . 165897) (\TEDIT.TEXTPROP 165899 . 172430)) (
+172433 174503 (\TEDIT.TEXTOBJ.PROPNAMES 172443 . 173395) (\TEDIT.TEXTOBJ.PROPFETCHFN 173397 . 173913) 
+(\TEDIT.TEXTOBJ.PROPSTOREFN 173915 . 174501)))))
 STOP
diff --git a/library/tedit/TEDIT-STREAM.LCOM b/library/tedit/TEDIT-STREAM.LCOM
index 574119cb..ca8ded42 100644
Binary files a/library/tedit/TEDIT-STREAM.LCOM and b/library/tedit/TEDIT-STREAM.LCOM differ
diff --git a/library/tedit/TEDIT-STYLES b/library/tedit/TEDIT-STYLES
new file mode 100644
index 00000000..02d6d955
--- /dev/null
+++ b/library/tedit/TEDIT-STYLES
@@ -0,0 +1,234 @@
+(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
+
+(FILECREATED "19-Feb-2025 13:31:28" {WMEDLEY}<library>tedit>TEDIT-STYLES.;4 12550  
+
+      :EDIT-BY rmk
+
+      :CHANGES-TO (FNS \TEDIT.APPLY.STYLES \TEDIT.APPLY.PARASTYLES)
+
+      :PREVIOUS-DATE "12-Feb-2025 12:18:37" {WMEDLEY}<library>tedit>TEDIT-STYLES.;3)
+
+
+(PRETTYCOMPRINT TEDIT-STYLESCOMS)
+
+(RPAQQ TEDIT-STYLESCOMS
+       (                                                     (* ; "Style-sheet support")
+        (FNS \TEDIT.APPLY.STYLES \TEDIT.APPLY.PARASTYLES TEDIT.STYLESHEET TEDIT.POP.STYLESHEET 
+             TEDIT.PUSH.STYLESHEET TEDIT.ADD.STYLESHEET)
+        
+        (* ;; "*TEDIT-PARASTYLE-CACHE* is an ALIST of  original char/para looks to styled char/para looks.  It is used to cache stylings, and is reset when the main stylesheet changes, and when we change paragraph looks, given paras that have private char styles.")
+
+        
+        (* ;; "*TEDIT-CURRENTPARA-CACHE* is NIL if we're not in a para that has private char styles, or is the PARALOOKS (styled!) for that para, if we are.  Used to decide when we have to flush *TEDIT-PARASTYLE-CACHE* at paragraph boundaries.  Mostly, this'll be NIL and not interesting.")
+
+        
+        (* ;; "*TEDIT-STYLESHEET-SAVE-LIST* is a list of points inside TEDIT.STYLES, so we can %"push%" new style sheets on the front, and %"pop%" them off sensibly.  This is the push-stack, in effect.  Used by TEDIT.ADD.STYLESHEET, TEDIT.PUSH.STYLESHEET, and TEDIT.POP.STYLESHEET")
+
+        (INITVARS (TEDIT.STYLES))
+        
+        (* ;; "RMK 2023: Maybe this should be one of the later ones? Only partly implemented")
+
+        (GLOBALVARS TEDIT.STYLES)
+        (INITVARS (*TEDIT-PARASTYLE-CACHE*)
+               (*TEDIT-CURRENTPARA-CACHE*)
+               (*TEDIT-STYLESHEET-SAVE-LIST*))
+        (GLOBALVARS *TEDIT-PARASTYLE-CACHE* *TEDIT-CURRENTPARA-CACHE* *TEDIT-STYLESHEET-SAVE-LIST*)))
+
+
+
+(* ; "Style-sheet support")
+
+(DEFINEQ
+
+(\TEDIT.APPLY.STYLES
+  [LAMBDA (LOOKS PC TSTREAM)                                 (* ; "Edited 19-Feb-2025 13:31 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 21:07 by rmk")
+                                                             (* ; "Edited 12-Nov-2023 16:08 by rmk")
+                                                             (* ; "Edited 18-Mar-2023 21:45 by rmk")
+                                                             (* ; "Edited 25-Sep-2022 13:28 by rmk")
+                                                             (* ; "Edited 11-Sep-2022 14:45 by rmk")
+                                                             (* ; 
+                                                        "Edited  4-Jul-93 01:02 by sybalskY:MV:ENVOS")
+
+    (* ;; "Given a set of looks, return the looks with the proper styles expanded out.")
+
+    (SETQ TSTREAM (TEXTSTREAM TSTREAM))
+    (OR (CDR (ASSOC LOOKS *TEDIT-CURRENTPARA-CACHE*))
+        (CDR (ASSOC LOOKS *TEDIT-PARASTYLE-CACHE*))
+        (LET* ((TEXTOBJ (TEXTOBJ TSTREAM))
+               (STYLE (GETCLOOKS LOOKS CLSTYLE))
+               (STYLE-SHEET (OR (FGETTOBJ TEXTOBJ TXTSTYLESHEET)
+                                TEDIT.STYLES))
+               NOSTYLE CHARSTYLES CHARSTYLE IN-PARA)
+              (SETQ STYLE (COND
+                             ((NULL STYLE)                   (* ; 
+                                       "STYLE of NIL means don't bother.  Just use the looks we got.")
+                              (SETQ NOSTYLE T)
+                              LOOKS)
+                             ((AND (SETQ CHARSTYLES (AND (GETTSTR TSTREAM CURRENTPARALOOKS)
+                                                         (GETPLOOKS (GETTSTR TSTREAM CURRENTPARALOOKS
+                                                                           )
+                                                                FMTCHARSTYLES)))
+                                   (SETQ CHARSTYLE (FASSOC STYLE CHARSTYLES)))
+                                                             (* ; 
+                   "If the paragraph we're in has character styles, and this is one of them, use it.")
+                              (SETQ IN-PARA T)
+                              CHARSTYLE)
+                             ((CDR (SASSOC STYLE STYLE-SHEET)))
+                             ((AND (LITATOM STYLE)
+                                   (DEFINEDP STYLE))         (* ; 
+                                                      "Call the guy's function to find the new looks")
+                              (APPLY* STYLE LOOKS PC TEXTOBJ))
+                             (T                              (* ; 
+                                                "If all else fails, return the original set of looks")
+                                (SETQ NOSTYLE T)
+                                LOOKS)))
+              (SETQ STYLE (COND
+                             ((LISTP STYLE)
+                              (\TEDIT.PARSE.CHARLOOKS.LIST (APPEND STYLE '(STYLE NIL))
+                                     LOOKS TEXTOBJ))
+                             (T STYLE)))
+
+              (* ;; "Cache the looks->styled-looks mapping, either in the cache for this kind of paragraph (which gets wiped when we hit a new para type), or in the global cache.")
+
+              [OR NOSTYLE (CL:IF IN-PARA
+                              (push *TEDIT-CURRENTPARA-CACHE* (CONS LOOKS STYLE))
+                              (push *TEDIT-PARASTYLE-CACHE* (CONS LOOKS STYLE)))]
+              STYLE])
+
+(\TEDIT.APPLY.PARASTYLES
+  [LAMBDA (PARALOOKS PC TEXTOBJ)                             (* ; "Edited 19-Feb-2025 13:31 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 22:07 by rmk")
+                                                             (* ; "Edited  4-Aug-2024 14:48 by rmk")
+                                                             (* ; "Edited 29-Apr-2024 11:06 by rmk")
+                                                             (* ; "Edited  4-Mar-2023 22:23 by rmk")
+                                                             (* ; "Edited 25-Sep-2022 13:26 by rmk")
+                                                             (* ; 
+                                                        "Edited  3-Jul-93 23:15 by sybalskY:MV:ENVOS")
+
+    (* ;; "Given a set of looks, return the looks with the proper styles expanded out.")
+
+    (\TEDIT.CHECK (type? PARALOOKS PARALOOKS))               (* ; "Incoming thing has to be a LOOKS.")
+    (OR (CDR (ASSOC PARALOOKS *TEDIT-PARASTYLE-CACHE*))
+        (LET* [NOSTYLE (STYLE-SHEET (OR (fetch (TEXTOBJ TXTSTYLESHEET) of TEXTOBJ)
+                                        TEDIT.STYLES))
+                     (STYLE (COND
+                               ((NULL (GETPLOOKS PARALOOKS FMTSTYLE))
+                                (SETQ NOSTYLE T)
+                                PARALOOKS)
+                               ((CDR (SASSOC (GETPLOOKS PARALOOKS FMTSTYLE)
+                                            STYLE-SHEET)))
+                               ((AND (LITATOM (GETPLOOKS PARALOOKS FMTSTYLE))
+                                     (DEFINEDP (GETPLOOKS PARALOOKS FMTSTYLE)))
+                                                             (* ; 
+                                                      "Call the guy's function to find the new looks")
+                                (APPLY* (GETPLOOKS PARALOOKS FMTSTYLE)
+                                       PARALOOKS PC TEXTOBJ))
+                               (T (SETQ NOSTYLE T)
+                                  PARALOOKS]
+              (CL:WHEN (LISTP STYLE)
+                  (SETQ STYLE (\TEDIT.PARSE.PARALOOKS.LIST (APPEND STYLE '(STYLE NIL))
+                                     PARALOOKS TEXTOBJ)))
+              (CL:UNLESS NOSTYLE
+                  (push *TEDIT-PARASTYLE-CACHE* (CONS PARALOOKS STYLE)))
+              STYLE])
+
+(TEDIT.STYLESHEET
+  [LAMBDA (SHEET TEXTSTREAM)                                 (* ; 
+                                                        "Edited  3-Jul-93 23:19 by sybalskY:MV:ENVOS")
+
+    (* ;; "Put a new stylesheet into force.  This REPLACES any existing style sheets, and forgets any pushed sheets.")
+
+    (LET [(TEXTOBJ (AND TEXTSTREAM (TEXTOBJ TEXTSTREAM]
+         (COND
+            (TEXTOBJ (SETQ *TEDIT-PARASTYLE-CACHE* NIL)      (* ; 
+                                                             "Clear the cache, to force reformatting")
+                   (replace (TEXTOBJ TXTSTYLESHEET) of TEXTOBJ with SHEET))
+            (T 
+               (* ;; "No specific document given; change the global style sheet TEDIT.STYLES")
+
+               (SETQ *TEDIT-PARASTYLE-CACHE* NIL)            (* ; 
+                                                             "Clear the cache, to force reformatting")
+               (SETQ TEDIT.STYLES SHEET)
+               (SETQ *TEDIT-STYLESHEET-SAVE-LIST* (LIST TEDIT.STYLES])
+
+(TEDIT.POP.STYLESHEET
+  [LAMBDA NIL                                                (* ; 
+                                                        "Edited  3-Jul-93 17:42 by sybalskY:MV:ENVOS")
+
+    (* ;; "Go back to an earlier stylesheet, by popping the stack of saved sheets.  You can't pop back to no sheet -- you'll always bottom out at the original style sheet.")
+
+    (SETQ *TEDIT-PARASTYLE-CACHE* NIL)                       (* ; 
+                                                             "Clear the cache, to force reformatting")
+    (SETQ TEDIT.STYLES (OR (CL:POP *TEDIT-STYLESHEET-SAVE-LIST*)
+                           TEDIT.STYLES])
+
+(TEDIT.PUSH.STYLESHEET
+  [LAMBDA (SHEET)                                            (* ; 
+                                                        "Edited  3-Jul-93 17:40 by sybalskY:MV:ENVOS")
+
+    (* ;; "Add more style definitions to the current style sheet, and remember how to get back to the old one.  Think of this as PUSHING onto a stack of stylesheets, with the new sheet being a composition of SHEET and the existing styles.  ")
+
+    (SETQ *TEDIT-PARASTYLE-CACHE* NIL)                       (* ; 
+                                                             "Clear the cache, to force reformatting")
+    (SETQ TEDIT.STYLES (APPEND SHEET TEDIT.STYLES))
+    (CL:PUSH TEDIT.STYLES *TEDIT-STYLESHEET-SAVE-LIST*])
+
+(TEDIT.ADD.STYLESHEET
+  [LAMBDA (SHEET)                                            (* ; 
+                                                        "Edited  3-Jul-93 17:38 by sybalskY:MV:ENVOS")
+
+    (* ;; "Add more style definitions to the current style sheet.  This ADDS entries, without remembering that there was an earlier sheet. ")
+
+    (SETQ *TEDIT-PARASTYLE-CACHE* NIL)                       (* ; 
+                                                             "Clear the cache, to force reformatting")
+    (SETQ TEDIT.STYLES (APPEND SHEET TEDIT.STYLES))
+    (SETQ *TEDIT-STYLESHEET-SAVE-LIST* (LIST TEDIT.STYLES])
+)
+
+
+
+(* ;; 
+"*TEDIT-PARASTYLE-CACHE* is an ALIST of  original char/para looks to styled char/para looks.  It is used to cache stylings, and is reset when the main stylesheet changes, and when we change paragraph looks, given paras that have private char styles."
+)
+
+
+
+
+(* ;; 
+"*TEDIT-CURRENTPARA-CACHE* is NIL if we're not in a para that has private char styles, or is the PARALOOKS (styled!) for that para, if we are.  Used to decide when we have to flush *TEDIT-PARASTYLE-CACHE* at paragraph boundaries.  Mostly, this'll be NIL and not interesting."
+)
+
+
+
+
+(* ;; 
+"*TEDIT-STYLESHEET-SAVE-LIST* is a list of points inside TEDIT.STYLES, so we can %"push%" new style sheets on the front, and %"pop%" them off sensibly.  This is the push-stack, in effect.  Used by TEDIT.ADD.STYLESHEET, TEDIT.PUSH.STYLESHEET, and TEDIT.POP.STYLESHEET"
+)
+
+
+(RPAQ? TEDIT.STYLES )
+
+
+
+(* ;; "RMK 2023: Maybe this should be one of the later ones? Only partly implemented")
+
+(DECLARE%: DOEVAL@COMPILE DONTCOPY
+
+(GLOBALVARS TEDIT.STYLES)
+)
+
+(RPAQ? *TEDIT-PARASTYLE-CACHE* )
+
+(RPAQ? *TEDIT-CURRENTPARA-CACHE* )
+
+(RPAQ? *TEDIT-STYLESHEET-SAVE-LIST* )
+(DECLARE%: DOEVAL@COMPILE DONTCOPY
+
+(GLOBALVARS *TEDIT-PARASTYLE-CACHE* *TEDIT-CURRENTPARA-CACHE* *TEDIT-STYLESHEET-SAVE-LIST*)
+)
+(DECLARE%: DONTCOPY
+  (FILEMAP (NIL (1980 11244 (\TEDIT.APPLY.STYLES 1990 . 5638) (\TEDIT.APPLY.PARASTYLES 5640 . 8118) (
+TEDIT.STYLESHEET 8120 . 9187) (TEDIT.POP.STYLESHEET 9189 . 9857) (TEDIT.PUSH.STYLESHEET 9859 . 10599) 
+(TEDIT.ADD.STYLESHEET 10601 . 11242)))))
+STOP
diff --git a/library/tedit/TEDIT-STYLES.LCOM b/library/tedit/TEDIT-STYLES.LCOM
new file mode 100644
index 00000000..ea9d177e
Binary files /dev/null and b/library/tedit/TEDIT-STYLES.LCOM differ
diff --git a/library/tedit/TEDIT-TFBRAVO b/library/tedit/TEDIT-TFBRAVO
index 7c6cdb14..455db089 100644
--- a/library/tedit/TEDIT-TFBRAVO
+++ b/library/tedit/TEDIT-TFBRAVO
@@ -1,13 +1,15 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 2-Jan-2025 23:45:04" {WMEDLEY}<library>TEDIT>TEDIT-TFBRAVO.;166 92474  
+(FILECREATED "19-Feb-2025 12:18:40" {WMEDLEY}<library>tedit>TEDIT-TFBRAVO.;175 94753  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TFBRAVO.READ.CHARLOOKS \TFBRAVO.FONT.FROM.CHARLOOKS TEDITFROMBRAVO 
-                       \TFBRAVO.USER.CM.LOOKS)
+      :CHANGES-TO (RECORDS PARA)
+                  (FNS TEDITFROMBRAVO \TFBRAVO.READ.PARALOOKS \TFBRAVO.HANDLE.HEADING 
+                       \TFBRAVO.PARSE.PROFILE.PARA \TFBRAVO.SPLIT.PARA \TFBRAVO.RUN.TABSPEC 
+                       \TFBRAVO.ADD.NAMEDTAB)
 
-      :PREVIOUS-DATE "19-Dec-2024 23:43:59" {WMEDLEY}<library>TEDIT>TEDIT-TFBRAVO.;163)
+      :PREVIOUS-DATE " 8-Feb-2025 23:19:34" {WMEDLEY}<library>tedit>TEDIT-TFBRAVO.;174)
 
 
 (PRETTYCOMPRINT TEDIT-TFBRAVOCOMS)
@@ -73,10 +75,10 @@
 (RECORD BRAVOFONT (BFFONTNUM BRFAMILY BRSIZE BRWEIGHT BRSLOPE))
 
 (RECORD PARA (PARAFMTSPEC RUNS FORMATPTRS)
-             (ACCESSFNS (PARATABDEFS (fetch (FMTSPEC FMTUSERINFO) of (fetch (PARA PARAFMTSPEC)
-                                                                        of DATUM))
-                               (replace (FMTSPEC FMTUSERINFO) of (fetch (PARA PARAFMTSPEC)
-                                                                    of DATUM) with NEWVALUE))))
+             (ACCESSFNS (PARATABDEFS (GETPLOOKS (fetch (PARA PARAFMTSPEC) of DATUM)
+                                            FMTUSERINFO)
+                               (FSETPLOOKS (fetch (PARA PARAFMTSPEC) of DATUM)
+                                      FMTUSERINFO NEWVALUE))))
 
 (RECORD RUN (RUNLENGTH RUNLOOKS RUNSTART RUNLAST)
             (ACCESSFNS (RUNTABS (fetch (CHARLOOKS CLUSERINFO) of (fetch (RUN RUNLOOKS) of DATUM))
@@ -171,7 +173,9 @@
           (RETURN T])
 
 (TEDITFROMBRAVO
-  [LAMBDA (BFILE TEXTSTREAM PROPS USER.CM)                   (* ; "Edited  2-Jan-2025 22:22 by rmk")
+  [LAMBDA (BFILE TEXTSTREAM PROPS USER.CM)                   (* ; "Edited 19-Feb-2025 12:13 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:03 by rmk")
+                                                             (* ; "Edited  2-Jan-2025 22:22 by rmk")
                                                              (* ; "Edited 17-Jan-2024 12:11 by rmk")
                                                              (* ; "Edited 26-Nov-2023 00:29 by rmk")
                                                              (* ; "Edited 14-Nov-2023 17:09 by rmk")
@@ -187,9 +191,9 @@
         (CL:UNLESS TEXTSTREAM
             (SETQ TEXTSTREAM (OPENTEXTSTREAM NIL)))          (* ; 
                                                      " Produce the USER.CM's alist of default values")
-        (bind PARA NEXTFMTSPEC USER.CM.CHARLOOKS USER.CM.FMTSPEC USER.CM.ALIST START (BSTREAM _ BFILE
-                                                                                            )
-              (TEXTOBJ _ (TEXTOBJ TEXTSTREAM)) declare (SPECVARS USER.CM.FMTSPEC USER.CM.CHARLOOKS 
+        (bind PARA NEXTPARALOOKS USER.CM.CHARLOOKS USER.CM.PARALOOKS USER.CM.ALIST START
+              (BSTREAM _ BFILE)
+              (TEXTOBJ _ (TEXTOBJ TEXTSTREAM)) declare (SPECVARS USER.CM.PARALOOKS USER.CM.CHARLOOKS
                                                               USER.CM.ALIST)
            first (CL:UNLESS (SETQ USER.CM (\TFBRAVO.GET.USER.CM BFILE USER.CM TEXTOBJ))
                                                              (* ; "Go for plain text")
@@ -203,18 +207,20 @@
                  (PUTTEXTPROP TEXTOBJ 'OUTPUT-FORMAT :DEFAULT)
                  [RESETSAVE (STREAMPROP BSTREAM 'ENDOFSTREAMOP (FUNCTION NILL))
                         `(PROGN (STREAMPROP ,BSTREAM 'ENDOFSTREAMOP OLDVALUE]
-                 (SETQ NEXTFMTSPEC USER.CM.FMTSPEC) eachtime (SETQ START (GETFILEPTR BSTREAM)) 
+                 (SETQ NEXTPARALOOKS USER.CM.PARALOOKS) eachtime (SETQ START (GETFILEPTR BSTREAM)) 
                                                              (* ; 
                                                              "Profiles and headings have to back up")
-                                                          (SETQ PARA (\TFBRAVO.PARSE.PARA NEXTFMTSPEC
-                                                                            BSTREAM TEXTOBJ)) 
+                                                              (SETQ PARA (\TFBRAVO.PARSE.PARA 
+                                                                                NEXTPARALOOKS BSTREAM
+                                                                                TEXTOBJ)) 
 
-                                                          (* ;; "No runs signals the very end")
- while (fetch (PARA RUNS) of PARA) do (SETQ NEXTFMTSPEC (fetch (PARA PARAFMTSPEC) of PARA)) 
+                                                              (* ;; "No runs signals the very end")
+ while (fetch (PARA RUNS) of PARA) do (SETQ NEXTPARALOOKS (fetch (PARA PARAFMTSPEC) of PARA)) 
 
                                       (* ;; "Valid profile paragraphs have a special interpretation, invalid ones must be mismarked ordinary text")
 
-                                      (CL:UNLESS (AND (EQ 'PROFILE (GETPARA NEXTFMTSPEC FMTPARATYPE))
+                                      (CL:UNLESS (AND (EQ 'PROFILE (GETPLOOKS NEXTPARALOOKS 
+                                                                          FMTPARATYPE))
                                                       (\TFBRAVO.PARSE.PROFILE.PARA BSTREAM PARA 
                                                              TEXTOBJ START))
                                              (\TFBRAVO.INSERT.PARA PARA BSTREAM TEXTOBJ))
@@ -223,7 +229,7 @@
                  (* ;; "Named tab information is collected in the userinfo fields, but then ignored.")
 
                  (for PARALOOKS in (GETTOBJ TEXTOBJ TXTPARALOOKSLIST)
-                    do (SETPARA PARALOOKS FMTUSERINFO NIL))
+                    do (SETPLOOKS PARALOOKS FMTUSERINFO NIL))
                  (for CHARLOOKS in (GETTOBJ TEXTOBJ TXTCHARLOOKSLIST)
                     do (SETCLOOKS CHARLOOKS CLUSERINFO NIL))
                  (\TEDIT.UNIQUIFY.ALL TEXTOBJ)               (* ; "Lists are complete and unique")
@@ -286,22 +292,23 @@
           (RETURN USER.CM])
 
 (\TFBRAVO.USER.CM.LOOKS
-  [LAMBDA (USER.CM TEXTOBJ)                                  (* ; "Edited  2-Jan-2025 11:06 by rmk")
+  [LAMBDA (USER.CM TEXTOBJ)                                  (* ; "Edited  8-Feb-2025 22:13 by rmk")
+                                                             (* ; "Edited  2-Jan-2025 11:06 by rmk")
                                                              (* ; "Edited 18-Aug-2023 18:47 by rmk")
                                                              (* ; "Edited 16-Aug-2023 21:33 by rmk")
                                                              (* ; "Edited  5-Aug-2023 17:15 by rmk")
-    (DECLARE (USEDFREE USER.CM.CHARLOOKS USER.CM.FMTSPEC USER.CM.ALIST))
+    (DECLARE (USEDFREE USER.CM.CHARLOOKS USER.CM.PARALOOKS USER.CM.ALIST))
     (SETQ USER.CM.ALIST (\TFBRAVO.READ.USER.CM USER.CM))
     (SETQ USER.CM.CHARLOOKS (create CHARLOOKS
                                    CLOFFSET _ 0))
     (\TFBRAVO.FONT.FROM.CHARLOOKS USER.CM.CHARLOOKS (\TFBRAVO.GETFONT 0 BRFAMILY)
            (\TFBRAVO.GETFONT 0 BRSIZE))
     (\TFBRAVO.INIT.PAGEFORMAT TEXTOBJ)
-    (SETQ USER.CM.FMTSPEC (\TFBRAVO.INIT.PARALOOKS USER.CM.ALIST))
+    (SETQ USER.CM.PARALOOKS (\TFBRAVO.INIT.PARALOOKS USER.CM.ALIST))
     (SETQ USER.CM.CHARLOOKS (\TEDIT.UNIQUIFY.CHARLOOKS USER.CM.CHARLOOKS TEXTOBJ))
-    (SETQ USER.CM.FMTSPEC (\TEDIT.UNIQUIFY.PARALOOKS USER.CM.FMTSPEC TEXTOBJ))
+    (SETQ USER.CM.PARALOOKS (\TEDIT.UNIQUIFY.PARALOOKS USER.CM.PARALOOKS TEXTOBJ))
     (SETTOBJ TEXTOBJ DEFAULTCHARLOOKS USER.CM.CHARLOOKS)
-    (SETTOBJ TEXTOBJ FMTSPEC USER.CM.FMTSPEC])
+    (SETTOBJ TEXTOBJ DEFAULTPARALOOKS USER.CM.PARALOOKS])
 
 (\TFBRAVO.READ.USER.CM
   [LAMBDA (USER.CM)                                          (* ; "Edited 27-Aug-2024 18:12 by rmk")
@@ -382,7 +389,8 @@
               (GO LLP)))])
 
 (\TFBRAVO.INIT.PARALOOKS
-  [LAMBDA (ALIST)                                            (* ; "Edited  4-Aug-2024 22:17 by rmk")
+  [LAMBDA (ALIST)                                            (* ; "Edited  8-Feb-2025 22:09 by rmk")
+                                                             (* ; "Edited  4-Aug-2024 22:17 by rmk")
                                                              (* ; "Edited 28-Jul-2024 21:36 by rmk")
                                                              (* ; "Edited 13-Aug-2023 11:27 by rmk")
                                                              (* ; "Edited  8-Aug-2023 23:51 by rmk")
@@ -391,12 +399,12 @@
 
     (* ;; "creates the default paragraph looks from the USER.CM.  The numeric values are Bravo defaults as specfied in the Bravo documentation. This assumes that all mica values in the USER.CM have already been converted to points.  ")
 
-    (LET ((INITFMTSPEC (create FMTSPEC using TEDIT.DEFAULT.FMTSPEC)))
+    (LET ((INITPARALOOKS (create PARALOOKS using TEDIT.DEFAULT.FMTSPEC)))
 
          (* ;; "Bravo User Manual says that default tab is 36, the Bravo file format document says 60.  I'm going with 36.")
 
-         (with FMTSPEC INITFMTSPEC (SETQ LEFTMAR (OR (CADR (ASSOC 'LeftMargin ALIST))
-                                                     85))
+         (with PARALOOKS INITPARALOOKS (SETQ LEFTMAR (OR (CADR (ASSOC 'LeftMargin ALIST))
+                                                         85))
                (SETQ 1STLEFTMAR (OR (CADR (ASSOC 'FirstLineLeftMargin ALIST))
                                     LEFTMAR))
                (SETQ RIGHTMAR (OR (CADR (ASSOC 'RightMargin ALIST))
@@ -410,7 +418,7 @@
                                        DEFAULTTAB))
                (SETQ FMTSPECIALX 0)
                (SETQ FMTSPECIALY 0))
-         INITFMTSPEC])
+         INITPARALOOKS])
 
 (\TFBRAVO.INIT.PAGEFORMAT
   [LAMBDA (TEXTOBJ)                                          (* ; "Edited 22-Sep-2023 20:03 by rmk")
@@ -497,7 +505,8 @@
 (DEFINEQ
 
 (\TFBRAVO.PARSE.PARA
-  [LAMBDA (OLDFMTSPEC BSTREAM TEXTOBJ)                       (* ; "Edited 21-Oct-2024 00:33 by rmk")
+  [LAMBDA (OLDPARALOOKS BSTREAM TEXTOBJ)                     (* ; "Edited  8-Feb-2025 23:04 by rmk")
+                                                             (* ; "Edited 21-Oct-2024 00:33 by rmk")
                                                              (* ; "Edited 14-Nov-2023 13:03 by rmk")
                                                              (* ; "Edited  7-Nov-2023 21:53 by rmk")
                                                              (* ; "Edited 21-Aug-2023 23:41 by rmk")
@@ -505,17 +514,17 @@
                                                              (* ; "Edited 16-Aug-2023 21:28 by rmk")
                                                             (* ; "Edited 13-Jun-2021 09:46 by rmk:")
 
-    (* ;; "OLDFMTSPEC are the paragraph looks of the previous paragraph, and RUNi are the character runs in the form returned by \TFBRAVO.READ.CHARLOOKS, except that here we fill in the character count for the last run.  Leaves the input file pointer at the end of the trailer, after the CR.")
+    (* ;; "OLDPARALOOKS are the paragraph looks of the previous paragraph, and RUNi are the character runs in the form returned by \TFBRAVO.READ.CHARLOOKS, except that here we fill in the character count for the last run.  Leaves the input file pointer at the end of the trailer, after the CR.")
 
     (* ;; "^Z marks the end of a Bravo-looks paragraph which may have internal CR's that mark the end of Tedit paragraphs.  The Bravo runs with different charlooks want to end up in different pieces all within the same paragraph.")
 
     (* ;; 
     "The carriage return that ends the trailer is its own final run, the trailer itself is skipped.")
 
-    (DECLARE (USEDFREE USER.CM.CHARLOOKS USER.CM.FMTSPEC))
-    (LET (BYTE PLEN ^ZPTR ENDCHAR FMTSPEC RUNS FORMATPTRS PARAGRAPH TABPTRS (PSTART (GETFILEPTR
-                                                                                     BSTREAM))
-               (FMTSPEC USER.CM.FMTSPEC))
+    (DECLARE (USEDFREE USER.CM.CHARLOOKS USER.CM.PARALOOKS))
+    (LET (BYTE PLEN ^ZPTR ENDCHAR PARALOOKS RUNS FORMATPTRS PARAGRAPH TABPTRS (PSTART (GETFILEPTR
+                                                                                       BSTREAM))
+               (PARALOOKS USER.CM.PARALOOKS))
 
          (* ;; "BYTE=NIL at EOF, no terminating ^Z")
 
@@ -544,17 +553,19 @@
                      (NIL T)
                      NIL))
          (SELCHARQ BYTE
-              (^Z (SETQ FMTSPEC (\TFBRAVO.READ.PARALOOKS OLDFMTSPEC BSTREAM TEXTOBJ))
+              (^Z (SETQ PARALOOKS (\TFBRAVO.READ.PARALOOKS OLDPARALOOKS BSTREAM TEXTOBJ))
                   (SETQ RUNS (\TFBRAVO.CREATE.RUNS BSTREAM PSTART PLEN)))
               (NIL)
               (\TEDIT.THELP "Bravo paragraph not ending in ^Z, CR, EOF"))
          (create PARA
-                PARAFMTSPEC _ FMTSPEC
+                PARAFMTSPEC _ PARALOOKS
                 RUNS _ RUNS
                 FORMATPTRS _ FORMATPTRS])
 
 (\TFBRAVO.READ.PARALOOKS
-  [LAMBDA (OLDFMTSPEC BSTREAM)                               (* ; "Edited 19-Dec-2024 23:42 by rmk")
+  [LAMBDA (OLDPARALOOKS BSTREAM)                             (* ; "Edited 19-Feb-2025 12:14 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:04 by rmk")
+                                                             (* ; "Edited 19-Dec-2024 23:42 by rmk")
                                                              (* ; "Edited 21-Oct-2024 00:27 by rmk")
                                                              (* ; "Edited 27-Aug-2024 21:59 by rmk")
                                                              (* ; "Edited 28-Jul-2024 21:39 by rmk")
@@ -566,46 +577,48 @@
                                                              (* ; "Edited 13-Aug-2023 19:58 by rmk")
                                                              (* ; "Edited  3-Aug-2023 00:20 by rmk")
                                                              (* ; "Edited 31-May-91 15:26 by jds")
-    (DECLARE (USEDFREE USER.CM.FMTSPEC))
+    (DECLARE (USEDFREE USER.CM.PARALOOKS))
 
     (* ;; 
-    "Decodes bravo paragraph looks into a TEDIT FMTSPEC.  OLDFMTSPEC is used just for its tabs.")
+    "Decodes bravo paragraph looks into a TEDIT PARALOOKS.  OLDPARALOOKS is used just for its tabs.")
 
-    (\DTEST OLDFMTSPEC 'FMTSPEC)
-    (bind LMFLAG 1LMFLAG COMMAND TABX TABNAME NAMEDTABS (TABDEFAULT _ (GETPARA USER.CM.FMTSPEC 
+    (PARALOOKS! OLDPARALOOKS)
+    (bind LMFLAG 1LMFLAG COMMAND TABX TABNAME NAMEDTABS (TABDEFAULT _ (GETPLOOKS USER.CM.PARALOOKS 
                                                                              FMTDEFAULTTAB))
-          (NEWFMTSPEC _ (create FMTSPEC using USER.CM.FMTSPEC))
-       first (CL:UNLESS (EQ 'PROFILE (FGETPARA OLDFMTSPEC FMTPARATYPE))
+          (NEWPARALOOKS _ (create PARALOOKS using USER.CM.PARALOOKS))
+       first (CL:UNLESS (EQ 'PROFILE (FGETPLOOKS OLDPARALOOKS FMTPARATYPE))
 
                  (* ;; "It appears that heading-tabs don't carry over to other paragraphs.  Although maybe the default interval-tab does?")
 
-                 (SETQ TABDEFAULT (OR (FGETPARA OLDFMTSPEC FMTDEFAULTTAB)
-                                      (FGETPARA USER.CM.FMTSPEC FMTDEFAULTTAB)))
+                 (SETQ TABDEFAULT (OR (FGETPLOOKS OLDPARALOOKS FMTDEFAULTTAB)
+                                      (FGETPLOOKS USER.CM.PARALOOKS FMTDEFAULTTAB)))
 
                  (* ;; "We don't put the NAMEDTABS in the TABSPEC since we don't know which ones will be activated by any particular run. ")
 
-                 (SETQ NAMEDTABS (COPY (FGETPARA OLDFMTSPEC FMTUSERINFO))))
+                 (SETQ NAMEDTABS (COPY (FGETPLOOKS OLDPARALOOKS FMTUSERINFO))))
        do (SELCHARQ (SETQ COMMAND (BIN BSTREAM))
                (l (SETQ LMFLAG T)
-                  (FSETPARA NEWFMTSPEC LEFTMAR (\TFBRAVO.READNUM? BSTREAM T 'MICATOHALFPICAPOINTS)))
+                  (FSETPLOOKS NEWPARALOOKS LEFTMAR (\TFBRAVO.READNUM? BSTREAM T 
+                                                          'MICATOHALFPICAPOINTS)))
                (d (SETQ 1LMFLAG T)
-                  (FSETPARA NEWFMTSPEC 1STLEFTMAR (\TFBRAVO.READNUM? BSTREAM T 'MICATOHALFPICAPOINTS)
-                         ))
-               (z (FSETPARA NEWFMTSPEC RIGHTMAR (\TFBRAVO.READNUM? BSTREAM T 'MICATOHALFPICAPOINTS)))
-               (x (FSETPARA NEWFMTSPEC LINELEAD (\TFBRAVO.READNUM? BSTREAM T)))
-               (e (FSETPARA NEWFMTSPEC LEADAFTER 0)
-                  (FSETPARA NEWFMTSPEC LEADBEFORE (\TFBRAVO.READNUM? BSTREAM T)))
+                  (FSETPLOOKS NEWPARALOOKS 1STLEFTMAR (\TFBRAVO.READNUM? BSTREAM T 
+                                                             'MICATOHALFPICAPOINTS)))
+               (z (FSETPLOOKS NEWPARALOOKS RIGHTMAR (\TFBRAVO.READNUM? BSTREAM T 
+                                                           'MICATOHALFPICAPOINTS)))
+               (x (FSETPLOOKS NEWPARALOOKS LINELEAD (\TFBRAVO.READNUM? BSTREAM T)))
+               (e (FSETPLOOKS NEWPARALOOKS LEADAFTER 0)
+                  (FSETPLOOKS NEWPARALOOKS LEADBEFORE (\TFBRAVO.READNUM? BSTREAM T)))
                (y                                            (* ; "vertical tabs are supported")
-                  (FSETPARA NEWFMTSPEC FMTSPECIALX 0)
-                  (FSETPARA NEWFMTSPEC FMTSPECIALY (\TFBRAVO.READNUM? BSTREAM T)))
-               (k (FSETPARA NEWFMTSPEC FMTHEADINGKEEP (\TFBRAVO.READNUM? BSTREAM T)))
+                  (FSETPLOOKS NEWPARALOOKS FMTSPECIALX 0)
+                  (FSETPLOOKS NEWPARALOOKS FMTSPECIALY (\TFBRAVO.READNUM? BSTREAM T)))
+               (k (FSETPLOOKS NEWPARALOOKS FMTHEADINGKEEP (\TFBRAVO.READNUM? BSTREAM T)))
                (w 'HardcopyMode)
-               (j (FSETPARA NEWFMTSPEC QUAD 'JUSTIFIED))
-               (c (FSETPARA NEWFMTSPEC QUAD 'CENTERED))
+               (j (FSETPLOOKS NEWPARALOOKS QUAD 'JUSTIFIED))
+               (c (FSETPLOOKS NEWPARALOOKS QUAD 'CENTERED))
                (q 
                   (* ;; "Profiles are marked here but then interpreted at the top")
 
-                  (FSETPARA NEWFMTSPEC FMTPARATYPE 'PROFILE))
+                  (FSETPLOOKS NEWPARALOOKS FMTPARATYPE 'PROFILE))
                (%(                                           (* ; "Collect the named tabs")
                    (SETQ TABX (\TFBRAVO.READNUM? BSTREAM T)) (* ; "Name or X position")
 
@@ -636,13 +649,13 @@
                ((CR \) 
                     (CL:WHEN (AND LMFLAG (NOT 1LMFLAG))      (* ; 
                                    "If there was a Left margin but no firstline left then default it")
-                        (FSETPARA NEWFMTSPEC 1STLEFTMAR (FGETPARA NEWFMTSPEC LEFTMAR)))
-                    (FSETPARA NEWFMTSPEC FMTDEFAULTTAB TABDEFAULT)
-                    (FSETPARA NEWFMTSPEC FMTUSERINFO (DREVERSE NAMEDTABS))
+                        (FSETPLOOKS NEWPARALOOKS 1STLEFTMAR (FGETPLOOKS NEWPARALOOKS LEFTMAR)))
+                    (FSETPLOOKS NEWPARALOOKS FMTDEFAULTTAB TABDEFAULT)
+                    (FSETPLOOKS NEWPARALOOKS FMTUSERINFO (DREVERSE NAMEDTABS))
                     (CL:WHEN (EQ COMMAND (CHARCODE CR))      (* ; 
                                                  "Read the \ separator, but leave the terminating CR")
                         (\BACKFILEPTR BSTREAM))
-                    (RETURN NEWFMTSPEC))
+                    (RETURN NEWPARALOOKS))
                (\TEDIT.THELP (CHARACTER COMMAND)
                       '" is not a legal Bravo paragraph-format character"])
 
@@ -797,7 +810,9 @@
 (DEFINEQ
 
 (\TFBRAVO.HANDLE.HEADING
-  [LAMBDA (BSTREAM TEXTOBJ HEADINGSTART)                     (* ; "Edited 20-Aug-2023 20:11 by rmk")
+  [LAMBDA (BSTREAM TEXTOBJ HEADINGSTART)                     (* ; "Edited 19-Feb-2025 12:17 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:05 by rmk")
+                                                             (* ; "Edited 20-Aug-2023 20:11 by rmk")
                                                              (* ; "Edited 18-Aug-2023 10:37 by rmk")
                                                              (* ; "Edited 12-Aug-2023 12:25 by rmk")
                                                              (* ; "Edited  9-Aug-2023 23:37 by rmk")
@@ -807,31 +822,33 @@
 
     (* ;; "Called from  \TFBRAVO.PARSE.PROFILE.PARA. The heading is a paragraph beginning at the current position, presumably just a line with a looks trailer. Its paralooks have to be marked with special heading properties--heading type and special X and Y locations.")
 
-    (DECLARE (USEDFREE USER.CM.FMTSPEC))
-    (LET (HEADINGDESC HEADINGPARA HEADINGFMTSPEC)            (* ; 
+    (DECLARE (USEDFREE USER.CM.PARALOOKS))
+    (LET (HEADINGDESC HEADINGPARA HEADINGPARALOOKS)          (* ; 
                                                           "skip over the trailer of the profile para")
          (SETFILEPTR BSTREAM HEADINGSTART)
-         (SETQ HEADINGPARA (\TFBRAVO.PARSE.PARA USER.CM.FMTSPEC BSTREAM TEXTOBJ))
-         (SETQ HEADINGFMTSPEC (fetch (PARA PARAFMTSPEC) of HEADINGPARA))
-         (replace (FMTSPEC FMTPARATYPE) of HEADINGFMTSPEC with 'PAGEHEADING)
+         (SETQ HEADINGPARA (\TFBRAVO.PARSE.PARA USER.CM.PARALOOKS BSTREAM TEXTOBJ))
+         (SETQ HEADINGPARALOOKS (fetch (PARA PARAFMTSPEC) of HEADINGPARA))
+         (SETPLOOKS HEADINGPARALOOKS FMTPARATYPE 'PAGEHEADING)
 
          (* ;; "This is where the vertical tab info is placed for the heading, remove the special x and y and use them as the position for the descriptor")
 
          (SETQ HEADINGDESC (LIST (GENSYM 'PageHeading)
-                                 (OR (fetch (FMTSPEC FMTSPECIALX) of HEADINGFMTSPEC)
+                                 (OR (FGETPLOOKS HEADINGPARALOOKS FMTSPECIALX)
                                      0)
-                                 (OR (fetch (FMTSPEC FMTSPECIALY) of HEADINGFMTSPEC)
+                                 (OR (FGETPLOOKS HEADINGPARALOOKS FMTSPECIALY)
                                      0)))
-         (replace (FMTSPEC FMTPARASUBTYPE) of HEADINGFMTSPEC with (CAR HEADINGDESC))
-         (replace (FMTSPEC FMTSPECIALX) of HEADINGFMTSPEC with (CADR HEADINGDESC))
-         (replace (FMTSPEC FMTSPECIALY) of HEADINGFMTSPEC with (CADDR HEADINGDESC))
+         (FSETPLOOKS HEADINGPARALOOKS FMTPARASUBTYPE (CAR HEADINGDESC))
+         (FSETPLOOKS HEADINGPARALOOKS FMTSPECIALX (CADR HEADINGDESC))
+         (FSETPLOOKS HEADINGPARALOOKS FMTSPECIALY (CADDR HEADINGDESC))
                                                              (* ; 
                                                              "now write out the heading paragraph")
          (\TFBRAVO.INSERT.PARA HEADINGPARA BSTREAM TEXTOBJ MAX.FIXP)
          HEADINGDESC])
 
 (\TFBRAVO.PARSE.PROFILE.PARA
-  [LAMBDA (BSTREAM PARAGRAPH TEXTOBJ START)                  (* ; "Edited 22-Sep-2023 20:02 by rmk")
+  [LAMBDA (BSTREAM PARAGRAPH TEXTOBJ START)                  (* ; "Edited 19-Feb-2025 12:17 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 21:27 by rmk")
+                                                             (* ; "Edited 22-Sep-2023 20:02 by rmk")
                                                              (* ; "Edited 19-Aug-2023 23:33 by rmk")
                                                              (* ; "Edited 17-Aug-2023 14:51 by rmk")
                                                              (* ; "Edited 10-Aug-2023 10:37 by rmk")
@@ -929,8 +946,8 @@
                (PROGN                                        (* ; 
                                                        "Not a profile line, presumably a mistaken q.")
                       (SETFILEPTR BSTREAM END)
-                      (replace (FMTSPEC FMTPARATYPE) of (fetch (PARA PARAFMTSPEC) of PARAGRAPH)
-                         with NIL)
+                      (FSETPLOOKS (fetch (PARA PARAFMTSPEC) of PARAGRAPH)
+                             FMTPARATYPE NIL)
                       (RETURN NIL] repeatuntil [EQ (CAR LINE)
                                                    (CONSTANT (CHARACTER (CHARCODE ^Z]
        finally (CL:WHEN ROMAN
@@ -951,17 +968,20 @@
 (DEFINEQ
 
 (\TFBRAVO.INSERT.PARA
-  [LAMBDA (PARA BSTREAM TEXTOBJ)                             (* ; "Edited 20-Aug-2023 16:13 by rmk")
+  [LAMBDA (PARA BSTREAM TEXTOBJ)                             (* ; "Edited  8-Feb-2025 23:06 by rmk")
+                                                             (* ; "Edited 20-Aug-2023 16:13 by rmk")
 
     (* ;; "Inserts pieces into TEXTOBJ that correspond to the runs in PARA.  PARA may be broken up at internal CR's to get spacing and tabs right.")
 
-    (for P PFMTSPEC in (\TFBRAVO.SPLIT.PARA PARA)
-       do (SETQ PFMTSPEC (fetch (PARA PARAFMTSPEC) of P))
-          (for RUN in (fetch (PARA RUNS) of P) do (SETQ PFMTSPEC (\TFBRAVO.RUN.TABSPEC RUN PFMTSPEC))
-                                                  (\TFBRAVO.INSERT.RUN RUN BSTREAM PFMTSPEC TEXTOBJ])
+    (for P PARALOOKS in (\TFBRAVO.SPLIT.PARA PARA)
+       do (SETQ PARALOOKS (fetch (PARA PARAFMTSPEC) of P))
+          (for RUN in (fetch (PARA RUNS) of P) do (SETQ PARALOOKS (\TFBRAVO.RUN.TABSPEC RUN PARALOOKS
+                                                                         ))
+                                                  (\TFBRAVO.INSERT.RUN RUN BSTREAM PARALOOKS TEXTOBJ])
 
 (\TFBRAVO.INSERT.RUN
-  [LAMBDA (RUN BSTREAM PARAFMTSPEC TEXTOBJ)                  (* ; "Edited 17-Mar-2024 12:41 by rmk")
+  [LAMBDA (RUN BSTREAM PARALOOKS TEXTOBJ)                    (* ; "Edited  8-Feb-2025 23:08 by rmk")
+                                                             (* ; "Edited 17-Mar-2024 12:41 by rmk")
                                                              (* ; "Edited 16-Jan-2024 18:28 by rmk")
                                                              (* ; "Edited 29-Dec-2023 11:50 by rmk")
                                                              (* ; "Edited 23-Sep-2023 12:11 by rmk")
@@ -971,7 +991,7 @@
 
     (* ;; "A Bravo run can include many CR's each of which should end a separate TEDIT paragraph.  Unless we want to think of those as paragraph internal meta-CRs ?")
 
-    (* ;; "PARAFMTSPEC is the intended paragraph PARALOOKS for the paragraph, providing the margins, line leading etc. common to all runs.  It may be specialized for each run to encode the tabs that that run actually selects (via \TFBRAVO.RUN.TABSPEC")
+    (* ;; "PARALOOKS is the intended paragraph PARALOOKS for the paragraph, providing the margins, line leading etc. common to all runs.  It may be specialized for each run to encode the tabs that that run actually selects (via \TFBRAVO.RUN.TABSPEC")
 
     (CL:WHEN (IGREATERP (fetch (RUN RUNLENGTH) of RUN)
                     0)                                       (* ; "No need for an empty piece")
@@ -982,7 +1002,7 @@
                              PLEN _ NCHARS
                              PLOOKS _ (\TEDIT.UNIQUIFY.CHARLOOKS (fetch (RUN RUNLOOKS) of RUN)
                                              TEXTOBJ)
-                             PPARALOOKS _ (\TEDIT.UNIQUIFY.PARALOOKS PARAFMTSPEC TEXTOBJ)
+                             PPARALOOKS _ (\TEDIT.UNIQUIFY.PARALOOKS PARALOOKS TEXTOBJ)
                              PPARALAST _ (fetch (RUN RUNLAST) of RUN)))
              (if (STRINGP RUNSTART)
                  then 
@@ -1010,10 +1030,12 @@
              PC))])
 
 (\TFBRAVO.SPLIT.PARA
-  [LAMBDA (PARA)                                             (* ; "Edited  9-Sep-2023 21:35 by rmk")
+  [LAMBDA (PARA)                                             (* ; "Edited 19-Feb-2025 12:15 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:12 by rmk")
+                                                             (* ; "Edited  9-Sep-2023 21:35 by rmk")
                                                              (* ; "Edited 22-Aug-2023 23:45 by rmk")
 
-    (* ;; "The Bravo paragraph PARA may contain internal CRs or FORMS that should be broken out into separate Tedit paragraphs.  All of them share the same basic FMTSPEC, except that paragraphs after the first should have 0 for paragraph leading and first-paragraph margins. The charlooks for each run are carried over to the splits.")
+    (* ;; "The Bravo paragraph PARA may contain internal CRs or FORMS that should be broken out into separate Tedit paragraphs.  All of them share the same basic PARALOOKS, except that paragraphs after the first should have 0 for paragraph leading and first-paragraph margins. The charlooks for each run are carried over to the splits.")
 
     (* ;; "However, we leave alone a paragraph with a special location, since we don't know how to arrange the positions of the later sub-paragraphs.")
 
@@ -1021,7 +1043,7 @@
 
     (* ;; "This smashes PARA's runs.")
 
-    (LET ((PARAFMTSPEC (fetch (PARA PARAFMTSPEC) of PARA))
+    (LET ((PARALOOKS (fetch (PARA PARAFMTSPEC) of PARA))
           NEWPARAS)
 
          (* ;; 
@@ -1029,9 +1051,9 @@
 
          (SETQ NEWPARAS
           (if [AND (fetch (PARA FORMATPTRS) of PARA)
-                   (FMEMB (fetch (FMTSPEC FMTSPECIALX) of PARAFMTSPEC)
+                   (FMEMB (GETPLOOKS PARALOOKS FMTSPECIALX)
                           '(0 NIL))
-                   (FMEMB (fetch (FMTSPEC FMTSPECIALY) of PARAFMTSPEC)
+                   (FMEMB (GETPLOOKS PARALOOKS FMTSPECIALY)
                           '(0 NIL]
               then [for PTR POS RUN FIRSTRUN NEWRUNLENGTH (RUNS _ (fetch (PARA RUNS) of PARA))
                       in (fetch (PARA FORMATPTRS) of PARA) eachtime (SETQ POS (CDR PTR))
@@ -1062,7 +1084,7 @@
                                                                           NEWRUNLENGTH)))
                                 (replace (RUN RUNLENGTH) of RUN with NEWRUNLENGTH)) 
 
-                            (* ;; "Fill in RUNS here, FMTSPEC below.  No more FORMATPTRS")
+                            (* ;; "Fill in RUNS here, PARALOOKS below.  No more FORMATPTRS")
 
                             (create PARA
                                    RUNS _ FIRSTRUN)
@@ -1072,19 +1094,18 @@
                             (* ;; "The first paragraph has LEADAFTER=0, all the others have 1STLEFTMAR=LEFTMAR and LEADAFTER=LEADBEFORE=0, except that the last one keeps the original LEADAFTER. Tabs are retained across all the runs.")
 
                             (replace (PARA PARAFMTSPEC) of (CAR $$VAL)
-                               with (create FMTSPEC using PARAFMTSPEC LEADAFTER _ 0))
-                            (for PTAIL (NEWFMTSPEC _ (create FMTSPEC
-                                                        using PARAFMTSPEC 1STLEFTMAR _
-                                                              (fetch (FMTSPEC LEFTMAR) of PARAFMTSPEC
-                                                                     )
-                                                              LEADBEFORE _ 0 LEADAFTER _ 0))
+                               with (create PARALOOKS using PARALOOKS LEADAFTER _ 0))
+                            (for PTAIL (NEWPARALOOKS _ (create PARALOOKS
+                                                          using PARALOOKS 1STLEFTMAR _
+                                                                (GETPLOOKS PARALOOKS LEFTMAR)
+                                                                LEADBEFORE _ 0 LEADAFTER _ 0))
                                on (CDR $$VAL)
                                do (replace (PARA PARAFMTSPEC) of (CAR PTAIL)
                                      with (CL:IF (CDR PTAIL)
-                                              NEWFMTSPEC
-                                              (create FMTSPEC using NEWFMTSPEC LEADAFTER _
-                                                                    (fetch (FMTSPEC LEADAFTER)
-                                                                       of PARAFMTSPEC)))]
+                                              NEWPARALOOKS
+                                              (create PARALOOKS using NEWPARALOOKS LEADAFTER _
+                                                                      (GETPLOOKS PARALOOKS LEADAFTER)
+                                                     ))]
             else (CONS PARA)))
 
          (* ;; "If t0 is the first tab specfied for a run, tx is the last tab of the previous run, and t(x+1) is defined, then change t0 to t(x+1).")
@@ -1109,31 +1130,33 @@
          NEWPARAS])
 
 (\TFBRAVO.RUN.TABSPEC
-  [LAMBDA (RUN PARAFMTSPEC)                                  (* ; "Edited 27-Aug-2024 22:02 by rmk")
+  [LAMBDA (RUN PARALOOKS)                                    (* ; "Edited 19-Feb-2025 12:16 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:15 by rmk")
+                                                             (* ; "Edited 27-Aug-2024 22:02 by rmk")
                                                              (* ; "Edited 28-Jul-2024 21:30 by rmk")
                                                              (* ; "Edited 15-Mar-2024 19:42 by rmk")
                                                              (* ; "Edited 22-Aug-2023 16:54 by rmk")
                                                              (* ; "Edited 19-Aug-2023 15:47 by rmk")
 
-    (* ;; "The CLUSERINFO contains a list of named tabs specified for this and presumably defined in the paragraph-wide PARAFMTSPEC. This returns a FMTSPEC for this run that only includes the named tabs that this run calls for.")
+    (* ;; "The CLUSERINFO contains a list of named tabs specified for this and presumably defined in the paragraph-wide PARALOOKS. This returns a PARALOOKS for this run that only includes the named tabs that this run calls for.")
 
     (* ;; "")
 
-    (* ;; "For the first run, the PARAFMTSPEC is the unspecialized run for the paragraph, with empty TABSPEC.  Each subsequent run is given the FMTSPEC for the last run, so the tabs that were selected there are known.  This is because t0 is loosely specified as picking the next tab in the FMTUSERINFO after the last tab that was used in the previous run (I think).  (Or perhaps as setting the next tabs TABX as the interval?)")
+    (* ;; "For the first run, the PARALOOKS is the unspecialized run for the paragraph, with empty TABSPEC.  Each subsequent run is given the PARALOOKS for the last run, so the tabs that were selected there are known.  This is because t0 is loosely specified as picking the next tab in the FMTUSERINFO after the last tab that was used in the previous run (I think).  (Or perhaps as setting the next tabs TABX as the interval?)")
 
     (* ;; "")
 
-    (* ;; "Bravo's named tabs are defined for a paragraph that might consist of several runs, and each run can pick out by name just just the tabs that it wants.  For Tedit the tabs are associated with the pieces that make up a paragraph, so we have to make sure that  Bravo runs are mapped to separate TEDIT pieces, and arrange it so that the pieces that correspond to separate runs have different different FMTSPECs.  ")
+    (* ;; "Bravo's named tabs are defined for a paragraph that might consist of several runs, and each run can pick out by name just just the tabs that it wants.  For Tedit the tabs are associated with the pieces that make up a paragraph, so we have to make sure that  Bravo runs are mapped to separate TEDIT pieces, and arrange it so that the pieces that correspond to separate runs have different different PARALOOKS.  ")
 
     (* ;; "")
 
     (* ;; "NOTE: the names in the tab definitions have been bumped up by 1 to match the names in the tab looks (e.g. (0,xxx) is (1,xxx) to correspond to t1.  t0 doesn't match.")
 
-    (DECLARE (USEDFREE USER.CM.FMTSPEC))
-    (LET ([LASTTAB (CAR (LAST (FGETPARA PARAFMTSPEC FMTTABS]
-          (TABDEFS (FGETPARA PARAFMTSPEC FMTUSERINFO))
-          (TABDEFAULT (OR (FGETPARA PARAFMTSPEC FMTDEFAULTTAB)
-                          (FGETPARA USER.CM.FMTSPEC FMTDEFAULTTAB)))
+    (DECLARE (USEDFREE USER.CM.PARALOOKS))
+    (LET ([LASTTAB (CAR (LAST (GETPLOOKS PARALOOKS FMTTABS]
+          (TABDEFS (FGETPLOOKS PARALOOKS FMTUSERINFO))
+          (TABDEFAULT (OR (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)
+                          (FGETPLOOKS USER.CM.PARALOOKS FMTDEFAULTTAB)))
           (RUNTABS (fetch (RUN RUNTABS) of RUN))
           TAB TABS)
          (CL:WHEN (AND TABDEFS (NULL RUNTABS))
@@ -1164,9 +1187,9 @@
                               (FUNCTION (LAMBDA (T1 T2)
                                           (ILEQ (fetch (TAB TABX) of T1)
                                                 (fetch (TAB TABX) of T2]
-             (SETQ PARAFMTSPEC (create FMTSPEC using PARAFMTSPEC FMTDEFAULTTAB _ TABDEFAULT FMTTABS _
+             (SETQ PARALOOKS (create PARALOOKS using PARALOOKS FMTDEFAULTTAB _ TABDEFAULT FMTTABS _ 
                                                      TABS)))
-         PARAFMTSPEC])
+         PARALOOKS])
 
 (\TFBRAVO.INSTALL.PAGEFORMAT
   [LAMBDA (TEXTOBJ)                                          (* ; "Edited 22-Sep-2023 20:04 by rmk")
@@ -1360,7 +1383,9 @@
 (DEFINEQ
 
 (\TFBRAVO.ADD.NAMEDTAB
-  [LAMBDA (RUN PARAFMTSPEC TEXTOBJ)                          (* ; "Edited  4-Aug-2024 18:05 by rmk")
+  [LAMBDA (RUN PARALOOKS TEXTOBJ)                            (* ; "Edited 19-Feb-2025 12:17 by rmk")
+                                                             (* ; "Edited  8-Feb-2025 23:19 by rmk")
+                                                             (* ; "Edited  4-Aug-2024 18:05 by rmk")
                                                              (* ; "Edited 28-Jul-2024 21:29 by rmk")
                                                              (* ; "Edited  9-Sep-2023 21:44 by rmk")
                                                              (* ; "Edited 18-Aug-2023 18:42 by rmk")
@@ -1371,7 +1396,7 @@
 
     (* ;; "")
 
-    (* ;; "Bravo's named tabs are defined for a paragraph that might consist of several runs, and each run can pick out by name just just the tabs that it wants.  For Tedit the tabs are associated with the pieces that make up a paragraph, so we have to make sure that  Bravo runs are mapped to separate TEDIT pieces, and arrange it so that the pieces that correspond to separate runs have different different FMTSPECs.  ")
+    (* ;; "Bravo's named tabs are defined for a paragraph that might consist of several runs, and each run can pick out by name just just the tabs that it wants.  For Tedit the tabs are associated with the pieces that make up a paragraph, so we have to make sure that  Bravo runs are mapped to separate TEDIT pieces, and arrange it so that the pieces that correspond to separate runs have different different PARALOOKS.  ")
 
     (* ;; "")
 
@@ -1379,8 +1404,8 @@
 
     (NOTUSED)
     (LET ((RUNLOOKS (fetch (RUN RUNLOOKS) of RUN))
-          (TABDEFS (FGETPARA PARAFMTSPEC FMTUSERINFO))
-          (TABDEFAULT (FGETPARA PARAFMTSPEC FMTDEFAULTTAB))
+          (TABDEFS (FGETPLOOKS PARALOOKS FMTUSERINFO))
+          (TABDEFAULT (FGETPLOOKS PARALOOKS FMTDEFAULTTAB))
           (TABOFFSETS '(fetch (RUN RUNTABOFFSETS) of RUN))
           TAB TABNAMES TABS)
          (SETQ TABNAMES (fetch (CHARLOOKS CLUSERINFO) of RUNLOOKS))
@@ -1403,11 +1428,11 @@
          "No name and 0, make it be the default. How else would we decide where the second tab goes?")
 
                       (SETQ TABDEFAULT (fetch (TAB TABX) of (CDAR TABDEFS]
-             (CL:WHEN (OR TABS (NEQ TABDEFAULT (FGETPARA PARAFMTSPEC FMTDEFAULTTAB)))
-                 (SETQ PARAFMTSPEC (create FMTSPEC using PARAFMTSPEC FMTDEFAULTTAB _ TABDEFAULT 
-                                                         FMTTABS _ TABS))
-                 (\TEDIT.UNIQUIFY.PARALOOKS PARAFMTSPEC TEXTOBJ)))
-         PARAFMTSPEC])
+             (CL:WHEN (OR TABS (NEQ TABDEFAULT (FGETPLOOKS PARALOOKS FMTDEFAULTTAB)))
+                 (SETQ PARALOOKS (create PARALOOKS using PARALOOKS FMTDEFAULTTAB _ TABDEFAULT FMTTABS
+                                                         _ TABS))
+                 (\TEDIT.UNIQUIFY.PARALOOKS PARALOOKS TEXTOBJ)))
+         PARALOOKS])
 
 (\TFBRAVO.COPY.NAMEDTAB
   [LAMBDA (OBJ PIECE OLDCH NEWCH)                            (* jds " 8-Feb-84 19:58")
@@ -1480,18 +1505,18 @@
 (AND NIL (\TEDIT.NAMEDTAB.INIT))
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (6772 13224 (TEDIT.BRAVOFILE? 6782 . 8512) (TEDITFROMBRAVO 8514 . 13222)) (13335 28811 (
-\TFBRAVO.GET.USER.CM 13345 . 16155) (\TFBRAVO.USER.CM.LOOKS 16157 . 17364) (\TFBRAVO.READ.USER.CM 
-17366 . 21936) (\TFBRAVO.INIT.PARALOOKS 21938 . 23924) (\TFBRAVO.INIT.PAGEFORMAT 23926 . 24806) (
-\TFBRAVO.GETPARAMS 24808 . 27662) (\TFBRAVO.FIND.LAST.TRAILER 27664 . 28809)) (28853 48956 (
-\TFBRAVO.PARSE.PARA 28863 . 32663) (\TFBRAVO.READ.PARALOOKS 32665 . 39087) (\TFBRAVO.CREATE.RUNS 39089
- . 40477) (\TFBRAVO.READ.CHARLOOKS 40479 . 45508) (\TFBRAVO.FONT.FROM.CHARLOOKS 45510 . 47057) (
-\TFBRAVO.READNUM? 47059 . 48954)) (48993 59744 (\TFBRAVO.HANDLE.HEADING 49003 . 51635) (
-\TFBRAVO.PARSE.PROFILE.PARA 51637 . 59742)) (59787 81236 (\TFBRAVO.INSERT.PARA 59797 . 60450) (
-\TFBRAVO.INSERT.RUN 60452 . 63649) (\TFBRAVO.SPLIT.PARA 63651 . 70893) (\TFBRAVO.RUN.TABSPEC 70895 . 
-75541) (\TFBRAVO.INSTALL.PAGEFORMAT 75543 . 81234)) (81237 85380 (\TFBRAVO.ASSERT 81247 . 81777) (
-\TEST.CHARACTER.LOOKS 81779 . 83665) (\TEST.PARAGRAPH.LOOKS 83667 . 85378)) (85865 92308 (
-\TFBRAVO.ADD.NAMEDTAB 85875 . 89266) (\TFBRAVO.COPY.NAMEDTAB 89268 . 89716) (\TFBRAVO.PUT.NAMEDTAB 
-89718 . 89998) (\TFBRAVO.GET.NAMEDTAB 90000 . 90377) (\NAMEDTABNYET 90379 . 90539) (\NAMEDTABSIZE 
-90541 . 91056) (\NAMEDTABPREPRINT 91058 . 91256) (\TEDIT.NAMEDTAB.INIT 91258 . 92306)))))
+  (FILEMAP (NIL (6790 13568 (TEDIT.BRAVOFILE? 6800 . 8530) (TEDITFROMBRAVO 8532 . 13566)) (13679 29406 (
+\TFBRAVO.GET.USER.CM 13689 . 16499) (\TFBRAVO.USER.CM.LOOKS 16501 . 17836) (\TFBRAVO.READ.USER.CM 
+17838 . 22408) (\TFBRAVO.INIT.PARALOOKS 22410 . 24519) (\TFBRAVO.INIT.PAGEFORMAT 24521 . 25401) (
+\TFBRAVO.GETPARAMS 25403 . 28257) (\TFBRAVO.FIND.LAST.TRAILER 28259 . 29404)) (29448 50146 (
+\TFBRAVO.PARSE.PARA 29458 . 33385) (\TFBRAVO.READ.PARALOOKS 33387 . 40277) (\TFBRAVO.CREATE.RUNS 40279
+ . 41667) (\TFBRAVO.READ.CHARLOOKS 41669 . 46698) (\TFBRAVO.FONT.FROM.CHARLOOKS 46700 . 48247) (
+\TFBRAVO.READNUM? 48249 . 50144)) (50183 61224 (\TFBRAVO.HANDLE.HEADING 50193 . 52920) (
+\TFBRAVO.PARSE.PROFILE.PARA 52922 . 61222)) (61267 83303 (\TFBRAVO.INSERT.PARA 61277 . 62118) (
+\TFBRAVO.INSERT.RUN 62120 . 65422) (\TFBRAVO.SPLIT.PARA 65424 . 72739) (\TFBRAVO.RUN.TABSPEC 72741 . 
+77608) (\TFBRAVO.INSTALL.PAGEFORMAT 77610 . 83301)) (83304 87447 (\TFBRAVO.ASSERT 83314 . 83844) (
+\TEST.CHARACTER.LOOKS 83846 . 85732) (\TEST.PARAGRAPH.LOOKS 85734 . 87445)) (87932 94587 (
+\TFBRAVO.ADD.NAMEDTAB 87942 . 91545) (\TFBRAVO.COPY.NAMEDTAB 91547 . 91995) (\TFBRAVO.PUT.NAMEDTAB 
+91997 . 92277) (\TFBRAVO.GET.NAMEDTAB 92279 . 92656) (\NAMEDTABNYET 92658 . 92818) (\NAMEDTABSIZE 
+92820 . 93335) (\NAMEDTABPREPRINT 93337 . 93535) (\TEDIT.NAMEDTAB.INIT 93537 . 94585)))))
 STOP
diff --git a/library/tedit/TEDIT-TFBRAVO.LCOM b/library/tedit/TEDIT-TFBRAVO.LCOM
index 23c2a83c..793279d8 100644
Binary files a/library/tedit/TEDIT-TFBRAVO.LCOM and b/library/tedit/TEDIT-TFBRAVO.LCOM differ
diff --git a/library/tedit/TEDIT-WINDOW b/library/tedit/TEDIT-WINDOW
index c418b63b..8837a1d3 100644
--- a/library/tedit/TEDIT-WINDOW
+++ b/library/tedit/TEDIT-WINDOW
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 1-Feb-2025 10:36:25" {WMEDLEY}<library>TEDIT>TEDIT-WINDOW.;748 231614 
+(FILECREATED "16-Feb-2025 23:34:57" {WMEDLEY}<library>tedit>TEDIT-WINDOW.;759 232910 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.SHIFTLINES \TEDIT.SCROLLUP \TEDIT.SCROLLDOWN)
+      :CHANGES-TO (FNS \TEDIT.WINDOW.CREATE)
 
-      :PREVIOUS-DATE " 7-Jan-2025 23:47:15" {WMEDLEY}<library>TEDIT>TEDIT-WINDOW.;747)
+      :PREVIOUS-DATE "13-Feb-2025 20:49:31" {WMEDLEY}<library>TEDIT>TEDIT-WINDOW.;754)
 
 
 (PRETTYCOMPRINT TEDIT-WINDOWCOMS)
@@ -25,7 +25,7 @@
         (INITRECORDS TEDITCARET PANEPROPS)
         (FILES ATTACHEDWINDOW)
         (FNS TEDIT.DEFER.UPDATES)
-        (FNS \TEDIT.CREATEW \TEDIT.WINDOW.SETUP \TEDIT.MINIMAL.WINDOW.SETUP \TEDIT.CLEARPANE 
+        (FNS \TEDIT.WINDOW.CREATE \TEDIT.WINDOW.SETUP \TEDIT.MINIMAL.WINDOW.SETUP \TEDIT.CLEARPANE 
              \TEDIT.FILL.PANES)
         (FNS \TEDIT.CURSORMOVEDFN \TEDIT.CURSOROUTFN \TEDIT.ACTIVE.WINDOWP \TEDIT.EXPANDFN 
              \TEDIT.MAINW \TEDIT.MAINSTREAM \TEDIT.PRIMARYPANE \TEDIT.PANELIST \TEDIT.NEWREGIONFN 
@@ -354,8 +354,9 @@
 )
 (DEFINEQ
 
-(\TEDIT.CREATEW
-  [LAMBDA (WINDOW TSTREAM PROPS)                             (* ; "Edited  1-Jul-2024 22:55 by rmk")
+(\TEDIT.WINDOW.CREATE
+  [LAMBDA (WINDOW TSTREAM PROPS)                             (* ; "Edited 16-Feb-2025 23:34 by rmk")
+                                                             (* ; "Edited  1-Jul-2024 22:55 by rmk")
                                                              (* ; "Edited 29-Jun-2024 23:16 by rmk")
                                                              (* ; "Edited  5-May-2024 21:54 by rmk")
                                                              (* ; "Edited 20-Mar-2024 09:57 by rmk")
@@ -379,7 +380,7 @@
 
     (LET ((TEXTOBJ (TEXTOBJ TSTREAM))
           (PHEIGHT 0)
-          TITLE REGIONTYPE PROMPTPROP REGION FILE PWINDOW PREPROMPT WTEXTOBJ)
+          TITLE REGIONTYPE PROMPTPROP REGION FILE PWINDOW PREPROMPT WTEXTOBJ WIDTH)
          (CL:WHEN (WINDOWP WINDOW)
              (CL:WHEN (SETQ WTEXTOBJ (fetch (TEXTWINDOW WTEXTOBJ) of WINDOW))
 
@@ -421,8 +422,17 @@
                  (CL:WHEN FILE
                      (printout PROMPTWINDOW " for " T "  " (FULLNAME FILE)))
                  (TERPRI PROMPTWINDOW)
-                 (SETQ REGION (GETREGION 32 (IPLUS PHEIGHT 32)
-                                     REGIONTYPE))            (* ; 
+                 [SETQ WIDTH (for PARALOOKS in (FGETTOBJ TEXTOBJ TXTPARALOOKSLIST)
+                                largest (GETPARA PARALOOKS RIGHTMAR)
+                                finally (RETURN (IPLUS \TEDIT.LINEREGION.WIDTH (OR $$EXTREME 32)
+                                                       12
+                                                       (CL:IF (FGETTOBJ TEXTOBJ TXTNOTSPLITTABLE)
+                                                           0
+                                                           \TEDIT.OP.WIDTH)]
+                 (GETMOUSESTATE)
+                 [SETQ REGION (GETREGION 32 (IPLUS PHEIGHT 32)
+                                     (CREATEREGION LASTMOUSEX LASTMOUSEY WIDTH (PLUS PHEIGHT 200]
+                                                             (* ; 
                                                         "We don't want the default to keep shrinking")
                  (SETQ PREPROMPT (create REGION using REGION)))
              (add (fetch (REGION HEIGHT) of REGION)
@@ -1060,7 +1070,8 @@
 (DEFINEQ
 
 (\TEDIT.BUTTONEVENTFN
-  [LAMBDA (PANE)                                             (* ; "Edited  6-Dec-2024 11:33 by rmk")
+  [LAMBDA (PANE)                                             (* ; "Edited 13-Feb-2025 11:53 by rmk")
+                                                             (* ; "Edited  6-Dec-2024 11:33 by rmk")
                                                              (* ; "Edited  1-Dec-2024 12:03 by rmk")
                                                              (* ; "Edited 27-Nov-2024 20:21 by rmk")
                                                              (* ; "Edited  3-Nov-2024 07:19 by rmk")
@@ -1106,9 +1117,7 @@
                                                                    TEXTOBJ)
                                                             (\TEDIT.BUTTONEVENTFN.INACTIVE TEXTOBJ 
                                                                    PANE)
-                                                            (\TEDIT.PANE.SPLIT TEXTOBJ PANE)
-                                                            (NOT (\TEDIT.XYTOSEL.INLINEP X Y PANE 
-                                                                        TEXTOBJ)))
+                                                            (\TEDIT.PANE.SPLIT TEXTOBJ PANE))
                                                       (RETURN)) 
 
                                                (* ;; "")
@@ -1135,6 +1144,7 @@
                                                (SETQ NEWSEL (\TEDIT.COPYSEL CURSEL)) 
                                                              (* ; 
                                                       "Gets line-chains and consistent initial looks")
+                                               (FSETTOBJ TEXTOBJ LASTARROWX NIL)
                eachtime (BLOCK)                              (* ; "Give other processes a chance")
                      (GETMOUSESTATE)                         (* ; 
                                                              "And get the new mouse and key info")
@@ -3462,7 +3472,9 @@
                 (UPDATE/MENU/IMAGE MENU])
 
 (TEDIT.DEFAULT.MENUFN
-  [LAMBDA (PANE)                                             (* ; "Edited  7-Jan-2025 23:46 by rmk")
+  [LAMBDA (PANE)                                             (* ; "Edited 12-Feb-2025 16:26 by rmk")
+                                                             (* ; "Edited  9-Feb-2025 21:28 by rmk")
+                                                             (* ; "Edited  7-Jan-2025 23:46 by rmk")
                                                              (* ; "Edited 27-Jul-2024 20:24 by rmk")
                                                              (* ; "Edited 30-Jun-2024 12:38 by rmk")
                                                              (* ; "Edited 25-Jun-2024 11:59 by rmk")
@@ -3489,7 +3501,7 @@
             THISMENU ITEM)
            (CL:WHEN (FGETTOBJ TEXTOBJ EDITOPACTIVE)
 
-               (* ;; "We're busy doing something, tell him to wait")
+               (* ;; "We're busy doing something, tell him to wait.  Unfortunately, this string will overwrite whatever may be in the Tedit promptwindow (e.g. a GETINPUT calling TTYINPROMPTFORWORD for a meta-F command), obscuring what the user has already typed.   Maybe an interface that tests to see if the promptwindow is in use, and enlarges it with an extra line above the current type-in?")
 
                (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT (CL:IF (EQ T (FGETTOBJ TEXTOBJ EDITOPACTIVE))
                                                       "Edit"
@@ -3497,15 +3509,14 @@
                                                  " operation in progress; please wait")
                       T)
                (RETURN NIL))
-           (SETQ THISMENU (COND
-                             (WMENU)
-                             ((SETQ WMENU (WINDOWPROP PANE 'TEDIT.MENU.COMMANDS))
-                              (PROG1 (SETQ WMENU (\TEDIT.CREATEMENU WMENU))
-                                  (WINDOWPROP PANE 'TEDIT.MENU WMENU)))
-                             (TEDIT.DEFAULT.MENU)))
-           (SETQ ITEM (MENU THISMENU))
+           (SETQ THISMENU (if WMENU
+                            elseif (SETQ WMENU (WINDOWPROP PANE 'TEDIT.MENU.COMMANDS))
+                              then (PROG1 (SETQ WMENU (\TEDIT.CREATEMENU WMENU))
+                                       (WINDOWPROP PANE 'TEDIT.MENU WMENU))
+                            else TEDIT.DEFAULT.MENU))
+           (SETQ ITEM (CAR (MENU THISMENU)))
            (ERSETQ (RESETLST
-                       [SELECTQ (CAR ITEM)
+                       [SELECTQ ITEM
                            ((Put |Put Formatted Document|) 
                                 (TEDIT.PUT TEXTOBJ NIL NIL (GETTEXTPROP TEXTOBJ 'CLEARPUT)))
                            (Plain-Text (TEDIT.PUT TEXTOBJ NIL NIL T))
@@ -3543,12 +3554,11 @@
                                          (\TEDIT.MENU.START (\TEDIT.PAGEMENU.CREATE)
                                                 (\TEDIT.PRIMARYPANE TEXTOBJ)
                                                 "Page Layout Menu" 150 'PAGE))
-                           (CL:WHEN (CAR ITEM)               (* ; 
+                           (CL:WHEN ITEM                     (* ; 
                                                   "Apply a user-supplied function to the text stream")
                                [RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ T)
                                       '(PROGN (\TEDIT.MARKINACTIVE OLDVALUE]
-                               (APPLY* (CAR ITEM)
-                                      (fetch (TEXTWINDOW WTEXTSTREAM) of PANE)))])])
+                               (APPLY* ITEM (fetch (TEXTWINDOW WTEXTSTREAM) of PANE)))])])
 
 (TEDIT.REMOVE.MENUITEM
   [LAMBDA (MENU ITEM)                                        (* gbn "26-Apr-84 04:06")
@@ -3652,37 +3662,37 @@
 (RPAQ? TEDIT.TITLED.ICON.TEMPLATE (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ 
                                          TEDIT.ICON.TITLE.REGION))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (18448 19344 (TEDIT.DEFER.UPDATES 18458 . 19342)) (19345 42387 (\TEDIT.CREATEW 19355 . 
-26070) (\TEDIT.WINDOW.SETUP 26072 . 30185) (\TEDIT.MINIMAL.WINDOW.SETUP 30187 . 38389) (
-\TEDIT.CLEARPANE 38391 . 39108) (\TEDIT.FILL.PANES 39110 . 42385)) (42388 65102 (\TEDIT.CURSORMOVEDFN 
-42398 . 47271) (\TEDIT.CURSOROUTFN 47273 . 47718) (\TEDIT.ACTIVE.WINDOWP 47720 . 48771) (
-\TEDIT.EXPANDFN 48773 . 49336) (\TEDIT.MAINW 49338 . 50618) (\TEDIT.MAINSTREAM 50620 . 50887) (
-\TEDIT.PRIMARYPANE 50889 . 51659) (\TEDIT.PANELIST 51661 . 52157) (\TEDIT.NEWREGIONFN 52159 . 54675) (
-\TEDIT.SET.WINDOW.EXTENT 54677 . 59931) (\TEDIT.SHRINK.ICONCREATE 59933 . 62473) (\TEDIT.SHRINKFN 
-62475 . 62884) (\TEDIT.PANEREGION 62886 . 65100)) (65134 96589 (\TEDIT.BUTTONEVENTFN 65144 . 77697) (
-\TEDIT.BUTTONEVENTFN.DOOPERATION 77699 . 84422) (\TEDIT.BUTTONEVENTFN.GETOPERATION 84424 . 86266) (
-\TEDIT.BUTTONEVENTFN.CURSEL.INIT 86268 . 89505) (\TEDIT.BUTTONEVENTFN.INACTIVE 89507 . 91849) (
-\TEDIT.BUTTONEVENTFN.INTITLE 91851 . 93686) (\TEDIT.COPYINSERTFN 93688 . 94820) (\TEDIT.FOREIGN.COPY 
-94822 . 96587)) (96590 113699 (\TEDIT.PANE.SPLIT 96600 . 101079) (\TEDIT.SPLITW 101081 . 108540) (
-\TEDIT.UNSPLITW 108542 . 112356) (\TEDIT.LINKPANES 112358 . 113121) (\TEDIT.UNLINKPANE 113123 . 113697
-)) (115056 115947 (TEDITWINDOWP 115066 . 115945)) (115984 119087 (TEDIT.GETINPUT 115994 . 118437) (
-\TEDIT.MAKEFILENAME 118439 . 119085)) (119136 127437 (TEDIT.PROMPTWINDOW 119146 . 119460) (
-TEDIT.PROMPTPRINT 119462 . 122089) (TEDIT.PROMPTCLEAR 122091 . 123810) (TEDIT.PROMPTFLASH 123812 . 
-125744) (\TEDIT.PROMPT.PAGEFULLFN 125746 . 127435)) (127675 136501 (\TEXTSTREAM.TITLE 127685 . 128375)
- (\TEDIT.DEFAULT.TITLE 128377 . 130756) (\TEDIT.WINDOW.TITLE 130758 . 132927) (\TEXTSTREAM.FILENAME 
-132929 . 134599) (\TEDIT.UPDATE.TITLE 134601 . 136499)) (136544 144747 (TEDIT.DEACTIVATE.WINDOW 136554
- . 142347) (\TEDIT.RESHAPEFN 142349 . 144519) (\TEDIT.REPAINTFN 144521 . 144745)) (144748 187127 (
-\TEDIT.SCROLLFN 144758 . 147003) (\TEDIT.SCROLLCH.TOP 147005 . 149116) (\TEDIT.SCROLLCH.BOTTOM 149118
- . 153448) (\TEDIT.SCROLLUP 153450 . 159067) (\TEDIT.TOPLINE.YTOP 159069 . 160738) (\TEDIT.SCROLLDOWN 
-160740 . 167670) (\TEDIT.SCROLL.CARET 167672 . 170510) (\TEDIT.VISIBLECARETP 170512 . 172806) (
-\TEDIT.VISIBLECHARP 172808 . 173899) (\TEDIT.BITMAPLINES 173901 . 177821) (\TEDIT.SETPANE.TOPLINE 
-177823 . 178614) (\TEDIT.SHIFTLINES 178616 . 187125)) (187128 197997 (\TEDIT.ONSCREEN? 187138 . 191689
-) (\TEDIT.ONSCREEN.REGION 191691 . 195342) (\TEDIT.AFTERMOVEFN 195344 . 196241) (OFFSCREENP 196243 . 
-197995)) (198039 200656 (\TEDIT.PROCIDLEFN 198049 . 199586) (\TEDIT.PROCENTRYFN 199588 . 200033) (
-\TEDIT.PROCEXITFN 200035 . 200654)) (200735 213889 (\TEDIT.DOWNCARET 200745 . 201538) (
-\TEDIT.FLASHCARET 201540 . 203651) (\TEDIT.UPCARET 203653 . 204757) (TEDIT.NORMALIZECARET 204759 . 
-207977) (\TEDIT.SETCARET 207979 . 213259) (\TEDIT.CARET 213261 . 213887)) (213923 225584 (
-TEDIT.ADD.MENUITEM 213933 . 216224) (TEDIT.DEFAULT.MENUFN 216226 . 222796) (TEDIT.REMOVE.MENUITEM 
-222798 . 223795) (\TEDIT.CREATEMENU 223797 . 224362) (\TEDIT.MENU.WHENHELDFN 224364 . 225269) (
-\TEDIT.MENU.WHENSELECTEDFN 225271 . 225582)))))
+  (FILEMAP (NIL (18423 19319 (TEDIT.DEFER.UPDATES 18433 . 19317)) (19320 43173 (\TEDIT.WINDOW.CREATE 
+19330 . 26856) (\TEDIT.WINDOW.SETUP 26858 . 30971) (\TEDIT.MINIMAL.WINDOW.SETUP 30973 . 39175) (
+\TEDIT.CLEARPANE 39177 . 39894) (\TEDIT.FILL.PANES 39896 . 43171)) (43174 65888 (\TEDIT.CURSORMOVEDFN 
+43184 . 48057) (\TEDIT.CURSOROUTFN 48059 . 48504) (\TEDIT.ACTIVE.WINDOWP 48506 . 49557) (
+\TEDIT.EXPANDFN 49559 . 50122) (\TEDIT.MAINW 50124 . 51404) (\TEDIT.MAINSTREAM 51406 . 51673) (
+\TEDIT.PRIMARYPANE 51675 . 52445) (\TEDIT.PANELIST 52447 . 52943) (\TEDIT.NEWREGIONFN 52945 . 55461) (
+\TEDIT.SET.WINDOW.EXTENT 55463 . 60717) (\TEDIT.SHRINK.ICONCREATE 60719 . 63259) (\TEDIT.SHRINKFN 
+63261 . 63670) (\TEDIT.PANEREGION 63672 . 65886)) (65920 97384 (\TEDIT.BUTTONEVENTFN 65930 . 78492) (
+\TEDIT.BUTTONEVENTFN.DOOPERATION 78494 . 85217) (\TEDIT.BUTTONEVENTFN.GETOPERATION 85219 . 87061) (
+\TEDIT.BUTTONEVENTFN.CURSEL.INIT 87063 . 90300) (\TEDIT.BUTTONEVENTFN.INACTIVE 90302 . 92644) (
+\TEDIT.BUTTONEVENTFN.INTITLE 92646 . 94481) (\TEDIT.COPYINSERTFN 94483 . 95615) (\TEDIT.FOREIGN.COPY 
+95617 . 97382)) (97385 114494 (\TEDIT.PANE.SPLIT 97395 . 101874) (\TEDIT.SPLITW 101876 . 109335) (
+\TEDIT.UNSPLITW 109337 . 113151) (\TEDIT.LINKPANES 113153 . 113916) (\TEDIT.UNLINKPANE 113918 . 114492
+)) (115851 116742 (TEDITWINDOWP 115861 . 116740)) (116779 119882 (TEDIT.GETINPUT 116789 . 119232) (
+\TEDIT.MAKEFILENAME 119234 . 119880)) (119931 128232 (TEDIT.PROMPTWINDOW 119941 . 120255) (
+TEDIT.PROMPTPRINT 120257 . 122884) (TEDIT.PROMPTCLEAR 122886 . 124605) (TEDIT.PROMPTFLASH 124607 . 
+126539) (\TEDIT.PROMPT.PAGEFULLFN 126541 . 128230)) (128470 137296 (\TEXTSTREAM.TITLE 128480 . 129170)
+ (\TEDIT.DEFAULT.TITLE 129172 . 131551) (\TEDIT.WINDOW.TITLE 131553 . 133722) (\TEXTSTREAM.FILENAME 
+133724 . 135394) (\TEDIT.UPDATE.TITLE 135396 . 137294)) (137339 145542 (TEDIT.DEACTIVATE.WINDOW 137349
+ . 143142) (\TEDIT.RESHAPEFN 143144 . 145314) (\TEDIT.REPAINTFN 145316 . 145540)) (145543 187922 (
+\TEDIT.SCROLLFN 145553 . 147798) (\TEDIT.SCROLLCH.TOP 147800 . 149911) (\TEDIT.SCROLLCH.BOTTOM 149913
+ . 154243) (\TEDIT.SCROLLUP 154245 . 159862) (\TEDIT.TOPLINE.YTOP 159864 . 161533) (\TEDIT.SCROLLDOWN 
+161535 . 168465) (\TEDIT.SCROLL.CARET 168467 . 171305) (\TEDIT.VISIBLECARETP 171307 . 173601) (
+\TEDIT.VISIBLECHARP 173603 . 174694) (\TEDIT.BITMAPLINES 174696 . 178616) (\TEDIT.SETPANE.TOPLINE 
+178618 . 179409) (\TEDIT.SHIFTLINES 179411 . 187920)) (187923 198792 (\TEDIT.ONSCREEN? 187933 . 192484
+) (\TEDIT.ONSCREEN.REGION 192486 . 196137) (\TEDIT.AFTERMOVEFN 196139 . 197036) (OFFSCREENP 197038 . 
+198790)) (198834 201451 (\TEDIT.PROCIDLEFN 198844 . 200381) (\TEDIT.PROCENTRYFN 200383 . 200828) (
+\TEDIT.PROCEXITFN 200830 . 201449)) (201530 214684 (\TEDIT.DOWNCARET 201540 . 202333) (
+\TEDIT.FLASHCARET 202335 . 204446) (\TEDIT.UPCARET 204448 . 205552) (TEDIT.NORMALIZECARET 205554 . 
+208772) (\TEDIT.SETCARET 208774 . 214054) (\TEDIT.CARET 214056 . 214682)) (214718 226880 (
+TEDIT.ADD.MENUITEM 214728 . 217019) (TEDIT.DEFAULT.MENUFN 217021 . 224092) (TEDIT.REMOVE.MENUITEM 
+224094 . 225091) (\TEDIT.CREATEMENU 225093 . 225658) (\TEDIT.MENU.WHENHELDFN 225660 . 226565) (
+\TEDIT.MENU.WHENSELECTEDFN 226567 . 226878)))))
 STOP
diff --git a/library/tedit/TEDIT-WINDOW.LCOM b/library/tedit/TEDIT-WINDOW.LCOM
index eff2cb7e..d8ee8b71 100644
Binary files a/library/tedit/TEDIT-WINDOW.LCOM and b/library/tedit/TEDIT-WINDOW.LCOM differ
diff --git a/library/tedit/TEDIT.LCOM b/library/tedit/TEDIT.LCOM
index e921a1d8..88776b63 100644
Binary files a/library/tedit/TEDIT.LCOM and b/library/tedit/TEDIT.LCOM differ
diff --git a/library/tedit/tedit-exports.all b/library/tedit/tedit-exports.all
index d6d1f51d..d18c4db0 100644
--- a/library/tedit/tedit-exports.all
+++ b/library/tedit/tedit-exports.all
@@ -1,11 +1,11 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 7-Jan-2025 12:38:49" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;197 53250  
+(FILECREATED "19-Feb-2025 12:22:24" 
+{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;207 53931  
 
       :EDIT-BY rmk
 
-      :PREVIOUS-DATE "14-Dec-2024 11:45:45" {WMEDLEY}<library>TEDIT>tedit-exports.all;196)
+      :PREVIOUS-DATE "17-Feb-2025 12:26:08" {WMEDLEY}<library>TEDIT>tedit-exports.all;206)
 
 
 (PRETTYCOMPRINT ((E (MAPC (MKLIST FROMFILES) (FUNCTION (LAMBDA (F) (MAPC (IMPORTFILE F FLG) (FUNCTION 
@@ -18,7 +18,7 @@ PRINT))))))))
 (RPAQ? CHECK-TEDIT-ASSERTIONS T)
 (PUTPROPS OBJECT.ALLOWS MACRO ((PC OPERATION FROMTOBJ TOTOBJ) (OR (NOT (EQ OBJECT.PTYPE (PTYPE PC))) (
 \TEDIT.APPLY.OBJFN (PCONTENTS PC) OPERATION FROMTOBJ TOTOBJ))))
-(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE " 5-Jan-2025 23:34:12"))
+(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE "16-Feb-2025 11:25:32"))
 (RPAQQ \BTREEWORDSPERSLOT 4)
 (RPAQQ \BTREEMAXCOUNT 8)
 (CONSTANTS (\BTREEWORDSPERSLOT 4) (\BTREEMAXCOUNT 8))
@@ -44,8 +44,7 @@ DLEN1 DOWN2 DLEN2 DOWN3 DLEN3 DOWN4 DLEN4 DOWN5 DLEN5 DOWN6 DLEN6 DOWN7 DLEN7 DO
  DLEN) of SLOT with DWNL)))
 (PUTPROPS \FINDSLOT MACRO ((BTNODE ITEM) (find S inslots BTNODE suchthat (EQ ITEM (ffetch (BTSLOT DOWN
 ) of S)))))
-(PUTPROPS \LASTPIECEP MACRO (OPENLAMBDA (PC TOBJ) (AND (EQ PC (ffetch (TEXTOBJ LASTPIECE) of TOBJ)) PC
-)))
+(PUTPROPS \SUFFIXPIECEP MACRO (OPENLAMBDA (PC TOBJ) (AND (EQ PC (FGETTOBJ TOBJ SUFFIXPIECE)) PC)))
 (I.S.OPR (QUOTE inslots) NIL (QUOTE (SUBST (GETDUMMYVAR) (QUOTE $$BTBODY) (QUOTE (bind $$BTBODY _ BODY
  $$BTEND declare (LOCALVARS $$BTBODY $$BTEND) first (SETQ I.V. (\FIRSTSLOT $$BTBODY)) (SETQ $$BTEND (
 \LASTSLOT $$BTBODY)) repeatuntil (EQ I.V. $$BTEND) by (\ADDBASE I.V. \BTREEWORDSPERSLOT))))) T)
@@ -53,7 +52,7 @@ DLEN1 DOWN2 DLEN2 DOWN3 DLEN3 DOWN4 DLEN4 DOWN5 DLEN5 DOWN6 DLEN6 DOWN7 DLEN7 DO
  (\DTEST (OR (NEXTPIECE I.V.) (GO $$OUT)) (QUOTE PIECE)))))
 (I.S.OPR (QUOTE backpieces) NIL (QUOTE (first (SETQ I.V. (\DTEST (OR BODY (GO $$OUT)) (QUOTE PIECE))) 
 by (\DTEST (OR (PREVPIECE I.V.) (GO $$OUT)) (QUOTE PIECE)))))
-(PUTPROP (QUOTE TEDIT-PCTREE) (QUOTE IMPORTDATE) (IDATE "27-Nov-2024 23:12:27"))
+(PUTPROP (QUOTE TEDIT-PCTREE) (QUOTE IMPORTDATE) (IDATE " 8-Feb-2025 20:56:54"))
 (DATATYPE SELECTION ((* ;; 
 "Description of a piece of selected text for TEdit.  Text has to be selected before it can be operated on by the user. The caret is to the left of CH# if POINT is LEFT, to the keft of CHLIM if POINT is RIGHT."
 ) (* ;; "If DCH > 0, highlighting goes from CH# to (SUB1 CHLIM = (SUB1 (IPLUS CH# DCH)).") (* ;; 
@@ -119,7 +118,7 @@ $$SELPIECES)) REPEATUNTIL (EQ I.V. $$SPLAST) BY (\DTEST (NEXTPIECE I.V.) (QUOTE
 (GLOBALVARS TEDIT.EXTEND.PENDING.DELETE)
 (GLOBALVARS TEDIT.SELECTION TEDIT.SHIFTEDSELECTION TEDIT.MOVESELECTION TEDIT.COPYLOOKSSELECTION 
 TEDIT.DELETESELECTION)
-(PUTPROP (QUOTE TEDIT-SELECTION) (QUOTE IMPORTDATE) (IDATE " 1-Jan-2025 12:33:54"))
+(PUTPROP (QUOTE TEDIT-SELECTION) (QUOTE IMPORTDATE) (IDATE "18-Feb-2025 22:06:22"))
 (RECORD TAB (TABX . TABKIND))
 (RECORD TABSPEC (DEFAULTTAB . TABS))
 (DATATYPE LINECACHE ((* ;; "Image cache for display lines.") LCBITMAP (* ; 
@@ -149,8 +148,8 @@ FORCED-END (* ; "NIL or character (EOL, FORM...) that forces a line break") (* ;
 "A cached textstream that this line took its text from.  Filled in by \TEDIT.FORMATLINE only in hardcopy, used temporarily and the cleared by \TEDIT.FORMATBOX to avoid the circularity."
 ) NIL (* ; 
 "Was CACHE: A cached THISLINE, for keeping hardcopy info around while we crunch with the line descriptors to make things fit.  Now:  THISLINE comes from TEXTOBJ"
-) NIL (* ; "Was LDOBJ: The object which lies behind this line of text, for updating, etc.") LFMTSPEC (
-* ; "The format spec for this line's paragraph (eventually)") (NIL FLAG) (* ; 
+) NIL (* ; "Was LDOBJ: The object which lies behind this line of text, for updating, etc.") LPARALOOKS
+ (* ; "The paragraph looks for this line's paragraph (eventually)") (NIL FLAG) (* ; 
 "Was LDIRTY: T if this line has changed since it was last formatted.") (NIL FLAG) (* ; 
 "Was FORCED-END flag") (NIL FLAG) (* ; 
 "Was DELETED: T if this line has been completely deleted since it was last formatted or displayed.  (Used by deletion routines to detect garbage lines)"
@@ -262,7 +261,7 @@ SETQ I.V. (COND ((TYPE? THISLINE $$STARTSLOT) (PREVCHARSLOT (fetch (THISLINE NEX
  THISLINE))) (T $$STARTSLOT))) (SETQ $$CHARSLOTLIMIT (FIRSTCHARSLOT THISLINE)) by (PREVCHARSLOT I.V.) 
 eachtime (SETQ CHAR (fetch (CHARSLOT CHAR) of I.V.)) (SETQ CHARW (fetch (CHARSLOT CHARW) of I.V.)) 
 repeatuntil (EQ I.V. $$CHARSLOTLIMIT))))) T)
-(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 11:56:35"))
+(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE "18-Feb-2025 12:50:32"))
 (DATATYPE PIECE ((* ; 
 "The piece describes either a string or part of a file.  , or a generalized OBJECT.") PCONTENTS (* ; 
 "The background source of data for this piece (stream, string, block, object, depending on the PTYPE)."
@@ -287,7 +286,7 @@ DATUM with NEWVALUE))))) PFPOS _ 0 PLEN _ 0 PBYTELEN _ 0 PPARALOOKS _ TEDIT.DEFA
 "This is where TEdit stores its state information, and internal data about the text being edited.") 
 PCTB (* ; "The piece table") TEXTLEN (* ; "# of chars in the text") PRIMARYPANE (* ; 
 "A sequence of panes (split subwindows) that are open on this document. Was INSERTPC: The string-piece that received the last insertion. Now HINTPC"
-) LASTPIECE (* ; "The last (end-of-stream) piece of the textstream, for easy insertion at the end") 
+) SUFFIXPIECE (* ; "The last (end-of-stream) piece of the textstream, for easy insertion at the end") 
 CHARFN (* ; 
 "Was: INSERTNEXTCH CH# of next char which is typed into that piece. Taken over by HINTPCSTARTCH#") 
 HINTPC (* ; "Was: Space left in the type-in piece") HINTPCSTARTCH# (* ; 
@@ -302,10 +301,11 @@ HINTPC (* ; "Was: Space left in the type-in piece") HINTPCSTARTCH# (* ;
 "Was: A list of lines (parallel to the panes in \WINDOW) each of which is the top of chain of line descriptors for the part of the text that is visible in the corresponding pane. Now: each PANE has its own PLINES."
 ) DS (* ; 
 "NOTE:  THIS IS ONLY USED INCORRECTLY BY TEDIT-CHAT Display stream where this textobj is displayed") 
-SEL (* ; "The current selection within the text") NIL (* ; "Was: Scratch space for the selection code"
-) NIL (* ; "Was MOVESEL: Source for the next MOVE of text") NIL (* ; 
-"Was SHIFTEDSEL: Source for the next COPY") NIL (* ; "Was DELETESEL: Text to be deleted imminently") 
-WRIGHT (* ; "Right edge of the window (or subregion) where this is displayed") WTOP (* ; 
+SEL (* ; "The current selection within the text") LASTARROWX (* ; 
+"X for next arrow up or arrow down. Was: Scratch space for the selection code") NIL (* ; 
+"Was MOVESEL: Source for the next MOVE of text") NIL (* ; "Was SHIFTEDSEL: Source for the next COPY") 
+NIL (* ; "Was DELETESEL: Text to be deleted imminently") WRIGHT (* ; 
+"Right edge of the window (or subregion) where this is displayed") WTOP (* ; 
 "Top of the window/region") WBOTTOM (* ; "Bottom of the window/region") WLEFT (* ; 
 "Left edge of the window/region") TXTFILE (* ; "The original text file we're editing") (\XDIRTY FLAG) 
 (* ; "T => changed since last saved.") (STREAMHINT FULLXPOINTER) (* ; 
@@ -315,7 +315,7 @@ WRIGHT (* ; "Right edge of the window (or subregion) where this is displayed") W
 "Font to be used for inserted text.") WINDOWTITLE (* ; 
 "Original title for this window, of there was one.") THISLINE (* ; 
 "Cache of line-related info, to speed up selection &c") (MENUFLG FLAG) (* ; 
-"T if this TEXTOBJ is a tedit-style menu") FMTSPEC (* ; 
+"T if this TEXTOBJ is a tedit-style menu") DEFAULTPARALOOKS (* ; 
 "Default Formatting Spec to be used when formatting paragraphs") (FORMATTEDP FLAG) (* ; 
 "Flag for paragraph formatting.  T if this document is to contain paragraph formatting information.") 
 (TXTREADONLY FLAG) (* ; "This is only available for shift selection.") (TXTEDITING FLAG) (* ; 
@@ -340,7 +340,7 @@ DISPLAYCACHEDS (* ; "The DISPLAYSTREAM that is used to build line images") DISPL
 "The DISPLAYSTREAM used to build line images of lines that are displayed in 'hardcopy' simulation mode"
 ) TXTPAGEFRAMES (* ; "A tree of page frames, specifying how the document is to be laid out.") 
 TXTCHARLOOKSLIST (* ; "List of all the CHARLOOKSs in the document, so they can be kept unique") 
-TXTPARALOOKSLIST (* ; "List of all the FMTSPECs in the document, so they can be kept unique") (
+TXTPARALOOKSLIST (* ; "List of all the PARALOOKS in the document, so they can be kept unique") (
 TXTAPPENDONLY FLAG) (* ; 
 "Allows updates only at the end of the stream.  Was TXTNEEDSUPDATE: T => Screen invalid, need to run updater"
 ) (TXTDON'TUPDATE FLAG) (* ; 
@@ -349,10 +349,11 @@ TXTAPPENDONLY FLAG) (* ;
 "NODIRCORE stream used to cache RAW includes (and maybe later, all includes?)") DOCPROPS (* ; 
 "Document properties that are stored with the document (not used yet)") TXTSTYLESHEET (* ; 
 "Style sheet local to this document.  Not currently saved as part of the file.")) (ACCESSFNS TEXTOBJ (
-(\DIRTY (ffetch (TEXTOBJ \XDIRTY) of DATUM) (CL:UNLESS (EQ NEWVALUE (ffetch (TEXTOBJ \XDIRTY) of DATUM
-)) (\TEDIT.WINDOW.TITLE DATUM NEWVALUE) (freplace \XDIRTY OF DATUM WITH NEWVALUE))))) SEL _ (create 
-SELECTION) TEXTLEN _ 0 WRIGHT _ 0 WTOP _ 0 WLEFT _ 0 WBOTTOM _ 0 MOUSEREGION _ (QUOTE TEXT) THISLINE _
- (create THISLINE) FMTSPEC _ TEDIT.DEFAULT.FMTSPEC PARABREAKCHARS _ (CHARCODE (EOL FORM LF CR)))
+(\DIRTY (ffetch (TEXTOBJ \XDIRTY) of DATUM) (PROGN (FSETTOBJ DATUM LASTARROWX NIL) (CL:UNLESS (EQ 
+NEWVALUE (ffetch (TEXTOBJ \XDIRTY) of DATUM)) (\TEDIT.WINDOW.TITLE DATUM NEWVALUE) (freplace \XDIRTY 
+OF DATUM WITH NEWVALUE)))))) SEL _ (create SELECTION) TEXTLEN _ 0 WRIGHT _ 0 WTOP _ 0 WLEFT _ 0 
+WBOTTOM _ 0 MOUSEREGION _ (QUOTE TEXT) THISLINE _ (create THISLINE) DEFAULTPARALOOKS _ 
+TEDIT.DEFAULT.FMTSPEC PARABREAKCHARS _ (CHARCODE (EOL FORM LF CR)))
 (ACCESSFNS TEXTSTREAM ((* ;; 
 "Overlay for the STREAM record to allow mnemonic access to stream fields for Text streams.") (* ;; 
 "The # of characters that have already been read from the current piece") (TEXTOBJ (fetch (STREAM F3) 
@@ -362,10 +363,10 @@ of DATUM) (REPLACE (STREAM F3) OF DATUM WITH NEWVALUE)) (* ; "The TEXTOBJ that i
  DATUM) (replace (STREAM F1) of DATUM with NEWVALUE)) (* ; "Runs from PLEN to 0: piece exhausted") (
 NIL) (* ; 
 "Was CURRENTLOOKS at F10: The CHARLOOKS that are currently applicable to characters being taken from the stream. This is now CARETLOOKS of the TEXTOBJ."
-) (CURRENTPARALOOKS (fetch (STREAM IMAGEDATA) of DATUM) (REPLACE (STREAM IMAGEDATA) of DATUM with 
+) (CURRENTPARALOOKS (fetch (STREAM IMAGEDATA) of DATUM) (replace (STREAM IMAGEDATA) of DATUM with 
 NEWVALUE)) (* ; 
-"The FMTSPEC that is currently applicable to characters being taken from the stream. This was  the only residual field of TEXTIMAGEDATA, now gone."
-) (APPLYLOOKSUPDATEFN (fetch (STREAM F4) of DATUM) (REPLACE (STREAM F4) OF DATUM with NEWVALUE)) (* ; 
+"THIS IS SOMEHOW INVOLVED IN STYLES, NOT SENSIBLE. REMOVE? The PARALOOKS that is currently applicable to characters being taken from the stream. This was  the only residual field of TEXTIMAGEDATA, now gone."
+) (APPLYLOOKSUPDATEFN (fetch (STREAM F4) of DATUM) (replace (STREAM F4) OF DATUM with NEWVALUE)) (* ; 
 "Determines whether to call \TEDIT.FORMATLINE.UPDATELOOKS at every piece change when line-formatting."
 ) (STARTINGCOFFSET (fetch (STREAM F2) of DATUM) (replace (STREAM F2) of DATUM with NEWVALUE))) (TYPE? 
 (AND (type? STREAM DATUM) (type? TEXTOBJ (fetch (TEXTSTREAM TEXTOBJ) of DATUM)))) (CREATE (create 
@@ -444,7 +445,7 @@ UTF8.PTYPE UTF16BE.PTYPE UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE F
 BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (THIN.PTYPES (LIST THINFILE.PTYPE 
 THINSTRING.PTYPE)) (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE)))
 (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV)
-(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 12:28:18"))
+(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE "17-Feb-2025 12:25:59"))
 (RPAQQ NONE.TTC 0)
 (RPAQQ CHARDELETE.TTC 1)
 (RPAQQ WORDDELETE.TTC 2)
@@ -480,13 +481,13 @@ I in ARGS as J on ARGS when (NOT (STRINGP I)) collect (LIST (QUOTE OR) I (LIST (
 (RPAQQ NEWCHAR-IF-SPLIT.LB 32)
 (CONSTANTS (NOTBEFORE.LB 1) (NOTAFTER.LB 2) (BEFORE.LB 4) (AFTER.LB 8) (DISAPPEAR-IF-NOT-SPLIT.LB 16) 
 (NEWCHAR-IF-SPLIT.LB 32))
-(PUTPROP (QUOTE TEDIT-COMMAND) (QUOTE IMPORTDATE) (IDATE "28-Nov-2024 10:03:03"))
+(PUTPROP (QUOTE TEDIT-COMMAND) (QUOTE IMPORTDATE) (IDATE "17-Feb-2025 12:25:49"))
 (PUTPROPS \SMALLPIN MACRO (OPENLAMBDA (STREAM) (SIGNED (create WORD HIBYTE _ (\BIN STREAM) LOBYTE _ (
 \BIN STREAM)) BITSPERWORD)))
 (PUTPROPS \SMALLPOUT MACRO (OPENLAMBDA (STREAM W) (* ; "Signed smallp, unlike \WOUT") (\BOUT STREAM (
 LOGAND 255 (LRSH W 8))) (\BOUT STREAM (LOGAND W 255))))
-(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 12:28:41"))
-(PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 12:29:36"))
+(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE "19-Feb-2025 12:11:42"))
+(PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE "19-Feb-2025 12:09:40"))
 (DATATYPE CHARLOOKS ((* ;; "Describes the appearance (%"Looks%") of characters in a TEdit document.") 
 (* ;; "NOTE:  If fields change EQCLOOKS should change too.") CLFONT (* ; 
 "The font descriptor for these characters") CLFONTUNPARSE (* ;; 
@@ -516,7 +517,7 @@ LOGAND 255 (LRSH W 8))) (\BOUT STREAM (LOGAND W 255))))
 CLOFFSET _ 0 (INIT (DEFPRINT (QUOTE CHARLOOKS) (FUNCTION \TEDIT.CHARLOOKS.DEFPRINT))) (ACCESSFNS (
 CLNAME (fetch (CHARLOOKS CLFONTUNPARSE) of DATUM) (replace (CHARLOOKS CLFONTUNPARSE) of DATUM with 
 NEWVALUE))))
-(DATATYPE FMTSPEC ((* ;; "Describe the paragraph formatting for a paragraph in a TEdit document.") 
+(DATATYPE PARALOOKS ((* ;; "Describe the paragraph formatting for a paragraph in a TEdit document.") 
 1STLEFTMAR (* ; "Left margin of the first line of the paragraph") LEFTMAR (* ; 
 "Left margin of the rest of the lines in the paragraph") RIGHTMAR (* ; 
 "Right margin for the paragraph") LEADBEFORE (* ; 
@@ -549,25 +550,33 @@ QUAD (* ; "How the para is formatted: one of LEFT, RIGHT, CENTERED, JUSTIFIED")
 ) FMTHARDCOPYSCALE (* ; 
 "The units-per-point (DSPSCALE) of the hardcopy stream that is simulated in hardcopy-display mode (FMTHARDCOPY=T"
 ) FMTDEFAULTTAB (* ; "Default tab in points)") FMTTABS) (* ; "List of tabs (in points)") (INIT (
-DEFPRINT (QUOTE FMTSPEC) (FUNCTION \TEDIT.FMTSPEC.DEFPRINT))) LEADBEFORE _ 0 LEADAFTER _ 0 LINELEAD _ 
-0)
+DEFPRINT (QUOTE PARALOOKS) (FUNCTION \TEDIT.PARALOOKS.DEFPRINT))) LEADBEFORE _ 0 LEADAFTER _ 0 
+LINELEAD _ 0)
 (DEFPRINT (QUOTE CHARLOOKS) (FUNCTION \TEDIT.CHARLOOKS.DEFPRINT))
-(DEFPRINT (QUOTE FMTSPEC) (FUNCTION \TEDIT.FMTSPEC.DEFPRINT))
+(DEFPRINT (QUOTE PARALOOKS) (FUNCTION \TEDIT.PARALOOKS.DEFPRINT))
 (PUTPROPS \WORDSETA DMACRO (OPENLAMBDA (A J V) (CHECK (AND (ARRAYP A) (ZEROP (fetch (ARRAYP ORIG) of A
 )) (EQ \ST.POS16 (fetch (ARRAYP TYP) of A)))) (CHECK (IGREATERP (fetch (ARRAYP LENGTH) of A) J)) (
 \PUTBASE (fetch (ARRAYP BASE) of A) (IPLUS (fetch (ARRAYP OFFST) of A) J) V)))
 (PUTPROPS ONOFF MACRO (OPENLAMBDA (VAL) (COND (VAL (QUOTE ON)) (T (QUOTE OFF)))))
-(PUTPROPS FSETPARA MACRO ((F FIELD NEWVALUE) (freplace (FMTSPEC FIELD) of F with NEWVALUE)))
-(PUTPROPS FGETPARA MACRO ((F FIELD) (ffetch (FMTSPEC FIELD) of F)))
-(PUTPROPS GETPARA MACRO ((F FIELD) (fetch (FMTSPEC FIELD) of F)))
-(PUTPROPS SETPARA MACRO ((F FIELD NEWVALUE) (replace (FMTSPEC FIELD) of F with NEWVALUE)))
 (PUTPROPS GETCLOOKS MACRO ((CL FIELD) (fetch (CHARLOOKS FIELD) of CL)))
 (PUTPROPS SETCLOOKS MACRO ((CL FIELD NEWVALUE) (replace (CHARLOOKS FIELD) of CL with NEWVALUE)))
 (PUTPROPS FGETCLOOKS MACRO ((CL FIELD) (ffetch (CHARLOOKS FIELD) of CL)))
 (PUTPROPS FSETCLOOKS MACRO ((CL FIELD NEWVALUE) (freplace (CHARLOOKS FIELD) of CL with NEWVALUE)))
-(PUTPROPS PARALOOKS! MACRO ((PL) (\DTEST PL (QUOTE FMTSPEC))))
 (PUTPROPS CHARLOOKS! MACRO ((CL) (\DTEST CL (QUOTE CHARLOOKS))))
-(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 12:34:07"))
+(PUTPROPS GETPLOOKS MACRO ((PLOOKS FIELD) (fetch (PARALOOKS FIELD) of PLOOKS)))
+(PUTPROPS SETPLOOKS MACRO ((PLOOKS FIELD NEWVALUE) (replace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)
+))
+(PUTPROPS FGETPLOOKS MACRO ((PLOOKS FIELD) (ffetch (PARALOOKS FIELD) of PLOOKS)))
+(PUTPROPS FSETPLOOKS MACRO ((PLOOKS FIELD NEWVALUE) (freplace (PARALOOKS FIELD) of PLOOKS with 
+NEWVALUE)))
+(PUTPROPS PARALOOKS! MACRO ((PL) (\DTEST PL (QUOTE PARALOOKS))))
+(PUTPROPS FSETPARA MACRO ((PLOOKS FIELD NEWVALUE) (freplace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)
+))
+(PUTPROPS FGETPARA MACRO ((PLOOKS FIELD) (ffetch (PARALOOKS FIELD) of PLOOKS)))
+(PUTPROPS GETPARA MACRO ((PLOOKS FIELD) (fetch (PARALOOKS FIELD) of PLOOKS)))
+(PUTPROPS SETPARA MACRO ((PLOOKS FIELD NEWVALUE) (replace (PARALOOKS FIELD) of PLOOKS with NEWVALUE)))
+(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE "19-Feb-2025 12:00:37"))
+(PUTPROP (QUOTE TEDIT-STYLES) (QUOTE IMPORTDATE) (IDATE "12-Feb-2025 12:18:37"))
 (DATATYPE TEDITCARET (TCNOWTIME (* Used to hold the current time, when checking to see if a transition
  is due) TCTHENTIME (* Time when the next transition is to take place) TCFORCEDDOWN (* TCFORCEDOWN = T
  means (Make the caret visible at the next call to \EDIT.FLIPCARET.)) TCUP (* TCUP = T => The caret is
@@ -623,8 +632,8 @@ OR (CL:IF (TYPENAMEP $$BODY (QUOTE TEXTOBJ)) (FGETTOBJ $$BODY PRIMARYPANE) $$BOD
 GETPANEPROP (PANEPROPS P) NEXTPANE))) (GO $$OUT))) by (OR (GETPANEPROP (PANEPROPS I.V.) PREVPANE) (GO 
 $$OUT)))))
 (PUTPROPS ALLBUTTONSUP MACRO (NIL (ZEROP (LOGAND 7 LASTMOUSEBUTTONS))))
-(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 11:56:24"))
-(PUTPROP (QUOTE TEDIT-BUTTONS) (QUOTE IMPORTDATE) (IDATE " 6-Jan-2025 00:20:34"))
+(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE "18-Feb-2025 23:57:08"))
+(PUTPROP (QUOTE TEDIT-BUTTONS) (QUOTE IMPORTDATE) (IDATE "16-Feb-2025 15:02:06"))
 (RPAQQ PTSPERPICA 12)
 (RPAQQ PTSPERINCH 72)
 (RPAQQ PICASPERINCH 6)
@@ -635,10 +644,10 @@ $$OUT)))))
 (CONSTANTS (PTSPERPICA 12) (PTSPERINCH 72) (PICASPERINCH 6) (MICASPERINCH 2540) (PTSPERCM (FQUOTIENT 
 PTSPERINCH 2.54)) (PTSPERMICA (FQUOTIENT PTSPERINCH MICASPERINCH)) (MICASPERPOINT (FQUOTIENT 
 MICASPERINCH PTSPERINCH)))
-(PUTPROP (QUOTE TEDIT-MENU) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 12:36:43"))
-(PUTPROP (QUOTE TEDIT-FIND) (QUOTE IMPORTDATE) (IDATE " 8-Dec-2024 15:49:12"))
-(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE "29-Dec-2024 08:47:57"))
-(PUTPROP (QUOTE TEDIT-HCPY) (QUOTE IMPORTDATE) (IDATE "13-Dec-2024 23:51:23"))
+(PUTPROP (QUOTE TEDIT-MENU) (QUOTE IMPORTDATE) (IDATE " 8-Feb-2025 23:19:34"))
+(PUTPROP (QUOTE TEDIT-FIND) (QUOTE IMPORTDATE) (IDATE "17-Feb-2025 12:25:36"))
+(PUTPROP (QUOTE TEDIT-FNKEYS) (QUOTE IMPORTDATE) (IDATE "17-Feb-2025 09:12:22"))
+(PUTPROP (QUOTE TEDIT-HCPY) (QUOTE IMPORTDATE) (IDATE " 8-Feb-2025 23:42:18"))
 (DATATYPE TEDITHISTORYEVENT ((* ;; "Describes one event on the TEdit edit history list.") THACTION (* 
 ; "A keyword specifying what the event was") THPOINT (* ; "Was the selection to the left or right?") 
 THLEN (* ; "The # of chars involved") THCH# (* ; "The starting ch#") THFIRSTPIECE (* ; 
@@ -652,7 +661,7 @@ TEDITHISTORYEVENT THLEN) of DATUM) 0))))) (INIT (DEFPRINT (QUOTE TEDITHISTORYEVE
 (PUTPROPS GETTH MACRO ((EVENT FIELD) (fetch (TEDITHISTORYEVENT FIELD) of EVENT)))
 (PUTPROPS SETTH MACRO ((EVENT FIELD NEWVALUE) (replace (TEDITHISTORYEVENT FIELD) of EVENT with 
 NEWVALUE)))
-(PUTPROP (QUOTE TEDIT-HISTORY) (QUOTE IMPORTDATE) (IDATE " 8-Dec-2024 19:41:55"))
+(PUTPROP (QUOTE TEDIT-HISTORY) (QUOTE IMPORTDATE) (IDATE " 6-Feb-2025 15:42:44"))
 (RECORD PAGEFORMATTINGSTATE ((* ;; "Contains the state for a TEdit page-formatting job.") PAGE# (* ; 
 "The current page number.  Counted from 1") FIRSTPAGE (* ;; 
 "T if the current page is the 'first page' .  Is set initially, and can be set again by the user at will.  Gets reset after each page image is printed."
@@ -683,9 +692,9 @@ REGIONPARENT FULLXPOINTER) (* ; "The parent node for this box, for sub-boxes") R
 (PUTPROPS GETPFS MACRO ((FS FIELD) (fetch (PAGEFORMATTINGSTATE FIELD) of FS)))
 (PUTPROPS SETPFS MACRO ((FS FIELD NEWVALUE) (replace (PAGEFORMATTINGSTATE FIELD) of FS with NEWVALUE))
 )
-(PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE " 7-Jan-2025 12:31:19"))
+(PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE " 8-Feb-2025 23:42:12"))
 (PUTPROP (QUOTE TEDIT-ABBREV) (QUOTE IMPORTDATE) (IDATE "31-Oct-2024 17:53:21"))
-(PUTPROP (QUOTE TEDIT-TFBRAVO) (QUOTE IMPORTDATE) (IDATE " 2-Jan-2025 23:45:04"))
+(PUTPROP (QUOTE TEDIT-TFBRAVO) (QUOTE IMPORTDATE) (IDATE "19-Feb-2025 12:18:40"))
 (DECLARE%: DONTCOPY
   (FILEMAP (NIL)))
 STOP
diff --git a/sources/LLKEY b/sources/LLKEY
index ba6db89e..851c3f79 100644
--- a/sources/LLKEY
+++ b/sources/LLKEY
@@ -1,14 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 3-Jan-2024 16:10:17" {MEDLEY}<SOURCES>LLKEY.;4 199503 
+(FILECREATED "13-Feb-2025 08:22:19" {WMEDLEY}<sources>LLKEY.;8 199508 
 
-      :EDIT-BY "mth"
+      :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \DECODETRANSITION SHIFTDOWNP)
-                  (VARS LLKEYCOMS)
-                  (RECORDS KEYBOARDEVENT)
+      :CHANGES-TO (VARS \KEYNAMES \MAIKOKEYACTIONS)
 
-      :PREVIOUS-DATE " 3-Jan-2024 12:32:52" {MEDLEY}<SOURCES>LLKEY.;3)
+      :PREVIOUS-DATE "12-Feb-2025 22:40:39" {WMEDLEY}<sources>LLKEY.;7)
 
 
 (PRETTYCOMPRINT LLKEYCOMS)
@@ -1526,7 +1524,7 @@
         (UTIL2 SUPER/SUB)
         (UTIL3 CASE)
         (UTIL4 STRIKEOUT)
-        (UTIL5 KEYPAD2)
+        (UTIL5 KEYPAD2 DOWNARROW)
         (UTIL6 KEYPAD3 PGDN)
         (UTIL7 SUN-LF)
         (PAD1 LEFTKEY CAPSLOCK KEYPAD+)
@@ -1539,12 +1537,12 @@
         (MIDDLE YELLOW MOUSEYELLOW)
         (MARGINS)
         (K41 KEYPAD7 HOME)
-        (K42 KEYPAD8)
+        (K42 KEYPAD8 UPARROW)
         (K43 KEYPAD9 PGUP)
-        (K44 KEYPAD4)
+        (K44 KEYPAD4 LEFTARROW)
         (K45 KEYPAD5)
         (K46 SUN-LEFT-SPACE)
-        (K47 KEYPAD6)
+        (K47 KEYPAD6 RIGHTARROW)
         (K48 RIGHT-COMMAND SUN-RIGHT-SPACE)
         (COPY)
         (FIND)
@@ -1754,13 +1752,13 @@
         (74 ("Function,LF" "Function,LF" NOLOCKSHIFT))
         (75 ("^B" "^B" NOLOCKSHIFT))
         (81 ("Function,FF" "7" NOLOCKSHIFT))
-        (82 ("#-" "8" NOLOCKSHIFT))
+        (UPARROW ("Meta,^" "8" NOLOCKSHIFT))
         (83 ("Function,CR" "9" NOLOCKSHIFT))
-        (84 ("#," "4" NOLOCKSHIFT))
+        (LEFTARROW ("Meta,<" "4" NOLOCKSHIFT))
         (85 ("Function,^N" "5" NOLOCKSHIFT))
-        (87 ("#." "6" NOLOCKSHIFT))
+        (RIGHTARROW ("Meta,>" "6" NOLOCKSHIFT))
         (94 ("Function,^O" "1" NOLOCKSHIFT))
-        (69 ("#/" "2" NOLOCKSHIFT))
+        (DOWNARROW ("Meta,^J" "2" NOLOCKSHIFT))
         (70 ("Function,^P" "3" NOLOCKSHIFT))
         (98 ("Function,^Q" "0" NOLOCKSHIFT))
         (76 ("Function,^K" "Function,+" NOLOCKSHIFT))
@@ -3921,33 +3919,33 @@
 (ADDTOVAR LAMA CURSORPROP METASHIFT MOUSECHORDWAIT)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (14744 22060 (BKSYSCHARCODE 14754 . 15103) (\CLEARSYSBUF 15105 . 15663) (\GETKEY 15665
- . 16840) (\NSYSBUFCHARS 16842 . 17584) (\SAVESYSBUF 17586 . 19195) (\SYSBUFP 19197 . 19501) (
-\GETSYSBUF 19503 . 19683) (\PUTSYSBUF 19685 . 20898) (\PEEKSYSBUF 20900 . 22058)) (23345 60763 (
-\KEYBOARDINIT 23355 . 25075) (\KEYBOARDEVENTFN 25077 . 29777) (\ALLOCLOCKED 29779 . 30369) (
-\SETIOPOINTERS 30371 . 34907) (\KEYBOARDOFF 34909 . 35323) (\KEYBOARDON 35325 . 35704) (\KEYHANDLER 
-35706 . 35837) (\KEYHANDLER1 35839 . 43285) (\RESETKEYBOARD 43287 . 44935) (\DOMOUSECHORDING 44937 . 
-48757) (\DOTRANSITIONS 48759 . 49436) (\DECODETRANSITION 49438 . 56711) (MOUSECHORDWAIT 56713 . 57377)
- (\TRACKCURSOR 57379 . 60761)) (95222 117095 (KEYACTION 95232 . 96085) (KEYACTIONTABLE 96087 . 97269) 
-(KEYBOARDTYPE 97271 . 98373) (RESETKEYACTION 98375 . 100134) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 
-100136 . 102038) (\KEYACTION1 102040 . 112156) (KEYDOWNP 112158 . 112493) (KEYNUMBERP 112495 . 112693)
- (\KEYNAMETONUMBER 112695 . 113389) (\KEYNUMBERTONAME 113391 . 113581) (MODIFY.KEYACTIONS 113583 . 
-114444) (METASHIFT 114446 . 115390) (SHIFTDOWNP 115392 . 117093)) (117158 117454 (
-SETUP.OFFICE.KEYBOARD 117168 . 117452)) (120433 122145 (\INIT.KEYBOARD.STREAM 120443 . 122143)) (
-122410 138787 (\DOBUFFEREDTRANSITIONS 122420 . 137850) (\TIMER.INTERRUPTFRAME 137852 . 138577) (
-\PERIODIC.INTERRUPTFRAME 138579 . 138785)) (139041 143118 (\HARDCURSORUP 139051 . 140933) (
-\HARDCURSORPOSITION 140935 . 142971) (\HARDCURSORDOWN 142973 . 143116)) (143119 167179 (CURSOR.INIT 
-143129 . 146829) (\CURSORDESTINATION 146831 . 149149) (\SOFTCURSORUP 149151 . 154405) (
-\SOFTCURSORUPCURRENT 154407 . 161443) (\SOFTCURSORPOSITION 161445 . 162210) (\SOFTCURSORDOWN 162212 . 
-162920) (CURSORPROP 162922 . 163264) (GETCURSORPROP 163266 . 163454) (PUTCURSORPROP 163456 . 164611) (
-\CURSORBITSPERPIXEL 164613 . 166729) (\CURSORIMAGEPROPNAME 166731 . 166955) (\CURSORMASKPROPNAME 
-166957 . 167177)) (167180 185130 (CURSORCREATE 167190 . 169865) (CURSOR 169867 . 171679) (
-\CURSOR-VALID-P 171681 . 172768) (\CURSORUP 172770 . 174485) (\CURSORPOSITION 174487 . 177015) (
-\CURSORDOWN 177017 . 177250) (ADJUSTCURSORPOSITION 177252 . 177830) (CURSORPOSITION 177832 . 179374) (
-CURSORSCREEN 179376 . 180032) (CURSOREXIT 180034 . 181425) (FLIPCURSOR 181427 . 182553) (FLIPCURSORBAR
- 182555 . 183535) (LASTMOUSEX 183537 . 183791) (LASTMOUSEY 183793 . 184047) (CREATEPOSITION 184049 . 
-184255) (POSITIONP 184257 . 184541) (CURSORHOTSPOT 184543 . 185128)) (186368 187916 (GETMOUSESTATE 
-186378 . 187037) (\EVENTKEYS 187039 . 187914)) (194115 194911 (MACHINETYPE 194125 . 194525) (
-SETMAINTPANEL 194527 . 194909)) (194941 196080 (BEEPON 194951 . 195604) (BEEPOFF 195606 . 196078)) (
-196531 196794 (WITHOUT-INTERRUPTS 196541 . 196792)))))
+  (FILEMAP (NIL (14666 21982 (BKSYSCHARCODE 14676 . 15025) (\CLEARSYSBUF 15027 . 15585) (\GETKEY 15587
+ . 16762) (\NSYSBUFCHARS 16764 . 17506) (\SAVESYSBUF 17508 . 19117) (\SYSBUFP 19119 . 19423) (
+\GETSYSBUF 19425 . 19605) (\PUTSYSBUF 19607 . 20820) (\PEEKSYSBUF 20822 . 21980)) (23267 60685 (
+\KEYBOARDINIT 23277 . 24997) (\KEYBOARDEVENTFN 24999 . 29699) (\ALLOCLOCKED 29701 . 30291) (
+\SETIOPOINTERS 30293 . 34829) (\KEYBOARDOFF 34831 . 35245) (\KEYBOARDON 35247 . 35626) (\KEYHANDLER 
+35628 . 35759) (\KEYHANDLER1 35761 . 43207) (\RESETKEYBOARD 43209 . 44857) (\DOMOUSECHORDING 44859 . 
+48679) (\DOTRANSITIONS 48681 . 49358) (\DECODETRANSITION 49360 . 56633) (MOUSECHORDWAIT 56635 . 57299)
+ (\TRACKCURSOR 57301 . 60683)) (95227 117100 (KEYACTION 95237 . 96090) (KEYACTIONTABLE 96092 . 97274) 
+(KEYBOARDTYPE 97276 . 98378) (RESETKEYACTION 98380 . 100139) (\KEYBOARD.MACHINE-SPECIFIC-KEYACTIONS 
+100141 . 102043) (\KEYACTION1 102045 . 112161) (KEYDOWNP 112163 . 112498) (KEYNUMBERP 112500 . 112698)
+ (\KEYNAMETONUMBER 112700 . 113394) (\KEYNUMBERTONAME 113396 . 113586) (MODIFY.KEYACTIONS 113588 . 
+114449) (METASHIFT 114451 . 115395) (SHIFTDOWNP 115397 . 117098)) (117163 117459 (
+SETUP.OFFICE.KEYBOARD 117173 . 117457)) (120438 122150 (\INIT.KEYBOARD.STREAM 120448 . 122148)) (
+122415 138792 (\DOBUFFEREDTRANSITIONS 122425 . 137855) (\TIMER.INTERRUPTFRAME 137857 . 138582) (
+\PERIODIC.INTERRUPTFRAME 138584 . 138790)) (139046 143123 (\HARDCURSORUP 139056 . 140938) (
+\HARDCURSORPOSITION 140940 . 142976) (\HARDCURSORDOWN 142978 . 143121)) (143124 167184 (CURSOR.INIT 
+143134 . 146834) (\CURSORDESTINATION 146836 . 149154) (\SOFTCURSORUP 149156 . 154410) (
+\SOFTCURSORUPCURRENT 154412 . 161448) (\SOFTCURSORPOSITION 161450 . 162215) (\SOFTCURSORDOWN 162217 . 
+162925) (CURSORPROP 162927 . 163269) (GETCURSORPROP 163271 . 163459) (PUTCURSORPROP 163461 . 164616) (
+\CURSORBITSPERPIXEL 164618 . 166734) (\CURSORIMAGEPROPNAME 166736 . 166960) (\CURSORMASKPROPNAME 
+166962 . 167182)) (167185 185135 (CURSORCREATE 167195 . 169870) (CURSOR 169872 . 171684) (
+\CURSOR-VALID-P 171686 . 172773) (\CURSORUP 172775 . 174490) (\CURSORPOSITION 174492 . 177020) (
+\CURSORDOWN 177022 . 177255) (ADJUSTCURSORPOSITION 177257 . 177835) (CURSORPOSITION 177837 . 179379) (
+CURSORSCREEN 179381 . 180037) (CURSOREXIT 180039 . 181430) (FLIPCURSOR 181432 . 182558) (FLIPCURSORBAR
+ 182560 . 183540) (LASTMOUSEX 183542 . 183796) (LASTMOUSEY 183798 . 184052) (CREATEPOSITION 184054 . 
+184260) (POSITIONP 184262 . 184546) (CURSORHOTSPOT 184548 . 185133)) (186373 187921 (GETMOUSESTATE 
+186383 . 187042) (\EVENTKEYS 187044 . 187919)) (194120 194916 (MACHINETYPE 194130 . 194530) (
+SETMAINTPANEL 194532 . 194914)) (194946 196085 (BEEPON 194956 . 195609) (BEEPOFF 195611 . 196083)) (
+196536 196799 (WITHOUT-INTERRUPTS 196546 . 196797)))))
 STOP
diff --git a/sources/LLKEY.LCOM b/sources/LLKEY.LCOM
index de59ebc4..46cea62b 100644
Binary files a/sources/LLKEY.LCOM and b/sources/LLKEY.LCOM differ
