diff --git a/library/PSEUDOHOSTS b/library/PSEUDOHOSTS
index bb0e7189..fb771830 100644
--- a/library/PSEUDOHOSTS
+++ b/library/PSEUDOHOSTS
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 2-Nov-2023 10:53:30" {WMEDLEY}<lispusers>PSEUDOHOSTS.;160 26843  
+(FILECREATED "31-Dec-2024 11:45:23" {WMEDLEY}<library>PSEUDOHOSTS.;177 29713  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS PSEUDOHOST)
+      :CHANGES-TO (FNS TRUEDEVICE)
 
-      :PREVIOUS-DATE " 1-Oct-2023 20:16:43" {WMEDLEY}<lispusers>PSEUDOHOSTS.;159)
+      :PREVIOUS-DATE "25-Dec-2024 07:38:10" {WMEDLEY}<library>PSEUDOHOSTS.;176)
 
 
 (PRETTYCOMPRINT PSEUDOHOSTSCOMS)
@@ -15,16 +15,17 @@
        (
         (* ;; "Public entries")
 
-        (FNS PSEUDOHOST PSEUDOHOSTP PSEUDOHOSTS TARGETHOST TRUEFILENAME PSEUDOFILENAME)
+        (FNS PSEUDOHOST PSEUDOHOSTP PSEUDOHOSTS TARGETHOST TRUEDEVICE TRUEFILENAME PSEUDOFILENAME)
         
         (* ;; "Internals")
 
         (FNS EXPAND.PH CONTRACT.PH UNSLASHIT GETHOSTINFO.PH)
+        (FNS CDPSEUDO)
         (FNS OPENFILE.PH GETFILENAME.PH DIRECTORYNAMEP.PH CLOSEFILE.PH REOPENFILE.PH DELETEFILE.PH 
              OPENP.PH UNREGISTERFILE.PH REGISTERFILE.PH GENERATEFILES.PH GETFILEINFO.PH 
              SETFILEINFO.PH NEXTFILEFN.PH FILEINFOFN.PH RENAMEFILE.PH)
-        (P (PSEUDOHOST 'LI LOGINHOST/DIR)
-           (MOVD? 'GETHOSTINFO 'GETHOSTINFO.ORIG)
+        (DECLARE%: DONTEVAL@LOAD DOCOPY (P (PSEUDOHOST 'LI LOGINHOST/DIR)))
+        (P (MOVD? 'GETHOSTINFO 'GETHOSTINFO.ORIG)
            (MOVD 'GETHOSTINFO.PH 'GETHOSTINFO))
         (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS PHDEVICE PHGENFILESTATE TARGETDEVICE)
                (MACROS PSEUDOHOST.NAME PSEUDOHOST.TARGETVAL)
@@ -136,9 +137,14 @@
     HOST])
 
 (PSEUDOHOSTP
-  [LAMBDA (HOST)                                             (* ; "Edited 24-Feb-2022 23:51 by rmk")
+  [LAMBDA (HOST)                                             (* ; "Edited 16-Dec-2024 21:15 by rmk")
+                                                             (* ; "Edited 24-Feb-2022 23:51 by rmk")
                                                              (* ; "Edited 18-Jan-2022 11:29 by rmk")
-    (LET ((DEV (\GETDEVICEFROMNAME HOST T T)))
+    (LET [(DEV (if (type? FDEV HOST)
+                   then HOST
+                 elseif (type? STREAM HOST)
+                   then (fetch (STREAM DEVICE) of HOST)
+                 else (\GETDEVICEFROMNAME HOST T T]
          (CL:WHEN (AND DEV (type? FDEV (fetch (PHDEVICE TARGETDEV) OF DEV)))
              (LIST (FETCH (FDEV DEVICENAME) OF DEV)
                    (FETCH (PHDEVICE PREFIX)
@@ -151,9 +157,30 @@
                      (FETCH (PHDEVICE PREFIX) OF DEV])
 
 (TARGETHOST
-  [LAMBDA (HOST)                                             (* ; "Edited 22-Jan-2022 09:00 by rmk")
-    (CL:WHEN (PSEUDOHOSTP HOST)
-        (FETCH (FDEV DEVICENAME) OF (FETCH (PHDEVICE TARGETDEV) OF (\GETDEVICEFROMNAME HOST))))])
+  [LAMBDA (HOST)                                             (* ; "Edited 14-Dec-2024 15:26 by rmk")
+                                                             (* ; "Edited 12-Dec-2024 16:16 by rmk")
+                                                             (* ; "Edited 22-Jan-2022 09:00 by rmk")
+    (if (STREAMP HOST)
+        then (CL:WHEN (type? FDEV (fetch (PHDEVICE TARGETDEV) of (fetch (STREAM DEVICE) of HOST)))
+                 (fetch (FDEV DEVICENAME) of (fetch (PHDEVICE TARGETDEV) of (fetch (STREAM DEVICE)
+                                                                               of HOST))))
+      elseif (PSEUDOHOSTP HOST)
+        then (fetch (FDEV DEVICENAME) of (fetch (PHDEVICE TARGETDEV) of (\GETDEVICEFROMNAME HOST T T])
+
+(TRUEDEVICE
+  [LAMBDA (X)                                                (* ; "Edited 31-Dec-2024 11:44 by rmk")
+                                                             (* ; "Edited 25-Dec-2024 07:37 by rmk")
+                                                             (* ; "Edited 23-Dec-2024 22:56 by rmk")
+                                                             (* ; "Edited 16-Dec-2024 17:36 by rmk")
+                                                             (* ; "Edited 12-Dec-2024 14:34 by rmk")
+    (LET [(DEV (if (type? FDEV X)
+                   then X
+                 elseif (STREAMP X)
+                   then (fetch (STREAM DEVICE) of X)
+                 else (\GETDEVICEFROMNAME X]
+         (if (type? FDEV (fetch (PHDEVICE TARGETDEV) of DEV))
+             then (fetch (PHDEVICE TARGETDEV) of DEV)
+           else DEV])
 
 (TRUEFILENAME
   [LAMBDA (FILE)                                             (* ; "Edited  1-Oct-2023 20:16 by rmk")
@@ -301,6 +328,24 @@
 )
 (DEFINEQ
 
+(CDPSEUDO
+  [LAMBDA (PHOST CDSUFFIX FILEPKG)                           (* ; "Edited 21-Dec-2024 13:48 by rmk")
+                                                             (* ; "Edited  6-Feb-2024 15:50 by rmk")
+
+    (* ;; "Makes a cd command for PHOST. The command name is %"cd%" followed by the lower-case letters of CDSUFFIX (e.g. cdf for PHOST FOO and CDSUFFIX %"f%".")
+
+    (CL:WHEN (AND (SETQ PHOST (CAR (PSEUDOHOSTP PHOST)))
+                  CDSUFFIX)
+        [LET ((C (PACK* "cd" (L-CASE CDSUFFIX)))
+              (FILEPKGFLG FILEPKG))
+             (DECLARE (SPECVARS FILEPKGFLG))
+             (SETQ PHOST (CONCAT "{" PHOST "}"))
+             (EVAL `(DEFCOMMAND ,C (SUBDIR) (/CNDIR (CL:IF SUBDIR
+                                                        (CONCAT ,PHOST "/" SUBDIR)
+                                                        ,PHOST)))])])
+)
+(DEFINEQ
+
 (OPENFILE.PH
   [LAMBDA (FILE ACCESS RECOG OTHERINFO FDEV OLDSTRING)
 
@@ -453,8 +498,10 @@
              (SETQ RESULT (CONTRACT.PH RESULT NEW-DEVICE)))
          RESULT])
 )
+(DECLARE%: DONTEVAL@LOAD DOCOPY 
 
 (PSEUDOHOST 'LI LOGINHOST/DIR)
+)
 
 (MOVD? 'GETHOSTINFO 'GETHOSTINFO.ORIG)
 
@@ -515,12 +562,13 @@
        EXPORTS.ALL)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (1254 10126 (PSEUDOHOST 1264 . 6972) (PSEUDOHOSTP 6974 . 7487) (PSEUDOHOSTS 7489 . 7850)
- (TARGETHOST 7852 . 8126) (TRUEFILENAME 8128 . 9253) (PSEUDOFILENAME 9255 . 10124)) (10154 16169 (
-EXPAND.PH 10164 . 11417) (CONTRACT.PH 11419 . 14130) (UNSLASHIT 14132 . 15878) (GETHOSTINFO.PH 15880
- . 16167)) (16170 24190 (OPENFILE.PH 16180 . 17253) (GETFILENAME.PH 17255 . 17544) (DIRECTORYNAMEP.PH 
-17546 . 18170) (CLOSEFILE.PH 18172 . 18639) (REOPENFILE.PH 18641 . 19206) (DELETEFILE.PH 19208 . 19492
-) (OPENP.PH 19494 . 19789) (UNREGISTERFILE.PH 19791 . 20333) (REGISTERFILE.PH 20335 . 20869) (
-GENERATEFILES.PH 20871 . 21915) (GETFILEINFO.PH 21917 . 22219) (SETFILEINFO.PH 22221 . 22420) (
-NEXTFILEFN.PH 22422 . 22968) (FILEINFOFN.PH 22970 . 23245) (RENAMEFILE.PH 23247 . 24188)))))
+  (FILEMAP (NIL (1318 12059 (PSEUDOHOST 1328 . 7036) (PSEUDOHOSTP 7038 . 7867) (PSEUDOHOSTS 7869 . 8230)
+ (TARGETHOST 8232 . 9101) (TRUEDEVICE 9103 . 10059) (TRUEFILENAME 10061 . 11186) (PSEUDOFILENAME 11188
+ . 12057)) (12087 18102 (EXPAND.PH 12097 . 13350) (CONTRACT.PH 13352 . 16063) (UNSLASHIT 16065 . 17811
+) (GETHOSTINFO.PH 17813 . 18100)) (18103 19004 (CDPSEUDO 18113 . 19002)) (19005 27025 (OPENFILE.PH 
+19015 . 20088) (GETFILENAME.PH 20090 . 20379) (DIRECTORYNAMEP.PH 20381 . 21005) (CLOSEFILE.PH 21007 . 
+21474) (REOPENFILE.PH 21476 . 22041) (DELETEFILE.PH 22043 . 22327) (OPENP.PH 22329 . 22624) (
+UNREGISTERFILE.PH 22626 . 23168) (REGISTERFILE.PH 23170 . 23704) (GENERATEFILES.PH 23706 . 24750) (
+GETFILEINFO.PH 24752 . 25054) (SETFILEINFO.PH 25056 . 25255) (NEXTFILEFN.PH 25257 . 25803) (
+FILEINFOFN.PH 25805 . 26080) (RENAMEFILE.PH 26082 . 27023)))))
 STOP
diff --git a/library/PSEUDOHOSTS.LCOM b/library/PSEUDOHOSTS.LCOM
index 39dc6705..77789e6c 100644
Binary files a/library/PSEUDOHOSTS.LCOM and b/library/PSEUDOHOSTS.LCOM differ
