diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 248e431..5b62fee 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -993,6 +993,18 @@
 	if (strcmp(name, "itemsize") == 0) {
 		return newintobject((long)a->ob_descr->itemsize);
 	}
+	if (strcmp(name, "__members__") == 0) {
+		object *list = newlistobject(2);
+		if (list) {
+			setlistitem(list, 0, newstringobject("typecode"));
+			setlistitem(list, 1, newstringobject("itemsize"));
+			if (err_occurred()) {
+				DECREF(list);
+				list = NULL;
+			}
+		}
+		return list;
+	}
 	return findmethod(array_methods, (object *)a, name);
 }
 
@@ -1013,7 +1025,7 @@
 	if (a->ob_descr->typecode == 'c') {
 		fprintf(fp, "array('c', ");
 		v = array_tostring(a, (object *)NULL);
-		ok = printobject(v, fp, flags);
+		ok = printobject(v, fp, 0);
 		XDECREF(v);
 		fprintf(fp, ")");
 		return ok;
@@ -1023,7 +1035,7 @@
 		if (i > 0)
 			fprintf(fp, ", ");
 		v = (a->ob_descr->getitem)(a, i);
-		ok = printobject(v, fp, flags);
+		ok = printobject(v, fp, 0);
 		XDECREF(v);
 	}
 	fprintf(fp, "])");
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index d84360b..00b8369 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -866,6 +866,34 @@
 }
 
 static object *
+posix_setuid(self, args)
+	object *self;
+	object *args;
+{
+	int uid;
+	if (!getargs(args, "i", &uid))
+		return NULL;
+	if (setuid(uid) < 0)
+		return posix_error();
+	INCREF(None);
+	return None;
+}
+
+static object *
+posix_setgid(self, args)
+	object *self;
+	object *args;
+{
+	int gid;
+	if (!getargs(args, "i", &gid))
+		return NULL;
+	if (setgid(gid) < 0)
+		return posix_error();
+	INCREF(None);
+	return None;
+}
+
+static object *
 posix_waitpid(self, args)
 	object *self;
 	object *args;
@@ -1288,6 +1316,8 @@
 	{"getuid",	posix_getuid},
 	{"kill",	posix_kill},
 	{"popen",	posix_popen},
+	{"setuid",	posix_setuid},
+	{"setgid",	posix_setgid},
 	{"setpgrp",	posix_setpgrp},
 	{"wait",	posix_wait},
 	{"waitpid",	posix_waitpid},
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index b89b7b2..c1c1c19 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -395,10 +395,10 @@
 		if (ep->me_value != NULL) {
 			if (any++ > 0)
 				fprintf(fp, ", ");
-			if (printobject((object *)ep->me_key, fp, flags) != 0)
+			if (printobject((object *)ep->me_key, fp, 0) != 0)
 				return -1;
 			fprintf(fp, ": ");
-			if (printobject(ep->me_value, fp, flags) != 0)
+			if (printobject(ep->me_value, fp, 0) != 0)
 				return -1;
 		}
 	}
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 22eab71..76d2a0e 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -200,7 +200,7 @@
 	for (i = 0; i < op->ob_size; i++) {
 		if (i > 0)
 			fprintf(fp, ", ");
-		if (printobject(op->ob_item[i], fp, flags) != 0)
+		if (printobject(op->ob_item[i], fp, 0) != 0)
 			return -1;
 	}
 	fprintf(fp, "]");
diff --git a/Objects/mappingobject.c b/Objects/mappingobject.c
index b89b7b2..c1c1c19 100644
--- a/Objects/mappingobject.c
+++ b/Objects/mappingobject.c
@@ -395,10 +395,10 @@
 		if (ep->me_value != NULL) {
 			if (any++ > 0)
 				fprintf(fp, ", ");
-			if (printobject((object *)ep->me_key, fp, flags) != 0)
+			if (printobject((object *)ep->me_key, fp, 0) != 0)
 				return -1;
 			fprintf(fp, ": ");
-			if (printobject(ep->me_value, fp, flags) != 0)
+			if (printobject(ep->me_value, fp, 0) != 0)
 				return -1;
 		}
 	}
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 68fed9e..6f122ea 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -167,7 +167,7 @@
 	for (i = 0; i < op->ob_size; i++) {
 		if (i > 0)
 			fprintf(fp, ", ");
-		if (printobject(op->ob_item[i], fp, flags) != 0)
+		if (printobject(op->ob_item[i], fp, 0) != 0)
 			return -1;
 	}
 	if (op->ob_size == 1)
diff --git a/Python/compile.c b/Python/compile.c
index 565c65c..9ce3a33 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -529,7 +529,7 @@
 		return newsizedstringobject(s, len);
 	v = newsizedstringobject((char *)NULL, len);
 	p = buf = getstringvalue(v);
-	while (*s != '\0' && *s != '\'') {
+	while (*s != '\0' && *s != quote) {
 		if (*s != '\\') {
 			*p++ = *s++;
 			continue;
