diff --git a/Include/cgensupport.h b/Include/cgensupport.h
index 5c2cbd4..43818bc 100644
--- a/Include/cgensupport.h
+++ b/Include/cgensupport.h
@@ -29,8 +29,7 @@
 #define mknewlongobject(x) newintobject(x)
 #define mknewshortobject(x) newintobject((long)x)
 #define mknewfloatobject(x) newfloatobject(x)
-
-extern object *mknewcharobject PROTO((int c));
+#define mknewcharobject(c) mkvalue("c", c)
 
 extern int getiobjectarg PROTO((object *args, int nargs, int i, object **p_a));
 extern int getilongarg PROTO((object *args, int nargs, int i, long *p_a));
diff --git a/Include/listobject.h b/Include/listobject.h
index 519776a..f18877f 100644
--- a/Include/listobject.h
+++ b/Include/listobject.h
@@ -53,6 +53,8 @@
 extern int setlistitem PROTO((object *, int, object *));
 extern int inslistitem PROTO((object *, int, object *));
 extern int addlistitem PROTO((object *, object *));
+extern object *getlistslice PROTO((object *, int, int));
+extern int setlistslice PROTO((object *, int, int, object *));
 extern int sortlist PROTO((object *));
 
 /* Macro, trading safety for speed */
diff --git a/Include/modsupport.h b/Include/modsupport.h
index bb809c7..5c1bdf5 100644
--- a/Include/modsupport.h
+++ b/Include/modsupport.h
@@ -40,29 +40,8 @@
 extern object *mkvalue PROTO((char *, ...));
 extern object *vmkvalue PROTO((char *, va_list));
 
+/* The following are obsolete -- use getargs directly! */
 #define getnoarg(v) getargs(v, "")
 #define getintarg(v, a) getargs(v, "i", a)
-#define getintintarg(v, a, b) getargs(v, "(ii)", a, b)
-#define getintintintarg(v, a, b, c) getargs(v, "(iii)", a, b, c)
 #define getlongarg(v, a) getargs(v, "l", a)
-#define getlonglongarg(v, a, b) getargs(v, "(ll)", a, b)
-#define getlonglongobjectarg(v, a, b, c) getargs(v, "(llO)", a, b, c)
-#define getStrarg(v, a) getargs(v, "S", a)
 #define getstrarg(v, a) getargs(v, "s", a)
-#define getstrstrarg(v, a, b) getargs(v, "(ss)", a, b)
-#define getStrStrarg(v, a, b) getargs(v, "(SS)", a, b)
-#define getstrstrintarg(v, a, b, c) getargs(v, "(ssi)", a, b, c)
-#define getStrintarg(v, a, b) getargs(v, "(Si)", a, b)
-#define getstrintarg(v, a, b) getargs(v, "(si)", a, b)
-#define getintstrarg(v, a, b) getargs(v, "(is)", a, b)
-#define getpointarg(v, a) getargs(v, "(ii)", a, (a)+1)
-#define get3pointarg(v, a) getargs(v, "((ii)(ii)(ii))", \
-				a, a+1, a+2, a+3, a+4, a+5)
-#define getrectarg(v, a) getargs(v, "((ii)(ii))", a, a+1, a+2, a+3)
-#define getrectintarg(v, a) getargs(v, "(((ii)(ii))i)", a, a+1, a+2, a+3, a+4)
-#define getpointintarg(v, a) getargs(v, "((ii)i)", a, a+1, a+2)
-#define getpointstrarg(v, a, b) getargs(v, "((ii)s)", a, a+1, b)
-#define getrectpointarg(v, a) getargs(v, "(((ii)(ii))(ii))", \
-				a, a+1, a+2, a+3, a+4, a+5)
-#define getdoublearg(v, a) getargs(v, "d", a)
-#define get2doublearg(v, a, b) getargs(v, "(dd)", a, b)
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 6c6117b..c3c3aca 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -28,6 +28,7 @@
 
 int run PROTO((FILE *, char *));
 
+int run_command PROTO((char *));
 int run_script PROTO((FILE *, char *));
 int run_tty_1 PROTO((FILE *, char *));
 int run_tty_loop PROTO((FILE *, char *));
