diff --git includes/flag.admin.inc includes/flag.admin.inc
index 827d7da..4fa8fe8 100644
--- includes/flag.admin.inc
+++ includes/flag.admin.inc
@@ -396,15 +396,23 @@ function flag_form(&$form_state, $name, $type = NULL) {
     '#access' => empty($flag->locked['link_type']),
   );
 
-  $form['link_options'] = array(
+  $form['display']['link_options_intro'] = array(
+    '#value' => '<p id="link-options-intro">' . t('The selected link type may require these additional settings:') . '</p>',
+    '#weight' => 20,
+  );
+
+  $form['display']['link_options_confirm'] = array(
     '#type' => 'fieldset',
-    '#title' => t('Link options'),
-    '#description' => t('The selected link type may require these additional settings.'),
-    '#attributes' => array('id' => 'link-options'),
+    '#title' => t('Options for the "Confirmation form" link type'),
+    // Any "link type" provider module must put its settings fields inside
+    // a fieldset whose HTML ID is link-options-LINKTYPE, where LINKTYPE is
+    // the machine-name of the link type. This is necessary for the
+    // radiobutton's JavaScript dependency feature to work.
+    '#attributes' => array('id' => 'link-options-confirm'),
     '#weight' => 21,
   );
 
-  $form['link_options']['flag_confirmation'] = array(
+  $form['display']['link_options_confirm']['flag_confirmation'] = array(
     '#type' => 'textfield',
     '#title' => t('Flag confirmation message'),
     '#default_value' => isset($flag->flag_confirmation) ? $flag->flag_confirmation : '',
@@ -412,7 +420,7 @@ function flag_form(&$form_state, $name, $type = NULL) {
     '#access' => empty($flag->locked['flag_confirmation']),
   );
 
-  $form['link_options']['unflag_confirmation'] = array(
+  $form['display']['link_options_confirm']['unflag_confirmation'] = array(
     '#type' => 'textfield',
     '#title' => t('Unflag confirmation message'),
     '#default_value' => isset($flag->unflag_confirmation) ? $flag->unflag_confirmation : '',
@@ -543,10 +551,6 @@ function flag_expand_link_option($element) {
     if (isset($element['#option_descriptions'][$key])) {
       $element[$key]['#description'] = $element['#option_descriptions'][$key];
     }
-    // Add a list of fields dependent on this link type using the rel attribute.
-    if (isset($element['#flag_link_fields'][$key])) {
-      $element[$key]['#attributes']['rel'] = implode(' ', $element['#flag_link_fields'][$key]);
-    }
   }
   $element['#attributes']['class'] = 'flag-link-options';
 
diff --git theme/flag-admin.js theme/flag-admin.js
index b442221..fb25d8e 100644
--- theme/flag-admin.js
+++ theme/flag-admin.js
@@ -46,25 +46,24 @@ Drupal.behaviors.flagRoles = function(context) {
  */
 Drupal.behaviors.flagLinkOptions = function(context) {
   $('.flag-link-options input.form-radio', context).change(function() {
+    // Reveal only the fieldset whose ID is link-options-LINKTYPE,
+    // where LINKTYPE is the value of the selected radio button.
     var radioButton = this;
-    $('#link-options').slideUp(function() {
-      $('#link-options input').each(function() {
-        $(this).parents('.form-item:first').css('display', 'none');
-      });
-      var linkOptionFields = $(radioButton).attr('rel');
-      if (linkOptionFields) {
-        linkOptionFields = linkOptionFields.split(' ');
-        for (var n in linkOptionFields) {
-          $('#link-options input[name=' + linkOptionFields[n] + ']').parents('.form-item:first').css('display', 'block');
-        }
-        $('#link-options').slideDown();
-      }
-    });
-  });
+    var $relevant   = $('fieldset#link-options-' + radioButton.value);
+    var $irrelevant = $('fieldset[id^=link-options-]').not($relevant);
+
+    $relevant.show();
+    $irrelevant.hide();
+
+    if ($relevant.size()) {
+      $('#link-options-intro').show();
+    }
+    else {
+      $('#link-options-intro').hide();
+    }
+  })
   // Hide the link options by default if needed.
-  if (!$('.flag-link-options input.form-radio:checked').attr('rel')) {
-    $('#link-options').css('display', 'none');
-  }
+  .filter(':checked').trigger('change');
 };
 
 /**
