diff --git a/config/install/core.entity_view_display.commerce_shipment.default.default.yml b/config/install/core.entity_view_display.commerce_shipment.default.default.yml
index 599726b..3ed2714 100644
--- a/config/install/core.entity_view_display.commerce_shipment.default.default.yml
+++ b/config/install/core.entity_view_display.commerce_shipment.default.default.yml
@@ -58,7 +58,8 @@ content:
     type: state_transition_form
     weight: 7
     region: content
-    settings: {  }
+    settings:
+      require_confirmation: true
     third_party_settings: {  }
   title:
     type: string
diff --git a/config/install/views.view.order_shipments.yml b/config/install/views.view.order_shipments.yml
index d7c4e10..895ed24 100644
--- a/config/install/views.view.order_shipments.yml
+++ b/config/install/views.view.order_shipments.yml
@@ -349,7 +349,8 @@ display:
           hide_alter_empty: true
           click_sort_column: value
           type: state_transition_form
-          settings: {  }
+          settings:
+            require_confirmation: true
           group_column: value
           group_columns: {  }
           group_rows: true
diff --git a/src/Entity/Shipment.php b/src/Entity/Shipment.php
index aefe3af..9ffb10d 100644
--- a/src/Entity/Shipment.php
+++ b/src/Entity/Shipment.php
@@ -66,7 +66,8 @@ use Drupal\profile\Entity\ProfileInterface;
  *     "add-form" = "/admin/commerce/orders/{commerce_order}/shipments/add/{commerce_shipment_type}",
  *     "edit-form" = "/admin/commerce/orders/{commerce_order}/shipments/{commerce_shipment}/edit",
  *     "delete-form" = "/admin/commerce/orders/{commerce_order}/shipments/{commerce_shipment}/delete",
- *     "resend-confirmation-form" = "/admin/commerce/orders/{commerce_order}/shipments/{commerce_shipment}/resend-confirmation"
+ *     "resend-confirmation-form" = "/admin/commerce/orders/{commerce_order}/shipments/{commerce_shipment}/resend-confirmation",
+ *     "state-transition-form" = "/admin/commerce/orders/{commerce_order}/shipments/{commerce_shipment}/{field_name}/{transition_id}"
  *   },
  *   bundle_entity_type = "commerce_shipment_type",
  *   field_ui_base_route = "entity.commerce_shipment_type.edit_form",
@@ -667,6 +668,9 @@ class Shipment extends ContentEntityBase implements ShipmentInterface {
       ->setDisplayOptions('view', [
         'label' => 'hidden',
         'type' => 'state_transition_form',
+        'settings' => [
+          'require_confirmation' => TRUE,
+        ],
         'weight' => 10,
       ])
       ->setDisplayConfigurable('form', TRUE)
diff --git a/tests/src/FunctionalJavascript/ShipmentAdminTest.php b/tests/src/FunctionalJavascript/ShipmentAdminTest.php
index ff3f990..a280c71 100644
--- a/tests/src/FunctionalJavascript/ShipmentAdminTest.php
+++ b/tests/src/FunctionalJavascript/ShipmentAdminTest.php
@@ -773,7 +773,13 @@ class ShipmentAdminTest extends CommerceWebDriverTestBase {
 
     // Email is triggered at Send shipment step.
     $this->getSession()->getPage()->pressButton('Finalize shipment');
+    $this->assertSession()->pageTextContains('Are you sure you want to');
+    $this->assertSession()->pageTextContains('This action cannot be undone.');
+    $this->assertSession()->linkExists('Cancel');
+    $this->submitForm([], 'Finalize shipment');
     $this->getSession()->getPage()->pressButton('Send shipment');
+    $this->assertSession()->pageTextContains('This action cannot be undone.');
+    $this->submitForm([], 'Send shipment');
 
     // Test email content.
     $email = current($this->getMails());
