diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module
index d73814f..9ba0051 100644
--- a/modules/field/modules/text/text.module
+++ b/modules/field/modules/text/text.module
@@ -284,7 +284,9 @@ function text_field_formatter_view($entity_type, $entity, $field, $instance, $la
 
     case 'text_plain':
       foreach ($items as $delta => $item) {
-        $element[$delta] = array('#markup' => strip_tags($item['value']));
+        // The text value has no text format assigned to it, so the user input
+        // should equal the output, including newlines.
+        $element[$delta] = array('#markup' => nl2br(check_plain($item['value'])));
       }
       break;
   }
@@ -316,7 +318,12 @@ function _text_sanitize($instance, $langcode, $item, $column) {
   if (isset($item["safe_$column"])) {
     return $item["safe_$column"];
   }
-  return $instance['settings']['text_processing'] ? check_markup($item[$column], $item['format'], $langcode) : check_plain($item[$column]);
+  if ($instance['settings']['text_processing']) {
+    return check_markup($item[$column], $item['format'], $langcode);
+  }
+  // Escape all HTML and retain newlines.
+  // @see text_field_formatter_view()
+  return nl2br(check_plain($item[$column]));
 }
 
 /**
