diff --git a/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php b/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php
new file mode 100644
index 0000000..2898112
--- /dev/null
+++ b/core/lib/Drupal/Component/Utility/OutputStrategyInterface.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Utility\OutputStrategyInterface.
+ */
+
+namespace Drupal\Component\Utility;
+
+
+interface OutputStrategyInterface {
+
+  /**
+   * Given an HTML string, translate it to the desired output string.
+   *
+   * @param $string|SafeStringInterface
+   *   An HTML string.
+   *
+   * @return string
+   *   A new string depending on strategy.
+   */
+  public static function renderFromHtml($string);
+
+}
\ No newline at end of file
diff --git a/core/lib/Drupal/Component/Utility/PlainTextOutput.php b/core/lib/Drupal/Component/Utility/PlainTextOutput.php
new file mode 100644
index 0000000..a5bafd7
--- /dev/null
+++ b/core/lib/Drupal/Component/Utility/PlainTextOutput.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Component\Utility\PlainTextOutput.
+ */
+
+namespace Drupal\Component\Utility;
+
+
+class PlainTextOutput implements OutputStrategyInterface {
+
+  /**
+   * Given an HTML string, translate it to a plain text string.
+   *
+   * @param $string|SafeStringInterface
+   *   An HTML string or a any object that can be cast to string.
+   *
+   * @return string
+   *   A string with HTML tags stripped and HTML entities decoded suitable for
+   *   email or other non-HTML context.
+   */
+  public static function renderFromHtml($string) {
+    return Html::decodeEntities(strip_tags((string) $string));
+  }
+
+}
\ No newline at end of file
