diff --git a/cmd/protoc-gen-go-grpc/testdata/go.mod b/cmd/protoc-gen-go-grpc/testdata/go.mod
index 39d44c3..6785682 100644
--- a/cmd/protoc-gen-go-grpc/testdata/go.mod
+++ b/cmd/protoc-gen-go-grpc/testdata/go.mod
@@ -1,7 +1,7 @@
 module github.com/golang/protobuf/v2/cmd/protoc-gen-go-grpc/testdata
 
 require (
-	github.com/golang/protobuf v1.2.1-0.20190326022002-be03c15fcaa2
+	github.com/golang/protobuf v1.2.1-0.20190416233244-13cf6e79fd39
 	github.com/golang/protobuf/v2 v2.0.0
 	google.golang.org/grpc v1.19.0
 )
diff --git a/cmd/protoc-gen-go/testdata/go.mod b/cmd/protoc-gen-go/testdata/go.mod
index c8b3c59..2cf84ad 100644
--- a/cmd/protoc-gen-go/testdata/go.mod
+++ b/cmd/protoc-gen-go/testdata/go.mod
@@ -1,7 +1,7 @@
 module github.com/golang/protobuf/v2/cmd/protoc-gen-go/testdata
 
 require (
-	github.com/golang/protobuf v1.2.1-0.20190326022002-be03c15fcaa2
+	github.com/golang/protobuf v1.2.1-0.20190416233244-13cf6e79fd39
 	github.com/golang/protobuf/v2 v2.0.0
 )
 
diff --git a/go.mod b/go.mod
index cc9b075..de2dded 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/golang/protobuf/v2
 
 require (
-	github.com/golang/protobuf v1.2.1-0.20190326022002-be03c15fcaa2
+	github.com/golang/protobuf v1.2.1-0.20190416233244-13cf6e79fd39
 	github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42
 )
diff --git a/go.sum b/go.sum
index f2f4001..0697572 100644
--- a/go.sum
+++ b/go.sum
@@ -1,6 +1,8 @@
 github.com/golang/protobuf v1.2.1-0.20190322195920-d94fb84e04b7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.2.1-0.20190326022002-be03c15fcaa2 h1:lkKDUagzhHJnfyahshk3wkddt6PWmUy/gVOV35CWQrA=
 github.com/golang/protobuf v1.2.1-0.20190326022002-be03c15fcaa2/go.mod h1:rZ4veVXHB1S2+o7TKqD9Isxml062IeDutnCDtFPUlCc=
+github.com/golang/protobuf v1.2.1-0.20190416233244-13cf6e79fd39 h1:5ypd1txfe3cmWAw+lhzJXDrjc8gyh6/3KkhnPSfkrUQ=
+github.com/golang/protobuf v1.2.1-0.20190416233244-13cf6e79fd39/go.mod h1:RgnTNLHWo9HXezTFX5MTeuXnXx9eeQX8y3Cukv+9HaE=
 github.com/golang/protobuf/v2 v2.0.0-20190322201422-f503c300f70e/go.mod h1:25ZALhydMFaBRgPH58a8zpFe9YXMAMjOYWtB6pNPcoo=
+github.com/golang/protobuf/v2 v2.0.0-20190416222953-ab61d41ec93f/go.mod h1:baUT2weUsA1MR7ocRtLXLmi2B1s4VrUT3S6tO8AYzMw=
 github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42 h1:q3pnF5JFBNRz8sRD+IRj7Y6DMyYGTNqnZ9axTbSfoNI=
 github.com/google/go-cmp v0.2.1-0.20190312032427-6f77996f0c42/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
diff --git a/internal/impl/legacy_export.go b/internal/impl/legacy_export.go
index d40d4ff..8038333 100644
--- a/internal/impl/legacy_export.go
+++ b/internal/impl/legacy_export.go
@@ -7,7 +7,6 @@
 import (
 	"encoding/binary"
 	"encoding/json"
-	"fmt"
 	"hash/crc32"
 	"math"
 
@@ -75,17 +74,3 @@
 	out = append(out, gzipFooter[:]...)
 	return out
 }
