diff --git a/modules/checkout/commerce_checkout.module b/modules/checkout/commerce_checkout.module
index 210b408..9b868cd 100644
--- a/modules/checkout/commerce_checkout.module
+++ b/modules/checkout/commerce_checkout.module
@@ -475,10 +475,14 @@ 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.
+ *
+ * By default the page ID is the first checkout page sorted by weight. You may
+ * also set the "commerce_checkout_first_checkout_page" variable to prevent
+ * the need to run commerce_checkout_pages() which builds page and pane info.
  */
 function commerce_checkout_first_checkout_page() {
-  return key(commerce_checkout_pages());
+  return variable_get('commerce_checkout_first_checkout_page', key(commerce_checkout_pages()));
 }
 
 /**
diff --git a/modules/checkout/tests/commerce_checkout.test b/modules/checkout/tests/commerce_checkout.test
index 56351cc..40bb738 100644
--- a/modules/checkout/tests/commerce_checkout.test
+++ b/modules/checkout/tests/commerce_checkout.test
@@ -524,4 +524,18 @@ class CommerceCheckoutTestProcess extends CommerceBaseTestCase {
     $this->assertCheckoutPageAccessible($this->order, 'complete');
   }
 
+  public function testDefaultStatusForCheckoutState() {
+    // Verify it defaults to first page.
+    $checkout_state = commerce_order_state_load('checkout');
+    $this->assertEqual($checkout_state['default_status'], 'checkout_checkout');
+
+    // Manually define the checkout page that should serve as default status.
+    variable_set('commerce_checkout_first_checkout_page', 'payment');
+    commerce_order_states_reset();
+
+    // Verify checkout_payment is now default status.
+    $checkout_state = commerce_order_state_load('checkout');
+    $this->assertEqual($checkout_state['default_status'], 'checkout_cpayment');
+  }
+
 }