diff --git a/Modules/almodule.c b/Modules/almodule.c
index d986d34..26bf38f 100644
--- a/Modules/almodule.c
+++ b/Modules/almodule.c
@@ -568,7 +568,7 @@
 	}
 	size = gettuplesize(args);
 	if (size == 2) {
-		if (!getstrstrarg (args, &name, &dir))
+		if (!getargs (args, "(ss)", &name, &dir))
 			return NULL;
 	}
 	else if (size == 3) {
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index e5bf46a..b5a2cfa 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -209,7 +209,7 @@
 }
 
 /* Description of types */
-struct arraydescr descriptors[] = {
+static struct arraydescr descriptors[] = {
 	{'c', sizeof(char), c_getitem, c_setitem},
 	{'b', sizeof(char), b_getitem, b_setitem},
 	{'h', sizeof(short), h_getitem, h_setitem},
diff --git a/Modules/cdmodule.c b/Modules/cdmodule.c
index 27cf35c..b5d0def 100644
--- a/Modules/cdmodule.c
+++ b/Modules/cdmodule.c
@@ -725,12 +725,12 @@
 	object *args;
 {
 	int type;
-	object *funcobject, *funcargobject;
+	object *func, *funcarg;
 
 	CheckParser(self);
 
 	/* XXX - more work here */
-	if (!getargs(args, "(iOO)", &type, &funcobject, &funcargobject))
+	if (!getargs(args, "(iOO)", &type, &func, &funcarg))
 		return NULL;
 
 	if (type < 0 || type >= NCALLBACKS) {
@@ -744,11 +744,11 @@
 	CDsetcallback(self->ob_cdparser, (CDDATATYPES) type, CD_callback, (void *) self);
 #endif
 	XDECREF(self->ob_cdcallbacks[type].ob_cdcallback);
-	INCREF(funcobject);
-	self->ob_cdcallbacks[type].ob_cdcallback = funcobject;
+	INCREF(func);
+	self->ob_cdcallbacks[type].ob_cdcallback = func;
 	XDECREF(self->ob_cdcallbacks[type].ob_cdcallbackarg);
-	INCREF(funcargobject);
-	self->ob_cdcallbacks[type].ob_cdcallbackarg = funcargobject;
+	INCREF(funcarg);
+	self->ob_cdcallbacks[type].ob_cdcallbackarg = funcarg;
 
 	INCREF(None);
 	return None;
diff --git a/Modules/cgensupport.c b/Modules/cgensupport.c
index 5dcac86..87fcfab 100644
--- a/Modules/cgensupport.c
+++ b/Modules/cgensupport.c
@@ -28,17 +28,6 @@
 #include "cgensupport.h"
 
 
-/* Functions to construct return values */
-
-object *
-mknewcharobject(c)
-	int c;
-{
-	char ch[1];
-	ch[0] = c;
-	return newsizedstringobject(ch, 1);
-}
-
 /* Functions to extract arguments.
    These needs to know the total number of arguments supplied,
    since the argument list is a tuple only of there is more than
diff --git a/Modules/cgensupport.h b/Modules/cgensupport.h
index 5c2cbd4..43818bc 100644
--- a/Modules/cgensupport.h
+++ b/Modules/cgensupport.h
@@ -29,8 +29,7 @@
 #define mknewlongobject(x) newintobject(x)
 #define mknewshortobject(x) newintobject((long)x)
 #define mknewfloatobject(x) newfloatobject(x)
-
-extern object *mknewcharobject PROTO((int c));
+#define mknewcharobject(c) mkvalue("c", c)
 
 extern int getiobjectarg PROTO((object *args, int nargs, int i, object **p_a));
 extern int getilongarg PROTO((object *args, int nargs, int i, long *p_a));
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index 3d424d1..0cc08da 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -528,7 +528,7 @@
 	char *b;
 	int a;
 	
-	if (!getintstrarg(args, &a, &b)) return NULL;
+	if (!getargs(args, "(is)", &a, &b)) return NULL;
 	
 	(*func) (obj, a, b);
 	
@@ -546,7 +546,7 @@
 {
 	int par1, par2;
 	
-	if (!getintintarg(args, &par1, &par2)) return NULL;
+	if (!getargs(args, "(ii)", &par1, &par2)) return NULL;
 	
 	(*func) (obj, par1, par2);
 	
@@ -1048,7 +1048,7 @@
 
 	c = fl_get_default (g->ob_generic);
 
-	return ((object *) mknewcharobject (c)); /* in cgensupport.c */
+	return mkvalue("c", c);
 }
 
 static struct methodlist default_methods[] = {
@@ -1479,7 +1479,7 @@
 {
 	int a, b;
 
-	if (!getintintarg(args, &a, &b)) return NULL;
+	if (!getargs(args, "(ii)", &a, &b)) return NULL;
 
 	(*func)(f, a, b);
 
@@ -2144,7 +2144,7 @@
 {
 	int rgbmode, doublebuf;
 
-	if (!getintintarg(args, &rgbmode, &doublebuf))
+	if (!getargs(args, "(ii)", &rgbmode, &doublebuf))
 		return NULL;
 	fl_set_graphics_mode(rgbmode,doublebuf);
 	INCREF(None);
@@ -2441,7 +2441,7 @@
 	char *str;
 	char *a, *b;
 
-	if (!getstrstrarg(args, &a, &b)) return NULL;
+	if (!getargs(args, "(ss)", &a, &b)) return NULL;
 
 	BGN_SAVE
 	str = fl_show_input(a, b);
diff --git a/Modules/fmmodule.c b/Modules/fmmodule.c
index 8d54d97..aa49be3 100644
--- a/Modules/fmmodule.c
+++ b/Modules/fmmodule.c
@@ -68,7 +68,7 @@
 	object *args;
 {
 	double size;
-	if (!getdoublearg(args, &size))
+	if (!getargs(args, "d", &size))
 		return NULL;
 	return newfhobject(fmscalefont(self->fh_fh, size));
 }
diff --git a/Modules/imgfile.c b/Modules/imgfile.c
index a6db026..93f5ef3 100644
--- a/Modules/imgfile.c
+++ b/Modules/imgfile.c
@@ -162,9 +162,9 @@
     return rv;
 }
 
-IMAGE *glob_image;
-long *glob_datap;
-int glob_width, glob_z;
+static IMAGE *glob_image;
+static long *glob_datap;
+static int glob_width, glob_z;
 
 static
 xs_get(buf, y)
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 979155e..8b1bccf 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -33,6 +33,9 @@
 
 #include "modsupport.h"
 
+#define getdoublearg(v, a) getargs(v, "d", a)
+#define get2doublearg(v, a, b) getargs(v, "(dd)", a, b)
+
 #include <math.h>
 
 #ifdef i860
diff --git a/Modules/nismodule.c b/Modules/nismodule.c
index eb97dee..9234127 100644
--- a/Modules/nismodule.c
+++ b/Modules/nismodule.c
@@ -87,7 +87,7 @@
 	int err;
 	object *res;
 
-	if (!getstrstrarg(args, &key, &map))
+	if (!getargs(args, "(ss)", &key, &map))
 		return NULL;
 	if ((err = yp_get_default_domain(&domain)) != 0)
 		return nis_error(err);
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 2e800de..88861c6 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -166,7 +166,7 @@
 {
 	char *path1, *path2;
 	int res;
-	if (!getstrstrarg(args, &path1, &path2))
+	if (!getargs(args, "(ss)", &path1, &path2))
 		return NULL;
 	BGN_SAVE
 	res = (*func)(path1, path2);
@@ -185,7 +185,7 @@
 	char *path;
 	int i;
 	int res;
-	if (!getstrintarg(args, &path, &i))
+	if (!getargs(args, "(si)", &path, &i))
 		return NULL;
 	BGN_SAVE
 	res = (*func)(path, i);
@@ -691,7 +691,7 @@
 	object *args;
 {
 	int pid, sig;
-	if (!getintintarg(args, &pid, &sig))
+	if (!getargs(args, "(ii)", &pid, &sig))
 		return NULL;
 	if (kill(pid, sig) == -1)
 		return posix_error();
@@ -891,7 +891,7 @@
 
 /* Functions acting on file descriptors */
 
-object *
+static object *
 posix_open(self, args)
 	object *self;
 	object *args;
@@ -913,7 +913,7 @@
 	return newintobject((long)fd);
 }
 
-object *
+static object *
 posix_close(self, args)
 	object *self;
 	object *args;
@@ -930,7 +930,7 @@
 	return None;
 }
 
-object *
+static object *
 posix_dup(self, args)
 	object *self;
 	object *args;
@@ -946,7 +946,7 @@
 	return newintobject((long)fd);
 }
 
-object *
+static object *
 posix_dup2(self, args)
 	object *self;
 	object *args;
@@ -963,7 +963,7 @@
 	return None;
 }
 
-object *
+static object *
 posix_lseek(self, args)
 	object *self;
 	object *args;
@@ -988,7 +988,7 @@
 	return newintobject(res);
 }
 
-object *
+static object *
 posix_read(self, args)
 	object *self;
 	object *args;
@@ -1011,7 +1011,7 @@
 	return buffer;
 }
 
-object *
+static object *
 posix_write(self, args)
 	object *self;
 	object *args;
@@ -1028,7 +1028,7 @@
 	return newintobject((long)size);
 }
 
