diff --git a/l10n_it_delivery_note/README.rst b/l10n_it_delivery_note/README.rst
index 1c9ea3399f35..e8684f1f3fbe 100644
--- a/l10n_it_delivery_note/README.rst
+++ b/l10n_it_delivery_note/README.rst
@@ -7,7 +7,7 @@ ITA - Documento di trasporto
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-   !! source digest: sha256:4db8a7e4bd8b969bc8d01e11c77d7734d924dca8bb3d82f03dd2c9a4f16a3c74
+   !! source digest: sha256:568c76e12d39faef3f6e808c5c0e888b044073a056c21d675a6eb4eaf972fa8b
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -75,6 +75,10 @@ To configure this module, go to:
 
    Checking 'Display Ref. Order in Delivery Note Report' or 'Display Ref. Customer in Delivery Note Report" enables in report fields relating DN line to SO (if applicable).
 
+   Checking 'Display Carrier in Delivery Note Report' enables in report field 'Carrier'.
+
+   Checking 'Display Delivery Method in Delivery Note Report' enables in report field 'Delivery Method'.
+
 2. *Inventory → Configuration → Warehouse Management → Delivery Note Types*
 
    In delivery note type you can specify if the product price have to be printed in the delivery note report/slip.
diff --git a/l10n_it_delivery_note/__manifest__.py b/l10n_it_delivery_note/__manifest__.py
index ac9d76a837b2..cf07a612d1a0 100644
--- a/l10n_it_delivery_note/__manifest__.py
+++ b/l10n_it_delivery_note/__manifest__.py
@@ -13,12 +13,12 @@
     "author": "Marco Calcagni, Gianmarco Conte, Link IT Europe Srl, "
     "Odoo Community Association (OCA)",
     "website": "https://github.com/OCA/l10n-italy",
-    "version": "14.0.2.5.6",
+    "version": "14.0.3.0.0",
     "category": "Localization/Italy",
     "license": "AGPL-3",
     "maintainers": ["MarcoCalcagni", "aleuffre", "renda-dev"],
     "depends": [
-        "delivery",
+        "delivery_carrier_partner",
         "l10n_it_delivery_note_base",
         "mail",
         "sale_stock",
@@ -41,10 +41,15 @@
         "views/stock_picking.xml",
         "views/portal_templates.xml",
         "views/portal_my_delivery_notes.xml",
+        "wizard/delivery_note_confirm.xml",
         "wizard/delivery_note_create.xml",
         "wizard/delivery_note_invoice.xml",
         "wizard/delivery_note_select.xml",
         "wizard/delivery_note_template.xml",
         "wizard/sale_advance_payment_inv.xml",
     ],
+    "demo": [
+        "demo/res_partner_demo.xml",
+        "demo/delivery_carrier_demo.xml",
+    ],
 }
diff --git a/l10n_it_delivery_note/cli/migrate_l10n_it_ddt.py b/l10n_it_delivery_note/cli/migrate_l10n_it_ddt.py
index 4162a9dec8c8..afb84b38eeb2 100644
--- a/l10n_it_delivery_note/cli/migrate_l10n_it_ddt.py
+++ b/l10n_it_delivery_note/cli/migrate_l10n_it_ddt.py
@@ -288,7 +288,8 @@ def vals_getter(record):
                 "type_id": self._document_types[record.ddt_type_id].id,
                 "date": record.date,
                 "carrier_id": record.carrier_id.id,
-                "delivery_method_id": record.partner_id.property_delivery_carrier_id.id,
+                "delivery_method_id": record.picking_ids.mapped("carrier_id")[:1].id
+                or record.partner_id.property_delivery_carrier_id.id,
                 "transport_datetime": record.date_done,
                 "packages": record.parcels,
                 "volume": record.volume,
