diff --git a/timeago.install b/timeago.install
index 42210b2..42f07a9 100644
--- a/timeago.install
+++ b/timeago.install
@@ -122,7 +122,33 @@ function timeago_get_version($path, $options = array()) {
  * Implements hook_uninstall().
  */
 function timeago_uninstall() {
-  variable_del('timeago_node');
-  variable_del('timeago_comment');
-  variable_del('timeago_elem');
+  $variables = array(
+    'timeago_node',
+    'timeago_comment',
+    'timeago_elem',
+    'timeago_js_refresh_millis',
+    'timeago_js_allow_future',
+    'timeago_js_locale_title',
+    'timeago_js_cutoff',
+    'timeago_js_strings_prefix_ago',
+    'timeago_js_strings_prefix_from_now',
+    'timeago_js_strings_suffix_ago',
+    'timeago_js_strings_suffix_from_now',
+    'timeago_js_strings_seconds',
+    'timeago_js_strings_minute',
+    'timeago_js_strings_minutes',
+    'timeago_js_strings_hour',
+    'timeago_js_strings_hours',
+    'timeago_js_strings_day',
+    'timeago_js_strings_days',
+    'timeago_js_strings_month',
+    'timeago_js_strings_months',
+    'timeago_js_strings_year',
+    'timeago_js_strings_years',
+    'timeago_js_strings_word_separator',
+  );
+
+  foreach ($variables as $variable) {
+    variable_del($variable);
+  }
 }
diff --git a/timeago.js b/timeago.js
index f91123a..55b58e2 100644
--- a/timeago.js
+++ b/timeago.js
@@ -1,31 +1,6 @@
 Drupal.behaviors.timeago = {
   attach: function (context) {
+    jQuery.extend(jQuery.timeago.settings, Drupal.settings.timeago);
     jQuery('abbr.timeago, span.timeago, time.timeago', context).timeago();
   }
 };
-
-/**
- * This allows translating string suffixes through Drupal. Some languages
- * (Arabic, Polish, Russian, Ukranian, etc.) have different suffixes depending
- * on the numbers used; see the note on Translation in the README.txt for how
- * to override the translations for these languages.
- */
-jQuery.timeago.settings.strings = {
-  prefixAgo: null,
-  prefixFromNow: null,
-  suffixAgo: Drupal.t("ago"),
-  suffixFromNow: Drupal.t("from now"),
-  seconds: Drupal.t("a moment"), // default is "less than a minute"
-  minute: Drupal.t("about a minute"),
-  minutes: Drupal.t("%d minutes"),
-  hour: Drupal.t("about an hour"),
-  hours: Drupal.t("about %d hours"),
-  day: Drupal.t("a day"),
-  days: Drupal.t("%d days"),
-  month: Drupal.t("about a month"),
-  months: Drupal.t("%d months"),
-  year: Drupal.t("about a year"),
-  years: Drupal.t("%d years")
-};
-// Allow timestamps in the future. https://drupal.org/node/1696742
-jQuery.timeago.settings.allowFuture = true;
diff --git a/timeago.module b/timeago.module
index d979734..ba3e85f 100644
--- a/timeago.module
+++ b/timeago.module
@@ -88,16 +88,19 @@ function timeago_admin($form, $form_state) {
       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'),
     '#default_value' => variable_get('timeago_node', 1),
   );
+
   $form['timeago_comment'] = array(
     '#type' => 'checkbox',
     '#title' => t('Use timeago for comment creation/changed dates'),
     '#default_value' => variable_get('timeago_comment', 1),
   );
+
   $form['timeago_elem'] = array(
     '#type' => 'radios',
     '#title' => t('Time element'),
@@ -108,6 +111,164 @@ function timeago_admin($form, $form_state) {
       'time' => t('time (HTML5 only)'),
     ),
   );
+
+  $form['settings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Override Timeago script settings'),
+    '#collapsible' => FALSE,
+  );
+
+  $form['settings']['timeago_js_refresh_millis'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Refresh Timeago dates after'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_refresh_millis', 60000),
+    '#field_suffix' => ' ' . t('milliseconds'),
+    '#element_validate' => array('element_validate_integer'),
+  );
+
+  $form['settings']['timeago_js_allow_future'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Allow future dates'),
+    '#default_value' => variable_get('timeago_js_allow_future', 1),
+  );
+
+  $form['settings']['timeago_js_locale_title'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Set the "title" attribute of Timeago dates to a locale-sensitive date'),
+    '#default_value' => variable_get('timeago_js_locale_title', 0),
+    '#description' => t('If this is disabled (the default) then the "title" attribute defaults to the original date that the Timeago script is replacing.'),
+  );
+
+  $form['settings']['timeago_js_cutoff'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Do not use Timeago dates after'),
+    '#field_suffix' => ' '. t('milliseconds'),
+    '#description' => t('Set to zero to always use Timeago dates.'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_cutoff', 0),
+    '#element_validate' => array('element_validate_integer'),
+  );
+
+  $form['settings']['strings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Strings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+
+  $form['settings']['strings']['warning'] = array(
+    '#markup' => '<div class="messages warning">' . t('If you are using the JavaScript translation files the following settings will not apply; you must first remove them then make use of the string settings.') . '</div>',
+  );
+
+  $form['settings']['strings']['timeago_js_strings_prefix_ago'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Prefix ago'),
+    '#default_value' => variable_get('timeago_js_strings_prefix_ago', NULL),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_prefix_from_now'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Prefix from now'),
+    '#default_value' => variable_get('timeago_js_strings_prefix_from_now', NULL),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_suffix_ago'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Suffix ago'),
+    '#default_value' => variable_get('timeago_js_strings_suffix_ago', 'ago'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_suffix_from_now'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Suffix from now'),
+    '#default_value' => variable_get('timeago_js_strings_suffix_from_now', 'from now'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_seconds'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Seconds'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_seconds', 'less than a minute'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_minute'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Minute'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_minute', 'about a minute'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_minutes'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Minutes'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_minutes', '%d minutes'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_hour'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Hour'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_hour', 'about an hour'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_hours'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Hours'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_hours', 'about %d hours'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_day'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Day'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_day', 'a day'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_days'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Days'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_days', '%d days'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_month'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Month'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_month', 'about a month'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_months'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Months'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_months', '%d months'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_year'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Year'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_year', 'about a year'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_years'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Years'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_strings_years', '%d years'),
+  );
+
+  $form['settings']['strings']['timeago_js_strings_word_separator'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Word separator'),
+    '#default_value' => variable_get('timeago_js_strings_word_separator', ' '),
+    '#description' => t('By default this is set to " " (a space).'),
+  );
+
   return system_settings_form($form);
 }
 
