diff --git a/core/modules/field/modules/telephone/lib/Drupal/telephone/Plugin/field/widget/TelephoneDefaultWidget.php b/core/modules/field/modules/telephone/lib/Drupal/telephone/Plugin/field/widget/TelephoneDefaultWidget.php
new file mode 100644
index 0000000..a0b0e96
--- /dev/null
+++ b/core/modules/field/modules/telephone/lib/Drupal/telephone/Plugin/field/widget/TelephoneDefaultWidget.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\telephone\Plugin\field\widget\TelephoneDefaultWidget.
+ */
+
+namespace Drupal\telephone\Plugin\field\widget;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+use Drupal\field\Plugin\Type\Widget\WidgetBase;
+
+/**
+ * Plugin implementation of the 'telephone_default' widget.
+ *
+ * @Plugin(
+ *   id = "telephone_default",
+ *   module = "telephone",
+ *   label = @Translation("Telephone number"),
+ *   field_types = {
+ *     "telephone"
+ *   }
+ * )
+ */
+class TelephoneDefaultWidget extends WidgetBase {
+
+  /**
+   * Implements Drupal\field\Plugin\Type\Widget\WidgetInterface::formElement().
+   */
+  public function formElement(array $items, $delta, array $element, $langcode, array &$form, array &$form_state) {
+    $element['value'] = $element + array(
+      '#type' => 'tel',
+      '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
+    );
+    return $element;
+  }
+
+}
diff --git a/core/modules/field/modules/telephone/telephone.info b/core/modules/field/modules/telephone/telephone.info
new file mode 100644
index 0000000..90b1fcd
--- /dev/null
+++ b/core/modules/field/modules/telephone/telephone.info
@@ -0,0 +1,7 @@
+name = Telephone
+description = Defines a field type for telephone numbers.
+package = Core
+version = VERSION
+core = 8.x
+dependencies[] = field
+dependencies[] = text
diff --git a/core/modules/field/modules/telephone/telephone.install b/core/modules/field/modules/telephone/telephone.install
new file mode 100644
index 0000000..d409b8b
--- /dev/null
+++ b/core/modules/field/modules/telephone/telephone.install
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the Telephone module.
+ */
+
+/**
+ * Implements hook_field_schema().
+ */
+function telephone_field_schema($field) {
+  $columns = array(
+    'value' => array(
+      'type' => 'varchar',
+      'length' => 256,
+      'not null' => FALSE,
+    ),
+  );
+  return array(
+    'columns' => $columns,
+  );
+}
diff --git a/core/modules/field/modules/telephone/telephone.module b/core/modules/field/modules/telephone/telephone.module
new file mode 100644
index 0000000..61bdfdd
--- /dev/null
+++ b/core/modules/field/modules/telephone/telephone.module
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * @file
+ * Defines a simple telephone number field type.
+ */
+/**
+ * Implements hook_field_info().
+ */
+function telephone_field_info() {
+  return array(
+    'telephone' => array(
+      'label' => t('Telephone number'),
+      'description' => t('This field stores a telephone number in the database.'),
+      'default_widget' => 'telephone_default',
+      'default_formatter' => 'text_plain',
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_is_empty().
+ */
+function telephone_field_is_empty($item, $field) {
+  return !isset($item['value']) || $item['value'] === '';
+}
+
+/**
+ * Implements hook_field_formatter_info_alter().
+ */
+function telephone_field_formatter_info_alter(&$info) {
+  if (isset($info['text_plain'])) {
+    $info['text_plain']['field_types'][] = 'telephone';
+  }
+}
\ No newline at end of file
