diff --git a/internal/impl/message.go b/internal/impl/message.go
index c6663a3..cf627df 100644
--- a/internal/impl/message.go
+++ b/internal/impl/message.go
@@ -148,16 +148,6 @@
 	return (*messageWrapper)(mi.dataTypeOf(p))
 }
 
-func (mi *MessageType) KnownFieldsOf(p interface{}) pref.KnownFields {
-	mi.init()
-	return (*knownFields)(mi.dataTypeOf(p))
-}
-
-func (mi *MessageType) UnknownFieldsOf(p interface{}) pref.UnknownFields {
-	mi.init()
-	return mi.unknownFields(mi.dataTypeOf(p))
-}
-
 func (mi *MessageType) dataTypeOf(p interface{}) *messageDataType {
 	// TODO: Remove this check? This API is primarily used by generated code,
 	// and should not violate this assumption. Leave this check in for now to
diff --git a/internal/impl/message_test.go b/internal/impl/message_test.go
index 41c2e8c..b7f3770 100644
--- a/internal/impl/message_test.go
+++ b/internal/impl/message_test.go
@@ -225,11 +225,15 @@
 	},
 )}
 
-func (m *ScalarProto2) Type() pref.MessageType            { return scalarProto2Type.PBType }
-func (m *ScalarProto2) KnownFields() pref.KnownFields     { return scalarProto2Type.KnownFieldsOf(m) }
-func (m *ScalarProto2) UnknownFields() pref.UnknownFields { return scalarProto2Type.UnknownFieldsOf(m) }
-func (m *ScalarProto2) Interface() pref.ProtoMessage      { return m }
-func (m *ScalarProto2) ProtoReflect() pref.Message        { return m }
+func (m *ScalarProto2) Type() pref.MessageType { return scalarProto2Type.PBType }
+func (m *ScalarProto2) KnownFields() pref.KnownFields {
+	return scalarProto2Type.MessageOf(m).KnownFields()
+}
+func (m *ScalarProto2) UnknownFields() pref.UnknownFields {
+	return scalarProto2Type.MessageOf(m).UnknownFields()
+}
+func (m *ScalarProto2) Interface() pref.ProtoMessage { return m }
+func (m *ScalarProto2) ProtoReflect() pref.Message   { return m }
 
 func TestScalarProto2(t *testing.T) {
 	testMessage(t, nil, &ScalarProto2{}, messageOps{
@@ -331,11 +335,15 @@
 	},
 )}
 
-func (m *ScalarProto3) Type() pref.MessageType            { return scalarProto3Type.PBType }
-func (m *ScalarProto3) KnownFields() pref.KnownFields     { return scalarProto3Type.KnownFieldsOf(m) }
-func (m *ScalarProto3) UnknownFields() pref.UnknownFields { return scalarProto3Type.UnknownFieldsOf(m) }
-func (m *ScalarProto3) Interface() pref.ProtoMessage      { return m }
-func (m *ScalarProto3) ProtoReflect() pref.Message        { return m }
+func (m *ScalarProto3) Type() pref.MessageType { return scalarProto3Type.PBType }
+func (m *ScalarProto3) KnownFields() pref.KnownFields {
+	return scalarProto3Type.MessageOf(m).KnownFields()
+}
+func (m *ScalarProto3) UnknownFields() pref.UnknownFields {
+	return scalarProto3Type.MessageOf(m).UnknownFields()
+}
+func (m *ScalarProto3) Interface() pref.ProtoMessage { return m }
+func (m *ScalarProto3) ProtoReflect() pref.Message   { return m }
 
 func TestScalarProto3(t *testing.T) {
 	testMessage(t, nil, &ScalarProto3{}, messageOps{
@@ -448,11 +456,15 @@
 	},
 )}
 
