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;
 {
