diff --git a/python/map.c b/python/map.c
index 7e5c618..a3e922e 100644
--- a/python/map.c
+++ b/python/map.c
@@ -40,7 +40,7 @@
   PyObject* arena;
   // The field descriptor (upb_fielddef*).
   // The low bit indicates whether the container is reified (see ptr below).
-  //   - low bit set: repeated field is a stub (no underlying data).
+  //   - low bit set: repeated field is a stub (empty map, no underlying data).
   //   - low bit clear: repeated field is reified (points to upb_array).
   uintptr_t field;
   union {
@@ -56,7 +56,9 @@
   return self->field & 1;
 }
 
-static upb_map* PyUpb_MapContainer_GetIfWritable(PyUpb_MapContainer* self) {
+// If the map is reified, returns it.  Otherwise, returns NULL.
+// If NULL is returned, the object is empty and has no underlying data.
+static upb_map* PyUpb_MapContainer_GetIfReified(PyUpb_MapContainer* self) {
   return PyUpb_MapContainer_IsStub(self) ? NULL : self->ptr.map;
 }
 
@@ -112,9 +114,9 @@
   self->version++;
 }
 
-static upb_map* PyUpb_MapContainer_AssureWritable(PyUpb_MapContainer* self) {
+static upb_map* PyUpb_MapContainer_AssureReified(PyUpb_MapContainer* self) {
   self->version++;
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self);
   if (map) return map;  // Already writable.
 
   const upb_fielddef* f = PyUpb_MapContainer_GetField(self);
@@ -132,7 +134,7 @@
 int PyUpb_MapContainer_AssignSubscript(PyObject* _self, PyObject* key,
                                        PyObject* val) {
   PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
-  upb_map* map = PyUpb_MapContainer_AssureWritable(self);
+  upb_map* map = PyUpb_MapContainer_AssureReified(self);
   const upb_fielddef* f = PyUpb_MapContainer_GetField(self);
   const upb_msgdef* entry_m = upb_fielddef_msgsubdef(f);
   const upb_fielddef* key_f = upb_msgdef_field(entry_m, 0);
@@ -155,7 +157,7 @@
 
 PyObject* PyUpb_MapContainer_Subscript(PyObject* _self, PyObject* key) {
   PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self);
   const upb_fielddef* f = PyUpb_MapContainer_GetField(self);
   const upb_msgdef* entry_m = upb_fielddef_msgsubdef(f);
   const upb_fielddef* key_f = upb_msgdef_field(entry_m, 0);
@@ -164,7 +166,7 @@
   upb_msgval u_key, u_val;
   if (!PyUpb_PyToUpb(key, key_f, &u_key, arena)) return NULL;
   if (!map || !upb_map_get(map, u_key, &u_val)) {
-    map = PyUpb_MapContainer_AssureWritable(self);
+    map = PyUpb_MapContainer_AssureReified(self);
     upb_arena* arena = PyUpb_Arena_Get(self->arena);
     if (upb_fielddef_issubmsg(val_f)) {
       u_val.msg_val = upb_msg_new(upb_fielddef_msgsubdef(val_f), arena);
@@ -178,7 +180,7 @@
 
 PyObject* PyUpb_MapContainer_Contains(PyObject* _self, PyObject* key) {
   PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self);
   if (!map) Py_RETURN_FALSE;
   const upb_fielddef* f = PyUpb_MapContainer_GetField(self);
   const upb_msgdef* entry_m = upb_fielddef_msgsubdef(f);
@@ -194,7 +196,7 @@
 
 PyObject* PyUpb_MapContainer_Clear(PyObject* _self, PyObject* key) {
   PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
-  upb_map* map = PyUpb_MapContainer_AssureWritable(self);
+  upb_map* map = PyUpb_MapContainer_AssureReified(self);
   upb_map_clear(map);
   Py_RETURN_NONE;
 }
@@ -205,7 +207,7 @@
   static const char* kwlist[] = {"key", "default", NULL};
   PyObject* key;
   PyObject* default_value = NULL;
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self);
   if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O", (char**)kwlist, &key,
                                    &default_value)) {
     return NULL;
@@ -238,7 +240,7 @@
 
 Py_ssize_t PyUpb_MapContainer_Length(PyObject* _self) {
   PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self);
   return map ? upb_map_size(map) : 0;
 }
 
@@ -272,7 +274,7 @@
 
 static PyObject* PyUpb_MapContainer_Repr(PyObject* _self) {
   PyUpb_MapContainer* self = (PyUpb_MapContainer*)_self;
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self);
   PyObject* dict = PyDict_New();
   if (map) {
     const upb_fielddef* f = PyUpb_MapContainer_GetField(self);
@@ -288,6 +290,7 @@
       if (!key || !val) {
         Py_XDECREF(key);
         Py_XDECREF(val);
+        Py_DECREF(dict);
         return NULL;
       }
       PyDict_SetItem(dict, key, val);
@@ -435,7 +438,7 @@
   if (self->version != self->map->version) {
     return PyErr_Format(PyExc_RuntimeError, "Map modified during iteration.");
   }
-  upb_map* map = PyUpb_MapContainer_GetIfWritable(self->map);
+  upb_map* map = PyUpb_MapContainer_GetIfReified(self->map);
   if (!map) return NULL;
   if (!upb_mapiter_next(map, &self->iter)) return NULL;
   upb_msgval key = upb_mapiter_key(map, self->iter);
diff --git a/python/message.c b/python/message.c
index 99ed793..5ca51d7 100644
--- a/python/message.c
+++ b/python/message.c
@@ -204,7 +204,9 @@
   return true;
 }
 
-upb_msg* PyUpb_CMessage_GetIfWritable(PyObject* _self) {
+// If the message is reified, returns it.  Otherwise, returns NULL.
+// If NULL is returned, the object is empty and has no underlying data.
+upb_msg* PyUpb_CMessage_GetIfReified(PyObject* _self) {
   PyUpb_CMessage* self = (void*)_self;
   return PyUpb_CMessage_IsUnset(self) ? NULL : self->ptr.msg;
 }
@@ -323,7 +325,7 @@
   return ret;
 }
 
-void PyUpb_CMessage_AssureWritable(PyUpb_CMessage* self);
+void PyUpb_CMessage_AssureReified(PyUpb_CMessage* self);
 
 static bool PyUpb_CMessage_InitMapAttribute(PyObject* _self, PyObject* name,
                                             const upb_fielddef* f,
@@ -393,7 +395,7 @@
   Py_ssize_t pos = 0;
   PyObject* name;
   PyObject* value;
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   upb_msg* msg = PyUpb_CMessage_GetMsg(self);
   upb_arena* arena = PyUpb_Arena_Get(self->arena);
 
@@ -465,8 +467,8 @@
   const upb_msgdef* m2_msgdef = _PyUpb_CMessage_GetMsgdef(m2);
   assert(m1_msgdef == m2_msgdef);
 #endif
-  const upb_msg* m1_msg = PyUpb_CMessage_GetIfWritable((PyObject*)m1);
-  const upb_msg* m2_msg = PyUpb_CMessage_GetIfWritable(_m2);
+  const upb_msg* m1_msg = PyUpb_CMessage_GetIfReified((PyObject*)m1);
+  const upb_msg* m2_msg = PyUpb_CMessage_GetIfReified(_m2);
   return PyUpb_Message_IsEqual(m1_msg, m2_msg, m1_msgdef);
 }
 
@@ -490,7 +492,7 @@
 }
 
 /*
- * PyUpb_CMessage_AssureWritable()
+ * PyUpb_CMessage_AssureReified()
  *
  * This implements the "expando" behavior of Python protos:
  *   foo = FooProto()
@@ -507,7 +509,7 @@
  * Post-condition:
  *   PyUpb_CMessage_IsUnset(self) is false
  */
