diff --git a/Objects/accessobject.c b/Objects/accessobject.c
index f3c7dfc..19d54dc 100644
--- a/Objects/accessobject.c
+++ b/Objects/accessobject.c
@@ -22,6 +22,8 @@
 
 ******************************************************************/
 
+#ifdef SUPPORT_OBSOLETE_ACCESS /* This object type is no longer supported */
+
 /* Access object implementation */
 
 /* XXX TO DO LIST
@@ -358,3 +360,5 @@
 	0,			/*ob_size*/
 	"*mapping*",		/*tp_name*/
 };
+
+#endif /* SUPPORT_OBSOLETE_ACCESS */
diff --git a/Objects/classobject.c b/Objects/classobject.c
index d3c46b3..6eb453f 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -37,8 +37,10 @@
 	object *dict;
 	object *name; /* String; NULL if unknown */
 {
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	int pos;
 	object *key, *value;
+#endif
 	classobject *op, *dummy;
 	static object *getattrstr, *setattrstr, *delattrstr;
 	if (dictlookup(dict, "__doc__") == NULL) {
@@ -73,11 +75,13 @@
 	XINCREF(op->cl_getattr);
 	XINCREF(op->cl_setattr);
 	XINCREF(op->cl_delattr);
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	pos = 0;
 	while (mappinggetnext(dict, &pos, &key, &value)) {
 		if (is_accessobject(value))
 			setaccessowner(value, (object *)op);
 	}
+#endif
 	return (object *) op;
 }
 
@@ -151,12 +155,14 @@
 		err_setval(AttributeError, name);
 		return NULL;
 	}
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	if (is_accessobject(v)) {
 		v = getaccessvalue(v, getowner());
 		if (v == NULL)
 			return NULL;
 	}
 	else
+#endif
 		INCREF(v);
 	if (is_funcobject(v)) {
 		object *w = newinstancemethodobject(v, (object *)NULL,
@@ -173,7 +179,9 @@
 	object *name;
 	object *v;
 {
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	object *ac;
+#endif
 	char *sname = getstringvalue(name);
 	if (sname[0] == '_' && sname[1] == '_') {
 		int n = getstringsize(name);
@@ -187,9 +195,11 @@
 			   "classes are read-only in restricted mode");
 		return -1;
 	}
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	ac = mappinglookup(op->cl_dict, name);
 	if (ac != NULL && is_accessobject(ac))
 		return setaccessvalue(ac, getowner(), v);
+#endif
 	if (v == NULL) {
 		int rv = mappingremove(op->cl_dict, name);
 		if (rv < 0)
@@ -260,6 +270,7 @@
 
 /* Instance objects */
 
+#ifdef SUPPORT_OBSOLETE_ACCESS
 static int
 addaccess(class, inst)
 	classobject *class;
@@ -295,6 +306,7 @@
     	}
 	return 0;
 }
+#endif
 
 object *
 newinstanceobject(class, arg, kw)
@@ -315,8 +327,11 @@
 	INCREF(class);
 	inst->in_class = (classobject *)class;
 	inst->in_dict = newdictobject();
-	if (inst->in_dict == NULL ||
-	    addaccess((classobject *)class, inst) != 0) {
+	if (inst->in_dict == NULL
+#ifdef SUPPORT_OBSOLETE_ACCESS
+	    || addaccess((classobject *)class, inst) != 0
+#endif
+		) {
 		DECREF(inst);
 		return NULL;
 	}
@@ -382,8 +397,12 @@
 	if ((del = instance_getattr1(inst, delstr)) != NULL) {
 		object *res = call_object(del, (object *)NULL);
 		DECREF(del);
-		XDECREF(res);
-		/* XXX If __del__ raised an exception, it is ignored! */
+		if (res == NULL) {
+			writestring("exception in __del__ method ignored\n",
+				    sysget("stdout"));
+		}
+		else
+			DECREF(res);
 	}
 	/* Restore the saved exception and undo the temporary revival */
 	err_restore(error_type, error_value, error_traceback);
@@ -438,12 +457,14 @@
 			return NULL;
 		}
 	}
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	if (is_accessobject(v)) {
 		v = getaccessvalue(v, getowner());
 		if (v == NULL)
 			return NULL;
 	}
 	else
+#endif
 		INCREF(v);
 	if (class != NULL) {
 		if (is_funcobject(v)) {
@@ -492,10 +513,12 @@
 	object *name;
 	object *v;
 {
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	object *ac;
 	ac = mappinglookup(inst->in_dict, name);
 	if (ac != NULL && is_accessobject(ac))
 		return setaccessvalue(ac, getowner(), v);
+#endif
 	if (v == NULL) {
 		int rv = mappingremove(inst->in_dict, name);
 		if (rv < 0)
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 7377a98..9049d79 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -127,9 +127,11 @@
 	if (res == NULL)
 		err_setstr(AttributeError, name);
 	else {
+#ifdef SUPPORT_OBSOLETE_ACCESS
 		if (is_accessobject(res))
 			res = getaccessvalue(res, getglobals());
 		else
+#endif
 			INCREF(res);
 	}
 	return res;
@@ -141,14 +143,18 @@
 	char *name;
 	object *v;
 {
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	object *ac;
+#endif
 	if (name[0] == '_' && strcmp(name, "__dict__") == 0) {
 		err_setstr(TypeError, "read-only special attribute");
 		return -1;
 	}
+#ifdef SUPPORT_OBSOLETE_ACCESS
 	ac = dictlookup(m->md_dict, name);
 	if (ac != NULL && is_accessobject(ac))
 		return setaccessvalue(ac, getglobals(), v);
+#endif
 	if (v == NULL) {
 		int rv = dictremove(m->md_dict, name);
 		if (rv < 0)
