diff --git a/addons/stock_account/models/stock.py b/addons/stock_account/models/stock.py
index 284fde84d75dc45794e3ad20000a5ae617f37986..c29215f2b79e5060e216e4df03870fead07c7899 100644
--- a/addons/stock_account/models/stock.py
+++ b/addons/stock_account/models/stock.py
@@ -123,7 +123,7 @@ class StockMoveLine(models.Model):
                 move_id.write(move_vals)
 
                 if move_id.product_id.valuation == 'real_time':
-                    move_id.with_context(force_valuation_amount=correction_value)._account_entry_move()
+                    move_id.with_context(force_valuation_amount=correction_value, forced_quantity=qty_difference)._account_entry_move()
                 if qty_difference > 0:
                     move_id.product_price_update_before_done(forced_qty=qty_difference)
         return super(StockMoveLine, self).write(vals)
@@ -453,9 +453,9 @@ class StockMove(models.Model):
                     # The correction should behave as a return too. As `_account_entry_move`
                     # will post the natural values for an IN move (credit IN account, debit
                     # OUT one), we inverse the sign to create the correct entries.
-                    move.with_context(force_valuation_amount=-corrected_value)._account_entry_move()
+                    move.with_context(force_valuation_amount=-corrected_value, forced_quantity=0)._account_entry_move()
                 else:
-                    move.with_context(force_valuation_amount=corrected_value)._account_entry_move()
+                    move.with_context(force_valuation_amount=corrected_value, forced_quantity=0)._account_entry_move()
 
     @api.model
     def _run_fifo_vacuum(self):
@@ -514,6 +514,11 @@ class StockMove(models.Model):
         else:
             valuation_amount = cost
 
+        if self._context.get('forced_ref'):
+            ref = self._context['forced_ref']
+        else:
+            ref = self.picking_id.name
+
         # the standard_price of the product may be in another decimal precision, or not compatible with the coinage of
         # the company currency... so we need to use round() before creating the accounting entries.
         debit_value = self.company_id.currency_id.round(valuation_amount)
@@ -540,7 +545,7 @@ class StockMove(models.Model):
             'product_id': self.product_id.id,
             'quantity': qty,
             'product_uom_id': self.product_id.uom_id.id,
-            'ref': self.picking_id.name,
+            'ref': ref,
             'partner_id': partner_id,
             'debit': debit_value if debit_value > 0 else 0,
             'credit': -debit_value if debit_value < 0 else 0,
@@ -551,7 +556,7 @@ class StockMove(models.Model):
             'product_id': self.product_id.id,
             'quantity': qty,
             'product_uom_id': self.product_id.uom_id.id,
-            'ref': self.picking_id.name,
+            'ref': ref,
             'partner_id': partner_id,
             'credit': credit_value if credit_value > 0 else 0,
             'debit': -credit_value if credit_value < 0 else 0,
@@ -571,7 +576,7 @@ class StockMove(models.Model):
                 'product_id': self.product_id.id,
                 'quantity': qty,
                 'product_uom_id': self.product_id.uom_id.id,
-                'ref': self.picking_id.name,
+                'ref': ref,
                 'partner_id': partner_id,
                 'credit': diff_amount > 0 and diff_amount or 0,
                 'debit': diff_amount < 0 and -diff_amount or 0,
@@ -583,14 +588,25 @@ class StockMove(models.Model):
     def _create_account_move_line(self, credit_account_id, debit_account_id, journal_id):
         self.ensure_one()
         AccountMove = self.env['account.move']