diff --git a/l10n_it_delivery_note/demo/delivery_carrier_demo.xml b/l10n_it_delivery_note/demo/delivery_carrier_demo.xml
new file mode 100644
index 000000000000..32d16e09a36b
--- /dev/null
+++ b/l10n_it_delivery_note/demo/delivery_carrier_demo.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+    <record id="delivery.delivery_carrier" model="delivery.carrier">
+        <field name="partner_id" ref="l10n_it_delivery_note.partner_carrier_1" />
+    </record>
+
+    <record id="delivery.free_delivery_carrier" model="delivery.carrier">
+        <field name="partner_id" ref="l10n_it_delivery_note.partner_carrier_1" />
+    </record>
+
+    <record id="delivery.normal_delivery_carrier" model="delivery.carrier">
+        <field name="partner_id" ref="l10n_it_delivery_note.partner_carrier_2" />
+    </record>
+</odoo>
diff --git a/l10n_it_delivery_note/demo/res_partner_demo.xml b/l10n_it_delivery_note/demo/res_partner_demo.xml
new file mode 100644
index 000000000000..d65375002234
--- /dev/null
+++ b/l10n_it_delivery_note/demo/res_partner_demo.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+    <record id="partner_carrier_1" model="res.partner">
+        <field name="name">Carrier 1</field>
+    </record>
+
+    <record id="partner_carrier_2" model="res.partner">
+        <field name="name">Carrier 2</field>
+    </record>
+</odoo>
diff --git a/l10n_it_delivery_note/migrations/14.0.3.0.0/post-migrate.py b/l10n_it_delivery_note/migrations/14.0.3.0.0/post-migrate.py
new file mode 100644
index 000000000000..a7890e8513bf
--- /dev/null
+++ b/l10n_it_delivery_note/migrations/14.0.3.0.0/post-migrate.py
@@ -0,0 +1,11 @@
+from openupgradelib import openupgrade
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+    note_ids = env["stock.delivery.note"].search(
+        [("carrier_id", "!=", False), ("delivery_method_id", "!=", False)]
+    )
+
+    for note_id in note_ids:
+        note_id.delivery_method_id.write({"partner_id": note_id.carrier_id.id})
diff --git a/l10n_it_delivery_note/models/res_company.py b/l10n_it_delivery_note/models/res_company.py
index 3418b3064557..729bafa3f378 100644
--- a/l10n_it_delivery_note/models/res_company.py
+++ b/l10n_it_delivery_note/models/res_company.py
@@ -12,3 +12,11 @@ class ResCompany(models.Model):
         "Display Ref. Customer in Delivery Note Report",
         default=False,
     )
+    display_carrier_dn_report = fields.Boolean(
+        "Display Carrier in Delivery Note Report",
+        default=False,
+    )
+    display_delivery_method_dn_report = fields.Boolean(
+        "Display Delivery Method in Delivery Note Report",
+        default=False,
+    )
diff --git a/l10n_it_delivery_note/models/res_config_settings.py b/l10n_it_delivery_note/models/res_config_settings.py
index 959b0c451650..c9090e780f99 100644
--- a/l10n_it_delivery_note/models/res_config_settings.py
+++ b/l10n_it_delivery_note/models/res_config_settings.py
@@ -34,3 +34,13 @@ def _default_virtual_locations_root(self):
         related="company_id.display_ref_customer_dn_report",
         readonly=False,
     )
+    display_carrier_dn_report = fields.Boolean(
+        string="Display Carrier in Delivery Note Report",
+        related="company_id.display_carrier_dn_report",
+        readonly=False,
+    )
+    display_delivery_method_dn_report = fields.Boolean(
+        string="Display Delivery Method in Delivery Note Report",
+        related="company_id.display_delivery_method_dn_report",
+        readonly=False,
+    )
diff --git a/l10n_it_delivery_note/models/res_partner.py b/l10n_it_delivery_note/models/res_partner.py
index 31a36e66eaf4..928760d2b8de 100644
--- a/l10n_it_delivery_note/models/res_partner.py
+++ b/l10n_it_delivery_note/models/res_partner.py
@@ -19,4 +19,3 @@ class ResPartner(models.Model):
     default_transport_method_id = fields.Many2one(
         "stock.picking.transport.method", string="Method of transport"
     )
-    is_carrier = fields.Boolean("Is Carrier")
diff --git a/l10n_it_delivery_note/models/stock_delivery_note.py b/l10n_it_delivery_note/models/stock_delivery_note.py
index d7bd1ca4871c..1659618de3b8 100644
--- a/l10n_it_delivery_note/models/stock_delivery_note.py
+++ b/l10n_it_delivery_note/models/stock_delivery_note.py
@@ -143,7 +143,6 @@ def _domain_weight_uom(self):
         string="Carrier",
         states=DONE_READONLY_STATE,
         tracking=True,
-        domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]",
     )
     delivery_method_id = fields.Many2one(
         "delivery.carrier",
@@ -364,6 +363,10 @@ def _compute_weights(self):
     def _onchange_picking_ids(self):
         self._compute_weights()
 
+    @api.onchange("delivery_method_id")
+    def _onchange_delivery_method_id(self):
+        self.carrier_id = self.delivery_method_id.partner_id
+
     def _inverse_set_pickings(self):
         for note in self:
             if note.pickings_picker:
@@ -532,7 +535,7 @@ def action_draft(self):
         self.write({"state": DOMAIN_DELIVERY_NOTE_STATES[0]})
         self.line_ids.sync_invoice_status()
 
-    def action_confirm(self):
+    def _action_confirm(self):
         for note in self:
             sequence = note.type_id.sequence_id
 
@@ -546,6 +549,64 @@ def action_confirm(self):
                 ).next_by_id()
                 note.sequence_id = sequence
 
