diff --git a/protos/protos.h b/protos/protos.h
index 809e964..2e2fae9 100644
--- a/protos/protos.h
+++ b/protos/protos.h
@@ -199,12 +199,12 @@
 };
 
 template <typename T>
-void* GetInternalMsg(const T& message) {
-  return message.msg();
+void* GetInternalMsg(const T* message) {
+  return message->msg();
 }
 
 template <typename T>
-void* GetInternalMsg(const Ptr<T>& message) {
+void* GetInternalMsg(Ptr<T> message) {
   return message->msg();
 }
 
@@ -214,10 +214,20 @@
 }
 
 template <typename T>
-upb_Arena* GetArena(const Ptr<T>& message) {
+upb_Arena* GetArena(Ptr<T> message) {
   return static_cast<upb_Arena*>(message->GetInternalArena());
 }
 
+template <typename T>
+const upb_MiniTable* GetMiniTable(const T*) {
+  return T::minitable();
+}
+
+template <typename T>
+const upb_MiniTable* GetMiniTable(Ptr<T>) {
+  return T::minitable();
+}
+
 upb_ExtensionRegistry* GetUpbExtensions(
     const ExtensionRegistry& extension_registry);
 
@@ -328,7 +338,7 @@
   if (message_arena != extension_arena) {
     upb_Arena_Fuse(message_arena, extension_arena);
   }
-  msg_ext->data.ptr = ::protos::internal::GetInternalMsg(value);
+  msg_ext->data.ptr = ::protos::internal::GetInternalMsg(&value);
   return absl::OkStatus();
 }
 
@@ -362,7 +372,7 @@
 
 template <typename T>
 bool Parse(T& message, absl::string_view bytes) {
-  upb_Message_Clear(message.msg(), T::minitable());
+  upb_Message_Clear(message.msg(), ::protos::internal::GetMiniTable(&message));
   auto* arena = static_cast<upb_Arena*>(message.GetInternalArena());
   return upb_Decode(bytes.data(), bytes.size(), message.msg(), T::minitable(),
                     /* extreg= */ nullptr, /* options= */ 0,
@@ -372,9 +382,10 @@
 template <typename T>
 bool Parse(T& message, absl::string_view bytes,
            const ::protos::ExtensionRegistry& extension_registry) {
-  upb_Message_Clear(message.msg(), T::minitable());
+  upb_Message_Clear(message.msg(), ::protos::internal::GetMiniTable(message));
   auto* arena = static_cast<upb_Arena*>(message.GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message.msg(), T::minitable(),
+  return upb_Decode(bytes.data(), bytes.size(), message.msg(),
+                    ::protos::internal::GetMiniTable(message),
                     /* extreg= */
                     ::protos::internal::GetUpbExtensions(extension_registry),
                     /* options= */ 0, arena) == kUpb_DecodeStatus_Ok;
@@ -382,9 +393,10 @@
 
 template <typename T>
 bool Parse(Ptr<T>& message, absl::string_view bytes) {
-  upb_Message_Clear(message->msg(), T::minitable());
+  upb_Message_Clear(message->msg(), ::protos::internal::GetMiniTable(message));
   auto* arena = static_cast<upb_Arena*>(message->GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message->msg(), T::minitable(),
+  return upb_Decode(bytes.data(), bytes.size(), message->msg(),
+                    ::protos::internal::GetMiniTable(message),
                     /* extreg= */ nullptr, /* options= */ 0,
                     arena) == kUpb_DecodeStatus_Ok;
 }
@@ -392,60 +404,32 @@
 template <typename T>
 bool Parse(Ptr<T>& message, absl::string_view bytes,
            const ::protos::ExtensionRegistry& extension_registry) {
-  upb_Message_Clear(message->msg(), T::minitable());
+  upb_Message_Clear(message->msg(), ::protos::internal::GetMiniTable(message));
   auto* arena = static_cast<upb_Arena*>(message->GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message->msg(), T::minitable(),
+  return upb_Decode(bytes.data(), bytes.size(), message->msg(),
+                    ::protos::internal::GetMiniTable(message),
                     /* extreg= */
                     ::protos::internal::GetUpbExtensions(extension_registry),
                     /* options= */ 0, arena) == kUpb_DecodeStatus_Ok;
 }
 
 template <typename T>
-bool Parse(std::unique_ptr<T>& message, absl::string_view bytes) {
-  upb_Message_Clear(message->msg(), T::minitable());
+bool Parse(T* message, absl::string_view bytes) {
+  upb_Message_Clear(message->msg(), ::protos::internal::GetMiniTable(message));
   auto* arena = static_cast<upb_Arena*>(message->GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message->msg(), T::minitable(),
+  return upb_Decode(bytes.data(), bytes.size(), message->msg(),
+                    ::protos::internal::GetMiniTable(message),
                     /* extreg= */ nullptr, /* options= */ 0,
                     arena) == kUpb_DecodeStatus_Ok;
 }
 
 template <typename T>
-bool Parse(std::unique_ptr<T>& message, absl::string_view bytes,
-           const ::protos::ExtensionRegistry& extension_registry) {
-  upb_Message_Clear(message->msg(), T::minitable());
-  auto* arena = static_cast<upb_Arena*>(message->GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message->msg(), T::minitable(),
-                    /* extreg= */
-                    ::protos::internal::GetUpbExtensions(extension_registry),
-                    /* options= */ 0, arena) == kUpb_DecodeStatus_Ok;
-}
-
-template <typename T>
-bool Parse(std::shared_ptr<T>& message, absl::string_view bytes) {
-  upb_Message_Clear(message->msg(), T::minitable());
-  auto* arena = static_cast<upb_Arena*>(message->GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message->msg(), T::minitable(),
-                    /* extreg= */ nullptr, /* options= */ 0,
-                    arena) == kUpb_DecodeStatus_Ok;
-}
-
-template <typename T>
-bool Parse(std::shared_ptr<T>& message, absl::string_view bytes,
-           const ::protos::ExtensionRegistry& extension_registry) {
-  upb_Message_Clear(message->msg(), T::minitable());
-  auto* arena = static_cast<upb_Arena*>(message->GetInternalArena());
-  return upb_Decode(bytes.data(), bytes.size(), message->msg(), T::minitable(),
-                    /* extreg= */
-                    ::protos::internal::GetUpbExtensions(extension_registry),
-                    /* options= */ 0, arena) == kUpb_DecodeStatus_Ok;
-}
-
-template <typename T>
 absl::StatusOr<T> Parse(absl::string_view bytes, int options = 0) {
   T message;
   auto* arena = static_cast<upb_Arena*>(message.GetInternalArena());
   upb_DecodeStatus status =
-      upb_Decode(bytes.data(), bytes.size(), message.msg(), T::minitable(),
+      upb_Decode(bytes.data(), bytes.size(), message.msg(),
+                 ::protos::internal::GetMiniTable(&message),
                  /* extreg= */ nullptr, /* options= */ 0, arena);
   if (status == kUpb_DecodeStatus_Ok) {
     return message;
@@ -460,7 +444,8 @@
   T message;
   auto* arena = static_cast<upb_Arena*>(message.GetInternalArena());
   upb_DecodeStatus status =
-      upb_Decode(bytes.data(), bytes.size(), message.msg(), T::minitable(),
+      upb_Decode(bytes.data(), bytes.size(), message.msg(),
+                 ::protos::internal::GetMiniTable(&message),
                  ::protos::internal::GetUpbExtensions(extension_registry),
                  /* options= */ 0, arena);
   if (status == kUpb_DecodeStatus_Ok) {
@@ -470,34 +455,19 @@
 }
 
 template <typename T>
-absl::StatusOr<absl::string_view> Serialize(const T& message, upb::Arena& arena,
+absl::StatusOr<absl::string_view> Serialize(const T* message, upb::Arena& arena,
                                             int options = 0) {
   return ::protos::internal::Serialize(
-      ::protos::internal::GetInternalMsg(message), T::minitable(), arena.ptr(),
+      message->msg(), ::protos::internal::GetMiniTable(message), arena.ptr(),
       options);
 }
 
 template <typename T>
-absl::StatusOr<absl::string_view> Serialize(std::unique_ptr<T>& message,
-                                            upb::Arena& arena,
-                                            int options = 0) {
-  return ::protos::internal::Serialize(message->msg(), T::minitable(),
-                                       arena.ptr(), options);
-}
-
-template <typename T>
-absl::StatusOr<absl::string_view> Serialize(std::shared_ptr<T>& message,
-                                            upb::Arena& arena,
-                                            int options = 0) {
-  return ::protos::internal::Serialize(message->msg(), T::minitable(),
-                                       arena.ptr(), options);
-}
-
-template <typename T>
 absl::StatusOr<absl::string_view> Serialize(Ptr<T> message, upb::Arena& arena,
                                             int options = 0) {
-  return ::protos::internal::Serialize(message->msg(), T::minitable(),
-                                       arena.ptr(), options);
+  return ::protos::internal::Serialize(
+      message->msg(), ::protos::internal::GetMiniTable(message), arena.ptr(),
+      options);
 }
 
 }  // namespace protos
diff --git a/protos/repeated_field.h b/protos/repeated_field.h
index a040e50..3bdb20d 100644
--- a/protos/repeated_field.h
+++ b/protos/repeated_field.h
@@ -145,8 +145,8 @@
             typename = std::enable_if_t<b>>
   void push_back(const T& t) {
     upb_MessageValue message_value;
-    message_value.msg_val =
-        upb_Message_DeepClone(GetInternalMsg(t), T::minitable(), this->arena_);
+    message_value.msg_val = upb_Message_DeepClone(
+        GetInternalMsg(&t), ::protos::internal::GetMiniTable(&t), this->arena_);
     upb_Array_Append(this->arr_, message_value, this->arena_);
   }
 
@@ -155,7 +155,7 @@
             typename = std::enable_if_t<b>>
   void push_back(T&& msg) {
     upb_MessageValue message_value;
-    message_value.msg_val = GetInternalMsg(msg);
+    message_value.msg_val = GetInternalMsg(&msg);
     upb_Arena_Fuse(GetArena(msg), this->arena_);
     upb_Array_Append(this->arr_, message_value, this->arena_);
     T moved_msg = std::move(msg);
