diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index cf801cb..2bff142 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -10,7 +10,6 @@
            "add_extension", "remove_extension", "clear_extension_cache"]
 
 dispatch_table = {}
-safe_constructors = {}
 
 def pickle(ob_type, pickle_function, constructor_ob=None):
     if type(ob_type) is _ClassType:
@@ -26,7 +25,6 @@
 def constructor(object):
     if not callable(object):
         raise TypeError("constructors must be callable")
-    safe_constructors[object] = 1
 
 # Example: provide pickling support for complex numbers.
 
@@ -41,7 +39,6 @@
     obj = base.__new__(cls, state)
     base.__init__(obj, state)
     return obj
-_reconstructor.__safe_for_unpickling__ = 1
 
 _HEAPTYPE = 1<<9
 
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index ed0e436..8211dcf 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -15,8 +15,6 @@
 
 class initarg(C):
 
-    __safe_for_unpickling__ = 1
-
     def __init__(self, a, b):
         self.a = a
         self.b = b
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 08bb8e8..07d1089 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -92,14 +92,13 @@
 
 
 static PyObject *dispatch_table;
-static PyObject *safe_constructors;
 static PyObject *empty_tuple;
 
 static PyObject *__class___str, *__getinitargs___str, *__dict___str,
   *__getstate___str, *__setstate___str, *__name___str, *__reduce___str,
-  *write_str, *__safe_for_unpickling___str, *append_str,
+  *write_str, *append_str,
   *read_str, *readline_str, *__main___str, *__basicnew___str,
-  *copy_reg_str, *dispatch_table_str, *safe_constructors_str;
+  *copy_reg_str, *dispatch_table_str;
 
 /*************************************************************************
  Internal Data type for pickle data.                                     */
@@ -306,7 +305,6 @@
 	int (*readline_func)(struct Unpicklerobject *, char **);
 	int buf_size;
 	char *buf;
-	PyObject *safe_constructors;
 	PyObject *find_class;
 } Unpicklerobject;
 
@@ -3078,8 +3076,7 @@
 static PyObject *
 Instance_New(PyObject *cls, PyObject *args) 
 {
-	int has_key;
-	PyObject *safe=0, *r=0;
+	PyObject *r = 0;
 
 	if (PyClass_Check(cls)) {
 		int l;
@@ -3107,21 +3104,6 @@
 		else goto err;
 	}
 
-	/* Is safe_constructors always a dict? */
-	has_key = cPickle_PyMapping_HasKey(safe_constructors, cls);
-	if (!has_key) {
-		safe = PyObject_GetAttr(cls, __safe_for_unpickling___str);
-		if (!safe ||
-		    !PyObject_IsTrue(safe)) {
-			cPickle_ErrFormat(UnpicklingError,
-					  "%s is not safe for unpickling", 
-					  "O", cls);
-			Py_XDECREF(safe);
-			return NULL;
-		}
-		Py_DECREF(safe);
-	}
-
 	if (args==Py_None) {
 		/* Special case, call cls.__basicnew__() */
 		PyObject *basicnew;
@@ -4332,7 +4314,6 @@
 	self->buf_size = 0;
 	self->read = NULL;
 	self->readline = NULL;
-	self->safe_constructors = NULL;
 	self->find_class = NULL;
 
 	if (!( self->memo = PyDict_New())) 
@@ -4373,21 +4354,6 @@
 		}
 	}
 
-	if (PyEval_GetRestricted()) {
-		/* Restricted execution, get private tables */
-		PyObject *m;
-
-		if (!( m=PyImport_Import(copy_reg_str)))  goto err;
-		self->safe_constructors=PyObject_GetAttr(m, 
-							 safe_constructors_str);
-		Py_DECREF(m);
-		if (!( self->safe_constructors ))  goto err;
-	}
-	else {
-		self->safe_constructors=safe_constructors;
-		Py_INCREF(safe_constructors);
-	}
-
 	return self;
 
   err:
@@ -4418,7 +4384,6 @@
 	Py_XDECREF(self->pers_func);
 	Py_XDECREF(self->arg);
 	Py_XDECREF(self->last_string);