-
-// ExtensionFieldsOf returns an interface abstraction over various
-// internal representations of extension fields.
-//
-// TODO: Delete this once v1 no longer needs this.
-// Remember to delete the HasInit, Lock, and Unlock methods.
-func (Export) ExtensionFieldsOf(p interface{}) legacyExtensionFieldsIface {
-	switch p := p.(type) {
-	case *ExtensionFieldsV1:
-		return (*legacyExtensionMap)(p)
-	default:
-		panic(fmt.Sprintf("invalid extension fields type: %T", p))
-	}
-}
diff --git a/internal/impl/legacy_extension.go b/internal/impl/legacy_extension.go
index 16701b6..4a60f05 100644
--- a/internal/impl/legacy_extension.go
+++ b/internal/impl/legacy_extension.go
@@ -6,7 +6,6 @@
 
 import (
 	"reflect"
-	"sync"
 
 	pref "github.com/golang/protobuf/v2/reflect/protoreflect"
 	piface "github.com/golang/protobuf/v2/runtime/protoiface"
@@ -25,7 +24,7 @@
 	}
 }
 
-var extType = reflect.TypeOf(ExtensionFieldsV1{})
+var extType = reflect.TypeOf(map[int32]ExtensionFieldV1{})
 
 func makeLegacyExtensionMapFunc(t reflect.Type) func(*messageDataType) *legacyExtensionMap {
 	fx, _ := t.FieldByName("XXX_extensions")
@@ -39,7 +38,7 @@
 	fieldOffset := offsetOf(fx)
 	return func(p *messageDataType) *legacyExtensionMap {
 		v := p.p.Apply(fieldOffset).AsValueOf(fx.Type).Interface()
-		return (*legacyExtensionMap)(v.(*ExtensionFieldsV1))
+		return (*legacyExtensionMap)(v.(*map[int32]ExtensionFieldV1))
 	}
 }
 
@@ -240,20 +239,6 @@
 	return legacyWrapper.ExtensionTypeFromDesc(desc)
 }
 
-type legacyExtensionFieldsIface = interface {
-	Len() int
-	Has(pref.FieldNumber) bool
-	Get(pref.FieldNumber) ExtensionFieldV1
-	Set(pref.FieldNumber, ExtensionFieldV1)
-	Clear(pref.FieldNumber)
-	Range(f func(pref.FieldNumber, ExtensionFieldV1) bool)
-
-	// HasInit and Locker are used by v1 GetExtension to provide
-	// an artificial degree of concurrent safety.
-	HasInit() bool
-	sync.Locker
-}
-
 type ExtensionFieldV1 struct {
 	// TODO: We should turn this into a type alias to an unnamed type,
 	// which means that v1 can have the same struct, and we no longer have to
@@ -290,9 +275,7 @@
 	Raw []byte // TODO: remove; let this be handled by XXX_unrecognized
 }
 
-type ExtensionFieldsV1 = map[int32]ExtensionFieldV1
-
-type legacyExtensionMap ExtensionFieldsV1
+type legacyExtensionMap map[int32]ExtensionFieldV1
 
 func (m legacyExtensionMap) Len() int {
 	return len(m)
@@ -320,9 +303,3 @@
 		}
 	}
 }
-
-func (m legacyExtensionMap) HasInit() bool {
-	return m != nil
-}
-func (m legacyExtensionMap) Lock()   {} // noop
-func (m legacyExtensionMap) Unlock() {} // noop
diff --git a/internal/impl/legacy_test.go b/internal/impl/legacy_test.go
index 1bc5acf..84cf071 100644
--- a/internal/impl/legacy_test.go
+++ b/internal/impl/legacy_test.go
@@ -29,7 +29,7 @@
 
 type legacyTestMessage struct {
 	XXX_unrecognized       []byte
-	XXX_InternalExtensions pimpl.ExtensionFieldsV1
+	XXX_InternalExtensions map[int32]pimpl.ExtensionFieldV1
 }
 
 func (*legacyTestMessage) Reset()         {}
diff --git a/internal/legacy/extension_test.go b/internal/legacy/extension_test.go
index 58af84b..630c158 100644
--- a/internal/legacy/extension_test.go
+++ b/internal/legacy/extension_test.go
@@ -21,7 +21,7 @@
 
 type legacyTestMessage struct {
 	XXX_unrecognized       []byte
-	XXX_InternalExtensions pimpl.ExtensionFieldsV1
+	XXX_InternalExtensions map[int32]pimpl.ExtensionFieldV1
 }
 
 func (*legacyTestMessage) Reset()         {}
diff --git a/runtime/protoimpl/impl.go b/runtime/protoimpl/impl.go
index bbfab27..617aed6 100644
--- a/runtime/protoimpl/impl.go
+++ b/runtime/protoimpl/impl.go
@@ -46,6 +46,5 @@
 	UnknownFields   = []byte
 	SizeCache       = int32
 
-	ExtensionFieldV1  = impl.ExtensionFieldV1
-	ExtensionFieldsV1 = impl.ExtensionFieldsV1
+	ExtensionFieldV1 = impl.ExtensionFieldV1
 )
