diff --git a/content.module b/content.module
index f6161ec..d0db479 100644
--- a/content.module
+++ b/content.module
@@ -441,6 +441,15 @@ function content_form_alter(&$form, $form_state, $form_id) {
 }
 
 /**
+ * Proxy function to call content_add_more_submit(), because it might not be
+ * included yet when the form is processed and invokes the callback.
+ */
+function content_add_more_submit_proxy($form, &$form_state) {
+  module_load_include('inc', 'content', 'includes/content.node_form');
+  content_add_more_submit($form, $form_state);
+}
+
+/**
  * Theme an individual form element.
  *
  * Combine multiple values into a table with drag-n-drop reordering.
diff --git a/includes/content.node_form.inc b/includes/content.node_form.inc
index 5c4a236..6515fde 100644
--- a/includes/content.node_form.inc
+++ b/includes/content.node_form.inc
@@ -138,7 +138,7 @@ function content_multiple_value_form(&$form, &$form_state, $field, $items) {
       break;
     case 1:
       if (isset($form_state['item_count'][$field_name])) {
-        $max = $form_state['item_count'][$field_name];
+        $max = $form_state['item_count'][$field_name] - 1;
       }
       else {
         $max = empty($items) ? 0 : (count($items) - 1);
@@ -200,7 +200,10 @@ function content_multiple_value_form(&$form, &$form_state, $field, $items) {
       '#type' => 'submit',
       '#value' => t('Add another item'),
       '#weight' => $field['widget']['weight'] + $max + 1,
-      '#submit' => array('content_add_more_submit'), // If no JavaScript action.
+      // Submit callback for disabled JavaScript. drupal_get_form() might get
+      // the form from the cache, so we can't rely on content_form_alter()
+      // including this file. Therefore, call a proxy function to do this.
+      '#submit' => array('content_add_more_submit_proxy'),
       '#ahah' => array(
         'path' => 'content/js_add_more/'. $content_type['url_str'] .'/'. $field_name,
         'wrapper' => $field_name_css .'-items',
@@ -236,7 +239,7 @@ function content_add_more_submit($form, &$form_state) {
   foreach ($form['#field_info'] as $field_name => $field) {
     // Make the changes we want to the form state.
     if ($form_state['values'][$field_name][$field_name .'_add_more']) {
-      $form_state['item_count'][$field_name] = count($form_state['node'][$field_name]) + 1;
+      $form_state['item_count'][$field_name] = count($form_state['values'][$field_name]);
     }
   }
 }
@@ -258,7 +261,11 @@ function content_add_more_js($type_name_url, $field_name) {
   $_POST[$field_name] = _content_sort_items($field, $_POST[$field_name]);
   $delta = max(array_keys($_POST[$field_name])) + 1;
   // Retrieve the cached form.
-  $form_state = array('submitted' => FALSE, 'values' => $_POST);
+  $form_state = array(
+    'submitted' => FALSE,
+    'values' => $_POST,
+    'item_count' => array($field_name => count($_POST[$field_name]) + 1),
+  );
   $form_build_id = $_POST['form_build_id'];
   $form = form_get_cache($form_build_id, $form_state);
   if (!$form) {
