diff -urp misc/form.js misc/form.js
--- misc/form.js	2008-10-29 12:01:26.000000000 +0200
+++ misc/form.js	2008-11-27 20:44:12.000000000 +0200
@@ -10,3 +10,18 @@ Drupal.behaviors.multiselectSelector = {
     });
   }
 };
+
+Drupal.behaviors.filterGuildelines = {
+  attach: function (context) {
+  // Automatically displays the guidelines of the selected input format.
+    $('.filter-guidelines:not(.filterGuidelines-processed)', context)
+      .addClass('filterGuidelines-processed')
+      .parents('.filter-wrapper').find('select.filter-list')
+      .bind('change', function() {
+        $(this).parents('.filter-wrapper')
+        .find('.filter-guidelines-item').hide()
+        .siblings('#filter-guidelines-' + this.value).show();
+      })
+      .change();
+  }
+};
diff -urp modules/filter/filter.module modules/filter/filter.module
--- modules/filter/filter.module	2008-11-15 13:45:03.000000000 +0200
+++ modules/filter/filter.module	2008-11-27 21:06:18.000000000 +0200
@@ -58,7 +58,10 @@ function filter_theme() {
       'file' => 'filter.pages.inc',
     ),
     'filter_tips_more_info' => array(
-      'arguments' => array(),
+      'arguments' => array('icon' => FALSE),
+    ),
+    'filter_guidelines' => array(
+      'arguments' => array('format' => NULL),
     ),
   );
 }
