diff --git a/Include/ceval.h b/Include/ceval.h
index ab7659e..992b63d 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -28,7 +28,7 @@
 
 object *getglobals PROTO((void));
 object *getlocals PROTO((void));
-object *getclass PROTO((void));
+object *getowner PROTO((void));
 void mergelocals PROTO((void));
 
 void printtraceback PROTO((object *));
diff --git a/Include/frameobject.h b/Include/frameobject.h
index 2056e06..c514de2 100644
--- a/Include/frameobject.h
+++ b/Include/frameobject.h
@@ -36,7 +36,7 @@
 	codeobject *f_code;	/* code segment */
 	object *f_globals;	/* global symbol table (dictobject) */
 	object *f_locals;	/* local symbol table (dictobject) */
-	object *f_class;	/* class context (classobject or NULL) */
+	object *f_owner;	/* owner (e.g. class or module) or NULL */
 	object *f_fastlocals;	/* fast local variables (listobject) */
 	object *f_localmap;	/* local variable names (dictobject) */
 	object **f_valuestack;	/* malloc'ed array */
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index e2328fb..503a359 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -32,7 +32,7 @@
 - only AF_INET and AF_UNIX address families are supported
 - no asynchronous I/O (but read polling: avail)
 - no read/write operations (use send/recv or makefile instead)
-- no flags on sendto/recvfrom operations
+- no flags on recvfrom operations
 - setsockopt() and getsockopt() only support integer options
 
 Interface:
@@ -61,10 +61,10 @@
 - s.getpeername() --> sockaddr
 - s.listen(n) --> None
 - s.makefile(mode) --> file object
-- s.recv(nbytes) --> string
+- s.recv(nbytes [,flags]) --> string
 - s.recvfrom(nbytes) --> string, sockaddr
-- s.send(string) --> None
-- s.sendto(string, sockaddr) --> None
+- s.send(string [,flags]) --> None
+- s.sendto(string, [flags,] sockaddr) --> None
 - s.shutdown(how) --> None
 - s.close() --> None
 
@@ -669,7 +669,7 @@
 }
 
 
-/* s.recv(nbytes) method */
+/* s.recv(nbytes [,flags]) method */
 
 static object *
 sock_recv(s, args)
