diff --git a/commerce_login_step.module b/commerce_login_step.module
index 28786db..7625630 100644
--- a/commerce_login_step.module
+++ b/commerce_login_step.module
@@ -6,7 +6,7 @@
  */
 
 /**
- * Implements hook_commerce_checkout_pane_info()
+ * Implements hook_commerce_checkout_pane_info().
  */
 function commerce_login_step_commerce_checkout_page_info() {
 
@@ -34,6 +34,11 @@ function commerce_login_step_form_commerce_checkout_form_alter(&$form, &$form_st
   // user is not logged in.
   if (!$user->uid && !empty($form['account'])) {
 
+    $existing_form_prefix = $form['#prefix'];
+    $existing_form_suffix = $form['#prefix'];
+    $form['#prefix'] = '<div id="checkout-login-step">' . $existing_form_prefix;
+    $form['#suffix'] = $existing_form_suffix . '</div>';
+
     $form['account']['login']['choose'] = array(
       '#type' => 'radios',
       '#title' => t('Choose how you want to checkout.'),
@@ -43,9 +48,10 @@ function commerce_login_step_form_commerce_checkout_form_alter(&$form, &$form_st
       ),
       '#ajax' => array(
         'callback' => 'commerce_login_step_checkout_form_refresh',
-        'wrapper' => 'account-login-container',
+        'wrapper' => 'checkout-login-step',
       ),
       '#weight' => -1,
+      '#required' => TRUE,
     );
 
     // Decide which checkout path to take.
@@ -55,31 +61,35 @@ function commerce_login_step_form_commerce_checkout_form_alter(&$form, &$form_st
       $form['account']['login']['mail_confirm']['#access'] = FALSE;
     }
     elseif ($form_state['values']['account']['login']['choose'] == 'anonymous') {
-      // Nothing to do.
+      $form['account']['login']['mail']['#weight'] = 20;
     }
     elseif ($form_state['values']['account']['login']['choose'] == 'login') {
+      // Hijack the "Continue" button to use our user login validate and submit
+      // handlers.
+      array_unshift($form['buttons']['continue']['#validate'], 'commerce_login_step_checkout_form_validate');
+      array_unshift($form['buttons']['continue']['#submit'], 'commerce_login_step_checkout_form_submit');
 
+      // Add password text field, as well as "forgot password" link.
+      $form['account']['login']['mail']['#weight'] = 10;
       $form['account']['login']['password'] = array(
         '#type' => 'password',
         '#title' => t('Password'),
         '#required' => TRUE,
+        '#weight' => 20,
       );
-      $form['account']['login']['login_now'] = array(
-        '#type' => 'submit',
-        '#value' => t('Login now'),
-        '#limit_validation_errors' => array(array('account')),
-        '#validate' => array('commerce_login_step_checkout_form_validate'),
-        '#submit' => array('commerce_login_step_checkout_form_submit'),
+      $form['account']['login']['reset_password'] = array(
+        '#markup' => l(t('Forgot password?'), 'user/password'),
+        '#weight' => 30,
       );
     }
   }
 }
 
 /**
- * Ajax callback: returns the account information pane to an AJAX request.
+ * Ajax callback: Returns the form to an AJAX request.
  */
 function commerce_login_step_checkout_form_refresh($form, $form_state) {
-  return $form['account']['login'];
+  return $form;
 }
 
 /**
@@ -135,4 +145,4 @@ function commerce_login_step_checkout_form_submit($form, &$form_state) {
   }
   // Just trigger a rebuild.
   $form_state['rebuild'] = TRUE;
-}
\ No newline at end of file
+}