@@ -482,57 +485,36 @@ function filter_form($value = FILTER_FOR
   $value = filter_resolve_format($value);
   $formats = filter_formats();
 
-  $extra = theme('filter_tips_more_info');
+  $form = array(
+    '#type' => 'fieldset',
+    '#weight' => $weight,
+    '#attributes' => array('class' => 'filter-wrapper'),
+  );
 
-  if (count($formats) > 1) {
-    $form = array(
-      '#type' => 'fieldset',
-      '#title' => t('Input format'),
-      '#collapsible' => TRUE,
-      '#collapsed' => TRUE,
-      '#weight' => $weight,
-      '#element_validate' => array('filter_form_validate'),
-    );
-    // Multiple formats available: display radio buttons with tips.
+  if (count($formats) > 0) {
+    // If there is only a single input format then disable the selectlist.
+    drupal_add_js('misc/form.js', 'core');
     foreach ($formats as $format) {
-      // Generate the parents as the autogenerator does, so we will have a
-      // unique id for each radio button.
-      $parents_for_id = array_merge($parents, array($format->format));
-      $form[$format->format] = array(
-        '#type' => 'radio',
-        '#title' => $format->name,
-        '#default_value' => $value,
-        '#return_value' => $format->format,
-        '#parents' => $parents,
-        '#description' => theme('filter_tips', _filter_tips($format->format, FALSE)),
-        '#id' => form_clean_id('edit-' . implode('-', $parents_for_id)),
-      );
+      $options[$format->format] = $format->name;
+      $guidelines[$format->format] = array('#markup' => theme('filter_guidelines', $format));
     }
-  }
-  else {
-    // Only one format available: use a hidden form item and only show tips.
-    $format = array_shift($formats);
-    $form[$format->format] = array('#type' => 'value', '#value' => $format->format, '#parents' => $parents);
-    $tips = _filter_tips(variable_get('filter_default_format', 1), FALSE);
-    $form['format']['guidelines'] = array(
-      '#title' => t('Formatting guidelines'),
-      '#markup' => theme('filter_tips', $tips, FALSE, $extra),
+    $element_id = form_clean_id('edit-' . implode('-', $parents));
+    $form['format'] = array(
+      '#type' => 'select',
+      '#title' => t('Formatting'),
+      '#options' => $options,
+      '#default_value' => $value,
+      '#parents' => $parents,
+      '#id' => $element_id,
+      '#attributes' => array('class' => 'filter-list'),
+      '#disabled' => count($formats) == 1,
     );
+    $form['format_help'] = array('#markup' => '<div id="'. $element_id .'-help" class="filter-help">'. theme('filter_tips_more_info', TRUE) .'</div>');
+    $form['format_guidelines'] = array_merge($guidelines, array('#prefix' => '<div id="'. $element_id .'-guidelines" class="filter-guidelines">', '#suffix' => '</div>'));
   }
-  $form[] = array('#markup' => $extra);
   return $form;
 }
 
-function filter_form_validate($form) {
-  foreach (element_children($form) as $key) {
-    if ($form[$key]['#value'] == $form[$key]['#return_value']) {
-      return;
-    }
-  }
-  form_error($form, t('An illegal choice has been detected. Please contact the site administrator.'));
-  watchdog('form', 'Illegal choice %choice in %name element.', array('%choice' => $form[$key]['#value'], '%name' => empty($form['#title']) ? $form['#parents'][0] : $form['#title']), WATCHDOG_ERROR);
-}
-
 /**
  * Returns TRUE if the user is allowed to access this format.
  */
@@ -585,8 +567,23 @@ function _filter_tips($format, $long = F
  *
  * @ingroup themeable
  */
-function theme_filter_tips_more_info() {
-  return '<p>' . l(t('More information about formatting options'), 'filter/tips') . '</p>';
+function theme_filter_tips_more_info($icon = FALSE) {
+  if ($icon) {
+    $description = t('More information about formatting options');
+    return l(theme('image', 'misc/help.png', $description, $description), 'filter/tips', array('html' => TRUE));
+  }
+  else {
+    return '<p>'. l(t('More information about formatting options'), 'filter/tips') .'</p>';
+  }
+}
+
+/**
+ * Format guidelines for an input format.
+ *
+ * @ingroup themeable
+ */
+function theme_filter_guidelines($format) {
+  return '<div id="filter-guidelines-'. $format->format .'" class="filter-guidelines-item"><label>'. $format->name .':</label>'. theme('filter_tips', _filter_tips($format->format, FALSE)) .'</div>';
 }
 
 /**
@@ -732,13 +729,13 @@ function _filter_url($text, $format) {
   $text = ' ' . $text . ' ';
 
   // Match absolute URLs.
-  $text = preg_replace_callback("`(<p>|<li>|<br\s*/?>|[ \n\r\t\(])((http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", '_filter_url_parse_full_links', $text);
+  $text = preg_replace_callback("`(<p>|<li>|<br\s*/?>|[ \n\r  \(])((http://|https://|ftp://|mailto:|smb://|afp://|file://|gopher://|news://|ssl://|sslv2://|sslv3://|tls://|tcp://|udp://)([a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+*~#&=/;-]))([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r  \)]))`i", '_filter_url_parse_full_links', $text);
 
   // Match e-mail addresses.
-  $text = preg_replace("`(<p>|<li>|<br\s*/?>|[ \n\r\t\(])([A-Za-z0-9._-]+@[A-Za-z0-9._+-]+\.[A-Za-z]{2,4})([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", '\1<a href="mailto:\2">\2</a>\3', $text);
+  $text = preg_replace("`(<p>|<li>|<br\s*/?>|[ \n\r  \(])([A-Za-z0-9._-]+@[A-Za-z0-9._+-]+\.[A-Za-z]{2,4})([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r  \)]))`i", '\1<a href="mailto:\2">\2</a>\3', $text);
 
   // Match www domains/addresses.
-  $text = preg_replace_callback("`(<p>|<li>|[ \n\r\t\(])(www\.[a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+~#\&=/;-])([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r\t\)]))`i", '_filter_url_parse_partial_links', $text);
+  $text = preg_replace_callback("`(<p>|<li>|[ \n\r  \(])(www\.[a-zA-Z0-9@:%_+*~#?&=.,/;-]*[a-zA-Z0-9@:%_+~#\&=/;-])([.,?!]*?)(?=(</p>|</li>|<br\s*/?>|[ \n\r  \)]))`i", '_filter_url_parse_partial_links', $text);
   $text = substr($text, 1, -1);
 
   return $text;
diff -urp modules/system/system.css modules/system/system.css
--- modules/system/system.css	2008-10-19 22:55:07.000000000 +0200
+++ modules/system/system.css	2008-11-27 20:44:12.000000000 +0200
@@ -348,6 +348,58 @@ html.js fieldset.collapsible .fieldset-w
 }
 
 /*
+** Input formats
+*/
+/* Aligns the Input format fieldset to its textarea. */
+.filter-wrapper {
+  margin-top: -1em;
+  margin-right: -2px;
+}
+/* Puts it all on one line and applies some margins and font weight. */
+.filter-wrapper .form-item {
+  float: left;
+  margin: 0;
+}
+.filter-wrapper .form-item label {
+  float: left;
+  margin-right: 1em;
+  font-weight: normal;
+}
+.filter-wrapper .form-item select {
+  float: left;
+  margin-right: 1em;
+}
+.filter-help {
+  float: left;
+}
+/* Removes unaesthetic spacing at the bottom when only one input format is available. */
+.filter-wrapper p {
+  margin-bottom: 0;
+}
+/* Positions the guidelines below the select list. */
+.filter-guidelines {
+  clear: left;
+}
+.filter-guidelines-item {
+  padding-top: 0.5em;
+}
+/* Allows jQuery to only show guidelines for the currently selected format. */
+.filterGuidelines-processed .filter-guidelines-item,
+.filterGuidelines-processed label {
+  display: none;
+}
+/* To make the Input format fieldset the same width as the body textarea, we can make
+   the whole wrapper 95% wide, instead of only the textarea. This will also have to be
+   done on other textareas that has input formats, such as CCK's. */
+.body-field-wrapper {
+  width: 95%;
+}
+.body-field-wrapper textarea,
+.body-field-wrapper .resizable-textarea {
+  width: 100%;
+}
+
+/*
 ** Resizable text areas
 */
 .resizable-textarea {