-object *
+static object *
 posix_fstat(self, args)
 	object *self;
 	object *args;
@@ -1079,7 +1079,7 @@
 }
 
 #ifndef MSDOS
-object *
+static object *
 posix_pipe(self, args)
 	object *self;
 	object *args;
diff --git a/Modules/rotormodule.c b/Modules/rotormodule.c
index 4e9afd8..71bac90 100644
--- a/Modules/rotormodule.c
+++ b/Modules/rotormodule.c
@@ -763,8 +763,10 @@
 };
 
 
-object *rotor_rotor(self, args)
-object *args;
+static object *
+rotor_rotor(self, args)
+	object *self;
+	object *args;
 {
 	char *string;
 	rotorobject *r;
diff --git a/Modules/sgimodule.c b/Modules/sgimodule.c
index b373384..418609d 100644
--- a/Modules/sgimodule.c
+++ b/Modules/sgimodule.c
@@ -57,4 +57,4 @@
 	initmodule("sgi", sgi_methods);
 }
 
-int dummy; /* $%#@!& dl wants at least a byte of bss */
+static int dummy; /* $%#@!& dl wants at least a byte of bss */
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 160c292..dfdf97b 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -744,9 +744,9 @@
 	char *buf;
 	int len, n, flags;
 	flags = 0;
