diff --git a/timeago.install b/timeago.install
index 42210b2..c5a012e 100644
--- a/timeago.install
+++ b/timeago.install
@@ -122,7 +122,7 @@ 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');
+  db_delete('variable')
+  ->condition('name', 'timeago_%', 'LIKE')
+  ->execute();
 }
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..68e324c 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,155 @@ function timeago_admin($form, $form_state) {
       'time' => t('time (HTML5 only)'),
     ),
   );
+
+  $form['settings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Plugin Settings'),
+    '#collapsible' => FALSE,
+  );
+
+  $form['settings']['timeago_js_refresh_millis'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Milliseconds to refresh after'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_refresh_millis', 60000),
+  );
+
+  $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('Locale title'),
+    '#default_value' => variable_get('timeago_js_locale_title', 0),
+  );
+
+  $form['settings']['timeago_js_cutoff'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Cutoff for using timeago'),
+    '#description' => t('This should be in milliseconds.'),
+    '#required' => TRUE,
+    '#default_value' => variable_get('timeago_js_cutoff', 0),
+  );
+
+  $form['settings']['strings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Strings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+  );
+
+  $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 " ".'),
+  );
+
   return system_settings_form($form);
 }
 
@@ -352,6 +504,41 @@ function timeago_add_js() {
     $library_path = drupal_get_path('module', 'timeago');
     drupal_add_library('timeago', 'timeago');
   }
+
+  // Build the settings array structure.
+  $settings = array(
+    'refreshMillis' => intval(variable_get('timeago_js_refresh_millis', 60000)),
+    'allowFuture' => variable_get('timeago_js_allow_future', 1) ? TRUE : FALSE,
+    'localeTitle' => variable_get('timeago_js_locale_title', 0) ? TRUE : FALSE,
+    'cutoff' => intval(variable_get('timeago_js_cutoff', 0)),
+    '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.
+  $settings['strings'] = array_map('check_plain', $settings['strings']);
+  // Translate the strings.
+  $settings['strings'] = array_map('t', $settings['strings']);
+  // 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');
+
   // 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,