-void PyUpb_CMessage_AssureWritable(PyUpb_CMessage* self) {
+void PyUpb_CMessage_AssureReified(PyUpb_CMessage* self) {
   if (!PyUpb_CMessage_IsUnset(self)) return;
   upb_arena* arena = PyUpb_Arena_Get(self->arena);
 
@@ -655,7 +657,7 @@
 void PyUpb_CMessage_SetConcreteSubobj(PyObject* _self, const upb_fielddef* f,
                                       upb_msgval subobj) {
   PyUpb_CMessage* self = (void*)_self;
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   PyUpb_CMessage_CacheDelete(_self, f);
   upb_msg_set(self->ptr.msg, f, subobj, PyUpb_Arena_Get(self->arena));
 }
@@ -803,7 +805,7 @@
     return -1;
   }
 
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
 
   upb_msgval val;
   upb_arena* arena = PyUpb_Arena_Get(self->arena);
@@ -895,7 +897,7 @@
 
 static PyObject* PyUpb_CMessage_ListFields(PyObject* _self, PyObject* arg) {
   PyObject* list = PyList_New(0);
-  upb_msg* msg = PyUpb_CMessage_GetIfWritable(_self);
+  upb_msg* msg = PyUpb_CMessage_GetIfReified(_self);
   if (!msg) return list;
 
   size_t iter1 = UPB_MSG_BEGIN;
@@ -950,7 +952,7 @@
 
 static PyObject* PyUpb_CMessage_SetInParent(PyObject* _self, PyObject* arg) {
   PyUpb_CMessage* self = (void*)_self;
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   Py_RETURN_NONE;
 }
 
@@ -977,7 +979,7 @@
     return NULL;
   }
 
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   const upb_msgdef* msgdef = _PyUpb_CMessage_GetMsgdef(self);
   const upb_filedef* file = upb_msgdef_file(msgdef);
   const upb_extreg* extreg = upb_symtab_extreg(upb_filedef_symtab(file));
@@ -1017,7 +1019,7 @@
 }
 
 static PyObject* PyUpb_CMessage_Clear(PyUpb_CMessage* self, PyObject* args) {
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   const upb_msgdef* msgdef = _PyUpb_CMessage_GetMsgdef(self);
   upb_msg_clear(self->ptr.msg, msgdef);
   Py_RETURN_NONE;
@@ -1029,14 +1031,14 @@
       !upb_fielddef_isseq(f)) {
     PyObject* sub = PyUpb_WeakMap_Get(self->unset_subobj_map, f);
     if (sub) {
-      PyUpb_CMessage_AssureWritable((PyUpb_CMessage*)sub);
+      PyUpb_CMessage_AssureReified((PyUpb_CMessage*)sub);
     }
   }
 }
 
 static PyObject* PyUpb_CMessage_ClearExtension(PyUpb_CMessage* self,
                                                PyObject* arg) {
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   const upb_msgdef* msgdef = _PyUpb_CMessage_GetMsgdef(self);
   const upb_fielddef* f = PyUpb_FieldDescriptor_GetDef(arg);
   if (!f) return NULL;
@@ -1056,7 +1058,7 @@
   //   msg = FooMessage()
   //   msg.foo.Clear()
   //   assert msg.HasField("foo")
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
 
   const upb_fielddef* f;
   const upb_oneofdef* o;
@@ -1091,7 +1093,7 @@
 
 static PyObject* PyUpb_CMessage_DiscardUnknownFields(PyUpb_CMessage* self,
                                                      PyObject* arg) {
-  PyUpb_CMessage_AssureWritable(self);
+  PyUpb_CMessage_AssureReified(self);
   const upb_msgdef* msgdef = _PyUpb_CMessage_GetMsgdef(self);
   upb_msg_discardunknown(self->ptr.msg, msgdef, 64);
   Py_RETURN_NONE;
@@ -1100,7 +1102,7 @@
 static PyObject* PyUpb_CMessage_FindInitializationErrors(PyObject* _self,
                                                          PyObject* arg) {
   PyUpb_CMessage* self = (void*)_self;
-  upb_msg* msg = PyUpb_CMessage_GetIfWritable(_self);
+  upb_msg* msg = PyUpb_CMessage_GetIfReified(_self);
   if (!msg) return PyList_New(0);
   const upb_msgdef* msgdef = _PyUpb_CMessage_GetMsgdef(self);
   const upb_symtab* ext_pool = NULL;  // TODO
@@ -1150,7 +1152,7 @@
 
 static PyObject* PyUpb_CMessage_HasExtension(PyObject* _self,
                                              PyObject* ext_desc) {
-  upb_msg* msg = PyUpb_CMessage_GetIfWritable(_self);
+  upb_msg* msg = PyUpb_CMessage_GetIfReified(_self);
   const upb_fielddef* f = PyUpb_FieldDescriptor_GetDef(ext_desc);
   if (!f) return NULL;
   if (!msg) Py_RETURN_FALSE;
@@ -1213,7 +1215,7 @@
   if (!PyUpb_CMessage_LookupName(self, name, NULL, &o, PyExc_ValueError)) {
     return NULL;
   }
-  upb_msg* msg = PyUpb_CMessage_GetIfWritable(_self);
+  upb_msg* msg = PyUpb_CMessage_GetIfReified(_self);
   if (!msg) Py_RETURN_NONE;
   const upb_fielddef* f = upb_msg_whichoneof(msg, o);
   if (!f) Py_RETURN_NONE;
diff --git a/python/message.h b/python/message.h
index 931d397..7be08e8 100644
--- a/python/message.h
+++ b/python/message.h
@@ -52,9 +52,9 @@
 // returns false on failure.
 bool PyUpb_CMessage_Check(PyObject* self);
 
-// Gets the upb_msg* for this message object if the message is set/writable.
+// Gets the upb_msg* for this message object if the message is reified.
 // Otherwise returns NULL.
-upb_msg* PyUpb_CMessage_GetIfWritable(PyObject* _self);
+upb_msg* PyUpb_CMessage_GetIfReified(PyObject* _self);
 
 // Returns the `upb_msgdef` for a given CMessage.
 const upb_msgdef* PyUpb_CMessage_GetMsgdef(PyObject* self);
diff --git a/python/protobuf.c b/python/protobuf.c
index 55d46aa..19fc36f 100644
--- a/python/protobuf.c
+++ b/python/protobuf.c
@@ -253,7 +253,7 @@
 }
 
 PyTypeObject *PyUpb_AddClass(PyObject *m, PyType_Spec *spec) {
-  PyObject *type = (void*)PyType_FromSpec(spec);
+  PyObject *type = PyType_FromSpec(spec);
   const char *name = PyUpb_GetClassName(spec);
   if (PyModule_AddObject(m, name, type) < 0) {
     Py_XDECREF(type);
diff --git a/python/repeated.c b/python/repeated.c
index de9e0c6..d06f8e8 100644
--- a/python/repeated.c
+++ b/python/repeated.c
@@ -99,7 +99,9 @@
       PyUpb_RepeatedContainer_GetFieldDescriptor(self));
 }
 
-static upb_array* PyUpb_RepeatedContainer_GetIfWritable(
+// If the repeated field is reified, returns it.  Otherwise, returns NULL.
+// If NULL is returned, the object is empty and has no underlying data.
+static upb_array* PyUpb_RepeatedContainer_GetIfReified(
     PyUpb_RepeatedContainer* self) {
   return PyUpb_RepeatedContainer_IsStub(self) ? NULL : self->ptr.arr;
 }
@@ -114,9 +116,9 @@
   assert(!PyUpb_RepeatedContainer_IsStub(self));
 }
 
-static upb_array* PyUpb_RepeatedContainer_AssureWritable(
+static upb_array* PyUpb_RepeatedContainer_AssureReified(
     PyUpb_RepeatedContainer* self) {
-  upb_array* arr = PyUpb_RepeatedContainer_GetIfWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_GetIfReified(self);
   if (arr) return arr;  // Already writable.
 
   const upb_fielddef* f = PyUpb_RepeatedContainer_GetField(self);
@@ -151,7 +153,7 @@
 
 static Py_ssize_t PyUpb_RepeatedContainer_Length(PyObject* self) {
   upb_array* arr =
-      PyUpb_RepeatedContainer_GetIfWritable((PyUpb_RepeatedContainer*)self);
+      PyUpb_RepeatedContainer_GetIfReified((PyUpb_RepeatedContainer*)self);
   return arr ? upb_array_size(arr) : 0;
 }
 
@@ -187,7 +189,7 @@
 
 PyObject* PyUpb_RepeatedContainer_Extend(PyObject* _self, PyObject* value) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_AssureWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_AssureReified(self);
   size_t start_size = upb_array_size(arr);
   PyObject* it = PyObject_GetIter(value);
   if (!it) {
@@ -223,7 +225,7 @@
 static PyObject* PyUpb_RepeatedContainer_Item(PyObject* _self,
                                               Py_ssize_t index) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_GetIfWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_GetIfReified(self);
   Py_ssize_t size = arr ? upb_array_size(arr) : 0;
   if (index < 0 || index >= size) {
     PyErr_Format(PyExc_IndexError, "list index (%zd) out of range", index);
@@ -235,7 +237,7 @@
 
 PyObject* PyUpb_RepeatedContainer_ToList(PyObject* _self) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_GetIfWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_GetIfReified(self);
   if (!arr) return PyList_New(0);
 
   const upb_fielddef* f = PyUpb_RepeatedContainer_GetField(self);
@@ -283,7 +285,7 @@
 static PyObject* PyUpb_RepeatedContainer_Subscript(PyObject* _self,
                                                    PyObject* key) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_GetIfWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_GetIfReified(self);
   Py_ssize_t size = arr ? upb_array_size(arr) : 0;
   Py_ssize_t idx, count, step;
   if (!IndexToRange(key, size, &idx, &count, &step)) return NULL;
@@ -397,7 +399,7 @@
                                                    PyObject* value) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
   const upb_fielddef* f = PyUpb_RepeatedContainer_GetField(self);
-  upb_array* arr = PyUpb_RepeatedContainer_GetIfWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_GetIfReified(self);
   Py_ssize_t size = arr ? upb_array_size(arr) : 0;
   Py_ssize_t idx, count, step;
   if (!IndexToRange(key, size, &idx, &count, &step)) return -1;
@@ -413,7 +415,7 @@
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
   Py_ssize_t index = -1;
   if (!PyArg_ParseTuple(args, "|n", &index)) return NULL;
-  upb_array* arr = PyUpb_RepeatedContainer_AssureWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_AssureReified(self);
   size_t size = upb_array_size(arr);
   if (index < 0) index += size;
   if (index >= size) index = size - 1;
@@ -427,7 +429,7 @@
 static bool PyUpb_RepeatedContainer_Assign(PyObject* _self, PyObject* list) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
   const upb_fielddef* f = PyUpb_RepeatedContainer_GetField(self);
-  upb_array* arr = PyUpb_RepeatedContainer_AssureWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_AssureReified(self);
   Py_ssize_t size = PyList_Size(list);
   bool submsg = upb_fielddef_issubmsg(f);
   upb_arena* arena = PyUpb_Arena_Get(self->arena);
@@ -435,7 +437,7 @@
     PyObject* obj = PyList_GetItem(list, i);
     upb_msgval msgval;
     if (submsg) {
-      msgval.msg_val = PyUpb_CMessage_GetIfWritable(obj);
+      msgval.msg_val = PyUpb_CMessage_GetIfReified(obj);
       assert(msgval.msg_val);
     } else {
       if (!PyUpb_PyToUpb(obj, f, &msgval, arena)) return false;
@@ -491,7 +493,7 @@
 
 static PyObject* PyUpb_RepeatedCompositeContainer_AppendNew(PyObject* _self) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_AssureWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_AssureReified(self);
   if (!arr) return NULL;
   const upb_fielddef* f = PyUpb_RepeatedContainer_GetField(self);
   upb_arena* arena = PyUpb_Arena_Get(self->arena);
@@ -535,7 +537,7 @@
   Py_ssize_t index;
   PyObject* value;
   if (!PyArg_ParseTuple(args, "nO", &index, &value)) return NULL;
-  upb_array* arr = PyUpb_RepeatedContainer_AssureWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_AssureReified(self);
   if (!arr) return NULL;
 
   // Normalize index.
@@ -620,7 +622,7 @@
 static PyObject* PyUpb_RepeatedScalarContainer_Append(PyObject* _self,
                                                       PyObject* value) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_AssureWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_AssureReified(self);
   upb_arena* arena = PyUpb_Arena_Get(self->arena);
   const upb_fielddef* f = PyUpb_RepeatedContainer_GetField(self);
   upb_msgval msgval;
@@ -635,7 +637,7 @@
                                                     Py_ssize_t index,
                                                     PyObject* item) {
   PyUpb_RepeatedContainer* self = (PyUpb_RepeatedContainer*)_self;
-  upb_array* arr = PyUpb_RepeatedContainer_GetIfWritable(self);
+  upb_array* arr = PyUpb_RepeatedContainer_GetIfReified(self);
   Py_ssize_t size = arr ? upb_array_size(arr) : 0;
   if (index < 0 || index >= size) {
     PyErr_Format(PyExc_IndexError, "list index (%zd) out of range", index);