-	if (!getargs(args, "(s#)", &buf, &len)) {
+	if (!getargs(args, "s#", &buf, &len)) {
 		err_clear();
-		if (!getargs(args, "s#", &buf, &len, &flags))
+		if (!getargs(args, "(s#i)", &buf, &len, &flags))
 			return NULL;
 	}
 	BGN_SAVE
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c
index 02f7bcb..6e666a6 100644
--- a/Modules/stdwinmodule.c
+++ b/Modules/stdwinmodule.c
@@ -91,6 +91,15 @@
 
 #endif
 
+#define getpointarg(v, a) getargs(v, "(ii)", a, (a)+1)
+#define get3pointarg(v, a) getargs(v, "((ii)(ii)(ii))", \
+				a, a+1, a+2, a+3, a+4, a+5)
+#define getrectarg(v, a) getargs(v, "((ii)(ii))", a, a+1, a+2, a+3)
+#define getrectintarg(v, a) getargs(v, "(((ii)(ii))i)", a, a+1, a+2, a+3, a+4)
+#define getpointintarg(v, a) getargs(v, "((ii)i)", a, a+1, a+2)
+#define getrectpointarg(v, a) getargs(v, "(((ii)(ii))(ii))", \
+				a, a+1, a+2, a+3, a+4, a+5)
+
 static object *StdwinError; /* Exception stdwin.error */
 
 /* Window and menu object types declared here because of forward references */
