diff --git a/references_dialog.dialog_widgets.inc b/references_dialog.dialog_widgets.inc
index 01cb446..8faab71 100644
--- a/references_dialog.dialog_widgets.inc
+++ b/references_dialog.dialog_widgets.inc
@@ -27,6 +27,8 @@ function references_dialog_references_dialog_widgets() {
         ),
         'add' => array(
           'function' => 'references_dialog_node_reference_add_link',
+	  'settings_form' => 'references_dialog_node_reference_settings',
+          'settings' => array('types' => array()),
           'title' => t('Add dialog'),
         ),
       ),
@@ -74,6 +76,27 @@ function references_dialog_references_dialog_widgets() {
   );
 }
 
+function references_dialog_node_reference_settings($form, $operation_settings, $widget, $field, $instance) {
+  $types = array();
+  foreach ($field['settings']['referenceable_types'] as $type => $enabled) {
+    if (!empty($enabled)) {
+      $types[$type] = $enabled;
+    }
+  }
+  $form['types'] = array(
+    '#title' => t('Show links for:'),
+    '#type' => 'checkboxes',
+    '#options' => $types,
+    '#default_value' => !empty($operation_settings['links']) ? $operation_settings['links'] : array(),
+    '#states' => array(
+      'visible' => array(
+        'input[name="instance[widget][settings][references_dialog_add][enabled]"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+  return $form;
+}
+
 /**
  * Edit link callback for node references.
  */
@@ -95,9 +118,15 @@ function references_dialog_node_reference_edit_link($element, $widget_settings,
 /**
  * Add link callback for node references.
  */
-function references_dialog_node_reference_add_link($element, $widget_settings, $field, $instance) {
+function references_dialog_node_reference_add_link($element, $widget_settings, $field, $instance, $operation_settings) {
   $add_links = array();
-  foreach ($field['settings']['referenceable_types'] as $type => $active) {
+  if (isset($operation_settings['types'])) {
+    $types = $operation_settings['types'];
+  }
+  else {
+    $types = $field['settings']['referenceable_types'];
+  }
+  foreach ($types as $type => $active) {
     if ($active !== 0) {
       $node_type = node_type_load($type);
       if (node_access('create', $node_type->type)) {
diff --git a/references_dialog.module b/references_dialog.module
index 9ae5062..54dfd15 100644
--- a/references_dialog.module
+++ b/references_dialog.module
@@ -134,8 +134,14 @@ function references_dialog_get_applicable_views() {
 function references_dialog_field_widget_info_alter(array &$info) {
   foreach (references_dialog_widgets() as $widget_name => $widget_info) {
     if (isset($info[$widget_name]['settings'])) {
-      foreach (array_keys($widget_info['operations']) as $operation) {
-        $info[$widget_name]['settings']['references_dialog_' . $operation] = 0;
+      foreach ($widget_info['operations'] as $operation => $operation_settings) {
+        $info[$widget_name]['settings']['references_dialog_' . $operation] = array(
+          'enabled' => FALSE,
+        );
+        // Add any default settings provided by the operation.
+        if (!empty($operation_settings['settings'])) {
+          $info[$widget_name]['settings']['references_dialog_' . $operation] + $operation_settings['settings'];
+        }
         // Add search view setting if we have search.
         if ($operation == 'search') {
           $info[$widget_name]['settings']['references_dialog_search_view'] = '';
@@ -261,15 +267,25 @@ function references_dialog_settings_form($field, $instance) {
   $dialog_widget = references_dialog_widget_load($widget['type']);
   // Add our own additions.
   foreach ($dialog_widget['operations'] as $operation => $dialog_settings) {
-    $form['references_dialog_' . $operation] = array(
+    $form['references_dialog_' . $operation] = array('#tree' => TRUE);
+    $form['references_dialog_' . $operation]['enabled'] = array(
       '#type' => 'checkbox',
       '#title' => check_plain($dialog_settings['title']),
-      '#default_value' => isset($settings['references_dialog_' . $operation]) ? $settings['references_dialog_' . $operation] : FALSE,
+      '#default_value' => _references_dialog_operation_enabled($operation, $settings),
     );
+    if (!empty($dialog_settings['settings_form']) && function_exists($dialog_settings['settings_form'])) {
+      $form['references_dialog_' . $operation] = $dialog_settings['settings_form']($form['references_dialog_' . $operation], $settings['references_dialog_' . $operation], $dialog_widget, $field, $instance);
+    }
   }
   return $form;
 }
 
+function _references_dialog_operation_enabled($operation, $settings) {
+  return isset($settings['references_dialog_' . $operation]) &&
+      (is_array($settings['references_dialog_' . $operation]) && $settings['references_dialog_' . $operation]['enabled'] ||
+        $settings['references_dialog_' . $operation]);
+}
+
 /**
  * Menu access checker for references_dialog
  */
@@ -302,8 +318,8 @@ function references_dialog_process_widget(&$element) {
   $link_options = array('attributes' => array('class' => array('references-dialog-activate')));
   $dialog_links = array();
   foreach ($dialog_widget['operations'] as $operation => $settings) {
-    if (isset($widget_settings['references_dialog_' . $operation]) && $widget_settings['references_dialog_' . $operation]) {
-      $links = $settings['function']($element, $widget_settings, $field, $instance);
+    if (_references_dialog_operation_enabled($operation, $widget_settings)) {
+      $links = $settings['function']($element, $widget_settings, $field, $instance, $widget_settings['references_dialog_' . $operation]);
       foreach ($links as $link) {
         $link['attributes']['class'][] = $operation . '-dialog';
         $dialog_links[] = references_dialog_link($link);