+    def action_confirm(self):
+        for note in self:
+            warning_message = False
+            carrier_ids = note.mapped("picking_ids.carrier_id")
+            carrier_partner_ids = carrier_ids.mapped("partner_id")
+            if len(carrier_partner_ids) > 1:
+                warning_message = _(
+                    "This delivery note contains pickings "
+                    "related to different transporters. "
+                    "Are you sure you want to proceed?\n"
+                    "Carrier Partners: %(carrier_partners)s",
+                    carrier_partners=", ".join(carrier_partner_ids.mapped("name")),
+                )
+            elif len(carrier_ids) > 1:
+                warning_message = _(
+                    "This delivery note contains pickings related to different "
+                    "delivery methods from the same transporter. "
+                    "Are you sure you want to proceed?\n"
+                    "Delivery Methods: %(carriers)s",
+                    carriers=", ".join(carrier_ids.mapped("name")),
+                )
+            elif (
+                carrier_partner_ids
+                and note.carrier_id
+                and note.carrier_id != carrier_partner_ids
+            ):
+                warning_message = _(
+                    "The carrier set in Delivery Note is different "
+                    "from the carrier set in picking(s). "
+                    "Are you sure you want to proceed?"
+                )
+            elif (
+                carrier_ids
+                and note.delivery_method_id
+                and carrier_ids != note.delivery_method_id
+            ):
+                warning_message = _(
+                    "The shipping method set in Delivery Note is different "
+                    "from the shipping method set in picking(s). "
+                    "Are you sure you want to proceed?"
+                )
+            if warning_message:
+                return {
+                    "type": "ir.actions.act_window",
+                    "name": _("Warning"),
+                    "res_model": "stock.delivery.note.confirm.wizard",
+                    "view_type": "form",
+                    "target": "new",
+                    "view_mode": "form",
+                    "context": {
+                        "default_delivery_note_id": note.id,
+                        "default_warning_message": warning_message,
+                        **self._context,
+                    },
+                }
+            else:
+                note._action_confirm()
+
     def _check_delivery_notes_before_invoicing(self):
         for delivery_note_id in self:
             if not delivery_note_id.sale_ids:
diff --git a/l10n_it_delivery_note/models/stock_picking.py b/l10n_it_delivery_note/models/stock_picking.py
index 815dfe70e018..ed6c49ed1168 100644
--- a/l10n_it_delivery_note/models/stock_picking.py
+++ b/l10n_it_delivery_note/models/stock_picking.py
@@ -90,6 +90,8 @@ class StockPicking(models.Model):
         string="DN Operation Type", related="picking_type_id.code"
     )
 
+    carrier_partner_id = fields.Many2one("res.partner", related="carrier_id.partner_id")
+
     use_delivery_note = fields.Boolean(compute="_compute_boolean_flags")
     use_advanced_behaviour = fields.Boolean(compute="_compute_boolean_flags")
     delivery_note_exists = fields.Boolean(compute="_compute_boolean_flags")
@@ -143,6 +145,10 @@ def _compute_boolean_flags(self):
                 )
                 picking.can_be_invoiced = bool(picking.delivery_note_id.sale_ids)
 
+    @api.onchange("delivery_method_id")
+    def _onchange_delivery_method_id(self):
+        self.delivery_note_carrier_id = self.delivery_method_id.partner_id
+
     @api.onchange("delivery_note_type_id")
     def _onchange_delivery_note_type(self):
         if self.delivery_note_type_id:
@@ -338,6 +344,7 @@ def _create_delivery_note(self):
             ],
             limit=1,
         )