@@ -1236,7 +1245,7 @@
 {
 	int index;
 	char *text;
-	if (!getintstrarg(args, &index, &text))
+	if (!getargs(args, "(is)", &index, &text))
 		return NULL;
 	wmenusetitem(self->m_menu, index, text);
 	INCREF(None);
@@ -1250,7 +1259,7 @@
 {
 	int index;
 	int flag;
-	if (!getintintarg(args, &index, &flag))
+	if (!getargs(args, "(ii)", &index, &flag))
 		return NULL;
 	wmenuenable(self->m_menu, index, flag);
 	INCREF(None);
@@ -1264,7 +1273,7 @@
 {
 	int index;
 	int flag;
-	if (!getintintarg(args, &index, &flag))
+	if (!getargs(args, "(ii)", &index, &flag))
 		return NULL;
 	wmenucheck(self->m_menu, index, flag);
 	INCREF(None);
@@ -1705,7 +1714,7 @@
 	object *args;
 {
 	object *title;
-	if (!getStrarg(args, &title))
+	if (!getargs(args, "S", &title))
 		return NULL;
 	DECREF(wp->w_title);
 	INCREF(title);
@@ -1930,7 +1939,7 @@
 	int tag;
 	object *title;
 	windowobject *wp;
-	if (!getStrarg(args, &title))
+	if (!getargs(args, "S", &title))
 		return NULL;
 	for (tag = 0; tag < MAXNWIN; tag++) {
 		if (windowlist[tag] == NULL)
@@ -2180,7 +2189,7 @@
 	char *prompt, *dflt;
 	int new, ret;
 	char buf[256];
-	if (!getstrstrintarg(args, &prompt, &dflt, &new))
+	if (!getargs(args, "(ssi)", &prompt, &dflt, &new))
 		return NULL;
 	strncpy(buf, dflt, sizeof buf);
 	buf[sizeof buf - 1] = '\0';
@@ -2201,7 +2210,7 @@
 {
 	char *prompt;
 	int new, ret;
-	if (!getstrintarg(args, &prompt, &new))
+	if (!getargs(args, "(si)", &prompt, &new))
 		return NULL;
 	BGN_STDWIN
 	ret = waskync(prompt, new);
@@ -2221,7 +2230,7 @@
 	char *prompt, *dflt;
 	int ret;
 	char buf[256];
-	if (!getstrstrarg(args, &prompt, &dflt))
+	if (!getargs(args, "(ss)", &prompt, &dflt))
 		return NULL;
 	strncpy(buf, dflt, sizeof buf);
 	buf[sizeof buf - 1] = '\0';
diff --git a/Modules/sunaudiodev.c b/Modules/sunaudiodev.c
index b4470dd..4e63123 100644
--- a/Modules/sunaudiodev.c
+++ b/Modules/sunaudiodev.c
@@ -28,6 +28,7 @@
 #include "modsupport.h"
 #include "structmember.h"
 
+#include <stropts.h>
 #include <sys/ioctl.h>
 #include <sun/audioio.h>
 
@@ -255,6 +256,38 @@
     return None;
 }
 
+static object *
+sad_flush(self, args)
+    sadobject *self;
+    object *args;
+{
+    
+    if ( !getargs(args, "") )
+      return 0;
+    if ( ioctl(self->x_fd, I_FLUSH, FLUSHW) < 0 ) {
+	err_errno(SunAudioError);
+	return NULL;
+    }
+    INCREF(None);
+    return None;
+}
+
+static object *
+sad_close(self, args)
+    sadobject *self;
+    object *args;
+{
+    
+    if ( !getargs(args, "") )
+      return 0;
+    if ( self->x_fd >= 0 ) {
+	close(self->x_fd);
+	self->x_fd = -1;
+    }
+    INCREF(None);
+    return None;
+}
+
 static struct methodlist sad_methods[] = {
         { "read",	sad_read },
         { "write",	sad_write },
@@ -264,6 +297,8 @@
         { "getinfo",	sad_getinfo },
         { "setinfo",	sad_setinfo },
         { "drain",	sad_drain },
+        { "flush",	sad_flush },
+        { "close",	sad_close },
 	{NULL,		NULL}		/* sentinel */
 };
 
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c
index 7a5f29d..f22aa8c 100644
--- a/Modules/threadmodule.c
+++ b/Modules/threadmodule.c
@@ -33,7 +33,7 @@
 
 int threads_started = 0;
 
-object *ThreadError;
+static object *ThreadError;
 
 
 /* Lock objects */
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index b8b22e3..3df0885 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -78,6 +78,26 @@
 #include <errno.h>
 #endif
 
+#ifdef SYSV
+/* Access timezone stuff */
+#ifdef OLDTZ				/* ANSI prepends underscore to these */
+#define _timezone	timezone	/* seconds to be added to GMT */
+#define _altzone	0		/* _timezone if daylight saving time */
+#define _daylight	0		/* if zero, _altzone is not available*/
+#define _tzname		tzname		/* Name of timezone and altzone */
+#endif
+#ifdef NOALTTZ				/* if system doesn't support alt tz */
+#undef _daylight
+#undef _altzone
+#define _daylight	0
+#define _altzone 	0
+#endif
+#endif /* SYSV */
+
+/* Forward declarations */
+static void floatsleep PROTO((double));
+static long millitimer PROTO((void)); 
+
 /* Time methods */
 
 static object *
@@ -199,7 +219,6 @@
 	object *args;
 {
 	long msecs;
-	extern long millitimer();
 	if (!getnoarg(args))
 		return NULL;
 	msecs = millitimer();
@@ -225,7 +244,7 @@
 		err_errno(IOError);
 		return NULL;
 	}
-	return mkvalue("dddd",
+	return mkvalue("(dddd)",
 		       (double)t.tms_utime / HZ,
 		       (double)t.tms_stime / HZ,
 		       (double)t.tms_cutime / HZ,
@@ -235,6 +254,71 @@
 #endif
 
 
+static object *
+time_convert(when, function)
+	time_t when;
+	struct tm * (*function) PROTO((time_t *));
+{
+	struct tm *p = function(&when);
+	return mkvalue("(iiiiiiiii)",
+		       p->tm_year + 1900,
+		       p->tm_mon + 1, /* Want January == 1 */
+		       p->tm_mday,
+		       p->tm_hour,
+		       p->tm_min,
+		       p->tm_sec,
+		       (p->tm_wday + 6) % 7, /* Want Monday == 0 */
+		       p->tm_yday,
+		       p->tm_isdst);
+}
+
+static object *
+time_gmtime(self, args)
+	object *self;
+	object *args;
+{
+	double when;
+	if (!getargs(args, "d", &when))
+		return NULL;
+	return time_convert((time_t)when, gmtime);
+}
+
+static object *
+time_localtime(self, args)
+	object *self;
+	object *args;
+{
+	double when;
+	if (!getargs(args, "d", &when))
+		return NULL;
+	return time_convert((time_t)when, localtime);
+}
+
+/* Some very old systems may not have mktime().  Comment it out then! */
+
+static object *
+time_mktime(self, args)
+	object *self;
+	object *args;
+{
+	struct tm buf;
+	if (!getargs(args, "(iiiiiiiii)",
+		     &buf.tm_year,
+		     &buf.tm_mon,
+		     &buf.tm_mday,
+		     &buf.tm_hour,
+		     &buf.tm_min,
+		     &buf.tm_sec,
+		     &buf.tm_wday,
+		     &buf.tm_yday,
+		     &buf.tm_isdst))
+		return NULL;
+	if (buf.tm_year >= 1900)
+		buf.tm_year -= 1900;
+	buf.tm_mon--;
+	return newintobject((long)mktime(&buf));
+}
+
 static struct methodlist time_methods[] = {
 #ifdef DO_MILLI
 	{"millisleep",	time_millisleep},
@@ -245,6 +329,9 @@
 #endif
 	{"sleep",	time_sleep},
 	{"time",	time_time},
+	{"gmtime",	time_gmtime},
+	{"localtime",	time_localtime},
+	{"mktime",	time_mktime},
 	{NULL,		NULL}		/* sentinel */
 };
 
@@ -252,7 +339,40 @@
 void
 inittime()
 {
-	initmodule("time", time_methods);
+	object *m, *d;
+	m = initmodule("time", time_methods);
+	d = getmoduledict(m);
+#ifdef SYSV
+	tzset();
+	dictinsert(d, "timezone", newintobject((long)_timezone));
+	dictinsert(d, "altzone", newintobject((long)_altzone));
+	dictinsert(d, "daylight", newintobject((long)_daylight));
+	dictinsert(d, "tzname", mkvalue("(zz)", _tzname[0], _tzname[1]));
+#else /* !SYSV */
+	{
+#define YEAR ((time_t)((365 * 24 + 6) * 3600))
+		time_t t;
+		struct tm *p;
+		long winterzone, summerzone;
+		char wintername[10], summername[10];
+		t = (time((time_t *)0) / YEAR) * YEAR;
+		p = localtime(&t);
+		winterzone = -p->tm_gmtoff;
+		strncpy(wintername, p->tm_zone ? p->tm_zone : "   ", 9);
+		wintername[9] = '\0';
+		t += YEAR/2;
+		p = localtime(&t);
+		summerzone = -p->tm_gmtoff;
+		strncpy(summername, p->tm_zone ? p->tm_zone : "   ", 9);
+		summername[9] = '\0';
+		dictinsert(d, "timezone", newintobject(winterzone));
+		dictinsert(d, "altzone", newintobject(summerzone));
+		dictinsert(d, "daylight",
+			   newintobject((long)(winterzone != summerzone)));
+		dictinsert(d, "tzname",
+			   mkvalue("(zz)", wintername, summername));
+	}
+#endif /* !SYSV */
 }
 
 
@@ -274,6 +394,7 @@
 }
 #endif
 
+static void
 floatsleep(secs)
 	double secs;
 {
@@ -286,7 +407,7 @@
 	}
 }
 
-long
+static long
 millitimer()
 {
 	return MacTicks * 50 / 3; /* MacTicks * 1000 / 60 */
@@ -299,7 +420,7 @@
 
 #ifdef BSD_TIME
 
-long
+static long
 millitimer()
 {
 	struct timeval t;
@@ -309,6 +430,7 @@
 	return t.tv_sec*1000 + t.tv_usec/1000;
 }
 
+static void
 floatsleep(secs)
 	double secs;
 {
@@ -325,6 +447,7 @@
 
 #else /* !BSD_TIME */
 
+static void
 floatsleep(secs)
 	double secs;
 {
@@ -342,13 +465,14 @@
 #define CLOCKS_PER_SEC 55	/* 54.945 msec per tick (18.2 HZ clock) */
 #endif
 
+static void
 floatsleep(secs)
 	double secs;
 {
 	delay(long(secs/1000.0));
 }
 
-long
+static long
 millitimer()
 {
 	clock_t ticks;
diff --git a/Objects/accessobject.c b/Objects/accessobject.c
index 1275eba..c9b7ce3 100644
--- a/Objects/accessobject.c
+++ b/Objects/accessobject.c
@@ -24,6 +24,13 @@
 
 /* Access object implementation */
 
+/* XXX TO DO LIST
+   - need a "super user" mechanism for debugger etc.
+   - __init__ and __del__ (and all other similar methods)
+     should be usable even when private, not ignored
+   - "from foo import bar" should check access of bar
+*/
+
 #include "allobjects.h"
 
 #include "structmember.h"
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index faf7e86..15263d3 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -328,7 +328,7 @@
    < 0: strip trailing '\n', raise EOFError if EOF reached immediately
 */
 
-object *
+static object *
 getline(f, n)
 	fileobject *f;
 	int n;
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 6a95ebf..25ae6d8 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -70,7 +70,7 @@
 	return (object *) op;
 }
 
-void
+static void
 float_dealloc(op)
 	object *op;
 {
@@ -329,7 +329,7 @@
 	return v->ob_fval != 0.0;
 }
 
-int
+static int
 float_coerce(pv, pw)
 	object **pv;
 	object **pw;
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 9a1fe23..b51e3d8 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -207,7 +207,7 @@
 	return 0;
 }
 
-object *
+static object *
 list_repr(v)
 	listobject *v;
 {
@@ -291,6 +291,18 @@
 	return (object *)np;
 }
 
+object *
+getlistslice(a, ilow, ihigh)
+	object *a;
+	int ilow, ihigh;
+{
+	if (!is_listobject(a)) {
+		err_badcall();
+		return NULL;
+	}
+	return list_slice((listobject *)a, ilow, ihigh);
+}
+
 static object *
 list_concat(a, bb)
 	listobject *a;
@@ -422,6 +434,19 @@
 #undef b
 }
 
+int
+setlistslice(a, ilow, ihigh, v)
+	object *a;
+	int ilow, ihigh;
+	object *v;
+{
+	if (!is_listobject(a)) {
+		err_badcall();
+		return NULL;
+	}
+	return list_ass_slice((listobject *)a, ilow, ihigh, v);
+}
+
 static int
 list_ass_item(a, i, v)
 	listobject *a;
diff --git a/Objects/longobject.c b/Objects/longobject.c
index fb82a1f..8c0b6c1 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -261,7 +261,7 @@
    If base is 8 or 16, add the proper prefix '0' or '0x'.
    External linkage: used in bltinmodule.c by hex() and oct(). */
 
-object *
+static object *
 long_format(aa, base)
 	object *aa;
 	int base;
@@ -1275,7 +1275,7 @@
 	return long_bitwise(a, '|', b);
 }
 
-int
+static int
 long_coerce(pv, pw)
 	object **pv;
 	object **pw;
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 33fe485..cba8c92 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -60,7 +60,7 @@
 	return (object *) op;
 }
 
-void
+static void
 string_dealloc(op)
 	object *op;
 {
@@ -676,6 +676,8 @@
 					   "unsupported format character");
 				goto error;
 			}
+			/* XXX There's a bug somewhere here so that
+			   XXX '%4d'%-1 yields '-  1' ... */
 			if (sign) {
 				if (*buf == '-' || *buf == '+') {
 					sign = *buf++;
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 9eb332b..faf46d5 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -136,7 +136,7 @@
 	return 0;
 }
 
-object *
+static object *
 tuplerepr(v)
 	tupleobject *v;
 {
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index c2c2966..dc65ffb 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -28,7 +28,6 @@
 
 #include "node.h"
 #include "graminit.h"
-#include "errcode.h"
 #include "sysmodule.h"
 #include "bltinmodule.h"
 #include "import.h"
diff --git a/Python/ceval.c b/Python/ceval.c
index 8698e85..1c12d9c 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1964,6 +1964,8 @@
 	INCREF(w);
 	return w;
 }
+
+
 /* External interface to call any callable object. The arg may be NULL. */
 
 object *
diff --git a/Python/cgensupport.c b/Python/cgensupport.c
index 5dcac86..87fcfab 100644
--- a/Python/cgensupport.c
+++ b/Python/cgensupport.c
@@ -28,17 +28,6 @@
 #include "cgensupport.h"
 
 
-/* Functions to construct return values */
-
-object *
-mknewcharobject(c)
-	int c;
-{
-	char ch[1];
-	ch[0] = c;
-	return newsizedstringobject(ch, 1);
-}
-
 /* Functions to extract arguments.
    These needs to know the total number of arguments supplied,
    since the argument list is a tuple only of there is more than
diff --git a/Python/graminit.c b/Python/graminit.c
index 530ddf3..3b78d0c 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -393,26 +393,35 @@
 static arc arcs_23_0[1] = {
 	{51, 1},
 };
-static arc arcs_23_1[1] = {
-	{13, 2},
+static arc arcs_23_1[2] = {
+	{22, 2},
+	{13, 3},
 };
-static arc arcs_23_2[2] = {
-	{21, 1},
-	{15, 3},
+static arc arcs_23_2[1] = {
+	{15, 4},
 };
-static arc arcs_23_3[1] = {
-	{52, 4},
+static arc arcs_23_3[2] = {
+	{21, 5},
+	{15, 4},
 };
-static arc arcs_23_4[2] = {
-	{21, 3},
-	{0, 4},
+static arc arcs_23_4[1] = {
+	{52, 6},
 };
-static state states_23[5] = {
+static arc arcs_23_5[1] = {
+	{13, 3},
+};
+static arc arcs_23_6[2] = {
+	{21, 4},
+	{0, 6},
+};
+static state states_23[7] = {
 	{1, arcs_23_0},
-	{1, arcs_23_1},
-	{2, arcs_23_2},
-	{1, arcs_23_3},
-	{2, arcs_23_4},
+	{2, arcs_23_1},
+	{1, arcs_23_2},
+	{2, arcs_23_3},
+	{1, arcs_23_4},
+	{1, arcs_23_5},
+	{2, arcs_23_6},
 };
 static arc arcs_24_0[1] = {
 	{13, 1},
@@ -1057,7 +1066,7 @@
 	 "\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000"},
 	{278, "global_stmt", 0, 3, states_22,
 	 "\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"},
-	{279, "access_stmt", 0, 5, states_23,
+	{279, "access_stmt", 0, 7, states_23,
 	 "\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"},
 	{280, "accesstype", 0, 2, states_24,
 	 "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"},
