Index: modules/field/field.attach.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.attach.inc,v
retrieving revision 1.59
diff -u -p -r1.59 field.attach.inc
--- modules/field/field.attach.inc	8 Nov 2009 19:11:56 -0000	1.59
+++ modules/field/field.attach.inc	24 Nov 2009 00:54:31 -0000
@@ -493,6 +493,9 @@ function field_attach_form($obj_type, $o
   $form['#pre_render'][] = '_field_extra_weights_pre_render';
   $form['#extra_fields'] = field_extra_fields($bundle);
 
+  // Save the original object to allow later re-use.
+  $form_state['storage']['object'] = $object;
+  
   // Let other modules make changes to the form.
   // Avoid module_invoke_all() to let parameters be taken by reference.
   foreach (module_implements('field_attach_form') as $module) {
@@ -763,8 +766,12 @@ function field_attach_form_validate($obj
  *   The form structure to fill in.
  * @param $form_state
  *   An associative array containing the current state of the form.
+ * @param $revision
+ *   If a new object revision is being submitted this should be set to TRUE.
  */
-function field_attach_submit($obj_type, $object, $form, &$form_state) {
+function field_attach_submit($obj_type, $object, $form, &$form_state, $revision = FALSE) {
+  $form_state['storage']['revision'] = $revision;
+
   // Extract field values from submitted values.
   _field_invoke_default('extract_form_values', $obj_type, $object, $form, $form_state);
 
Index: modules/field/field.default.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.default.inc,v
retrieving revision 1.23
diff -u -p -r1.23 field.default.inc
--- modules/field/field.default.inc	9 Nov 2009 18:23:41 -0000	1.23
+++ modules/field/field.default.inc	24 Nov 2009 01:14:52 -0000
@@ -19,6 +19,15 @@ function field_default_extract_form_valu
     // Remove the 'value' of the 'add more' button.
     unset($items['add_more']);
   }
+  // If a new revision is being submitted, we need to make available in $object
+  // the field translations not being edited, if any. This way for each field
+  // translation a new revision can be created.
+  elseif (isset($form_state['storage']['revision']) && $form_state['storage']['revision']) {
+    $old_object = $form_state['storage']['object'];
+    if (isset($old_object->{$field_name}[$langcode])) {
+      $items = $old_object->{$field_name}[$langcode];
+    }
+  }
 }
 
 function field_default_submit($obj_type, $object, $field, $instance, $langcode, &$items, $form, &$form_state) {
Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.100
diff -u -p -r1.100 node.pages.inc
--- modules/node/node.pages.inc	8 Nov 2009 10:02:41 -0000	1.100
+++ modules/node/node.pages.inc	24 Nov 2009 01:37:46 -0000
@@ -449,8 +449,9 @@ function node_form_submit_build_node($fo
   unset($form_state['submit_handlers']);
   form_execute_handlers('submit', $form, $form_state);
   $node = node_submit((object)$form_state['values']);
+  $revision = isset($node->revision) ? $node->revision : FALSE;
 
-  field_attach_submit('node', $node, $form, $form_state);
+  field_attach_submit('node', $node, $form, $form_state, $revision);
 
   $form_state['node'] = (array)$node;
   $form_state['rebuild'] = TRUE;
