diff --git a/encoding/bench_test.go b/encoding/bench_test.go
index 3b64aab..d5ae728 100644
--- a/encoding/bench_test.go
+++ b/encoding/bench_test.go
@@ -61,9 +61,9 @@
 func setScalarField(m pref.Message, fd pref.FieldDescriptor, level int) {
 	switch fd.Kind() {
 	case pref.MessageKind, pref.GroupKind:
-		m2 := m.NewMessage(fd)
-		fillMessage(m2, level+1)
-		m.Set(fd, pref.ValueOf(m2))
+		val := m.NewField(fd)
+		fillMessage(val.Message(), level+1)
+		m.Set(fd, val)
 	default:
 		m.Set(fd, scalarField(fd.Kind()))
 	}
@@ -109,9 +109,9 @@
 	switch fd.Kind() {
 	case pref.MessageKind, pref.GroupKind:
 		for i := 0; i < 10; i++ {
-			m := list.NewMessage()
-			fillMessage(m, level+1)
-			list.Append(pref.ValueOf(m))
+			val := list.NewElement()
+			fillMessage(val.Message(), level+1)
+			list.Append(val)
 		}
 	default:
 		for i := 0; i < 100; i++ {
@@ -128,9 +128,9 @@
 	pkey := scalarField(keyDesc.Kind())
 	switch kind := valDesc.Kind(); kind {
 	case pref.MessageKind, pref.GroupKind:
-		m := mmap.NewMessage()
-		fillMessage(m, level+1)
-		mmap.Set(pkey.MapKey(), pref.ValueOf(m))
+		val := mmap.NewValue()
+		fillMessage(val.Message(), level+1)
+		mmap.Set(pkey.MapKey(), val)
 	default:
 		mmap.Set(pkey.MapKey(), scalarField(kind))
 	}
diff --git a/encoding/protojson/decode.go b/encoding/protojson/decode.go
index 3e1deed..e8552f0 100644
--- a/encoding/protojson/decode.go
+++ b/encoding/protojson/decode.go
@@ -276,9 +276,8 @@
 	var err error
 	switch fd.Kind() {
 	case pref.MessageKind, pref.GroupKind:
-		m2 := m.NewMessage(fd)
-		err = o.unmarshalMessage(m2, false)
-		val = pref.ValueOf(m2)
+		val = m.NewField(fd)
+		err = o.unmarshalMessage(val.Message(), false)
 	default:
 		val, err = o.unmarshalScalar(fd)
 	}
@@ -528,8 +527,8 @@
 	switch fd.Kind() {
 	case pref.MessageKind, pref.GroupKind:
 		for {
-			m := list.NewMessage()
-			err := o.unmarshalMessage(m, false)
+			val := list.NewElement()
+			err := o.unmarshalMessage(val.Message(), false)
 			if err != nil {
 				if e, ok := err.(unexpectedJSONError); ok {
 					if e.value.Type() == json.EndArray {
@@ -539,7 +538,7 @@
 				}
 				return err
 			}
-			list.Append(pref.ValueOf(m))
+			list.Append(val)
 		}
 	default:
 		for {
@@ -575,11 +574,11 @@
 	switch fd.MapValue().Kind() {
 	case pref.MessageKind, pref.GroupKind:
 		unmarshalMapValue = func() (pref.Value, error) {
-			m := mmap.NewMessage()
-			if err := o.unmarshalMessage(m, false); err != nil {
+			val := mmap.NewValue()
+			if err := o.unmarshalMessage(val.Message(), false); err != nil {
 				return pref.Value{}, err
 			}
-			return pref.ValueOf(m), nil
+			return val, nil
 		}
 	default:
 		unmarshalMapValue = func() (pref.Value, error) {
diff --git a/encoding/protojson/well_known_types.go b/encoding/protojson/well_known_types.go
index 77833d8..98094b5 100644
--- a/encoding/protojson/well_known_types.go
+++ b/encoding/protojson/well_known_types.go
@@ -587,19 +587,19 @@
 
 	case json.StartObject:
 		fd := m.Descriptor().Fields().ByNumber(fieldnum.Value_StructValue)
-		m2 := m.NewMessage(fd)
-		if err := o.unmarshalStruct(m2); err != nil {
+		val := m.NewField(fd)
+		if err := o.unmarshalStruct(val.Message()); err != nil {
 			return err
 		}
-		m.Set(fd, pref.ValueOf(m2))
+		m.Set(fd, val)
 
 	case json.StartArray:
 		fd := m.Descriptor().Fields().ByNumber(fieldnum.Value_ListValue)
-		m2 := m.NewMessage(fd)
-		if err := o.unmarshalListValue(m2); err != nil {
+		val := m.NewField(fd)
+		if err := o.unmarshalListValue(val.Message()); err != nil {
 			return err
 		}
-		m.Set(fd, pref.ValueOf(m2))
+		m.Set(fd, val)
 
 	default:
 		jval, err := o.decoder.Read()
diff --git a/encoding/prototext/decode.go b/encoding/prototext/decode.go
index 79e1eaf..1bf25c2 100644
--- a/encoding/prototext/decode.go
+++ b/encoding/prototext/decode.go
@@ -209,11 +209,10 @@
 		if input.Type() != text.Message {
 			return errors.New("%v contains invalid message/group value: %v", fd.FullName(), input)
 		}
-		m2 := m.NewMessage(fd)
-		if err := o.unmarshalMessage(input.Message(), m2); err != nil {
+		val = m.NewField(fd)
+		if err := o.unmarshalMessage(input.Message(), val.Message()); err != nil {
 			return err
 		}
-		val = pref.ValueOf(m2)
 	default:
 		var err error
 		val, err = unmarshalScalar(input, fd)
@@ -299,11 +298,11 @@
 			if input.Type() != text.Message {
 				return errors.New("%v contains invalid message/group value: %v", fd.FullName(), input)
 			}
-			m := list.NewMessage()
-			if err := o.unmarshalMessage(input.Message(), m); err != nil {
+			val := list.NewElement()
+			if err := o.unmarshalMessage(input.Message(), val.Message()); err != nil {
 				return err
 			}
-			list.Append(pref.ValueOf(m))
+			list.Append(val)
 		}
 	default:
 		for _, input := range inputList {
@@ -402,11 +401,11 @@
 	if input.Type() != 0 {
 		value = input.Message()
 	}
-	m := mmap.NewMessage()
-	if err := o.unmarshalMessage(value, m); err != nil {
+	val := mmap.NewValue()
+	if err := o.unmarshalMessage(value, val.Message()); err != nil {
 		return err
 	}
-	mmap.Set(pkey, pref.ValueOf(m))
+	mmap.Set(pkey, val)
 	return nil
 }
 
diff --git a/internal/cmd/generate-types/proto.go b/internal/cmd/generate-types/proto.go
index 1cd0ed7..17a8244 100644
--- a/internal/cmd/generate-types/proto.go
+++ b/internal/cmd/generate-types/proto.go
@@ -330,11 +330,11 @@
 		}
 		{{end -}}
 		{{if or (eq .Name "Message") (eq .Name "Group") -}}
-		m := list.NewMessage()
-		if err := o.unmarshalMessage(v, m); err != nil {
+		m := list.NewElement()
+		if err := o.unmarshalMessage(v, m.Message()); err != nil {
 			return 0, err
 		}
-		list.Append(protoreflect.ValueOf(m))
+		list.Append(m)
 		{{- else -}}
 		list.Append({{.ToValue}})
 		{{- end}}
diff --git a/internal/impl/message_reflect_test.go b/internal/impl/message_reflect_test.go
index de73ff9..a836c89 100644
--- a/internal/impl/message_reflect_test.go
+++ b/internal/impl/message_reflect_test.go
@@ -1326,9 +1326,9 @@
 				v.Append(e)
 			}
 		case appendMessageList:
-			m := v.NewMessage()
-			v.Append(V(m))
-			testMessage(t, p, m, messageOps(op))
+			e := v.NewElement()
+			v.Append(e)
+			testMessage(t, p, e.Message(), messageOps(op))
 		case truncList:
 			v.Truncate(int(op))
 		default:
@@ -1380,7 +1380,7 @@
 			for k, tt := range op {
 				mk := V(k).MapKey()
 				if !m.Has(mk) {
-					m.Set(mk, V(m.NewMessage()))
+					m.Set(mk, m.NewValue())
 				}
 				testMessage(t, p, m.Get(mk).Message(), tt)
 			}
diff --git a/proto/decode.go b/proto/decode.go
index e5ecb3b..8974139 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -154,7 +154,7 @@
 	)
 	switch valField.Kind() {
 	case protoreflect.GroupKind, protoreflect.MessageKind:
-		val = protoreflect.ValueOf(mapv.NewMessage())
+		val = mapv.NewValue()
 	}
 	// Map entries are represented as a two-element message with fields
 	// containing the key and value.
diff --git a/proto/decode_gen.go b/proto/decode_gen.go
index ce53dcd..61d5f8a 100644
--- a/proto/decode_gen.go
+++ b/proto/decode_gen.go
@@ -574,11 +574,11 @@
 		if n < 0 {
 			return 0, wire.ParseError(n)
 		}
-		m := list.NewMessage()
-		if err := o.unmarshalMessage(v, m); err != nil {
+		m := list.NewElement()
+		if err := o.unmarshalMessage(v, m.Message()); err != nil {
 			return 0, err
 		}
-		list.Append(protoreflect.ValueOf(m))
+		list.Append(m)
 		return n, nil
 	case protoreflect.GroupKind:
 		if wtyp != wire.StartGroupType {
@@ -588,11 +588,11 @@
 		if n < 0 {
 			return 0, wire.ParseError(n)
 		}
-		m := list.NewMessage()
-		if err := o.unmarshalMessage(v, m); err != nil {
+		m := list.NewElement()
+		if err := o.unmarshalMessage(v, m.Message()); err != nil {
 			return 0, err
 		}
-		list.Append(protoreflect.ValueOf(m))
+		list.Append(m)
 		return n, nil
 	default:
 		return 0, errUnknown
diff --git a/proto/merge.go b/proto/merge.go
index 7cea77d..8c31b3c 100644
--- a/proto/merge.go
+++ b/proto/merge.go
@@ -46,9 +46,9 @@
 	for i := 0; i < src.Len(); i++ {
 		switch v := src.Get(i); {
 		case fd.Message() != nil:
-			m := dst.NewMessage()
-			mergeMessage(m, v.Message())
-			dst.Append(protoreflect.ValueOf(m))
+			dstv := dst.NewElement()
+			mergeMessage(dstv.Message(), v.Message())
+			dst.Append(dstv)
 		case fd.Kind() == protoreflect.BytesKind:
 			dst.Append(cloneBytes(v))
 		default:
@@ -61,9 +61,9 @@
 	src.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool {
 		switch {
 		case fd.Message() != nil:
-			m := dst.NewMessage()
-			mergeMessage(m, v.Message())
-			dst.Set(k, protoreflect.ValueOf(m)) // may replace existing entry
+			dstv := dst.NewValue()
+			mergeMessage(dstv.Message(), v.Message())
+			dst.Set(k, dstv) // may replace existing entry
 		case fd.Kind() == protoreflect.BytesKind:
 			dst.Set(k, cloneBytes(v))
 		default:
