diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index 2e02cf2..021670a 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -5,9 +5,6 @@
 #define GET_WEAKREFS_LISTPTR(o) \
         ((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))
 
-static PyWeakReference *
-free_list = NULL;
-
 
 long
 _PyWeakref_GetWeakrefCount(PyWeakReference *head)
@@ -23,21 +20,18 @@
 
 
 static PyWeakReference *
-new_weakref(void)
+new_weakref(PyObject *ob, PyObject *callback)
 {
     PyWeakReference *result;
 
-    if (free_list != NULL) {
-        result = free_list;
-        free_list = result->wr_next;
-        result->ob_type = &_PyWeakref_RefType;
-        _Py_NewReference((PyObject *)result);
-    }
-    else {
-        result = PyObject_GC_New(PyWeakReference, &_PyWeakref_RefType);
-    }
-    if (result)
+    result = PyObject_GC_New(PyWeakReference, &_PyWeakref_RefType);
+    if (result) {
         result->hash = -1;
+        result->wr_object = ob;
+        Py_XINCREF(callback);
+        result->wr_callback = callback;
+        PyObject_GC_Track(result);
+    }
     return result;
 }
 
@@ -76,8 +70,7 @@
 {
     PyObject_GC_UnTrack((PyObject *)self);
     clear_weakref(self);
-    self->wr_next = free_list;
-    free_list = self;
+    PyObject_GC_Del(self);
 }
 
 
@@ -580,11 +573,8 @@
     if (result != NULL)
         Py_XINCREF(result);
     else {
-        result = new_weakref();
+        result = new_weakref(ob, callback);
         if (result != NULL) {
-            Py_XINCREF(callback);
-            result->wr_callback = callback;
-            result->wr_object = ob;
             if (callback == NULL) {
                 insert_head(result, list);
             }
@@ -596,7 +586,6 @@
                 else
                     insert_after(result, prev);
             }
-            PyObject_GC_Track(result);
         }
     }
     return (PyObject *) result;
@@ -624,7 +613,7 @@
     if (result != NULL)
         Py_XINCREF(result);
     else {
-        result = new_weakref();
+        result = new_weakref(ob, callback);
         if (result != NULL) {
             PyWeakReference *prev;
 
@@ -632,9 +621,6 @@
                 result->ob_type = &_PyWeakref_CallableProxyType;
             else
                 result->ob_type = &_PyWeakref_ProxyType;
-            result->wr_object = ob;
-            Py_XINCREF(callback);
-            result->wr_callback = callback;
             if (callback == NULL)
                 prev = ref;
             else
@@ -644,7 +630,6 @@
                 insert_head(result, list);
             else
                 insert_after(result, prev);
-            PyObject_GC_Track(result);
         }
     }
     return (PyObject *) result;
