diff --git a/python/convert.c b/python/convert.c
index 4cbde00..6a8e114 100644
--- a/python/convert.c
+++ b/python/convert.c
@@ -397,7 +397,7 @@
   //      using upb_Message_Next(msg2).  If the two messages have the same set
   //      of fields, this will yield the same field.
   //   3. For extension fields, we have to actually search for the corresponding
-  //      field, which we do with upb_Message_Get(msg2, ext_f1).
+  //      field, which we do with upb_Message_GetFieldByDef(msg2, ext_f1).
   //   4. Once iteration over msg1 is complete, we call upb_Message_Next(msg2)
   //   one
   //      final time to verify that we have visited all of msg2's regular fields
@@ -413,7 +413,7 @@
   size_t iter2 = kUpb_Message_Begin;
   while (upb_Message_Next(msg1, m, symtab, &f1, &val1, &iter1)) {
     if (upb_FieldDef_IsExtension(f1)) {
-      val2 = upb_Message_Get(msg2, f1);
+      val2 = upb_Message_GetFieldByDef(msg2, f1);
     } else {
       if (!upb_Message_Next(msg2, m, NULL, &f2, &val2, &iter2) || f1 != f2) {
         return false;
diff --git a/python/extension_dict.c b/python/extension_dict.c
index acedb03..aa714a3 100644
--- a/python/extension_dict.c
+++ b/python/extension_dict.c
@@ -113,10 +113,10 @@
   upb_Message* msg = PyUpb_Message_GetIfReified(self->msg);
   if (!msg) return 0;
   if (upb_FieldDef_IsRepeated(f)) {
-    upb_MessageValue val = upb_Message_Get(msg, f);
+    upb_MessageValue val = upb_Message_GetFieldByDef(msg, f);
     return upb_Array_Size(val.array_val) > 0;
   } else {
-    return upb_Message_Has(msg, f);
+    return upb_Message_HasFieldByDef(msg, f);
   }
 }
 
diff --git a/python/message.c b/python/message.c
index 4f5a232..6bd3941 100644
--- a/python/message.c
+++ b/python/message.c
@@ -477,7 +477,7 @@
   upb_MessageValue msgval;
   assert(!PyErr_Occurred());
   if (!PyUpb_PyToUpb(value, f, &msgval, arena)) return false;
-  upb_Message_Set(msg, f, msgval, arena);
+  upb_Message_SetFieldByDef(msg, f, msgval, arena);
   return true;
 }
 
@@ -607,7 +607,7 @@
 static void PyUpb_Message_SetField(PyUpb_Message* parent, const upb_FieldDef* f,
                                    PyUpb_Message* child, upb_Arena* arena) {
   upb_MessageValue msgval = {.msg_val = PyUpb_Message_GetMsg(child)};
-  upb_Message_Set(PyUpb_Message_GetMsg(parent), f, msgval, arena);
+  upb_Message_SetFieldByDef(PyUpb_Message_GetMsg(parent), f, msgval, arena);
   PyUpb_WeakMap_Delete(parent->unset_subobj_map, f);
   // Releases a ref previously owned by child->ptr.parent of our child.
   Py_DECREF(child);
@@ -719,8 +719,9 @@
 
   while (PyUpb_WeakMap_Next(subobj_map, &key, &obj, &iter)) {
     const upb_FieldDef* f = key;
-    if (upb_FieldDef_HasPresence(f) && !upb_Message_Has(msg, f)) continue;
-    upb_MessageValue msgval = upb_Message_Get(msg, f);
+    if (upb_FieldDef_HasPresence(f) && !upb_Message_HasFieldByDef(msg, f))
+      continue;
+    upb_MessageValue msgval = upb_Message_GetFieldByDef(msg, f);
     PyUpb_WeakMap_DeleteIter(subobj_map, &iter);
     if (upb_FieldDef_IsMap(f)) {
       if (!msgval.map_val) continue;
@@ -785,7 +786,8 @@
   PyUpb_Message* self = (void*)_self;
   PyUpb_Message_EnsureReified(self);
   PyUpb_Message_CacheDelete(_self, f);
-  upb_Message_Set(self->ptr.msg, f, subobj, PyUpb_Arena_Get(self->arena));
+  upb_Message_SetFieldByDef(self->ptr.msg, f, subobj,
+                            PyUpb_Arena_Get(self->arena));
 }
 
 static void PyUpb_Message_Dealloc(PyObject* _self) {
@@ -905,7 +907,7 @@
     // Unset message always returns default values.
     val = upb_FieldDef_Default(field);
   } else {
-    val = upb_Message_Get(self->ptr.msg, field);
+    val = upb_Message_GetFieldByDef(self->ptr.msg, field);
   }
   return PyUpb_UpbToPy(val, field, self->arena);
 }
@@ -929,7 +931,7 @@
   bool seq = upb_FieldDef_IsRepeated(field);
 
   if ((PyUpb_Message_IsStub(self) && (submsg || seq)) ||
-      (submsg && !seq && !upb_Message_Has(self->ptr.msg, field))) {
+      (submsg && !seq && !upb_Message_HasFieldByDef(self->ptr.msg, field))) {
     return PyUpb_Message_GetStub(self, field);
   } else if (seq) {
     return PyUpb_Message_GetPresentWrapper(self, field);
@@ -959,7 +961,7 @@
     return -1;
   }
 
-  upb_Message_Set(self->ptr.msg, field, val, arena);
+  upb_Message_SetFieldByDef(self->ptr.msg, field, val, arena);
   return 0;
 }
 
@@ -1041,7 +1043,7 @@
 
   if (PyUpb_Message_IsStub(self)) Py_RETURN_FALSE;
 
-  return PyBool_FromLong(field ? upb_Message_Has(self->ptr.msg, field)
+  return PyBool_FromLong(field ? upb_Message_HasFieldByDef(self->ptr.msg, field)
                                : upb_Message_WhichOneof(self->ptr.msg, oneof) !=
                                      NULL);
 }
@@ -1288,13 +1290,13 @@
       const upb_FieldDef* f = key;
       PyUpb_WeakMap_DeleteIter(subobj_map, &iter);
       if (upb_FieldDef_IsMap(f)) {
-        assert(upb_Message_Get(msg, f).map_val == NULL);
+        assert(upb_Message_GetFieldByDef(msg, f).map_val == NULL);
         PyUpb_MapContainer_Reify(obj, NULL);
       } else if (upb_FieldDef_IsRepeated(f)) {
-        assert(upb_Message_Get(msg, f).array_val == NULL);
+        assert(upb_Message_GetFieldByDef(msg, f).array_val == NULL);
         PyUpb_RepeatedContainer_Reify(obj, NULL);
       } else {
-        assert(!upb_Message_Has(msg, f));
+        assert(!upb_Message_HasFieldByDef(msg, f));
         PyUpb_Message* sub = (void*)obj;
         assert(self == sub->ptr.parent);
         PyUpb_Message_Reify(sub, f, NULL);
@@ -1302,7 +1304,7 @@
     }
   }
 
-  upb_Message_Clear(self->ptr.msg, msgdef);
+  upb_Message_ClearByDef(self->ptr.msg, msgdef);
   Py_RETURN_NONE;
 }
 
@@ -1335,7 +1337,7 @@
   }
 
   Py_XDECREF(sub);
-  upb_Message_ClearField(self->ptr.msg, f);
+  upb_Message_ClearFieldByDef(self->ptr.msg, f);
 }
 
 static PyObject* PyUpb_Message_ClearExtension(PyObject* _self, PyObject* arg) {
@@ -1460,7 +1462,7 @@
     return NULL;
   }
   if (!msg) Py_RETURN_FALSE;
-  return PyBool_FromLong(upb_Message_Has(msg, f));
+  return PyBool_FromLong(upb_Message_HasFieldByDef(msg, f));
 }
 
 void PyUpb_Message_ReportInitializationErrors(const upb_MessageDef* msgdef,
