diff --git a/proto/reset.go b/proto/reset.go
index fd8b786..f14d9ae 100644
--- a/proto/reset.go
+++ b/proto/reset.go
@@ -14,11 +14,18 @@
 }
 
 func resetMessage(m protoreflect.Message) {
+	// Clear all known fields.
+	fds := m.Descriptor().Fields()
+	for i := 0; i < fds.Len(); i++ {
+		m.Clear(fds.Get(i))
+	}
+
+	// Clear extension fields.
 	m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool {
 		m.Clear(fd)
 		return true
 	})
-	if m.GetUnknown() != nil {
-		m.SetUnknown(nil)
-	}
+
+	// Clear unknown fields.
+	m.SetUnknown(nil)
 }
diff --git a/proto/reset_test.go b/proto/reset_test.go
new file mode 100644
index 0000000..9447df6
--- /dev/null
+++ b/proto/reset_test.go
@@ -0,0 +1,58 @@
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style.
+// license that can be found in the LICENSE file.
+
+package proto_test
+
+import (
+	"testing"
+
+	"google.golang.org/protobuf/internal/scalar"
+	"google.golang.org/protobuf/proto"
+
+	testpb "google.golang.org/protobuf/internal/testprotos/test"
+)
+
+func TestReset(t *testing.T) {
+	m := &testpb.TestAllTypes{
+		OptionalSfixed64:       scalar.Int64(5),
+		RepeatedInt32:          []int32{},
+		RepeatedFloat:          []float32{1.234, 5.678},
+		MapFixed64Fixed64:      map[uint64]uint64{5: 7},
+		MapStringString:        map[string]string{},
+		OptionalForeignMessage: &testpb.ForeignMessage{},
+		OneofField:             (*testpb.TestAllTypes_OneofUint32)(nil),
+	}
+	m.ProtoReflect().SetUnknown([]byte{})
+
+	proto.Reset(m)
+
+	if m.OptionalSfixed64 != nil {
+		t.Errorf("m.OptionalSfixed64 = %p, want nil", m.OptionalSfixed64)
+	}
+	if m.RepeatedInt32 != nil {
+		t.Errorf("m.RepeatedInt32 = %p, want nil", m.RepeatedInt32)
+	}
+	if m.RepeatedFloat != nil {
+		t.Errorf("m.RepeatedFloat = %p, want nil", m.RepeatedFloat)
+	}
+	if m.MapFixed64Fixed64 != nil {
+		t.Errorf("m.MapFixed64Fixed64 = %p, want nil", m.MapFixed64Fixed64)
+	}
+	if m.MapStringString != nil {
+		t.Errorf("m.MapStringString = %p, want nil", m.MapStringString)
+	}
+	if m.OptionalForeignMessage != nil {
+		t.Errorf("m.OptionalForeignMessage = %p, want nil", m.OptionalForeignMessage)
+	}
+	if m.OneofField != nil {
+		t.Errorf("m.OneofField = %p, want nil", m.OneofField)
+	}
+
+	if got := m.ProtoReflect().Len(); got != 0 {
+		t.Errorf("m.ProtoReflect().Len() = %d, want 0", got)
+	}
+	if got := m.ProtoReflect().GetUnknown(); got != nil {
+		t.Errorf("m.ProtoReflect().GetUnknown() = %d, want nil", got)
+	}
+}
