diff -rpuN ./simplenews-block-all.tpl.php ../simplenews/simplenews-block-all.tpl.php
--- ./simplenews-block-all.tpl.php	1970-01-01 01:00:00.000000000 +0100
+++ ../simplenews/simplenews-block-all.tpl.php	2008-09-18 01:38:52.000000000 +0200
@@ -0,0 +1,19 @@
+<?php
+// $Id$
+
+/**
+ * @file simplenews-block.tpl.php
+ * Default theme implementation to display a block with subscription options for all newsletters.
+ * 
+ *
+ * Available variables:
+ * - $form: the rendered form
+ *
+ * @see template_preprocess_simplenews_block_all()
+ */
+?>
+  <p><?php print t('Select the newsletter(s) to which you want to subscribe or unsubscribe.'); ?></p>
+
+  <?php if ($form): ?>
+    <?php print $form; ?>
+  <?php endif; ?>
diff -rpuN ./simplenews.module ../simplenews/simplenews.module
--- ./simplenews.module	2008-09-14 15:28:28.000000000 +0200
+++ ../simplenews/simplenews.module	2008-09-18 01:47:52.000000000 +0200
@@ -575,6 +575,14 @@ function simplenews_form_alter(&$form, $
       );
     }
   }
+  elseif ($form_id == 'simplenews_subscription_manager_form') {
+    if (!empty($form['#parameters'][3]) && $form['#parameters'][3] == 'simplenews_block_all') {
+      // Get rid of the fieldset to save screen space.
+      unset($form['subscriptions']['#type']);
+      // Prevent the form from redirecting to the front page.
+      $form['#redirect'] = FALSE;
+    }
+  }
 }
 
 /**
@@ -730,6 +738,10 @@ function simplenews_block($op = 'list', 
   switch ($op) {
     case 'list':
       $blocks = array();
+      $blocks['all'] = array(
+        'info' => t('Newsletter: all newsletters'),
+        'cache' => BLOCK_NO_CACHE,
+      );
       foreach (taxonomy_get_tree(variable_get('simplenews_vid', '')) as $newsletter) {
         //TODO: 1. without form -> by role; 2. with form -> user caching with refresh on subscribe/unsubscribe (option as setting) or no caching
         $blocks[$newsletter->tid] = array(
@@ -739,83 +751,96 @@ function simplenews_block($op = 'list', 
       }
       return $blocks;
     case 'configure':
-      $form['simplenews_block_'. $delta]['simplenews_block_m_'. $delta] = array(
-        '#type' => 'textfield',
-        '#title' => t('Block message'),
-        '#size' => 60,
-        '#maxlength' => 128,
-        '#default_value' => variable_get('simplenews_block_m_'. $delta, t('Stay informed on our latest news!')),
-      );
-      $form['simplenews_block_'. $delta]['simplenews_block_f_'. $delta] = array(
-        '#type' => 'radios',
-        '#title' => t('Subscription interface'),
-        '#options' => array('1' => t('Subscription form'), '0' => t('Link to form')),
-        '#description' => t("Note: this requires permission 'subscribe to newsletters'."),
-        '#default_value' => variable_get('simplenews_block_f_'. $delta, 1),
-      );
-      $form['simplenews_block_'. $delta]['simplenews_block_l_'. $delta] = array(
-        '#type' => 'checkbox',
-        '#title' => t('Display link to previous issues'),
-        '#return_value' => 1,
-        '#default_value' => variable_get('simplenews_block_l_'. $delta, 1),
-        '#description' => t("Note: this requires permission 'view links in block'."),
-      );
-      $form['simplenews_block_'. $delta]['simplenews_block_i_status_'. $delta] = array(
-        '#type' => 'checkbox',
-        '#title' => t('Display previous issues'),
-        '#return_value' => 1,
-        '#default_value' => variable_get('simplenews_block_i_status_'. $delta, 0),
-        '#description' => t("Note: this requires permission 'view links in block'."),
-      );
-      $form['simplenews_block_'. $delta]['simplenews_block_i_'. $delta] = array(
-        '#type' => 'select',
-        '#title' => t('Number of issues to display'),
-        '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
-        '#default_value' => variable_get('simplenews_block_i_'. $delta, 5),
-      );
-      $form['simplenews_block_'. $delta]['simplenews_block_r_'. $delta] = array(
-        '#type' => 'checkbox',
-        '#title' => t('Display RSS-feed icon'),
-        '#return_value' => 1,
-        '#default_value' => variable_get('simplenews_block_r_'. $delta, 1),
-        '#description' => t("Note: this requires permission 'view links in block'."),
-      );
+      if ($delta != 'all') {
+        $form['simplenews_block_'. $delta]['simplenews_block_m_'. $delta] = array(
+          '#type' => 'textfield',
+          '#title' => t('Block message'),
+          '#size' => 60,
+          '#maxlength' => 128,
+          '#default_value' => variable_get('simplenews_block_m_'. $delta, t('Stay informed on our latest news!')),
+        );
+        $form['simplenews_block_'. $delta]['simplenews_block_f_'. $delta] = array(
+          '#type' => 'radios',
+          '#title' => t('Subscription interface'),
+          '#options' => array('1' => t('Subscription form'), '0' => t('Link to form')),
+          '#description' => t("Note: this requires permission 'subscribe to newsletters'."),
+          '#default_value' => variable_get('simplenews_block_f_'. $delta, 1),
+        );
+        $form['simplenews_block_'. $delta]['simplenews_block_l_'. $delta] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Display link to previous issues'),
+          '#return_value' => 1,
+          '#default_value' => variable_get('simplenews_block_l_'. $delta, 1),
+          '#description' => t("Note: this requires permission 'view links in block'."),
+        );
+        $form['simplenews_block_'. $delta]['simplenews_block_i_status_'. $delta] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Display previous issues'),
+          '#return_value' => 1,
+          '#default_value' => variable_get('simplenews_block_i_status_'. $delta, 0),
+          '#description' => t("Note: this requires permission 'view links in block'."),
+        );
+        $form['simplenews_block_'. $delta]['simplenews_block_i_'. $delta] = array(
+          '#type' => 'select',
+          '#title' => t('Number of issues to display'),
+          '#options' => drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)),
+          '#default_value' => variable_get('simplenews_block_i_'. $delta, 5),
+        );
+        $form['simplenews_block_'. $delta]['simplenews_block_r_'. $delta] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Display RSS-feed icon'),
+          '#return_value' => 1,
+          '#default_value' => variable_get('simplenews_block_r_'. $delta, 1),
+          '#description' => t("Note: this requires permission 'view links in block'."),
+        );
+      }
       return $form;
     case 'save':
-      variable_set('simplenews_block_m_'. $delta, $edit['simplenews_block_m_'. $delta]);
-      variable_set('simplenews_block_f_'. $delta, $edit['simplenews_block_f_'. $delta]);
-      variable_set('simplenews_block_l_'. $delta, $edit['simplenews_block_l_'. $delta]);
-      variable_set('simplenews_block_i_status_'. $delta, $edit['simplenews_block_i_status_'. $delta]);
-      variable_set('simplenews_block_i_'. $delta, $edit['simplenews_block_i_'. $delta]);
-      variable_set('simplenews_block_r_'. $delta, $edit['simplenews_block_r_'. $delta]);
+      if ($delta != 'all') {
+        variable_set('simplenews_block_m_'. $delta, $edit['simplenews_block_m_'. $delta]);
+        variable_set('simplenews_block_f_'. $delta, $edit['simplenews_block_f_'. $delta]);
+        variable_set('simplenews_block_l_'. $delta, $edit['simplenews_block_l_'. $delta]);
+        variable_set('simplenews_block_i_status_'. $delta, $edit['simplenews_block_i_status_'. $delta]);
+        variable_set('simplenews_block_i_'. $delta, $edit['simplenews_block_i_'. $delta]);
+        variable_set('simplenews_block_r_'. $delta, $edit['simplenews_block_r_'. $delta]);
+      }
       break;
     case 'view':
       global $language;
 
-      if ($tree = taxonomy_get_tree(variable_get('simplenews_vid', ''))) {
-        // Only display a block if $delta is a valid newsletter term id.
-        foreach ($tree as $taxonomy) {
-          $tids[] = $taxonomy->tid;
-        }
-        if (in_array($delta, $tids)) {
-          // $delta is validated, the block can be displayed.
-          $newsletter = (array) taxonomy_get_term($delta);
-          // Translate newsletter name if required.
-          if (module_exists('i18ntaxonomy') && i18ntaxonomy_vocabulary(variable_get('simplenews_vid', '')) == I18N_TAXONOMY_LOCALIZE) {
-            $newsletter['name'] = tt('taxonomy:term:'. $newsletter['tid'] .':name', $newsletter['name'], $language->language);
+      if ($delta == 'all') {
+        $block = array(
+          'subject' => t('Our newsletters'),
+          'content' => theme('simplenews_block_all'),
+        );
+        return $block;
+      }
+      else {
+        if ($tree = taxonomy_get_tree(variable_get('simplenews_vid', ''))) {
+          // Only display a block if $delta is a valid newsletter term id.
+          foreach ($tree as $taxonomy) {
+            $tids[] = $taxonomy->tid;
+          }
+          if (in_array($delta, $tids)) {
+            // $delta is validated, the block can be displayed.
+            $newsletter = (array) taxonomy_get_term($delta);
+            // Translate newsletter name if required.
+            if (module_exists('i18ntaxonomy') && i18ntaxonomy_vocabulary(variable_get('simplenews_vid', '')) == I18N_TAXONOMY_LOCALIZE) {
+              $newsletter['name'] = tt('taxonomy:term:'. $newsletter['tid'] .':name', $newsletter['name'], $language->language);
+            }
+            $block = array(
+              'subject' => check_plain($newsletter['name']),
+              'content' => theme('simplenews_block', $newsletter['tid']),
+            );
+            return $block;
+          }
+          else {
+            drupal_set_message(t('You have probably changed the newsletter vocabulary. Please redefine the <a href="@blocks">newsletter blocks</a>.', array('@blocks' => url('admin/build/block'))), 'error');
+            return array();
           }
-          $block = array(
-            'subject' => check_plain($newsletter['name']),
-            'content' => theme('simplenews_block', $newsletter['tid']),
-          );
-          return $block;
         }
-      else {
-        drupal_set_message(t('You have probably changed the newsletter vocabulary. Please redefine the <a href="@blocks">newsletter blocks</a>.', array('@blocks' => url('admin/build/block'))), 'error');
-        return array();
       }
-    }
-    break;  
+      break;  
   }
 }
 
@@ -2039,6 +2064,10 @@ function simplenews_theme() {
       'template' => 'simplenews-block',
       'arguments' => array('tid' => NULL),
     ),
+    'simplenews_block_all' => array(
+      'file' => 'simplenews.subscription.inc',
+      'template' => 'simplenews-block-all',
+    ),
     'simplenews_status' => array(
       'template' => 'simplenews-status',
       'file' => 'simplenews.admin.inc',
@@ -2064,7 +2093,7 @@ function simplenews_theme() {
 }
 
 /**
- * Process variables to format the simplenews block.
+ * Process variables to format a single newsletter's block.
  *
  * Collect data and apply access restrictions.
  *
diff -rpuN ./simplenews.subscription.inc ../simplenews/simplenews.subscription.inc
--- ./simplenews.subscription.inc	2008-08-21 11:46:23.000000000 +0200
+++ ../simplenews/simplenews.subscription.inc	2008-09-18 01:38:52.000000000 +0200
@@ -180,3 +180,15 @@ function simplenews_admin_users_form(&$f
   $form['#redirect'] = 'admin/content/simplenews/users';
   return $form;
 }
+
+/**
+ * Process variables to format the subscription block for all newsletters.
+ *
+ * Include the subscriptions form in simplenews_confirm_subscription().
+ *
+ * @see simplenews-block-all.tpl.php
+ */
+function template_preprocess_simplenews_block_all(&$variables) {
+  // The third argument makes it possible for hook_form_alter() to recognize this instance of the form.
+  $variables['form'] = drupal_get_form('simplenews_subscription_manager_form', NULL, 'simplenews_block_all');
+}
