diff --git a/relation_add.module b/relation_add.module
index a33c411..01e0a80 100644
--- a/relation_add.module
+++ b/relation_add.module
@@ -764,7 +764,7 @@ function relation_add_field_widget_form(&$form, &$form_state, $field, $instance,
             }
           }
 
-          $entity_label = $label  . $bundle . ' [' . $endpoint['entity_type'] . ':' . $endpoint['entity_id'] . ']';
+          $entity_label = $label . $bundle . ' [' . $endpoint['entity_type'] . ':' . $endpoint['entity_id'] . ']';
 
           if ($endpoint['entity_id'] == $item['my_entity_id'] && $endpoint['entity_type'] == $instance['entity_type']) {
             $default_targets[1] = $entity_label;
@@ -803,7 +803,32 @@ function relation_add_field_widget_form(&$form, &$form_state, $field, $instance,
       $target_bundles = implode('-', $instance['settings']['relation_target_bundles']);
     }
 
-    for ($i = 2; $i <= $relation_type->max_arity; $i++) {
+    if ($relation_type->max_arity == 0) {
+      if (isset($form_state['input'][$instance['field_name']][$element['#language']][$delta]['relation_options']['targets'])) {
+        $max_arity = count($form_state['input'][$instance['field_name']][$element['#language']][$delta]['relation_options']['targets']) + 1;
+        // Click "Add" button.
+        if ('targets_add_' . $instance['field_name'] . '_' . $delta == $form_state['clicked_button']['#name']) {
+          $max_arity += 1;
+        }
+      }
+      elseif (isset($default_targets)) {
+        $max_arity = count($default_targets) + 1;
+      }
+      else {
+        $max_arity = 2;
+      }
+    }
+    else {
+      $max_arity = $relation_type->max_arity;
+    }
+
+    $wrapper_targets = str_replace('_', '-', $instance['field_name']) . '-relation-add-targets-' . $delta;
+    $form_element['relation_options']['targets'] = array(
+      '#prefix' => '<div id="' . $wrapper_targets . '">',
+      '#suffix' => '</div>',
+    );
+
+    for ($i = 2; $i <= $max_arity; $i++) {
       $endpoint_title .= $instance['widget']['settings']['relation_endpoint_label_delta'] ? ' ' . ($i - 1) : '';
       $form_element['relation_options']['targets']['target_' . $i] = array(
         '#type' => 'textfield',
@@ -814,6 +839,23 @@ function relation_add_field_widget_form(&$form, &$form_state, $field, $instance,
       );
     }
 
+    if ($relation_type->max_arity == 0) {
+      $form_element['relation_options']['targets_add'] = array(
+        '#type' => 'button',
+        '#value' => t('Add'),
+        '#name' => 'targets_add_' . $instance['field_name'] . '_' . $delta,
+        '#ajax' => array(
+          'event' => 'click',
+          'callback' => 'relation_add_widget_ajax',
+          'wrapper'  => $wrapper_targets,
+          'method'   => 'replace',
+          'effect'   => 'fade',
+        ),
+        '#submit' => array('relation_add_widget_ajax'),
+        '#limit_validation_errors' => array(),
+      );
+    }
+
     if (isset($item['my_entity_id'])) {
       $form_element['relation_options']['rid'] = array(
         '#type' => 'value',
@@ -826,6 +868,11 @@ function relation_add_field_widget_form(&$form, &$form_state, $field, $instance,
       '#title' => t('Delete'),
     );
 
+    $form_element['relation_options']['targets']['#weight'] = $form_element['relation_options']['endpoints']['#weight'];
+    if (isset($form_element['relation_options']['targets_add'])) {
+      $form_element['relation_options']['targets_add']['#weight'] = $form_element['relation_options']['endpoints']['#weight'] + 1;
+    }
+
     unset($form_element['relation_options']['endpoints']);
   }
 
@@ -841,6 +888,7 @@ function relation_add_field_widget_form(&$form, &$form_state, $field, $instance,
   if ($add_required_validation) {
     $form_element['#element_validate'] = array('relation_add_field_required_validate');
   }
+
   return $element + $form_element;
 }
 
@@ -852,8 +900,22 @@ function relation_add_widget_ajax($form, $form_state) {
   $field_name = array_shift($path);
   $language = array_shift($path);
   $item = array_shift($path);
+  $type = array_shift($path);
 
-  return $form[$field_name][$language][$item]['relation_options'];
+  switch ($type) {
+    case 'relation_type':
+      return $form[$field_name][$language][$item]['relation_options'];
+      break;
+
+    case 'relation_options':
+      if (!empty($path)) {
+        $button = array_shift($path);
+        if ('targets_add' == $button) {
+          return $form[$field_name][$language][$item]['relation_options']['targets'];
+        }
+      }
+      break;
+  }
 }
 
 /**
