diff --git a/text_formatter.go b/text_formatter.go
index c5cf225..78e7889 100644
--- a/text_formatter.go
+++ b/text_formatter.go
@@ -59,17 +59,17 @@
 		printColored(b, entry, keys)
 	} else {
 		if !f.DisableTimestamp {
-			printKeyValue(b, "time", entry.Time.Format(time.RFC3339))
+			f.appendKeyValue(b, "time", entry.Time.Format(time.RFC3339))
 		}
-		printKeyValue(b, "level", entry.Level.String())
-		printKeyValue(b, "msg", entry.Message)
+		f.appendKeyValue(b, "level", entry.Level.String())
+		f.appendKeyValue(b, "msg", entry.Message)
 		for _, key := range keys {
-			printKeyValue(b, key, entry.Data[key])
+			f.appendKeyValue(b, key, entry.Data[key])
 		}
 	}
 
 	b.WriteByte('\n')
-	return b.Bytes()[1:], nil
+	return b.Bytes(), nil
 }
 
 func printColored(b *bytes.Buffer, entry *Entry, keys []string) {
@@ -85,7 +85,7 @@
 
 	levelText := strings.ToUpper(entry.Level.String())[0:4]
 
-	fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m[%04d] %-44s", levelColor, levelText, miniTS(), entry.Message)
+	fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, miniTS(), entry.Message)
 	for _, k := range keys {
 		v := entry.Data[k]
 		fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=%v", levelColor, k, v)
@@ -104,19 +104,21 @@
 	return true
 }
 
-func printKeyValue(b *bytes.Buffer, key, value interface{}) {
+func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key, value interface{}) {
 	switch value.(type) {
 	case string:
-		break
+		if needsQuoting(value.(string)) {
+			fmt.Fprintf(b, "%v=%s ", key, value)
+		} else {
+			fmt.Fprintf(b, "%v=%q ", key, value)
+		}
 	case error:
-		value = value.(error).Error()
+		if needsQuoting(value.(error).Error()) {
+			fmt.Fprintf(b, "%v=%s ", key, value)
+		} else {
+			fmt.Fprintf(b, "%v=%q ", key, value)
+		}
 	default:
-		fmt.Fprintf(b, " %v=%v", key, value)
-	}
-
-	if needsQuoting(value.(string)) {
-		fmt.Fprintf(b, " %v=%s", key, value)
-	} else {
-		fmt.Fprintf(b, " %v=%q", key, value)
+		fmt.Fprintf(b, "%v=%v ", key, value)
 	}
 }
diff --git a/text_formatter_test.go b/text_formatter_test.go
index 8b71afb..f604f1b 100644
--- a/text_formatter_test.go
+++ b/text_formatter_test.go
@@ -31,30 +31,3 @@
 	checkQuoting(false, errors.New("invalid"))
 	checkQuoting(true, errors.New("invalid argument"))
 }
-
-func TestTextPrint(t *testing.T) {
-	tf := &TextFormatter{DisableColors: true}
-	byts, _ := tf.Format(&Entry{Message: "msg content"})
-
-	// make sure no leading or trailing spaces
-	if string(byts) !=
-		"time=\"0001-01-01T00:00:00Z\" level=panic msg=\"msg content\"\n" {
-		t.Errorf("not expected: %q", string(byts))
-	}
-}
-
-func TestColorPrint(t *testing.T) {
-	tf := &TextFormatter{ForceColors: true}
-	entry := WithField("testkey", "value")
-	entry.Message = "msg content"
-	byts, _ := tf.Format(entry)
-
-	// make sure no leading or trailing spaces
-	if string(byts) !=
-		"\x1b[31mPANI\x1b[0m[0000] " +
-			// length 44 plus one space
-			"msg content                                  " +
-			"\x1b[31mtestkey\x1b[0m=value\n" {
-		t.Errorf("not expected: %q", string(byts))
-	}
-}
