Permit omission of a colon before a message-typed map value.
diff --git a/proto/decode.go b/proto/decode.go
index 88622c3..129792e 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -518,9 +518,7 @@
 	if err != nil {
 		return err
 	}
-	sp := new(string)
-	*sp = s
-	*structPointer_String(base, p.field) = sp
+	*structPointer_String(base, p.field) = &s
 	return nil
 }
 
diff --git a/proto/text_parser.go b/proto/text_parser.go
index ddd9579..d1caeff 100644
--- a/proto/text_parser.go
+++ b/proto/text_parser.go
@@ -570,7 +570,7 @@
 				if err := p.consumeToken("value"); err != nil {
 					return err
 				}
-				if err := p.consumeToken(":"); err != nil {
+				if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil {
 					return err
 				}
 				if err := p.readAny(val, props.mvalprop); err != nil {
diff --git a/proto/text_parser_test.go b/proto/text_parser_test.go
index e5ee8b9..1360e8e 100644
--- a/proto/text_parser_test.go
+++ b/proto/text_parser_test.go
@@ -463,6 +463,7 @@
 	m := new(MessageWithMap)
 	const in = `name_mapping:<key:1234 value:"Feist"> name_mapping:<key:1 value:"Beatles">` +
 		`msg_mapping:<key:-4 value:<f: 2.0>>` +
+		`msg_mapping<key:-2 value<f: 4.0>>` + // no colon after "value"
 		`byte_mapping:<key:true value:"so be it">`
 	want := &MessageWithMap{
 		NameMapping: map[int32]string{
@@ -471,6 +472,7 @@
 		},
 		MsgMapping: map[int64]*FloatingPoint{
 			-4: {F: Float64(2.0)},
+			-2: {F: Float64(4.0)},
 		},
 		ByteMapping: map[bool][]byte{
 			true: []byte("so be it"),