-	Py_XDECREF(self->safe_constructors);
 
 	if (self->marks) {
 		free(self->marks);
@@ -4693,28 +4658,22 @@
 	INIT_STR(__main__);
 	INIT_STR(__reduce__);
 	INIT_STR(write);
-	INIT_STR(__safe_for_unpickling__);
 	INIT_STR(append);
 	INIT_STR(read);
 	INIT_STR(readline);
 	INIT_STR(copy_reg);
 	INIT_STR(dispatch_table);
-	INIT_STR(safe_constructors);
 	INIT_STR(__basicnew__);
 
 	if (!( copy_reg = PyImport_ImportModule("copy_reg"))) 
 		return -1;
 
-	/* These next few are special because we want to use different
-	   ones in restricted mode. */
+	/* This is special because we want to use a different
+	   one in restricted mode. */
 	dispatch_table = PyObject_GetAttr(copy_reg, dispatch_table_str);
 	if (!dispatch_table) 
 		return -1;
 
-	if (!( safe_constructors = PyObject_GetAttr(copy_reg,
-						    safe_constructors_str))) 
-		return -1;
-
 	Py_DECREF(copy_reg);
 
 	/* Down to here ********************************** */
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index c149d1c..054ddd4 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -4516,13 +4516,6 @@
 	PyObject *d;	/* its dict */
 	PyObject *x;
 
-	/* Types that use __reduce__ for pickling need to set the following
-	 * magical attr in the type dict, with a true value.
-	 */
-	PyObject *safepickle = PyString_FromString("__safe_for_unpickling__");
-	if (safepickle == NULL)
-		return;
-
 	m = Py_InitModule3("datetime", module_methods,
 			   "Fast implementation of the datetime type.");
 
@@ -4577,18 +4570,9 @@
 		}
 	}
 
-	/* tzinfo values */
-	d = PyDateTime_TZInfoType.tp_dict;
-
-	if (PyDict_SetItem(d, safepickle, Py_True) < 0)
-		return;
-
 	/* timedelta values */
 	d = PyDateTime_DeltaType.tp_dict;
 
-	if (PyDict_SetItem(d, safepickle, Py_True) < 0)
-		return;
-
 	x = new_delta(0, 0, 1, 0);
 	if (x == NULL || PyDict_SetItemString(d, "resolution", x) < 0)
 		return;
@@ -4607,9 +4591,6 @@
 	/* date values */
 	d = PyDateTime_DateType.tp_dict;
 
-	if (PyDict_SetItem(d, safepickle, Py_True) < 0)
-		return;
-
 	x = new_date(1, 1, 1);
 	if (x == NULL || PyDict_SetItemString(d, "min", x) < 0)
 		return;
@@ -4628,9 +4609,6 @@
 	/* time values */
 	d = PyDateTime_TimeType.tp_dict;
 
-	if (PyDict_SetItem(d, safepickle, Py_True) < 0)
-		return;
-
 	x = new_time(0, 0, 0, 0, Py_None);
 	if (x == NULL || PyDict_SetItemString(d, "min", x) < 0)
 		return;
@@ -4649,9 +4627,6 @@
 	/* datetime values */
 	d = PyDateTime_DateTimeType.tp_dict;
 
-	if (PyDict_SetItem(d, safepickle, Py_True) < 0)
-		return;
-
 	x = new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None);
 	if (x == NULL || PyDict_SetItemString(d, "min", x) < 0)
 		return;
@@ -4667,8 +4642,6 @@
 		return;
 	Py_DECREF(x);
 
-	Py_DECREF(safepickle);
-
 	/* module initialization */
 	PyModule_AddIntConstant(m, "MINYEAR", MINYEAR);
 	PyModule_AddIntConstant(m, "MAXYEAR", MAXYEAR);
diff --git a/Objects/structseq.c b/Objects/structseq.c
index effe360..603477f 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -392,5 +392,4 @@
 		       PyInt_FromLong((long) n_members));
 	PyDict_SetItemString(dict, unnamed_fields_key, 
 		       PyInt_FromLong((long) n_unnamed_members));
-	PyDict_SetItemString(dict, "__safe_for_unpickling__", Py_True);
 }
