diff --git a/modules/checkout/commerce_checkout.api.php b/modules/checkout/commerce_checkout.api.php
index 86431b6..ecee720 100644
--- a/modules/checkout/commerce_checkout.api.php
+++ b/modules/checkout/commerce_checkout.api.php
@@ -292,3 +292,20 @@ function hook_commerce_checkout_pane_info() {
 function hook_commerce_checkout_pane_info_alter(&$checkout_panes) {
   $checkout_panes['billing']['weight'] = -6;
 }
+
+/**
+ * Allows modules to define the page key used for default checkout state status.
+ *
+ * When an order enters checkout for the first time, it is given a default
+ * checkout state status. This will be the first page the order is brought to.
+ *
+ * By default this is the first available checkout form page. This hook allows
+ * for a module to provide an alternative default without building the checkout
+ * pages and pane information.
+ *
+ * @return string
+ *   Checkout page key.
+ */
+function hook_commerce_checkout_first_checkout_page() {
+  return 'payment';
+}
diff --git a/modules/checkout/commerce_checkout.module b/modules/checkout/commerce_checkout.module
index 210b408..f79a7ab 100644
--- a/modules/checkout/commerce_checkout.module
+++ b/modules/checkout/commerce_checkout.module
@@ -475,9 +475,17 @@ function commerce_checkout_pages() {
 }
 
 /**
- * Returns the page ID of the first checkout page sorted by weight.
+ * Returns the page ID of the first checkout page to be used.
  */
 function commerce_checkout_first_checkout_page() {
+  $page_key = module_invoke_all('commerce_checkout_first_checkout_page');
+
+  // If we received values from the hook, use the first as the page key.
+  if (!empty($page_key)) {
+    return reset($page_key);
+  }
+
+  // Else fallback to the first page defined in checkout form.
   return key(commerce_checkout_pages());
 }
 
