Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 14254)
+++ wp-admin/includes/post.php	(working copy)
@@ -309,20 +309,24 @@
 		}
 
 		$tax_names = get_object_taxonomies( get_post($post_ID) );
-
 		if ( isset($new_cats) && in_array( 'category', $tax_names ) ) {
 			$cats = (array) wp_get_post_categories($post_ID);
 			$post_data['post_category'] = array_unique( array_merge($cats, $new_cats) );
 		}
 
 		foreach ( $tax_names as $tax_name ) {
-			if( isset( $tax_input[$tax_name])  ) {
-				if ( is_taxonomy_hierarchical( $tax_name ) )
-					$terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') );
-				else
-					$terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') );
-				$post_data['tax_input'][$tax_name] = array_merge( $terms, $tax_input[$tax_name] );
-			}
+			$taxonomy_obj = get_taxonomy($tax_name);
+			if(  isset( $tax_input[$tax_name]) && current_user_can( $taxonomy_obj->assign_cap ) )
+				$new_terms = $tax_input[$tax_name];
+			else 
+				$new_terms = array();
+				
+			if ( $taxonomy_obj->hierarchical )
+				$current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'ids') );
+			else
+				$current_terms = (array) wp_get_object_terms( $post_ID, $tax_name, array('fields' => 'names') );
+
+			$post_data['tax_input'][$tax_name] = array_merge( $current_terms, $new_terms );
 		}
 
 		$post_data['ID'] = $post_ID;
@@ -1604,4 +1608,4 @@
 /* ]]> */
 </script>
 <?php
-}
+}
\ No newline at end of file
