update
diff --git a/CHANGES b/CHANGES
index 48f8519..52050ff 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+January 18, 2005
+	make src/libthread/pthread.c compile
+	add threadspawnl, fsseek.
+	add link to web interface in cvs(1).
+	remove hard-coded path in fixurls
+
 January 17, 2005
 	thread.c tries to warn about bad pthreads on Linux
 	vacfs posts vacfs.basename
diff --git a/man/man3/9pclient.3 b/man/man3/9pclient.3
index cb2725a..4db3349 100644
--- a/man/man3/9pclient.3
+++ b/man/man3/9pclient.3
@@ -30,10 +30,10 @@
 int	fsversion(CFsys *fsys, int msize, char *version, int nversion)
 .PP
 .B
-CFid	*fsauth(CFsys *fsys, char *uname, char *aname)
+CFid*	fsauth(CFsys *fsys, char *uname, char *aname)
 .PP
 .B
-CFid	*fsattach(CFsys *fsys, CFid *afid, char *uname, char *aname)
+CFid*	fsattach(CFsys *fsys, CFid *afid, char *uname, char *aname)
 .PP
 .B
 void	fssetroot(CFsys *fsys, CFid *fid)
@@ -42,7 +42,7 @@
 void	fsclose(CFid *fid)
 .PP
 .B
-CFid	*fscreate(CFsys *fs, char *path, int mode, ulong perm)
+CFid*	fscreate(CFsys *fs, char *path, int mode, ulong perm)
 .PP
 .B
 CFid*	fsopen(CFsys *fs, char *path, int mode)
@@ -63,6 +63,9 @@
 long	fswrite(CFid *fid, void *buf, long n)
 .PP
 .B
+vlong	fsseek(CFid *Fid, vlong n, int type)
+.PP
+.B
 long	fsdirread(CFid *fid, Dir **d)
 .PP
 .B
@@ -234,6 +237,13 @@
 and
 .I fswrite
 read and write from this offset, and update it after successful calls.
+.I Fsseek
+sets the offset; the
+.I n
+and
+.I type
+arguments are used as in
+.IR seek (3).
 Calling
 .I fspread
 or
@@ -337,6 +347,3 @@
 and
 .I create
 on already-established fids.
-.PP
-There is no
-.IR fsseek .
diff --git a/man/man3/thread.3 b/man/man3/thread.3
index 39fa53a..4212c6f 100644
--- a/man/man3/thread.3
+++ b/man/man3/thread.3
@@ -41,6 +41,7 @@
 threadsetname,
 threadsetstate,
 threadspawn,
+threadspawnl,
 threadwaitchan,
 yield \- thread and proc management
 .SH SYNOPSIS
@@ -119,6 +120,7 @@
 int	nbsendul(Channel *c, ulong v)
 int	chanprint(Channel *c, char *fmt, ...)
 .XX
+int	threadspawnl(int fd[3], char *file, ...)
 int	threadspawn(int fd[3], char *file, char *args[])
 int	threadexecl(Channel *cpid, int fd[3], char *file, ...)
 int	threadexec(Channel *cpid, int fd[3], char *file, char *args[])
@@ -391,11 +393,15 @@
 fd[2] = dup(2, -1);
 .EE
 .PP
-.I Threadspawn
-is like
+.I Threadspawnl
+and
+.I threadspawn
+are like
+.I threadexecl
+and
 .I threadexec
-but does not replace the current thread.
-It returns the pid of the invoked program on success, or
+but do not replace the current thread.
+They return the pid of the invoked program on success, or
 \-1 on error.
 .PP
 .I Threadwaitchan