diff --git a/subscriptions.admin.inc b/subscriptions.admin.inc
index 09c38b9..6ebd981 100644
--- a/subscriptions.admin.inc
+++ b/subscriptions.admin.inc
@@ -384,47 +384,74 @@ function subscriptions_page_form($form, &$form_state, $account, $stype) {
  * @return array|null
  */
 function subscriptions_page_user_overview(array $form, array &$form_state, $account) {
-  // Build summary
   $uid = (!empty($account) ? $account->uid : -DRUPAL_AUTHENTICATED_RID);
-  $counts = array();
-  $result = db_query("SELECT module, field, COUNT(1) AS number FROM {subscriptions} WHERE recipient_uid = :recipient_uid GROUP BY module, field", array(':recipient_uid' => $uid));
-  foreach ($result as $subs) {
-    if (!empty($subs->module)) {
-      $counts[$subs->module][$subs->field] = $subs->number;
+
+  // Alternative UI to provide all subscriptions options on the overview page.
+  if (variable_get('subscriptions_improved_overview', TRUE)) {
+    foreach (subscriptions_types() as $stype => $data) {
+      // Only add the subform if there was a settings page and if the user has
+      // access.
+      if (!empty($data['page']) && (empty($data['access']) || user_access($data['access']))) {
+        $sub_form = array();
+        $sub_form_state = array();
+        $sub_form = subscriptions_page_form($sub_form, $sub_form_state, $account, $stype);
+        $form[$stype] = $sub_form;
+        $form[$stype]['#type'] = 'fieldset';
+        $form[$stype]['#title'] = t($data['title']);
+        $form[$stype]['#weight'] = $data['weight'];
+        $form[$stype]['#collapsible'] = TRUE;
+        $form[$stype]['#collapsed'] = FALSE;
+      }
     }
+    $form['separator'] = array(
+      '#markup' => '<h3>' . t('General settings') . '</h3>',
+    );
+    $form['#submit'][] = 'subscriptions_page_user_overview_submit';
   }
-  // give other modules a chance to add their count(s)
-  $more_counts = module_invoke_all('count_user_subscriptions', $counts, $uid);
-  $counts = array_merge($counts, $more_counts);
 
-  $tr = 't';
-  $header = array(array('data' => $tr('Type'), 'width' => '20%'), t('Number'));
-  $types = subscriptions_types();
-  if ($uid < 0) {
-    unset($types['node']);
-  }
-  uasort($types, '_subscriptions_cmp_by_weight');
-  $rows = array();
-  foreach ($types as $stype => $type) {
-    $has_access = ($uid < 0 && user_access('administer site configuration')) || user_access($type['access'], $account);
-    if (($has_access || user_access('administer user subscriptions')) && isset($type['fields'])) {
-      $rows[] = array(
-        ($has_access ? l($tr($type['title']), ($uid < 0 ? SUBSCRIPTIONS_CONFIG_PATH . "/userdefaults/$stype" : "user/$uid/subscriptions/$stype")) : $type['title']),
-        isset($counts[$type['fields'][0]][$type['fields'][1]]) ? $counts[$type['fields'][0]][$type['fields'][1]] : 0,
-      );
+  else {
+    // Build summary
+    $counts = array();
+    $result = db_query("SELECT module, field, COUNT(1) AS number FROM {subscriptions} WHERE recipient_uid = :recipient_uid GROUP BY module, field", array(':recipient_uid' => $uid));
+    foreach ($result as $subs) {
+      if (!empty($subs->module)) {
+        $counts[$subs->module][$subs->field] = $subs->number;
+      }
     }
+    // give other modules a chance to add their count(s)
+    $more_counts = module_invoke_all('count_user_subscriptions', $counts, $uid);
+    $counts = array_merge($counts, $more_counts);
+
+    $tr = 't';
+    $header = array(array('data' => $tr('Type'), 'width' => '20%'), t('Number'));
+    $types = subscriptions_types();
+    if ($uid < 0) {
+      unset($types['node']);
+    }
+    uasort($types, '_subscriptions_cmp_by_weight');
+    $rows = array();
+    foreach ($types as $stype => $type) {
+      $has_access = ($uid < 0 && user_access('administer site configuration')) || user_access($type['access'], $account);
+      if (($has_access || user_access('administer user subscriptions')) && isset($type['fields'])) {
+        $rows[] = array(
+          ($has_access ? l($tr($type['title']), ($uid < 0 ? SUBSCRIPTIONS_CONFIG_PATH . "/userdefaults/$stype" : "user/$uid/subscriptions/$stype")) : $type['title']),
+          isset($counts[$type['fields'][0]][$type['fields'][1]]) ? $counts[$type['fields'][0]][$type['fields'][1]] : 0,
+        );
+      }
+    }
+    $form['overview']['table'] = array(
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+    );
+    $form['overview']['note'] = array(
+      '#type' => 'item',
+      '#description' => t('Note: The counts on this page may differ from the ones on the detail pages for various technical reasons.'),
+      '#suffix' => '<br />',
+    );
+    $form['#submit'] = array();
   }
-  $form['overview']['table'] = array(
-    '#theme' => 'table',
-    '#header' => $header,
-    '#rows' => $rows,
-  );
-  $form['overview']['note'] = array(
-    '#type' => 'item',
-    '#description' => t('Note: The counts on this page may differ from the ones on the detail pages for various technical reasons.'),
-    '#suffix' => '<br />',
-  );
-  $form['#submit'] = array();
+
   if ($uid > 0) {
     subscriptions_user_suspend_form($form, $form_state, $account);
   }
@@ -434,6 +461,20 @@ function subscriptions_page_user_overview(array $form, array &$form_state, $acco
 }
 
 /**
+ * Submission callback.
+ */
+function subscriptions_page_user_overview_submit(array $form, array &$form_state) {
+  foreach ($form_state['values'] as $key => $value) {
+    if (is_array($value)) {
+      $temp_form_state = $form_state;
+      $temp_form_state['values'] = $form_state['values'][$key];
+      $temp_form_state['values']['op'] = $temp_form_state['values']['submit'];
+      subscriptions_page_form_submit($form[$key], $temp_form_state);
+    }
+  }
+}
+
+/**
  * Returns the form definition for the suspend part of the overview page.
  *
  * @param array $form
diff --git a/subscriptions.module b/subscriptions.module
index 9dd1abc..b2e4031 100644
--- a/subscriptions.module
+++ b/subscriptions.module
@@ -137,7 +137,7 @@ function subscriptions_menu() {
       'access arguments' => array($data['access']),
     );
 
-    if (empty($data['page'])) {
+    if (empty($data['page']) || variable_get('subscriptions_improved_overview', TRUE)) {
       continue;  // no page
     }
     $items['user/%user/subscriptions/' . $stype] = array(
diff --git a/subscriptions_ui.module b/subscriptions_ui.module
index 5f448e7..e927531 100644
--- a/subscriptions_ui.module
+++ b/subscriptions_ui.module
@@ -357,6 +357,16 @@ function subscriptions_ui_form_subscriptions_settings_form_alter(array &$form, a
       '#collapsible' => TRUE,
       '#weight' => -4,
   );
+
+  $form['display_settings']['subscriptions_improved_overview'] = array(
+    '#type'          => 'checkbox',
+    '#title'         => t('Use all-in-one user overview page'),
+    '#default_value' => variable_get('subscriptions_improved_overview', FALSE),
+    '#description'   => t("By default the user subscriptions pages are split by type, this will merge all of these into the main overview page and removes the subpages."),
+  );
+  // The above setting needs a submission callback.
+  $form['#submit'][] = 'subscriptions_ui_form_subscriptions_settings_form_submit';
+  
   $form['display_settings']['subscriptions_form_in_block'] = array(
     '#type'          => 'radios',
     '#title'         => t('Node form position'),
@@ -395,6 +405,20 @@ function subscriptions_ui_form_subscriptions_settings_form_alter(array &$form, a
 }
 
 /**
+ * Form submission callback.
+ *
+ * If the improved Overview page changed, clear the menu cache.
+ */
+function subscriptions_ui_form_subscriptions_settings_form_submit($form, &$form_state) {
+  $overview_existing = $form['display_settings']['subscriptions_improved_overview']['#default_value'];
+  $overview_new = $form_state['values']['subscriptions_improved_overview'];
+  if ($overview_existing != $overview_new) {
+    menu_cache_clear_all();
+    menu_rebuild();
+  }
+}
+
+/**
  * Asks for permission to display the subscriptions interface
  * for the given node.
  *
