diff --git a/core/modules/field/modules/url/url.info b/core/modules/field/modules/url/url.info
new file mode 100644
index 0000000..a1338b5
--- /dev/null
+++ b/core/modules/field/modules/url/url.info
@@ -0,0 +1,7 @@
+name = URL
+description = Defines URL field types.
+package = Core
+version = VERSION
+core = 8.x
+dependencies[] = field
+files[] = url.test
diff --git a/core/modules/field/modules/url/url.install b/core/modules/field/modules/url/url.install
new file mode 100644
index 0000000..68ff4e7
--- /dev/null
+++ b/core/modules/field/modules/url/url.install
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file
+ * Install, update and uninstall functions for the url module.
+ */
+
+/**
+ * Implements hook_field_schema().
+ */
+function url_field_schema($field) {
+  switch ($field['type']) {
+    case 'url':
+      $columns = array(
+        'value' => array(
+          'type' => 'text',
+          'size' => 'big',
+          'not null' => FALSE,
+        ),
+      );
+      break;
+  }
+
+  return array(
+    'columns' => $columns,
+  );
+}
diff --git a/core/modules/field/modules/url/url.module b/core/modules/field/modules/url/url.module
new file mode 100644
index 0000000..64c38c6
--- /dev/null
+++ b/core/modules/field/modules/url/url.module
@@ -0,0 +1,230 @@
+<?php
+
+/**
+ * @file
+ * Defines url field types.
+ */
+
+/**
+ * Implements hook_help().
+ */
+function url_help($path, $arg) {
+  switch ($path) {
+    case 'admin/help#url':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The URL module defines url field types for the Field module. See the <a href="@field-help">Field module help page</a> for more information about fields.', array('@field-help' => url('admin/help/field'))) . '</p>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_field_info().
+ */
+function url_field_info() {
+    return array(
+    'url' => array(
+      'label' => t('URL'),
+      'description' => t('This field stores an internal or external url in the database as an string.'),
+      'instance_settings' => array('types' => array()),
+      'default_widget' => 'url',
+      'default_formatter' => 'url_link',
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_instance_settings_form().
+ */
+function url_field_instance_settings_form($field, $instance) {
+  $settings = $instance['settings'];
+
+  $form['types'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Allowed URL types'),
+    '#options' => _url_field_acceptable_types(),
+    '#default_value' => $settings['types'],
+    '#description' => t('The URL types this field can accept. You must select at least one option.'),
+    '#required' => TRUE,
+  );
+
+  return $form;
+}
+
+/**
+ * Implements hook_field_is_empty().
+ */
+function url_field_is_empty($item, $field) {
+  return empty($item['value']);
+}
+
+/**
+ * Implements hook_field_validate().
+ *
+ * Possible error codes:
+ */
+function url_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) {
+  foreach ($items as $delta => $item) {
+    if ($item['value'] != '') {
+
+      $is_internal = FALSE;
+      if ($instance['settings']['types']['internal']) {
+        $is_internal = path_load($item['value']);
+      }
+
+      $is_alias = FALSE;
+      if ($instance['settings']['types']['alais']) {
+        $is_alias = drupal_lookup_path('source', $item['value']);
+      }
+
+      $is_external = FALSE;
+      if ($instance['settings']['types']['external']) {
+        $is_external = valid_url($item['value'], TRUE) || valid_url($item['value'], FALSE);
+      }
+
+      if (!$is_internal && !$is_alais && !$is_external) {
+        $errors[$field['field_name']][$langcode][$delta][] = array(
+          'error' => 'url',
+          'message' => t('%name: is not a valid URL, path or alais', array('%name' => $instance['label'])),
+        );
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_field_formatter_info().
+ */
+function url_field_formatter_info() {
+  return array(
+    'url_link' => array(
+      'label' => t('Link'),
+      'field types' => array('url'),
+      'settings' =>  array(
+        'target' => '',
+      ),
+    ),
+    'url_text' => array(
+      'label' => t('Plain text'),
+      'field types' => array('url'),
+      'settings' =>  array(),
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_formatter_settings_form().
+ */
+function url_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+
+  if ($display['type'] == 'url_link') {
+    $element['target'] = array(
+      '#type' => 'select',
+      '#title' => t('Link target'),
+      '#options' => drupal_array_map(array('_blank', '_parent', '_self', '_top')),
+      '#default_value' => $settings['target'],
+    );
+
+  }
+
+  return $element;
+}
+
+/**
+ * Implements hook_field_formatter_settings_summary().
+ */
+function url_field_formatter_settings_summary($field, $instance, $view_mode) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+
+  $summary = '';
+  if ($display['type'] == 'url_link') {
+    $target = !empty($settings['target']) ? ' target="' . $settings['target'] .'"' : '';
+    $summary = '<a href="url"' . $target . ' />';
+  }
+
+  return $summary;
+}
+
+/**
+ * Implements hook_field_formatter_view().
+ */
+function url_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
+  $element = array();
+  $settings = $display['settings'];
+
+  switch ($display['type']) {
+    case 'url_link':
+      foreach ($items as $delta => $item) {
+        $output = l($item['value'], $item['value'], array('language' => $langcode, 'target' => $settings['target']));
+        $element[$delta] = array('#markup' => $output);
+      }
+      break;
+
+    case 'url_text':
+      foreach ($items as $delta => $item) {
+        $element[$delta] = array('#markup' => $item['value']);
+      }
+      break;
+  }
+
+  return $element;
+}
+
+/**
+ * Implements hook_field_widget_info().
+ */
+function url_field_widget_info() {
+  return array(
+    'url' => array(
+      'label' => t('Text field'),
+      'field types' => array('url'),
+    ),
+  );
+}
+
+/**
+ * Implements hook_field_widget_form().
+ */
+function url_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
+  $value = isset($items[$delta]['value']) ? $items[$delta]['value'] : '';
+
+  $types = _url_field_acceptable_types();
+  foreach ($instance['settings']['types'] as $key => $type) {
+    if (empty($type)) {
+      unset($types[$key]);
+    }
+  }
+
+  $element += array(
+    '#type' => 'textfield',
+    '#default_value' => $value,
+  );
+
+  return array('value' => $element);
+}
+
+/**
+ * Implements hook_field_widget_error().
+ */
+function url_field_widget_error($element, $error, $form, &$form_state) {
+  form_error($element['value'], $error['message']);
+}
+
+/**
+ *
+ */
+function _url_field_acceptable_types() {
+  $types = array(
+    'external' => t('External URLs'),
+    'internal' => t('Internal paths'),
+    'alaises' => t('Internal URL aliases'),
+  );
+  return $types;
+}
+
+
+
+