+        delivery_method_id = self.mapped("carrier_id")[:1]
         return self.env["stock.delivery.note"].create(
             {
                 "company_id": self.company_id.id,
@@ -348,7 +355,8 @@ def _create_delivery_note(self):
                 "partner_shipping_id": partners[1].id,
                 "type_id": type_id.id,
                 "date": self.date_done,
-                "delivery_method_id": self.partner_id.property_delivery_carrier_id.id,
+                "carrier_id": delivery_method_id.partner_id.id,
+                "delivery_method_id": delivery_method_id.id,
                 "transport_condition_id": (
                     self.sale_id.default_transport_condition_id.id
                     or partners[1].default_transport_condition_id.id
diff --git a/l10n_it_delivery_note/readme/CONFIGURE.rst b/l10n_it_delivery_note/readme/CONFIGURE.rst
index 3ce312185b99..10751f5cf3ea 100644
--- a/l10n_it_delivery_note/readme/CONFIGURE.rst
+++ b/l10n_it_delivery_note/readme/CONFIGURE.rst
@@ -6,6 +6,10 @@ To configure this module, go to:
 
    Checking 'Display Ref. Order in Delivery Note Report' or 'Display Ref. Customer in Delivery Note Report" enables in report fields relating DN line to SO (if applicable).
 
+   Checking 'Display Carrier in Delivery Note Report' enables in report field 'Carrier'.
+
+   Checking 'Display Delivery Method in Delivery Note Report' enables in report field 'Delivery Method'.
+
 2. *Inventory → Configuration → Warehouse Management → Delivery Note Types*
 
    In delivery note type you can specify if the product price have to be printed in the delivery note report/slip.
diff --git a/l10n_it_delivery_note/report/report_delivery_note.xml b/l10n_it_delivery_note/report/report_delivery_note.xml
index 87b28517a625..fe7d7b385597 100644
--- a/l10n_it_delivery_note/report/report_delivery_note.xml
+++ b/l10n_it_delivery_note/report/report_delivery_note.xml
@@ -89,6 +89,21 @@
                         </p>
                     </div>
                 </div>
+                <div
+                    id="carrier"
+                    t-if="doc.carrier_id and doc.company_id.display_carrier_dn_report"
+                >
+                    <strong>Carrier:</strong>
+                    <t t-esc="doc.carrier_id.name" />
+                </div>
+                <div
+                    id="delivery_method"
+                    t-if="doc.delivery_method_id and doc.company_id.display_delivery_method_dn_report"
+                >
+                    <strong>Delivery Method:</strong>
+                    <t t-esc="doc.delivery_method_id.name" />
+                </div>
+
                 <div id="dn_terms">
                     <strong> Delivery Note: </strong>
                     Under the terms of Italian Presidential Decree 472-96 of 14.08.1996
@@ -115,7 +130,17 @@
                         <strong>Carriage Condition:</strong>
                         <p t-field="doc.transport_condition_id" class="m-0" />
                     </div>
-                    <div t-if="doc.transport_method_id" class="col-3 bm-2">
+                    <div
+                        t-if="doc.transport_method_id and doc.company_id.display_carrier_dn_report"
+                        class="col-3 bm-2"
+                    >
+                        <strong>Method of Transport:</strong>
+                        <p t-field="doc.transport_method_id" class="m-0" />
+                    </div>
+                    <div
+                        t-if="doc.transport_method_id and not doc.company_id.display_carrier_dn_report"
+                        class="col-3 bm-2"
+                    >
                         <strong>Method of Transport / Carrier:</strong>
                         <span t-field="doc.transport_method_id" class="m-0" />
                         <t t-if="doc.transport_method_id and doc.carrier_id"> / </t>
@@ -277,7 +302,7 @@
                                 style="font-size:10px;"
                             >Gross Weight</div>
                             <div
-                                class="text-right"
+                                class="text-left"
                                 style="font-size:12px;"
                                 t-field="doc.gross_weight"
                             />
@@ -288,7 +313,7 @@
                                 style="font-size:10px;"
                             >Net Weight</div>
                             <div
-                                class="text-right"
+                                class="text-left"
                                 style="font-size:12px;"
                                 t-field="doc.net_weight"
                             />
@@ -307,7 +332,7 @@
                         <td>
                             <div name="packages" style="font-size:10px;">Packages</div>
                             <div
-                                class="text-right"
+                                class="text-left"
                                 style="font-size:12px;"
                                 t-field="doc.packages"
                             />
diff --git a/l10n_it_delivery_note/security/ir.model.access.csv b/l10n_it_delivery_note/security/ir.model.access.csv
index 725630b093f3..364845cefe86 100644
--- a/l10n_it_delivery_note/security/ir.model.access.csv
+++ b/l10n_it_delivery_note/security/ir.model.access.csv
@@ -19,7 +19,9 @@ access_stock_delivery_note_line_portal,stock.delivery.note.line.portal,l10n_it_d
 access_stock_delivery_note_type_user,access_stock_delivery_note_type user,l10n_it_delivery_note_base.model_stock_delivery_note_type,stock.group_stock_user,1,0,0,0
 access_stock_delivery_note_type_manager,access_stock_delivery_note_type manager,l10n_it_delivery_note_base.model_stock_delivery_note_type,stock.group_stock_manager,1,1,1,1
 access_stock_delivery_note_type_user_account,access_stock_delivery_note_type user_account,l10n_it_delivery_note_base.model_stock_delivery_note_type,account.group_account_invoice,1,0,0,0
+access_stock_delivery_note_confirm_wizard_manager,access_stock_delivery_note_confirm_wizard manager,l10n_it_delivery_note.model_stock_delivery_note_confirm_wizard,,1,1,1,1
 access_stock_delivery_note_create_wizard_manager,access_stock_delivery_note_create_wizard manager,l10n_it_delivery_note.model_stock_delivery_note_create_wizard,,1,1,1,1
 access_stock_delivery_note_select_wizard_manager,access_stock_delivery_note_select_wizard manager,l10n_it_delivery_note.model_stock_delivery_note_select_wizard,,1,1,1,1
 access_stock_delivery_note_base_wizard_manager,access_stock_delivery_note_base_wizard manager,l10n_it_delivery_note.model_stock_delivery_note_base_wizard,,1,1,1,1
 access_stock_delivery_note_invoice_wizard_manager,access_stock_delivery_note_invoice_wizard manager,l10n_it_delivery_note.model_stock_delivery_note_invoice_wizard,,1,1,1,1
+access_delivery_carrier_portal,delivery.carrier portal,delivery.model_delivery_carrier,base.group_portal,1,0,0,0
diff --git a/l10n_it_delivery_note/static/description/index.html b/l10n_it_delivery_note/static/description/index.html
index 376fa8ea683c..8136a6cc6c06 100644
--- a/l10n_it_delivery_note/static/description/index.html
+++ b/l10n_it_delivery_note/static/description/index.html
@@ -366,7 +366,7 @@ <h1 class="title">ITA - Documento di trasporto</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:4db8a7e4bd8b969bc8d01e11c77d7734d924dca8bb3d82f03dd2c9a4f16a3c74
+!! source digest: sha256:568c76e12d39faef3f6e808c5c0e888b044073a056c21d675a6eb4eaf972fa8b
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/l10n-italy/tree/14.0/l10n_it_delivery_note"><img alt="OCA/l10n-italy" src="https://img.shields.io/badge/github-OCA%2Fl10n--italy-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/l10n-italy-14-0/l10n-italy-14-0-l10n_it_delivery_note"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/l10n-italy&amp;target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p><strong>English</strong></p>
@@ -416,6 +416,8 @@ <h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
 <li><p class="first"><em>Inventory → Configuration → Settings - Delivery Notes</em></p>
 <p>Checking ‘Use Advanced DN Features’ allows you to manage more picking on one delivery note.</p>
 <p>Checking ‘Display Ref. Order in Delivery Note Report’ or ‘Display Ref. Customer in Delivery Note Report” enables in report fields relating DN line to SO (if applicable).</p>
+<p>Checking ‘Display Carrier in Delivery Note Report’ enables in report field ‘Carrier’.</p>
+<p>Checking ‘Display Delivery Method in Delivery Note Report’ enables in report field ‘Delivery Method’.</p>
 </li>
 <li><p class="first"><em>Inventory → Configuration → Warehouse Management → Delivery Note Types</em></p>
 <p>In delivery note type you can specify if the product price have to be printed in the delivery note report/slip.</p>
diff --git a/l10n_it_delivery_note/tests/delivery_note_common.py b/l10n_it_delivery_note/tests/delivery_note_common.py
index 26cad7e95003..7217d1660a01 100644
--- a/l10n_it_delivery_note/tests/delivery_note_common.py
+++ b/l10n_it_delivery_note/tests/delivery_note_common.py
@@ -58,6 +58,36 @@ def create_delivery_note(self, **kwargs):
 
         return self.env["stock.delivery.note"].create(vals)
 
+    def create_picking(self, **kwargs):
+        picking_data = {
+            "partner_id": self.recipient.id,
+            "picking_type_id": self.env.ref("stock.picking_type_out").id,
+            "location_id": self.env.ref("stock.stock_location_stock").id,
+            "location_dest_id": self.env.ref("stock.stock_location_customers").id,
+            "move_lines": [
+                (
+                    0,
+                    0,
+                    {
+                        "name": self.env.ref("product.product_product_8").name,
+                        "product_id": self.env.ref("product.product_product_8").id,
+                        "product_uom_qty": 1,
+                        "product_uom": self.env.ref(
+                            "product.product_product_8"
+                        ).uom_id.id,
+                        "location_id": self.env.ref("stock.stock_location_stock").id,
+                        "location_dest_id": self.env.ref(
+                            "stock.stock_location_customers"
+                        ).id,
+                    },
+                )
+            ],
+        }
+
+        picking_data.update(kwargs)
+
+        return self.env["stock.picking"].create(picking_data)
+
     def setUp(self):
         super().setUp()
 
diff --git a/l10n_it_delivery_note/tests/test_stock_delivery_note.py b/l10n_it_delivery_note/tests/test_stock_delivery_note.py
index fc8b7ba24b1e..e10b2ccd479e 100644
--- a/l10n_it_delivery_note/tests/test_stock_delivery_note.py
+++ b/l10n_it_delivery_note/tests/test_stock_delivery_note.py
@@ -73,25 +73,7 @@ def test_delivery_without_so(self):
         # change user in order to activate DN advanced settings
         self.env.user = user
 
-        picking = self.env["stock.picking"].create(
-            {
-                "partner_id": self.recipient.id,
-                "picking_type_id": self.env.ref("stock.picking_type_out").id,
-                "location_id": self.env.ref("stock.stock_location_stock").id,
-                "location_dest_id": self.env.ref("stock.stock_location_customers").id,
-            }
-        )
-        self.env["stock.move"].create(
-            {
-                "name": self.env.ref("product.product_product_8").name,
-                "product_id": self.env.ref("product.product_product_8").id,
-                "product_uom_qty": 1,
-                "product_uom": self.env.ref("product.product_product_8").uom_id.id,
-                "picking_id": picking.id,
-                "location_id": self.env.ref("stock.stock_location_stock").id,
-                "location_dest_id": self.env.ref("stock.stock_location_customers").id,
-            }
-        )
+        picking = self.create_picking()
 
         self.assertEqual(len(picking.move_lines), 1)
 
@@ -119,3 +101,86 @@ def test_delivery_without_so(self):
         self.assertIn("type_id", exc_message)
         self.assertIn("picking_ids", exc_message)
         self.assertIn("belongs to another company", exc_message)
+
+    def test_delivery_action_confirm(self):
+        user = new_test_user(
+            self.env,
+            login="test",
+            groups="stock.group_stock_manager,"
+            "l10n_it_delivery_note.use_advanced_delivery_notes",
+        )
+        # change user in order to activate DN advanced settings
+        self.env.user = user
+
+        picking = self.create_picking(
+            carrier_id=self.env.ref("delivery.delivery_carrier").id
+        )
+        picking.move_lines.quantity_done = 1
+        picking.button_validate()
+
+        dn_form = Form(
+            self.env["stock.delivery.note.create.wizard"].with_context(
+                {"active_id": picking.id, "active_ids": picking.ids}
+            )
+        )
+        dn = dn_form.save()
+        dn.confirm()
+
+        delivery_note_id = picking.delivery_note_id
+
+        new_picking = self.create_picking(
+            carrier_id=self.env.ref("delivery.normal_delivery_carrier").id
+        )
+        new_picking.move_lines.quantity_done = 1
+        new_picking.button_validate()
+
+        delivery_note_id.write({"picking_ids": [(4, new_picking.id)]})
+
+        warning_context = delivery_note_id.action_confirm().get("context")
+        self.assertTrue(warning_context)
+        self.assertIn(
+            "contains pickings related to different transporters",
+            warning_context.get("default_warning_message"),
+        )
+
+        picking.carrier_id = self.env.ref("delivery.free_delivery_carrier").id
+        new_picking.carrier_id = self.env.ref("delivery.free_delivery_carrier").id
+        delivery_note_id.carrier_id = self.env.ref(
+            "l10n_it_delivery_note.partner_carrier_2"
+        ).id
+
+        warning_context = delivery_note_id.action_confirm().get("context")
+        self.assertTrue(warning_context)
+        self.assertIn(
+            "The carrier set in Delivery Note is "
+            "different from the carrier set in picking(s)",
+            warning_context.get("default_warning_message"),
+        )
+
+        delivery_note_id.delivery_method_id = self.env.ref(
+            "delivery.free_delivery_carrier"
+        ).id
+        picking.carrier_id = self.env.ref("delivery.delivery_carrier").id
+        new_picking.carrier_id = self.env.ref("delivery.free_delivery_carrier").id
+        warning_context = delivery_note_id.action_confirm().get("context")
+        self.assertTrue(warning_context)
+        self.assertIn(
+            "contains pickings related to different "
+            "delivery methods from the same transporter",
+            warning_context.get("default_warning_message"),
+        )
+
+        new_picking.carrier_id = self.env.ref("delivery.delivery_carrier").id
+        delivery_note_id.delivery_method_id = self.env.ref(
+            "delivery.free_delivery_carrier"
+        ).id
+        delivery_note_id.carrier_id = self.env.ref(
+            "l10n_it_delivery_note.partner_carrier_1"
+        ).id
+        warning_context = delivery_note_id.action_confirm().get("context")
+        self.assertTrue(warning_context)
+        self.assertIn(
+            "The shipping method set in Delivery Note is "
+            "different from the shipping method set in picking(s)",
+            warning_context.get("default_warning_message"),
+        )
diff --git a/l10n_it_delivery_note/views/res_config_settings.xml b/l10n_it_delivery_note/views/res_config_settings.xml
index 96ae9e755ab1..09f89de88b8b 100644
--- a/l10n_it_delivery_note/views/res_config_settings.xml
+++ b/l10n_it_delivery_note/views/res_config_settings.xml
@@ -74,6 +74,38 @@
                             </div>
                         </div>
                     </div>
+                    <div
+                        class="col-12 col-lg-6 o_setting_box"
+                        attrs="{'invisible': [('group_use_advanced_delivery_notes', '=', False)]}"
+                    >
+                        <div class="o_setting_left_pane">
+                            <field name="display_carrier_dn_report" />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <label for="display_carrier_dn_report" />
+                            <div class="text-muted">
+                                <p>
+                                    Prints Carrier's name on DN report (if there is any)
+                                </p>
+                            </div>
+                        </div>
+                    </div>
+                    <div
+                        class="col-12 col-lg-6 o_setting_box"
+                        attrs="{'invisible': [('group_use_advanced_delivery_notes', '=', False)]}"
+                    >
+                        <div class="o_setting_left_pane">
+                            <field name="display_delivery_method_dn_report" />
+                        </div>
+                        <div class="o_setting_right_pane">
+                            <label for="display_delivery_method_dn_report" />
+                            <div class="text-muted">
+                                <p>
+                                    Prints Delivery Method on DN report (if there is any)
+                                </p>
+                            </div>
+                        </div>
+                    </div>
                 </div>
             </xpath>
         </field>
diff --git a/l10n_it_delivery_note/views/res_partner.xml b/l10n_it_delivery_note/views/res_partner.xml
index 965c49b0a1ed..186739fe4475 100644
--- a/l10n_it_delivery_note/views/res_partner.xml
+++ b/l10n_it_delivery_note/views/res_partner.xml
@@ -12,7 +12,6 @@
         <field name="arch" type="xml">
             <xpath expr="//page[@name='sales_purchases']/group" position="inside">
                 <group string="Shipping information">
-                    <field name="is_carrier" />
                     <field name="default_goods_appearance_id" widget="selection" />
                     <field name="default_transport_condition_id" widget="selection" />
                     <field name="default_transport_reason_id" widget="selection" />
diff --git a/l10n_it_delivery_note/views/stock_delivery_note.xml b/l10n_it_delivery_note/views/stock_delivery_note.xml
index db34a4c5e4a0..aa8f626e212c 100644
--- a/l10n_it_delivery_note/views/stock_delivery_note.xml
+++ b/l10n_it_delivery_note/views/stock_delivery_note.xml
@@ -150,10 +150,7 @@
                     </group>
                     <group>
                         <group>
-                            <field
-                                name="carrier_id"
-                                domain="[('is_carrier','=', True)]"
-                            />
+                            <field name="carrier_id" />
                             <field name="delivery_method_id" />
                         </group>
                         <group>
@@ -422,6 +419,8 @@
                                     />
                                     <field name="scheduled_date" readonly="True" />
                                     <field name="origin" />
+                                    <field name="carrier_id" string="Delivery Method" />
+                                    <field name="carrier_partner_id" />
                                     <field name="backorder_id" />
                                     <field name="state" />
                                 </tree>
diff --git a/l10n_it_delivery_note/views/stock_picking.xml b/l10n_it_delivery_note/views/stock_picking.xml
index b17fda21bb9d..a54f578ff955 100644
--- a/l10n_it_delivery_note/views/stock_picking.xml
+++ b/l10n_it_delivery_note/views/stock_picking.xml
@@ -204,7 +204,6 @@
                                     <field
                                         name="delivery_note_carrier_id"
                                         attrs="{'readonly': [('delivery_note_readonly', '=', True)]}"
-                                        domain="[('is_carrier','=', True)]"
                                         string="Carrier"
                                     />
                                     <field
@@ -356,6 +355,9 @@
                 <field name="delivery_note_state" optional="show" />
                 <field name="delivery_note_date" optional="show" />
             </field>
+            <field name="partner_id" position="after">
+                <field name="carrier_id" string="Delivery Method" />
+            </field>
         </field>
     </record>
 
diff --git a/l10n_it_delivery_note/wizard/__init__.py b/l10n_it_delivery_note/wizard/__init__.py
index 328cc9a9d46b..b42b1dd632a6 100644
--- a/l10n_it_delivery_note/wizard/__init__.py
+++ b/l10n_it_delivery_note/wizard/__init__.py
@@ -1,4 +1,5 @@
 from . import delivery_note_base
+from . import delivery_note_confirm
 from . import delivery_note_create
 from . import delivery_note_invoice
 from . import delivery_note_select
diff --git a/l10n_it_delivery_note/wizard/delivery_note_base.py b/l10n_it_delivery_note/wizard/delivery_note_base.py
index c86064935524..3073bca0e9db 100644
--- a/l10n_it_delivery_note/wizard/delivery_note_base.py
+++ b/l10n_it_delivery_note/wizard/delivery_note_base.py
@@ -38,6 +38,7 @@ def _domain_type_id(self):
     )
 
     error_message = fields.Html(compute="_compute_fields")
+    warning_message = fields.Char("Warning", readonly=True, compute="_compute_fields")
 
     def _get_validation_errors(self, pickings):
         validators = [
@@ -63,6 +64,16 @@ def _get_validation_errors(self, pickings):
 
         return errors
 
+    def _get_warning_message(self):
+        """
+        This method is used to be inherited and extended
+        to display whatever message could be used to improve the
+        user experience when creating a delivery note
+
+        :return: message to be displayed
+        """
+        return False
+
     @api.depends("selected_picking_ids")
     def _compute_fields(self):
         try:
@@ -84,6 +95,7 @@ def _compute_fields(self):
             )
 
         else:
+            self.warning_message = self._get_warning_message()
             partners = self.selected_picking_ids.get_partners()
             self.partner_sender_id = partners[0]
             self.partner_id = partners[1]
diff --git a/l10n_it_delivery_note/wizard/delivery_note_confirm.py b/l10n_it_delivery_note/wizard/delivery_note_confirm.py
new file mode 100644
index 000000000000..5370b326036d
--- /dev/null
+++ b/l10n_it_delivery_note/wizard/delivery_note_confirm.py
@@ -0,0 +1,17 @@
+# Copyright (c) 2019, Link IT Europe Srl
+# @author: Matteo Bilotta <mbilotta@linkeurope.it>
+
+
+from odoo import fields, models
+
+
+class StockDeliveryNoteCreateWizard(models.TransientModel):
+    _name = "stock.delivery.note.confirm.wizard"
+    _description = "Delivery Note Confirm"
+
+    delivery_note_id = fields.Many2one("stock.delivery.note", readonly=True)
+    warning_message = fields.Text("Warning Message", readonly=True)
+
+    def confirm(self):
+        self.ensure_one()
+        self.delivery_note_id._action_confirm()
diff --git a/l10n_it_delivery_note/wizard/delivery_note_confirm.xml b/l10n_it_delivery_note/wizard/delivery_note_confirm.xml
new file mode 100644
index 000000000000..647c867f05c1
--- /dev/null
+++ b/l10n_it_delivery_note/wizard/delivery_note_confirm.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+    <record id="stock_delivery_note_confirm_form_view" model="ir.ui.view">
+        <field name="name">stock.delivery.note.confirm.form</field>
+        <field name="model">stock.delivery.note.confirm.wizard</field>
+        <field name="arch" type="xml">
+            <form>
+                <field name="warning_message" />
+                <footer>
+                    <button
+                        name="confirm"
+                        type="object"
+                        class="btn-primary"
+                        string="Confirm"
+                    />
+                    <button special="cancel" class="btn-secondary" string="Cancel" />
+                </footer>
+            </form>
+        </field>
+    </record>
+</odoo>
diff --git a/l10n_it_delivery_note/wizard/delivery_note_create.py b/l10n_it_delivery_note/wizard/delivery_note_create.py
index 27454080199b..ea090098e54f 100644
--- a/l10n_it_delivery_note/wizard/delivery_note_create.py
+++ b/l10n_it_delivery_note/wizard/delivery_note_create.py
@@ -75,6 +75,7 @@ def _onchange_partner(self):
         )
 
     def _prepare_delivery_note_vals(self, sale_order_id):
+        delivery_method_id = self.selected_picking_ids.mapped("carrier_id")[:1]
         return {
             "company_id": (
                 self.selected_picking_ids.mapped("company_id")[:1].id or False
@@ -88,7 +89,8 @@ def _prepare_delivery_note_vals(self, sale_order_id):
             "partner_shipping_id": self.partner_shipping_id.id,
             "type_id": self.type_id.id,
             "date": self.date,
-            "delivery_method_id": self.partner_id.property_delivery_carrier_id.id,
+            "carrier_id": delivery_method_id.partner_id.id,
+            "delivery_method_id": delivery_method_id.id,
             "transport_condition_id": (
                 sale_order_id
                 and sale_order_id.default_transport_condition_id.id
diff --git a/l10n_it_delivery_note/wizard/delivery_note_select.py b/l10n_it_delivery_note/wizard/delivery_note_select.py
index f026d9f27746..072503bae6af 100644
--- a/l10n_it_delivery_note/wizard/delivery_note_select.py
+++ b/l10n_it_delivery_note/wizard/delivery_note_select.py
@@ -1,7 +1,7 @@
 # Copyright (c) 2019, Link IT Europe Srl
 # @author: Matteo Bilotta <mbilotta@linkeurope.it>
 
-from odoo import api, fields, models
+from odoo import _, api, fields, models
 
 
 class StockDeliveryNoteSelectWizard(models.TransientModel):
@@ -37,6 +37,19 @@ def _compute_fields(self):
             self.picking_ids += self.selected_picking_ids
         else:
             self.picking_ids = self.picking_ids
+        self.warning_message = self._get_warning_message()
+
+    def _get_warning_message(self):
+        res = super()._get_warning_message()
+        carrier_ids = self.picking_ids.mapped("carrier_id")
+        if len(carrier_ids.mapped("partner_id")) > 1:
+            res = _(
+                "The selected pickings have different delivery methods: %(carriers)s",
+                carriers=", ".join(
+                    '"%s: %s"' % (i.name, i.partner_id.name) for i in carrier_ids
+                ),
+            )
+        return res
 
     def check_compliance(self, pickings):
         super().check_compliance(pickings)
diff --git a/l10n_it_delivery_note/wizard/delivery_note_select.xml b/l10n_it_delivery_note/wizard/delivery_note_select.xml
index f14a454dcda0..676448e172ac 100644
--- a/l10n_it_delivery_note/wizard/delivery_note_select.xml
+++ b/l10n_it_delivery_note/wizard/delivery_note_select.xml
@@ -14,6 +14,14 @@
                     <field name="error_message" />
                 </div>
                 <field name="selected_picking_ids" invisible="True" />
+                <p
+                    class="text-center alert alert-warning"
+                    role="alert"
+                    attrs="{'invisible': [('warning_message', '=', False)]}"
+                >
+                    <span class="fa fa-warning" title="Warning!" />
+                    <field name="warning_message" />
+                </p>
                 <div
                     class="oe_title"
                     attrs="{'invisible': [('error_message', '!=', False)]}"