@@ -352,6 +513,15 @@ function timeago_add_js() {
     $library_path = drupal_get_path('module', 'timeago');
     drupal_add_library('timeago', 'timeago');
   }
+
+  // Build the settings array structure.
+  $settings = array(
+    'refreshMillis' => (int) intval(variable_get('timeago_js_refresh_millis', 60000)),
+    'allowFuture' => (bool) variable_get('timeago_js_allow_future', 1),
+    'localeTitle' => (bool) variable_get('timeago_js_locale_title', 0),
+    'cutoff' => (int) intval(variable_get('timeago_js_cutoff', 0)),
+  );
+
   // Some languages (Arabic, Polish, Russian, Ukranian, etc.) have different
   // suffixes depending on the numbers used in the dates, so we may need to
   // have more complex translations than Drupal allows. To support these cases,
@@ -361,4 +531,39 @@ function timeago_add_js() {
   if (file_exists($path)) {
     drupal_add_js($path, array('weight' => 1));
   }
+  else {
+    // If the JavaScript translation files are not in use, we can pass the
+    // string settings in.
+    $settings['strings'] = array(
+      'prefixAgo' => variable_get('timeago_js_strings_prefix_ago', NULL),
+      'prefixFromNow' => variable_get('timeago_js_strings_prefix_from_now', NULL),
+      'suffixAgo' => variable_get('timeago_js_strings_suffix_ago', 'ago'),
+      'suffixFromNow' => variable_get('timeago_js_strings_suffix_from_now', 'from now'),
+      'seconds' => variable_get('timeago_js_strings_seconds', 'less than a minute'),
+      'minute' => variable_get('timeago_js_strings_minute', 'about a minute'),
+      'minutes' => variable_get('timeago_js_strings_minutes', '%d minutes'),
+      'hour' => variable_get('timeago_js_strings_hour', 'about an hour'),
+      'hours' => variable_get('timeago_js_strings_hours', 'about %d hours'),
+      'day' => variable_get('timeago_js_strings_day', 'a day'),
+      'days' => variable_get('timeago_js_strings_days', '%d days'),
+      'month' => variable_get('timeago_js_strings_month', 'about a month'),
+      'months' => variable_get('timeago_js_strings_months', '%d months'),
+      'year' => variable_get('timeago_js_strings_year', 'about a year'),
+      'years' => variable_get('timeago_js_strings_years', '%d years'),
+    );
+
+    // Check plain the strings.
+    foreach ($settings['strings'] as $k => $string) {
+      if ($string == '') {
+        continue;
+      }
+
+      $settings['strings'][$k] = check_plain($string);
+    }
+
+    // Tack in the last one we don't want t'ed.
+    $settings['strings']['wordSeparator'] = check_plain(variable_get('timeago_js_strings_word_separator', ' '));
+  }
+
+  drupal_add_js(array('timeago' => $settings), 'setting');
 }