-        move_lines = self._prepare_account_move_line(self.product_qty, abs(self.value), credit_account_id, debit_account_id)
+        quantity = self.env.context.get('forced_quantity', self.product_qty if self._is_in() else -1 * self.product_qty)
+
+        # Make an informative `ref` on the created account move to differentiate between classic
+        # movements, vacuum and edition of past moves.
+        ref = self.picking_id.name
+        if self.env.context.get('force_valuation_amount'):
+            if self.env.context.get('forced_quantity') == 0:
+                ref = 'Revaluation of %s (negative inventory)' % ref
+            elif self.env.context.get('forced_quantity') is not None:
+                ref = 'Correction of %s (modification of past move)' % ref
+
+        move_lines = self.with_context(forced_ref=ref)._prepare_account_move_line(quantity, abs(self.value), credit_account_id, debit_account_id)
         if move_lines:
             date = self._context.get('force_period_date', fields.Date.context_today(self))
             new_account_move = AccountMove.create({
                 'journal_id': journal_id,
                 'line_ids': move_lines,
                 'date': date,
-                'ref': self.picking_id.name,
+                'ref': ref,
                 'stock_move_id': self.id,
             })
             new_account_move.post()
diff --git a/addons/stock_account/tests/test_stockvaluation.py b/addons/stock_account/tests/test_stockvaluation.py
index 5d20a17f2bf2949f7c86f7dc6aa3fb98b116239d..417acb745149167b3c3777f5378916ddc4c169d0 100644
--- a/addons/stock_account/tests/test_stockvaluation.py
+++ b/addons/stock_account/tests/test_stockvaluation.py
@@ -115,6 +115,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 1)
         self.assertEqual(move1_valuation_aml.debit, 100)
         self.assertEqual(move1_valuation_aml.credit, 0)
+        self.assertEqual(move1_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move1_valuation_aml.quantity, 10)
+        self.assertEqual(move1_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         self.assertEqual(len(output_aml), 0)
@@ -159,6 +162,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 2)
         self.assertEqual(move2_valuation_aml.debit, 80)
         self.assertEqual(move2_valuation_aml.credit, 0)
+        self.assertEqual(move2_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move2_valuation_aml.quantity, 10)
+        self.assertEqual(move2_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         self.assertEqual(len(output_aml), 0)
@@ -207,6 +213,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 3)
         self.assertEqual(move3_valuation_aml.debit, 0)
         self.assertEqual(move3_valuation_aml.credit, 30)
+        self.assertEqual(move3_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move3_valuation_aml.quantity, -3)
+        self.assertEqual(move3_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         move3_output_aml = output_aml[-1]
@@ -258,6 +267,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 4)
         self.assertEqual(move1_correction_valuation_aml.debit, 20)
         self.assertEqual(move1_correction_valuation_aml.credit, 0)
+        self.assertEqual(move1_correction_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move1_correction_valuation_aml.quantity, 2)
+        self.assertEqual(move1_correction_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         self.assertEqual(len(output_aml), 1)
@@ -311,6 +323,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 5)
         self.assertEqual(move4_valuation_aml.debit, 0)
         self.assertEqual(move4_valuation_aml.credit, 90)
+        self.assertEqual(move4_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move4_valuation_aml.quantity, -9)
+        self.assertEqual(move4_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         move4_output_aml = output_aml[-1]
@@ -373,6 +388,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 6)
         self.assertEqual(move5_valuation_aml.debit, 0)
         self.assertEqual(move5_valuation_aml.credit, 160)
+        self.assertEqual(move5_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move5_valuation_aml.quantity, -20)
+        self.assertEqual(move5_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         move5_output_aml = output_aml[-1]
@@ -445,6 +463,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 7)
         self.assertEqual(move6_valuation_aml.debit, 120)
         self.assertEqual(move6_valuation_aml.credit, 0)