-func (m *ListScalars) Type() pref.MessageType            { return listScalarsType.PBType }
-func (m *ListScalars) KnownFields() pref.KnownFields     { return listScalarsType.KnownFieldsOf(m) }
-func (m *ListScalars) UnknownFields() pref.UnknownFields { return listScalarsType.UnknownFieldsOf(m) }
-func (m *ListScalars) Interface() pref.ProtoMessage      { return m }
-func (m *ListScalars) ProtoReflect() pref.Message        { return m }
+func (m *ListScalars) Type() pref.MessageType { return listScalarsType.PBType }
+func (m *ListScalars) KnownFields() pref.KnownFields {
+	return listScalarsType.MessageOf(m).KnownFields()
+}
+func (m *ListScalars) UnknownFields() pref.UnknownFields {
+	return listScalarsType.MessageOf(m).UnknownFields()
+}
+func (m *ListScalars) Interface() pref.ProtoMessage { return m }
+func (m *ListScalars) ProtoReflect() pref.Message   { return m }
 
 func TestListScalars(t *testing.T) {
 	empty := &ListScalars{}
@@ -639,11 +651,15 @@
 	},
 )}
 
-func (m *MapScalars) Type() pref.MessageType            { return mapScalarsType.PBType }
-func (m *MapScalars) KnownFields() pref.KnownFields     { return mapScalarsType.KnownFieldsOf(m) }
-func (m *MapScalars) UnknownFields() pref.UnknownFields { return mapScalarsType.UnknownFieldsOf(m) }
-func (m *MapScalars) Interface() pref.ProtoMessage      { return m }
-func (m *MapScalars) ProtoReflect() pref.Message        { return m }
+func (m *MapScalars) Type() pref.MessageType { return mapScalarsType.PBType }
+func (m *MapScalars) KnownFields() pref.KnownFields {
+	return mapScalarsType.MessageOf(m).KnownFields()
+}
+func (m *MapScalars) UnknownFields() pref.UnknownFields {
+	return mapScalarsType.MessageOf(m).UnknownFields()
+}
+func (m *MapScalars) Interface() pref.ProtoMessage { return m }
+func (m *MapScalars) ProtoReflect() pref.Message   { return m }
 
 func TestMapScalars(t *testing.T) {
 	empty := &MapScalars{}
@@ -797,11 +813,15 @@
 	},
 )}
 
-func (m *OneofScalars) Type() pref.MessageType            { return oneofScalarsType.PBType }
-func (m *OneofScalars) KnownFields() pref.KnownFields     { return oneofScalarsType.KnownFieldsOf(m) }
-func (m *OneofScalars) UnknownFields() pref.UnknownFields { return oneofScalarsType.UnknownFieldsOf(m) }
-func (m *OneofScalars) Interface() pref.ProtoMessage      { return m }
-func (m *OneofScalars) ProtoReflect() pref.Message        { return m }
+func (m *OneofScalars) Type() pref.MessageType { return oneofScalarsType.PBType }
+func (m *OneofScalars) KnownFields() pref.KnownFields {
+	return oneofScalarsType.MessageOf(m).KnownFields()
+}
+func (m *OneofScalars) UnknownFields() pref.UnknownFields {
+	return oneofScalarsType.MessageOf(m).UnknownFields()
+}
+func (m *OneofScalars) Interface() pref.ProtoMessage { return m }
+func (m *OneofScalars) ProtoReflect() pref.Message   { return m }
 
 func (*OneofScalars) XXX_OneofWrappers() []interface{} {
 	return []interface{}{
@@ -1022,11 +1042,15 @@
 	IsMapEntry: true,
 })
 
-func (m *EnumMessages) Type() pref.MessageType            { return enumMessagesType.PBType }
-func (m *EnumMessages) KnownFields() pref.KnownFields     { return enumMessagesType.KnownFieldsOf(m) }
-func (m *EnumMessages) UnknownFields() pref.UnknownFields { return enumMessagesType.UnknownFieldsOf(m) }
-func (m *EnumMessages) Interface() pref.ProtoMessage      { return m }
-func (m *EnumMessages) ProtoReflect() pref.Message        { return m }
+func (m *EnumMessages) Type() pref.MessageType { return enumMessagesType.PBType }
+func (m *EnumMessages) KnownFields() pref.KnownFields {
+	return enumMessagesType.MessageOf(m).KnownFields()
+}
+func (m *EnumMessages) UnknownFields() pref.UnknownFields {
+	return enumMessagesType.MessageOf(m).UnknownFields()
+}
+func (m *EnumMessages) Interface() pref.ProtoMessage { return m }
+func (m *EnumMessages) ProtoReflect() pref.Message   { return m }
 
 func (*EnumMessages) XXX_OneofWrappers() []interface{} {
 	return []interface{}{