@@ -678,11 +678,11 @@
 {
 	int len, n, flags;
 	object *buf;
-	if (!getintintarg(args, &len, &flags)) {
+	flags = 0;
+	if (!getargs(args, "i", &len)) {
 		err_clear();
-		if (!getintarg(args, &len))
+		if (!getargs(args, "(ii)", &len, &flags))
 			return NULL;
-		flags = 0;
 	}
 	buf = newsizedstringobject((char *) 0, len);
 	if (buf == NULL)
@@ -698,7 +698,7 @@
 }
 
 
-/* s.recvfrom(nbytes) method */
+/* s.recvfrom(nbytes [,flags]) method */
 
 static object *
 sock_recvfrom(s, args)
@@ -707,14 +707,16 @@
 {
 	char addrbuf[256];
 	object *buf, *addr, *ret;
-	int addrlen, len, n;
-	if (!getintarg(args, &len))
-		return NULL;
-	if (!getsockaddrlen(s, &addrlen))
-		return NULL;
+	int addrlen, len, n, flags;
+	flags = 0;
+	if (!getargs(args, "i", &len)) {
+		err_clear();
+		if (!getargs(args, "(ii)", &len, &flags))
+		    return NULL;
+	}
 	buf = newsizedstringobject((char *) 0, len);
 	BGN_SAVE
-	n = recvfrom(s->sock_fd, getstringvalue(buf), len, 0,
+	n = recvfrom(s->sock_fd, getstringvalue(buf), len, flags,
 		     addrbuf, &addrlen);
 	END_SAVE
 	if (n < 0)
@@ -729,7 +731,7 @@
 }
 
 
-/* s.send(data) method */
+/* s.send(data [,flags]) method */
 
 static object *
 sock_send(s, args)
@@ -738,11 +740,11 @@
 {
 	char *buf;
 	int len, n, flags;
-	if (!getargs(args, "(s#i)", &buf, &len, &flags)) {
+	flags = 0;
+	if (!getargs(args, "(s#)", &buf, &len)) {
 		err_clear();
-		if (!getargs(args, "s#", &buf, &len))
+		if (!getargs(args, "s#", &buf, &len, &flags))
 			return NULL;
-		flags = 0;
 	}
 	BGN_SAVE
 	n = send(s->sock_fd, buf, len, flags);
@@ -754,7 +756,7 @@
 }
 
 
-/* s.sendto(data, sockaddr) method */
+/* s.sendto(data, [flags,] sockaddr) method */
 
 static object *
 sock_sendto(s, args)
@@ -764,16 +766,17 @@
 	object *addro;
 	char *buf;
 	struct sockaddr *addr;
-	int addrlen, len, n;
-	if (args == NULL || !is_tupleobject(args) || gettuplesize(args) != 2) {
-		err_badarg();
-		return NULL;
+	int addrlen, len, n, flags;
+	flags = 0;
+	if (!getargs(args, "(s#O)", &buf, &len, &addro)) {
+		err_clear();
+		if (!getargs(args, "(s#iO)", &buf, &len, &flags, &addro))
+			return NULL;
 	}
-	if (!getargs(args, "(s#O)", &buf, &len, &addro) ||
-	    !getsockaddrarg(s, addro, &addr, &addrlen))
+	if (!getsockaddrarg(s, addro, &addr, &addrlen))
 		return NULL;
 	BGN_SAVE
-	n = sendto(s->sock_fd, buf, len, 0, addr, addrlen);
+	n = sendto(s->sock_fd, buf, len, flags, addr, addrlen);
 	END_SAVE
 	if (n < 0)
 		return socket_error();
diff --git a/Objects/accessobject.c b/Objects/accessobject.c
index 6fd9bd5..1275eba 100644
--- a/Objects/accessobject.c
+++ b/Objects/accessobject.c
@@ -32,27 +32,23 @@
 typedef struct {
 	OB_HEAD
 	object		*ac_value;
-	object		*ac_class;
+	object		*ac_owner;
 	typeobject	*ac_type;
 	int		ac_mode;
 } accessobject;
 
 /* Forward */
 static int typecheck PROTO((object *, typeobject *));
-static int classcheck PROTO((object *, object *, int, int));
+static int ownercheck PROTO((object *, object *, int, int));
 
 object *
-newaccessobject(value, class, type, mode)
+newaccessobject(value, owner, type, mode)
 	object *value;
-	object *class;
+	object *owner;
 	typeobject *type;
 	int mode;
 {
 	accessobject *ap;
-	if (class != NULL && !is_classobject(class)) {
-		err_badcall();
-		return NULL;
-	}
 	if (!typecheck(value, type)) {
 		err_setstr(AccessError,
 		"access: initial value has inappropriate type");
@@ -63,8 +59,8 @@
 		return NULL;
 	XINCREF(value);
 	ap->ac_value = value;
-	XINCREF(class);
-	ap->ac_class = class;
+	XINCREF(owner);
+	ap->ac_owner = owner;
 	XINCREF(type);
 	ap->ac_type = (typeobject *)type;
 	ap->ac_mode = mode;
@@ -81,22 +77,22 @@
 		return NULL;
 	}
 	ap = (accessobject *)op;
-	return newaccessobject(ap->ac_value, ap->ac_class,
+	return newaccessobject(ap->ac_value, ap->ac_owner,
 			       ap->ac_type, ap->ac_mode);
 }
 
 void
-setaccessowner(op, class)
+setaccessowner(op, owner)
 	object *op;
-	object *class;
+	object *owner;
 {
 	register accessobject *ap;
-	if (!is_accessobject(op) || class != NULL && !is_classobject(class))
+	if (!is_accessobject(op))
 		return; /* XXX no error */
 	ap = (accessobject *)op;
-	XDECREF(ap->ac_class);
-	XINCREF(class);
-	ap->ac_class = class;
+	XDECREF(ap->ac_owner);
+	XINCREF(owner);
+	ap->ac_owner = owner;
 }
 
 int
@@ -109,9 +105,9 @@
 }
 
 object *
-getaccessvalue(op, class)
+getaccessvalue(op, owner)
 	object *op;
-	object *class;
+	object *owner;
 {
 	register accessobject *ap;
 	if (!is_accessobject(op)) {
@@ -120,7 +116,7 @@
 	}
 	ap = (accessobject *)op;
 	
-	if (!classcheck(class, ap->ac_class, AC_R, ap->ac_mode)) {
+	if (!ownercheck(owner, ap->ac_owner, AC_R, ap->ac_mode)) {
 		err_setstr(AccessError, "read access denied");
 		return NULL;
 	}
@@ -134,9 +130,9 @@
 }
 
 int
-setaccessvalue(op, class, value)
+setaccessvalue(op, owner, value)
 	object *op;
-	object *class;
+	object *owner;
 	object *value;
 {
 	register accessobject *ap;
@@ -146,7 +142,7 @@
 	}
 	ap = (accessobject *)op;
 	
-	if (!classcheck(class, ap->ac_class, AC_W, ap->ac_mode)) {
+	if (!ownercheck(owner, ap->ac_owner, AC_W, ap->ac_mode)) {
 		err_setstr(AccessError, "write access denied");
 		return -1;
 	}
@@ -227,17 +223,20 @@
 }
 
 static int
-classcheck(caller, owner, access, mode)
+ownercheck(caller, owner, access, mode)
 	object *caller;
 	object *owner;
 	int access;
 	int mode;
 {
-	if (caller == owner && owner != NULL)
-		return access & mode & (AC_PRIVATE|AC_PROTECTED|AC_PUBLIC);
-	if (caller != NULL && owner != NULL && issubclass(caller, owner))
-		return access & mode & (AC_PROTECTED|AC_PUBLIC);
-	return access & mode & AC_PUBLIC;
+	int mask = AC_PUBLIC;
+	if (owner != NULL) {
+		if (caller == owner)
+			mask |= AC_PRIVATE | AC_PROTECTED;
+		else if (is_classobject(owner) && issubclass(caller, owner))
+			mask |= AC_PROTECTED;
+	}
+	return access & mode & mask;
 }
 
 /* Access methods */
@@ -247,7 +246,7 @@
 	accessobject *ap;
 {
 	XDECREF(ap->ac_value);
-	XDECREF(ap->ac_class);
+	XDECREF(ap->ac_owner);
 	XDECREF(ap->ac_type);
 	DEL(ap);
 }
@@ -256,7 +255,7 @@
 
 static struct memberlist access_memberlist[] = {
 	{"ac_value",	T_OBJECT,	OFF(ac_value)},
-	{"ac_class",	T_OBJECT,	OFF(ac_class)},
+	{"ac_owner",	T_OBJECT,	OFF(ac_owner)},
 	{"ac_type",	T_OBJECT,	OFF(ac_type)},
 	{"ac_mode",	T_INT,		OFF(ac_mode)},
 	{NULL}	/* Sentinel */
@@ -275,12 +274,21 @@
 	accessobject *ap;
 {
 	char buf[300];
-	classobject *class = (classobject *)ap->ac_class;
+	char buf2[20];
+	char *ownername;
 	typeobject *type = ap->ac_type;
+	if (is_classobject(ap->ac_owner)) {
+		ownername =
+			getstringvalue(((classobject *)ap->ac_owner)->cl_name);
+	}
+	else {
+		sprintf(buf2, "0x%lx", (long)ap->ac_owner);
+		ownername = buf2;
+	}
 	sprintf(buf,
-	"<access object, value 0x%lx, class %.100s, type %.100s, mode %04o>",
+	"<access object, value 0x%lx, owner %.100s, type %.100s, mode %04o>",
 		(long)(ap->ac_value),
-		class ? getstringvalue(class->cl_name) : "-",
+		ownername,
 		type ? type->tp_name : "-",
 		ap->ac_mode);
 	return newstringobject(buf);
@@ -305,7 +313,8 @@
 	0,			/*tp_hash*/
 };
 
-/* Dummy type objects to indicate classes of types */
+
+/* Pseudo type objects to indicate collections of types */
 
 /* XXX This should be replaced by a more general "subclassing"
    XXX mechanism for type objects... */
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 0a6fc7e..8836bb7 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -126,7 +126,7 @@
 		return NULL;
 	}
 	if (is_accessobject(v)) {
-		v = getaccessvalue(v, getclass());
+		v = getaccessvalue(v, getowner());
 		if (v == NULL)
 			return NULL;
 	}
@@ -157,7 +157,7 @@
 	}
 	ac = dictlookup(op->cl_dict, name);
 	if (ac != NULL && is_accessobject(ac))
-		return setaccessvalue(ac, getclass(), v);
+		return setaccessvalue(ac, getowner(), v);
 	if (v == NULL) {
 		int rv = dictremove(op->cl_dict, name);
 		if (rv < 0)
@@ -207,10 +207,10 @@
 {
 	int i, n;
 	classobject *cp;
-	if (class == NULL || !is_classobject(class))
-		return 0;
 	if (class == base)
 		return 1;
+	if (class == NULL || !is_classobject(class))
+		return 0;
 	cp = (classobject *)class;
 	n = gettuplesize(cp->cl_bases);
 	for (i = 0; i < n; i++) {
@@ -363,6 +363,7 @@
 		INCREF(inst->in_class);
 		return (object *)inst->in_class;
 	}
+	class = NULL;
 	v = dictlookup(inst->in_dict, name);
 	if (v == NULL) {
 		v = class_lookup(inst->in_class, name, &class);
@@ -372,13 +373,13 @@
 		}
 	}
 	if (is_accessobject(v)) {
-		v = getaccessvalue(v, getclass());
+		v = getaccessvalue(v, getowner());
 		if (v == NULL)
 			return NULL;
 	}
 	else
 		INCREF(v);
-	if (is_funcobject(v)) {
+	if (is_funcobject(v) && class != NULL) {
 		object *w = newinstancemethodobject(v, (object *)inst,
 						    (object *)class);
 		DECREF(v);
@@ -403,7 +404,7 @@
 	}
 	ac = dictlookup(inst->in_dict, name);
 	if (ac != NULL && is_accessobject(ac))
-		return setaccessvalue(ac, getclass(), v);
+		return setaccessvalue(ac, getowner(), v);
 	if (v == NULL) {
 		int rv = dictremove(inst->in_dict, name);
 		if (rv < 0)
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 7c2aeae..62a18e2 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -38,7 +38,7 @@
 	{"f_code",	T_OBJECT,	OFF(f_code)},
 	{"f_globals",	T_OBJECT,	OFF(f_globals)},
 	{"f_locals",	T_OBJECT,	OFF(f_locals)},
-	{"f_class",	T_OBJECT,	OFF(f_class)},
+	{"f_owner",	T_OBJECT,	OFF(f_owner)},
 /*	{"f_fastlocals",T_OBJECT,	OFF(f_fastlocals)}, /* XXX Unsafe */
 	{"f_localmap",	T_OBJECT,	OFF(f_localmap)},
 	{"f_lasti",	T_INT,		OFF(f_lasti)},
@@ -85,7 +85,7 @@
 	XDECREF(f->f_code);
 	XDECREF(f->f_globals);
 	XDECREF(f->f_locals);
-	XDECREF(f->f_class);
+	XDECREF(f->f_owner);
 	XDECREF(f->f_fastlocals);
 	XDECREF(f->f_localmap);
 	f->f_back = free_list;
@@ -110,12 +110,12 @@
 };
 
 frameobject *
-newframeobject(back, code, globals, locals, class, nvalues, nblocks)
+newframeobject(back, code, globals, locals, owner, nvalues, nblocks)
 	frameobject *back;
 	codeobject *code;
 	object *globals;
 	object *locals;
-	object *class;
+	object *owner;
 	int nvalues;
 	int nblocks;
 {
@@ -124,7 +124,6 @@
 		code == NULL || !is_codeobject(code) ||
 		globals == NULL || !is_dictobject(globals) ||
 		locals == NULL || !is_dictobject(locals) ||
-	        (class != NULL && !is_classobject(class)) ||
 		nvalues < 0 || nblocks < 0) {
 		err_badcall();
 		return NULL;
@@ -150,8 +149,8 @@
 		f->f_globals = globals;
 		INCREF(locals);
 		f->f_locals = locals;
-		XINCREF(class);
-		f->f_class = class;
+		XINCREF(owner);
+		f->f_owner = owner;
 		f->f_fastlocals = NULL;
 		f->f_localmap = NULL;
 		if (nvalues > f->f_nvalues || f->f_valuestack == NULL) {
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 5c0db15..dca5543 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -112,7 +112,7 @@
 		err_setstr(AttributeError, name);
 	else {
 		if (is_accessobject(res))
-			res = getaccessvalue(res, getclass());
+			res = getaccessvalue(res, getglobals());
 		else
 			INCREF(res);
 	}
@@ -135,7 +135,7 @@
 	}
 	ac = dictlookup(m->md_dict, name);
 	if (ac != NULL && is_accessobject(ac))
-		return setaccessvalue(ac, getclass(), v);
+		return setaccessvalue(ac, getglobals(), v);
 	if (v == NULL) {
 		int rv = dictremove(m->md_dict, name);
 		if (rv < 0)
diff --git a/Python/ceval.c b/Python/ceval.c
index 0e2acfc..8698e85 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -161,11 +161,11 @@
 /* Interpreter main loop */
 
 object *
-eval_code(co, globals, locals, class, arg)
+eval_code(co, globals, locals, owner, arg)
 	codeobject *co;
 	object *globals;
 	object *locals;
-	object *class;
+	object *owner;
 	object *arg;
 {
 	register unsigned char *next_instr;
@@ -246,7 +246,7 @@
 			co,			/*code*/
 			globals,		/*globals*/
 			locals,			/*locals*/
-			class,			/*class*/
+			owner,			/*owner*/
 			50,			/*nvalues*/
 			20);			/*nblocks*/
 	if (f == NULL)
@@ -767,7 +767,7 @@
 						u = (object *)v->ob_type;
 					else
 						u = NULL;
-					x = newaccessobject(v, class,
+					x = newaccessobject(v, f->f_locals,
 							    (typeobject *)u,
 							    defmode);
 					DECREF(v);
@@ -777,7 +777,7 @@
 				}
 			}
 			else if (is_accessobject(u)) {
-				err = setaccessvalue(u, class, v);
+				err = setaccessvalue(u, f->f_locals, v);
 				DECREF(v);
 				break;
 			}
@@ -789,7 +789,7 @@
 			w = GETNAMEV(oparg);
 			u = dict2lookup(f->f_locals, w);
 			if (u != NULL && is_accessobject(u)) {
-				err = setaccessvalue(u, class,
+				err = setaccessvalue(u, f->f_locals,
 						     (object *)NULL);
 				break;
 			}
@@ -987,7 +987,7 @@
 			v = POP();
 			u = dict2lookup(f->f_locals, w);
 			if (u != NULL && is_accessobject(u)) {
-				err = setaccessvalue(u, class, v);
+				err = setaccessvalue(u, f->f_globals, v);
 				DECREF(v);
 				break;
 			}
@@ -999,7 +999,7 @@
 			w = GETNAMEV(oparg);
 			u = dict2lookup(f->f_locals, w);
 			if (u != NULL && is_accessobject(u)) {
-				err = setaccessvalue(u, class,
+				err = setaccessvalue(u, f->f_globals,
 						     (object *)NULL);
 				break;
 			}
@@ -1030,7 +1030,7 @@
 				}
 			}
 			if (is_accessobject(x)) {
-				x = getaccessvalue(x, class);
+				x = getaccessvalue(x, f->f_globals /* XXX */);
 				if (x == NULL)
 					break;
 			}
@@ -1052,7 +1052,7 @@
 				}
 			}
 			if (is_accessobject(x)) {
-				x = getaccessvalue(x, class);
+				x = getaccessvalue(x, f->f_globals);
 				if (x == NULL)
 					break;
 			}
@@ -1069,7 +1069,7 @@
 				break;
 			}
 			if (is_accessobject(x)) {
-				x = getaccessvalue(x, class);
+				x = getaccessvalue(x, f->f_locals);
 				if (x == NULL)
 					break;
 			}
@@ -1105,7 +1105,7 @@
 				break;
 			}
 			if (is_accessobject(x)) {
-				x = getaccessvalue(x, class);
+				x = getaccessvalue(x, f->f_locals);
 				if (x == NULL)
 					break;
 			}
@@ -1118,7 +1118,7 @@
 			v = POP();
 			w = GETLISTITEM(fastlocals, oparg);
 			if (w != NULL && is_accessobject(w)) {
-				err = setaccessvalue(w, class, v);
+				err = setaccessvalue(w, f->f_locals, v);
 				DECREF(v);
 				break;
 			}
@@ -1134,7 +1134,8 @@
 				break;
 			}
 			if (w != NULL && is_accessobject(w)) {
-				err = setaccessvalue(w, class, (object *)NULL);
+				err = setaccessvalue(w, f->f_locals,
+						     (object *)NULL);
 				break;
 			}
 			DECREF(x);
@@ -1668,12 +1669,12 @@
 }
 
 object *
-getclass()
+getowner()
 {
 	if (current_frame == NULL)
 		return NULL;
 	else
-		return current_frame->f_class;
+		return current_frame->f_owner;
 }
 
 void
@@ -2363,14 +2364,25 @@
 	object *w, *x;
 	w = getmoduledict(v);
 	if (getstringvalue(name)[0] == '*') {
-		int pos;
+		int pos, err;
 		object *name, *value;
 		pos = 0;
 		while (mappinggetnext(w, &pos, &name, &value)) {
 			if (!is_stringobject(name) ||
 			    getstringvalue(name)[0] == '_')
 				continue;
-			if (dict2insert(locals, name, value) != 0)
+			if (is_accessobject(value)) {
+				value = getaccessvalue(value, (object *)NULL);
+				if (value == NULL) {
+					err_clear();
+					continue;
+				}
+			}
+			else
+				INCREF(value);
+			err = dict2insert(locals, name, value);
+			DECREF(value);
+			if (err != 0)
 				return -1;
 		}
 		return 0;
@@ -2456,7 +2468,7 @@
 		type = value->ob_type;
 	else
 		type = NULL;
-	ac = newaccessobject(value, f->f_class, type, mode);
+	ac = newaccessobject(value, f->f_locals, type, mode);
 	if (ac == NULL)
 		return -1;
 	if (fastind >= 0)
diff --git a/Python/import.c b/Python/import.c
index 395114b..b532651 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -303,7 +303,7 @@
 			}
 		}
 	}
-	v = eval_code(co, d, d, (object *)NULL, (object *)NULL);
+	v = eval_code(co, d, d, d, (object *)NULL);
 	DECREF(co);
 	return v;
 }
@@ -422,7 +422,7 @@
 		return -1;
 	if ((m = add_module(name)) == NULL ||
 	    (d = getmoduledict(m)) == NULL ||
-	    (v = eval_code(co, d, d, (object*)NULL, (object*)NULL)) == NULL) {
+	    (v = eval_code(co, d, d, d, (object*)NULL)) == NULL) {
 		DECREF(co);
 		return -1;
 	}
