diff --git a/README.txt b/README.txt
index 47db37f..ae907dd 100644
--- a/README.txt
+++ b/README.txt
@@ -25,12 +25,26 @@ http://timeago.yarp.com/
   FEATURES
 ============
 
- - An option to turn node created times into timeago dates
- - An option to turn comment created/changed times into timeago dates
- - Tokens for node created time and comment created/changed times
+ - The ability to use Timeago dates for virtually any date on the site
+   including node created dates and comment created/changed dates
+ - Tokens for node created dates and comment created/changed dates
  - An option to use the new HTML5 "time" element, abbr, or span
  - An API to turn any UNIX timestamp into a timeago date
 
 Additionally the Statuses module integrates with Timeago
 (https://drupal.org/project/statuses).
 
+To use Timeago dates for virtually every date on your site, visit
+admin/config/regional/date-time. For each date format, you can choose to use
+one of the Timeago formats provided by default, or you can create a new format
+that uses Timeago by visiting admin/config/regional/date-time/formats/add and
+entering a format string like this into the "Format string" box:
+
+<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">D, n/j/Y - g:ia</\s\p\a\n>
+
+More information about how to structure custom formats is available in the API
+section below.
+
 
 =======
   API
diff --git a/timeago.module b/timeago.module
index 2d9a6d2..cbc910f 100644
--- a/timeago.module
+++ b/timeago.module
@@ -1,5 +1,12 @@
 <?php
 
+define('TIMEAGO_FORMAT_SHORT_US', '<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">n/j/y - g:ia</\s\p\a\n>');
+define('TIMEAGO_FORMAT_SHORT', '<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">d/m/Y - H:i</\s\p\a\n>');
+define('TIMEAGO_FORMAT_MEDIUM_US', '<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">D, n/j/Y - g:ia</\s\p\a\n>');
+define('TIMEAGO_FORMAT_MEDIUM', '<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">D, d/m/Y - H:i</\s\p\a\n>');
+define('TIMEAGO_FORMAT_LONG_US', '<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">l, F j, Y - g:ia</\s\p\a\n>');
+define('TIMEAGO_FORMAT_LONG', '<\s\p\a\n \c\l\a\s\s="\t\i\m\e\a\g\o" \t\i\t\l\e="c">l, j F Y - H:i</\s\p\a\n>');
+
 /**
  * @file
  *   Adds support for the Timeago jQuery library.
@@ -17,10 +24,28 @@
  *   HTML representing a Timeago-friendly date.
  */
 function timeago_format_date($timestamp, $date = NULL) {
+  // Add the Timeago JS.
   timeago_add_js();
+  // The fallback date isn't set, so we have to generate it ourselves.
   if (!isset($date)) {
-    $date = format_date($timestamp);
+    // If the date format is already set to Timeago, we need to set it to
+    // something else or we'll end up with two timeago wrappers.
+    $date_format_medium = variable_get('date_format_medium', 'D, m/d/Y - H:i');
+    if ($date_format_medium == TIMEAGO_FORMAT_MEDIUM_US) {
+      $date_format_medium = 'D, n/j/Y - g:ia';
+    }
+    elseif ($date_format_medium == TIMEAGO_FORMAT_MEDIUM) {
+      $date_format_medium = 'D, d/m/Y - H:i';
+    }
+    else {
+      $date = format_date($timestamp, 'custom', $date_format_medium);
+    }
+  }
+  // If the date passed in is already a Timeago date, just return that.
+  elseif (strpos($date, 'class="timeago"') !== FALSE) {
+    return $date;
   }
+  // Construct the Timeago element.
   $elem = variable_get('timeago_elem', 'span');
   $time = format_date($timestamp, 'custom', 'c');
   if ($elem == 'time') {
@@ -51,6 +76,11 @@ function timeago_menu() {
  * The administrative settings form.
  */
 function timeago_admin($form, $form_state) {
+  $form['info'] = array(
+    '#markup' => '<p>' . t('Note that you can set Timeago as the default <a href="!datetime">date format</a>.',
+      array('!datetime' => url('admin/config/regional/date-time'))) . ' ' .
+      t('This will allow you to use it for all dates on the site, overriding the settings below.') . '</p>',
+  );
   $form['timeago_node'] = array(
     '#type' => 'checkbox',
     '#title' => t('Use timeago for node creation dates'),
@@ -93,6 +123,45 @@ function timeago_library() {
 }
 
 /**
+ * Implements hook_date_formats().
+ */
+function timeago_date_formats() {
+  return array(
+    array(
+      'type' => 'short',
+      'format' => TIMEAGO_FORMAT_SHORT_US,
+    ),
+    array(
+      'type' => 'short',
+      'format' => TIMEAGO_FORMAT_SHORT,
+    ),
+    array(
+      'type' => 'medium',
+      'format' => TIMEAGO_FORMAT_MEDIUM_US,
+    ),
+    array(
+      'type' => 'medium',
+      'format' => TIMEAGO_FORMAT_MEDIUM,
+    ),
+    array(
+      'type' => 'long',
+      'format' => TIMEAGO_FORMAT_LONG_US,
+    ),
+    array(
+      'type' => 'long',
+      'format' => TIMEAGO_FORMAT_LONG,
+    ),
+  );
+}
+
+/**
+ * Implements hook_init().
+ */
+function timeago_init() {
+  timeago_add_js();
+}
+
+/**
  * Implements hook_process_node().
  *
  * We have to use process instead of preprocess because some themes (notably
