diff --git a/go.mod b/go.mod
index 131aeaf..aa0e421 100644
--- a/go.mod
+++ b/go.mod
@@ -2,7 +2,7 @@
 
 require (
 	github.com/golang/protobuf v1.2.0
-	github.com/google/go-cmp v0.2.0
+	github.com/google/go-cmp v0.2.1-0.20181101181452-745b8ec83783
 	golang.org/x/net v0.0.0-20180821023952-922f4815f713 // indirect
 	golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f // indirect
 	golang.org/x/tools v0.0.0-20180904205237-0aa4b8830f48
diff --git a/go.sum b/go.sum
index 51e6c99..d9fd37c 100644
--- a/go.sum
+++ b/go.sum
@@ -1,7 +1,7 @@
 github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.2.1-0.20181101181452-745b8ec83783 h1:wVZ6laEGf86tNDTpR5mxFyFIclJJiXCxuJhcQKnsOHk=
+github.com/google/go-cmp v0.2.1-0.20181101181452-745b8ec83783/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 golang.org/x/net v0.0.0-20180821023952-922f4815f713 h1:rMJUcaDGbG+X967I4zGKCq5laYqcGKJmpB+3jhpOhPw=
 golang.org/x/net v0.0.0-20180821023952-922f4815f713/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
diff --git a/internal/encoding/text/encode.go b/internal/encoding/text/encode.go
index 1eae1f3..f7d185a 100644
--- a/internal/encoding/text/encode.go
+++ b/internal/encoding/text/encode.go
@@ -6,6 +6,7 @@
 
 import (
 	"bytes"
+	"math/rand"
 	"strings"
 
 	"github.com/golang/protobuf/v2/internal/errors"
@@ -104,6 +105,7 @@
 			p.out = append(p.out, p.newline...)
 		}
 	}
+	spaceAdded := false
 	for i, item := range items {
 		p.out = append(p.out, p.indents...)
 		if err := p.marshalKey(item[0]); !p.nerr.Merge(err) {
@@ -113,12 +115,25 @@
 		if len(p.indent) > 0 {
 			p.out = append(p.out, ' ')
 		}
+		// For multi-line output, add a random extra space after key: per message to
+		// make output unstable.
+		if !spaceAdded && len(p.indent) > 0 && rand.Intn(2) == 1 {
+			p.out = append(p.out, ' ')
+			spaceAdded = true
+		}
+
 		if err := p.marshalValue(item[1]); !p.nerr.Merge(err) {
 			return err
 		}
 		if i < len(items)-1 && len(p.indent) == 0 {
 			p.out = append(p.out, ' ')
 		}
+		// For single-line output, add a random extra space after a field per message to
+		// make output unstable.
+		if !spaceAdded && len(p.indent) == 0 && i != len(items)-1 && rand.Intn(2) == 1 {
+			p.out = append(p.out, ' ')
+			spaceAdded = true
+		}
 		p.out = append(p.out, p.newline...)
 	}
 	if emitDelims {
diff --git a/internal/encoding/text/text_test.go b/internal/encoding/text/text_test.go
index b5ca63c..221d6ab 100644
--- a/internal/encoding/text/text_test.go
+++ b/internal/encoding/text/text_test.go
@@ -7,6 +7,7 @@
 import (
 	"fmt"
 	"math"
+	"regexp"
 	"strings"
 	"testing"
 	"unicode/utf8"
@@ -17,13 +18,15 @@
 	"github.com/google/go-cmp/cmp/cmpopts"
 )
 
+var S = fmt.Sprintf
+var V = ValueOf
+var ID = func(n protoreflect.Name) Value { return V(n) }
+
+type Lst = []Value
+type Msg = [][2]Value
+
 func Test(t *testing.T) {
 	const space = " \n\r\t"
-	var S = fmt.Sprintf
-	var V = ValueOf
-	var ID = func(n protoreflect.Name) Value { return V(n) }
-	type Lst = []Value
-	type Msg = [][2]Value
 
 	tests := []struct {
 		in             string
@@ -824,7 +827,7 @@
 				if err != nil {
 					t.Errorf("Marshal(): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOut {
+				if removeRandomSpace(gotOut, false) != tt.wantOut {
 					t.Errorf("Marshal():\ngot:  %s\nwant: %s", gotOut, tt.wantOut)
 				}
 			}
@@ -833,7 +836,7 @@
 				if err != nil {
 					t.Errorf("Marshal(Bracket): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOutBracket {
+				if removeRandomSpace(gotOut, false) != tt.wantOutBracket {
 					t.Errorf("Marshal(Bracket):\ngot:  %s\nwant: %s", gotOut, tt.wantOutBracket)
 				}
 			}
@@ -842,7 +845,7 @@
 				if err != nil {
 					t.Errorf("Marshal(ASCII): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOutASCII {
+				if removeRandomSpace(gotOut, false) != tt.wantOutASCII {
 					t.Errorf("Marshal(ASCII):\ngot:  %s\nwant: %s", gotOut, tt.wantOutASCII)
 				}
 			}
@@ -851,10 +854,24 @@
 				if err != nil {
 					t.Errorf("Marshal(Indent): got %v, want nil error", err)
 				}
-				if string(gotOut) != tt.wantOutIndent {
+				if removeRandomSpace(gotOut, true) != tt.wantOutIndent {
 					t.Errorf("Marshal(Indent):\ngot:  %s\nwant: %s", gotOut, tt.wantOutIndent)
 				}
 			}
 		})
 	}
 }
+
+var expandedRE = regexp.MustCompile(":  +")
+
+// This works only for the test cases above.
+func removeRandomSpace(b []byte, useIndent bool) string {
+	s := string(b)
+	if useIndent {
+		return expandedRE.ReplaceAllString(s, ": ")
+	}
+	s = strings.Replace(s, "  ", " ", -1)
+	s = strings.Replace(s, " }", "}", -1)
+	s = strings.Replace(s, " >", ">", -1)
+	return strings.TrimRight(s, " ")
+}
