diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py
index 191d86e6229846725c6a0b2f762d3f1fbd26da54..910a8e9000858bc6d2a38041af4d71c922dbd101 100644
--- a/addons/delivery/models/delivery_carrier.py
+++ b/addons/delivery/models/delivery_carrier.py
@@ -127,9 +127,11 @@ class DeliveryCarrier(models.Model):
             res = getattr(self, '%s_rate_shipment' % self.delivery_type)(order)
             # apply margin on computed price
             res['price'] = float(res['price']) * (1.0 + (float(self.margin) / 100.0))
+            # save the real price in case a free_over rule overide it to 0
+            res['carrier_price'] = res['price']
             # free when order is large enough
             if res['success'] and self.free_over and order._compute_amount_total_without_delivery() >= self.amount:
-                res['warning_message'] = _('Info:\nThe shipping is free because the order amount exceeds %.2f.\n(The actual shipping cost is: %.2f)') % (self.amount, res['price'])
+                res['warning_message'] = _('The shipping is free since the order amount exceeds %.2f.') % (self.amount)
                 res['price'] = 0.0
             return res
 
diff --git a/addons/delivery/models/sale_order.py b/addons/delivery/models/sale_order.py
index c772f967bdde71c06d6279ebcfc9e5716b1158bf..8eb988d8447b43ee48a89314449820761c7ab4da 100644
--- a/addons/delivery/models/sale_order.py
+++ b/addons/delivery/models/sale_order.py
@@ -80,11 +80,13 @@ class SaleOrder(models.Model):
             self.delivery_message = res.get('warning_message', False)
         else:
             raise UserError(res['error_message'])
+        delivery_line.name = self.carrier_id.with_context(lang=self.partner_id.lang).name
         if self.carrier_id.invoice_policy == 'real':
-            delivery_line.name = self.carrier_id.with_context(lang=self.partner_id.lang).name
             delivery_line.name += _(' (Estimated Cost: %s )') % self._format_currency_amount(res['price'])
         else:
             delivery_line.price_unit = res['price']
+        if self.carrier_id.free_over and self._compute_amount_total_without_delivery() >= res['price']:
+            delivery_line.name += '\nFree Shipping'
         self.recompute_delivery_price = False
 
     def _create_delivery_line(self, carrier, price_unit, price_unit_in_description=False):
@@ -114,7 +116,8 @@ class SaleOrder(models.Model):
             values['name'] += _(' (Estimated Cost: %s )') % self._format_currency_amount(price_unit)
         else:
             values['price_unit'] = price_unit
-
+        if carrier.free_over and self._compute_amount_total_without_delivery() >= price_unit:
+            values['name'] += '\n' + 'Free Shipping'
         if self.order_line:
             values['sequence'] = self.order_line[-1].sequence + 1
         sol = SaleOrderLine.sudo().create(values)
diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml
index f52a571b52f732cd332c99b2455fe48e5ada26ac..28702c4eb54cd75d5e061629bea238b0f466456f 100644
--- a/addons/delivery/views/delivery_view.xml
+++ b/addons/delivery/views/delivery_view.xml
@@ -295,13 +295,6 @@
             <field name="inherit_id" ref="sale.view_order_form"/>
             <field name="arch" type="xml">
                 <data>
-                  <xpath expr="//field[@name='payment_term_id']" position="after">
-                      <div name='carrier_selection'>
-                          <div class="alert alert-info" role="status" attrs="{'invisible': [('delivery_message','=',False)]}">
-                            <field name='delivery_message' force_save="1"/>
-                          </div>
-                      </div>
-                  </xpath>
                     <xpath expr="//field[@name='partner_id']" position='after'>
                         <field name="delivery_set" invisible="1"/>
                         <field name="recompute_delivery_price" invisible="1"/>