+        self.assertEqual(move6_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move6_valuation_aml.quantity, 10)
+        self.assertEqual(move6_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         self.assertEqual(len(output_aml), 3)
@@ -495,6 +516,9 @@ class TestStockValuation(TransactionCase):
         vacuum_valuation_aml = valuation_aml[-1]
         self.assertEqual(len(valuation_aml), 8)
         self.assertEqual(vacuum_valuation_aml.balance, -40)
+        self.assertEqual(vacuum_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(vacuum_valuation_aml.quantity, 0)
+        self.assertEqual(vacuum_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         output_aml = self._get_stock_output_move_lines()
         vacuum_output_aml = output_aml[-1]
@@ -570,6 +594,9 @@ class TestStockValuation(TransactionCase):
         move6_correction_valuation_aml = valuation_aml[-1]
         self.assertEqual(move6_correction_valuation_aml.debit, 0)
         self.assertEqual(move6_correction_valuation_aml.credit, 24)
+        self.assertEqual(move6_correction_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move6_correction_valuation_aml.quantity, -2)
+        self.assertEqual(move6_correction_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         # link between stock move and account move
         self.assertEqual(len(move6.account_move_ids), 2)
@@ -611,6 +638,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 10)
         self.assertEqual(move7_valuation_aml.debit, 60)
         self.assertEqual(move7_valuation_aml.credit, 0)
+        self.assertEqual(move7_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move7_valuation_aml.quantity, 4)
+        self.assertEqual(move7_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         # link between stock move and account move
         self.assertEqual(len(move7.account_move_ids), 1)
@@ -633,6 +663,9 @@ class TestStockValuation(TransactionCase):
         self.assertEqual(len(valuation_aml), 11)
         self.assertEqual(move6_correction2_valuation_aml.debit, 0)
         self.assertEqual(move6_correction2_valuation_aml.credit, 6)
+        self.assertEqual(move6_correction2_valuation_aml.product_id.id, self.product1.id)
+        self.assertEqual(move6_correction2_valuation_aml.quantity, 0)
+        self.assertEqual(move6_correction_valuation_aml.product_uom_id.id, self.uom_unit.id)
 
         # stock_account values
         self.assertEqual(move1.product_uom_qty, 12)
diff --git a/addons/stock_landed_costs/models/stock_landed_cost.py b/addons/stock_landed_costs/models/stock_landed_cost.py
index a4a73ef79c8e0175182bb5ac9f20e0b0e5b4ffcc..7522b46b6f88ad70226c2146212798722718ae25 100644
--- a/addons/stock_landed_costs/models/stock_landed_cost.py
+++ b/addons/stock_landed_costs/models/stock_landed_cost.py
@@ -103,6 +103,7 @@ class LandedCost(models.Model):
                 new_landed_cost_value = line.move_id.landed_cost_value + line.additional_landed_cost
                 line.move_id.write({
                     'landed_cost_value': new_landed_cost_value,
+                    'value': line.move_id.value + cost_to_add,
                     'remaining_value': line.move_id.remaining_value + cost_to_add,
                     'price_unit': (line.move_id.value + new_landed_cost_value) / line.move_id.product_qty,
                 })
@@ -321,7 +322,7 @@ class AdjustmentLines(models.Model):
             'name': self.name,
             'move_id': move.id,
             'product_id': self.product_id.id,
-            'quantity': self.quantity,
+            'quantity': 0,
         }
         debit_line = dict(base_line, account_id=debit_account_id)
         credit_line = dict(base_line, account_id=credit_account_id)
@@ -340,11 +341,11 @@ class AdjustmentLines(models.Model):
         if qty_out > 0:
             debit_line = dict(base_line,
                               name=(self.name + ": " + str(qty_out) + _(' already out')),
-                              quantity=qty_out,
+                              quantity=0,
                               account_id=already_out_account_id)
             credit_line = dict(base_line,
                                name=(self.name + ": " + str(qty_out) + _(' already out')),
-                               quantity=qty_out,
+                               quantity=0,
                                account_id=debit_account_id)
             diff = diff * qty_out / self.quantity
             if diff > 0:
@@ -361,11 +362,11 @@ class AdjustmentLines(models.Model):
             if self.env.user.company_id.anglo_saxon_accounting:
                 debit_line = dict(base_line,
                                   name=(self.name + ": " + str(qty_out) + _(' already out')),
-                                  quantity=qty_out,
+                                  quantity=0,
                                   account_id=credit_account_id)
                 credit_line = dict(base_line,
                                    name=(self.name + ": " + str(qty_out) + _(' already out')),
-                                   quantity=qty_out,
+                                   quantity=0,
                                    account_id=already_out_account_id)
 
                 if diff > 0: