diff --git a/acquia_purge.install b/acquia_purge.install
index 73e6f84..daef66c 100644
--- a/acquia_purge.install
+++ b/acquia_purge.install
@@ -53,6 +53,17 @@ function acquia_purge_uninstall() {
 
   // Wipe out state data in the case the user re-enables the module.
   _acquia_purge_state_wipe();
+
+  // Remove variables.
+  variable_del('acquia_purge_domains');
+  variable_del('acquia_purge_cron');
+  variable_del('acquia_purge_http');
+  variable_del('acquia_purge_https');
+  variable_del('acquia_purge_base_path');
+  variable_del('acquia_purge_log_success');
+  variable_del('acquia_purge_variations');
+  variable_del('acquia_purge_memcache');
+  variable_del('acquia_purge_enable_server_side_purging');
 }
 
 /**
diff --git a/acquia_purge.module b/acquia_purge.module
index 90f4e88..1e8a917 100644
--- a/acquia_purge.module
+++ b/acquia_purge.module
@@ -68,16 +68,13 @@ define('ACQUIA_PURGE_SEVLEVEL_ERROR', 2);
  * Implements hook_init().
  */
 function acquia_purge_init() {
-
   // Do not trigger the on-screen purger if this path is blacklisted.
   if (_acquia_purge_ui_path_blacklisted()) {
     return;
   }
 
-  // Trigger the on-screen purger if its enabled and if this user triggered it.
-  if (_acquia_purge_queue_is_user_purging()) {
-    _acquia_purge_ui_trigger_purge();
-  }
+  // Trigger the on-screen purger if its enabled.
+  _acquia_purge_ui_trigger_purge();
 }
 
 /**
@@ -263,6 +260,11 @@ function acquia_purge_expire_cache($urls, $wildcards, $object_type, $object) {
 
   // Queue all paths that we received from Expire.
   acquia_purge_purge_paths($urls);
+
+  // Run queue now if server-side purging is enabled.
+  if (variable_get('acquia_purge_enable_server_side_purging')) {
+    _acquia_purge_queue_run();
+  }
 }
 
 /**
@@ -293,6 +295,12 @@ function acquia_purge_form_expire_admin_settings_form_alter(&$form, &$form_state
     '#markup' => theme('acquia_purge_status_report', $diagnostics),
     '#type' => 'item',
   );
+  $form['tabs']['status']['acquia_purge_enable_server_side_purging'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use server-side purging for Acquia Purge'),
+    '#description' => t('More reliable purging. This disables the client-side purging including the AJAX display of the purge status.'),
+    '#default_value' => variable_get('acquia_purge_enable_server_side_purging', FALSE),
+  );
 }
 
 /**
@@ -530,6 +538,7 @@ function _acquia_purge_get($name, $get_default = FALSE) {
         'acquia_purge_log_success' => TRUE,
         'acquia_purge_variations'  => TRUE,
         'acquia_purge_memcache'    => TRUE,
+        'acquia_purge_enable_server_side_purging' => FALSE,
       ),
       'state' => array(
         'qtotal'        => 0,
@@ -2130,6 +2139,10 @@ function _acquia_purge_ui_path_blacklisted() {
  *   Void, this function doesn't return anything.
  */
 function _acquia_purge_ui_trigger_purge() {
+  // Allow disabling of client side AJAX queue processing.
+  if (variable_get('acquia_purge_enable_server_side_purging')) {
+    return;
+  }
 
   // Prevent API misuse and don't trigger when this user doesn't own the queue.
   if (!_acquia_purge_queue_is_user_purging()) {
@@ -2244,3 +2257,13 @@ function acquia_purge_purge_paths($paths) {
   // current state of the purge queue.
   return _acquia_purge_queue_stats();
 }
+
+/**
+ * Process all items in the purge queue immediately.
+ */
+function _acquia_purge_queue_run() {
+  do {
+    $items = _acquia_purge_queue_pop('_acquia_purge_queue_processpurge');
+  }
+  while (count($items));
+}