diff --git a/addons/delivery/wizard/choose_delivery_carrier.py b/addons/delivery/wizard/choose_delivery_carrier.py
index e2c6372a29dff3b21d2b6b0247254f7bb3af0de1..454190a101e786bfa574edcbf7470dda1ec36e4f 100644
--- a/addons/delivery/wizard/choose_delivery_carrier.py
+++ b/addons/delivery/wizard/choose_delivery_carrier.py
@@ -18,23 +18,27 @@ class ChooseDeliveryCarrier(models.TransientModel):
         required=True,
     )
     delivery_type = fields.Selection(related='carrier_id.delivery_type')
-    delivery_price = fields.Float(string='Cost', readonly=True)
+    delivery_price = fields.Float()
+    display_price = fields.Float(string='Cost', readonly=True)
     currency_id = fields.Many2one('res.currency', related='order_id.currency_id')
     available_carrier_ids = fields.Many2many("delivery.carrier", compute='_compute_available_carrier', string="Available Carriers")
     invoicing_message = fields.Text(compute='_compute_invoicing_message')
+    delivery_message = fields.Text(readonly=True)
 
     @api.onchange('carrier_id')
     def _onchange_carrier_id(self):
+        self.delivery_message = False
         if self.delivery_type in ('fixed', 'base_on_rule'):
             vals = self.carrier_id.rate_shipment(self.order_id)
             if vals.get('success'):
-                if vals['warning_message']:
-                    self.order_id.delivery_message = vals['warning_message']
-                else:
-                    self.delivery_price = vals['price']
+                if vals.get('warning_message'):
+                    self.delivery_message = vals['warning_message']
+                self.delivery_price = vals['price']
+                self.display_price = vals['carrier_price']
             else:
                 return {'error': vals['error_message']}
         else:
+            self.display_price = 0
             self.delivery_price = 0
 
     @api.depends('carrier_id')
@@ -55,8 +59,9 @@ class ChooseDeliveryCarrier(models.TransientModel):
         vals = self.carrier_id.rate_shipment(self.order_id)
         if vals.get('success'):
             if vals['warning_message']:
-                self.order_id.delivery_message = vals['warning_message']
+                self.delivery_message = vals['warning_message']
             self.delivery_price = vals['price']
+            self.display_price = vals['carrier_price']
         else:
             raise UserError(vals['error_message'])
         return {
@@ -70,4 +75,5 @@ class ChooseDeliveryCarrier(models.TransientModel):
 
     def button_confirm(self):
         self.order_id.carrier_id = self.carrier_id
+        self.order_id.delivery_message = self.delivery_message
         self.order_id.set_delivery_line(self.carrier_id, self.delivery_price)
diff --git a/addons/delivery/wizard/choose_delivery_carrier_views.xml b/addons/delivery/wizard/choose_delivery_carrier_views.xml
index 3b25fc50d28e4c2c157fadf9cb59b943c9a46784..e34849eccbe43872c551af7990fc66c2ba1c4db2 100644
--- a/addons/delivery/wizard/choose_delivery_carrier_views.xml
+++ b/addons/delivery/wizard/choose_delivery_carrier_views.xml
@@ -11,7 +11,8 @@
                     <field name="delivery_type" invisible="1"/>
                     <field name="currency_id" invisible="1"/>
                     <field name="order_id" invisible="1"/>
-                    <field name='delivery_price' string="Cost" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('carrier_id','=', False)]}" force_save="1"/>
+                    <field name='delivery_price' invisible="1"/>
+                    <field name='display_price' string="Cost" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('carrier_id','=', False)]}"/>
                 </group>
                 <button name="update_price" type="object" attrs="{'invisible': [('delivery_type','in', ('fixed', 'base_on_rule'))]}">
                     <i class="fa fa-arrow-right"/>
@@ -20,6 +21,9 @@
                 <div role="alert" class="alert alert-warning" attrs="{'invisible': [('invoicing_message', '=', '')]}">
                     <field name="invoicing_message" nolabel="1"/>
                 </div>
+                <div role="alert" class="alert alert-info" attrs="{'invisible': [('delivery_message', '=', False)]}">
+                    <field name="delivery_message" nolabel="1"/>
+                </div>
                 <footer>
                     <button name="button_confirm" type="object" string="Add" class="btn-primary"/>
                     <button string="Discard" special="cancel" class="btn-secondary"/>