diff --git a/modules/ec/commerce_paypal_ec.module b/modules/ec/commerce_paypal_ec.module
index ee9c48b..b3b2c6a 100644
--- a/modules/ec/commerce_paypal_ec.module
+++ b/modules/ec/commerce_paypal_ec.module
@@ -655,7 +655,7 @@ function commerce_paypal_ec_do_payment($payment_method, $order, $charge) {
   }
 
   // If we received an unknown response status...
-  if (!in_array($response['PAYMENTINFO_0_PAYMENTSTATUS'], array('Failed', 'Voided', 'Pending', 'Completed', 'Refunded'))) {
+  if (!isset($response['PAYMENTINFO_0_PAYMENTSTATUS']) || !in_array($response['PAYMENTINFO_0_PAYMENTSTATUS'], array('Failed', 'Voided', 'Pending', 'Completed', 'Refunded'))) {
     // Display an error message and remain on the same page.
     drupal_set_message(t('We could not complete your payment with PayPal. Please try again or contact us if the problem persists.'), 'error');
 
@@ -914,3 +914,89 @@ function commerce_paypal_ec_mark_image($remote = FALSE) {
 
   return '<span class="commerce-paypal-ec-icon-wrapper">' . theme('image', $variables) . '</span>';
 }
+
+/**
+ * Form callback: validates information entered on the EC review page.
+ *
+ * @TODO : Get errors messages from the panes functions to display to the
+ * customer.
+ */
+function commerce_paypal_ec_review_pane_checkout_form_validate($form, &$form_state) {
+
+  $order = $form_state['order'];
+
+  $commerce_paypal_ec_checkout_panes = array_filter(variable_get('commerce_paypal_ec_checkout_panes', array()));
+
+  $form_validate = TRUE;
+
+  // Loop through the enabled checkout panes included in this page to validate
+  // and submit them.
+  foreach ($commerce_paypal_ec_checkout_panes as $pane_id) {
+
+    $validate = TRUE;
+
+    // Load the checkout pane to find its checkout pane validate callback.
+    $checkout_pane = commerce_checkout_pane_load($pane_id);
+
+    // We are obliged to put panes information at the root of the $form and
+    // $form_state because panes functions are waiting for them here.
+    $pane_form = $form;
+    $pane_form[$pane_id] = $pane_form['paypal_ec_review'][$pane_id]['data'];
+    $pane_form_state = $form_state;
+    $pane_form_state['values'][$pane_id] = $form_state['values']['paypal_ec_review'][$pane_id]['data'];
+
+    // If it has a validate callback.
+    if ($callback = commerce_checkout_pane_callback($checkout_pane, 'checkout_form_validate')) {
+      // Give it a chance to process the submitted data.
+      $validate &= $callback($pane_form, $pane_form_state, $checkout_pane, $order);
+    }
+
+    // Submit the pane if it validated.
+    if ($validate && $callback = commerce_checkout_pane_callback($checkout_pane, 'checkout_form_submit')) {
+      $callback($pane_form, $pane_form_state, $checkout_pane, $order);
+    }
+
+    // A failed pane makes the form fail.
+    $form_validate &= $validate;
+  }
+
+  // Save the updated order object.
+  commerce_order_save($order);
+
+  // If a pane failed validation or the form state has otherwise been altered to
+  // initiate a rebuild, return without moving to the next checkout page.
+  if (!$form_validate || $form_state['rebuild']) {
+    $form_state['rebuild'] = TRUE;
+  }
+
+}
+
+/**
+ * Form callback: submits information entered on the EC review page.
+ */
+function commerce_paypal_ec_review_pane_checkout_form_submit($form, &$form_state) {
+  $order = $form_state['order'];
+  $payment_method = commerce_payment_method_instance_load($order->data['payment_method']);
+
+  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
+  $charge = $order_wrapper->commerce_order_total->value();
+
+  // Attempt to process the payment.
+  if (commerce_paypal_ec_do_payment($payment_method, $order, $charge)) {
+    // Proceed to the next page if it succeeded.
+    $order_status = commerce_order_status_load($order->status);
+    $checkout_page = commerce_checkout_page_load($order_status['checkout_page']);
+    $next_page = $checkout_page['next_page'];
+
+    // Update the order status to the next checkout page.
+    $order = commerce_order_status_update($order, 'checkout_' . $next_page, FALSE, FALSE);
+
+    // Inform modules of checkout completion if the next page is completed.
+    if ($next_page == 'complete') {
+      commerce_checkout_complete($order);
+    }
+
+    // Redirect to the URL for the new checkout page.
+    $form_state['redirect'] = commerce_checkout_order_uri($order);
+  }
+}
\ No newline at end of file
diff --git a/modules/ec/includes/commerce_paypal_ec.checkout_pane.inc b/modules/ec/includes/commerce_paypal_ec.checkout_pane.inc
index c97f510..b70db03 100644
--- a/modules/ec/includes/commerce_paypal_ec.checkout_pane.inc
+++ b/modules/ec/includes/commerce_paypal_ec.checkout_pane.inc
@@ -5,19 +5,54 @@
  * Checkout pane callback functions for the PayPal Express Checkout module.
  */
 
+/**
+ * Implements base_settings_form()
+ */
+function commerce_paypal_ec_review_pane_settings_form($checkout_pane) {
+
+  $checkout_panes = commerce_checkout_panes(array('enabled' => TRUE));
+
+  // List of default core panes to exclude from the review and confirm page.
+  $commerce_core_panes_id = array(
+    'account',
+    'cart_contents',
+    'commerce_payment',
+    'commerce_payment_redirect',
+    'checkout_review',
+    'checkout_completion_message',
+  );
+
+  // Created a list of available panes to be shown in this page. Removed the
+  // current pane, all commerce core panes listed above and all the panes
+  // implemented by the commerce_customer module.
+  foreach($checkout_panes as $pane => $values) {
+    if ($values['pane_id'] == $checkout_pane['pane_id']
+      || in_array($values['pane_id'], $commerce_core_panes_id)
+      || $values['module'] == 'commerce_customer' ) {
+      unset($checkout_panes[$pane]);
+    }
+  }
+
+  $form = array();
+  if ($checkout_panes) {
+    $form['commerce_paypal_ec_checkout_panes'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Select panes to include on the Express Checkout review and confirm page. '),
+      '#default_value' => variable_get('commerce_paypal_ec_checkout_panes', array()),
+      '#options' => drupal_map_assoc(array_keys($checkout_panes)),
+    );
+  }
+  return $form;
+}
 
 /**
  * Checkout pane callback: returns a pane allowing the customer to review the
  * final details of the order and provide any final information required.
  *
- * @todo Provide a setting for this checkout pane that lets you specify what
- * checkout panes should be embedded in it. For example, this could let the
- * customer select a shipping service after returning to the site from PayPal.
- * This information should be included beneath the review information for
- * customer selection.
  */
 function commerce_paypal_ec_review_pane_checkout_form($form, &$form_state, $checkout_pane, $order) {
   $pane_form = array();
+  $form_state['order'] = $order;
 
   // Otherwise add any enabled checkout panes that are visible on review.
   $pane_form['review'] = array(
@@ -51,11 +86,33 @@ function commerce_paypal_ec_review_pane_checkout_form($form, &$form_state, $chec
     }
   }
 
+  // Include panes selected by the mercant on the Paypal's EC review page.
+  foreach (array_filter(variable_get('commerce_paypal_ec_checkout_panes', array())) as $pane_id) {
+    $pane = commerce_checkout_pane_load($pane_id);
+    if ($callback = commerce_checkout_pane_callback($pane, 'checkout_form')) {
+      // Get the review data for this pane.
+      $pane_data = $callback($form, $form_state, $pane, $order);
+      // Only display the pane if there is data in the pane.
+      if (!empty($pane_data)) {
+        // Add a row for it in the review data.
+        $pane_form[$pane_id] = array(
+          '#type' => $pane['fieldset'] ? 'fieldset' : 'container',
+          '#title' => check_plain($pane['title']),
+          '#collapsible' => $pane['collapsible'],
+          '#collapsed' => $pane['collapsed'],
+          '#attributes' => array('class' => array($pane_id)),
+          '#tree' => TRUE,
+          'data' => $pane_data,
+        );
+      }
+    }
+  }
+
   $pane_form['pay_now'] = array(
     '#type' => 'submit',
     '#value' => t('Pay Now'),
-    '#validate' => array('commerce_paypal_ec_review_validate'),
-    '#submit' => array('commerce_paypal_ec_review_submit'),
+    '#validate' => array('commerce_paypal_ec_review_pane_checkout_form_validate'),
+    '#submit' => array('commerce_paypal_ec_review_pane_checkout_form_submit'),
   );
 
   return $pane_form;
@@ -64,36 +121,11 @@ function commerce_paypal_ec_review_pane_checkout_form($form, &$form_state, $chec
 /**
  * Form callback: validates information entered on the EC review page.
  */
-function commerce_paypal_ec_review_validate($form, &$form_state) {
-  // @todo Validate and submit any checkout panes included in this page.
-}
+//function commerce_paypal_ec_review_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
+//}
 
 /**
  * Form callback: submits information entered on the EC review page.
  */
-function commerce_paypal_ec_review_submit($form, &$form_state) {
-  $order = $form_state['order'];
-  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
-
-  $payment_method = commerce_payment_method_instance_load($order->data['payment_method']);
-  $charge = $order_wrapper->commerce_order_total->value();
-
-  // Attempt to process the payment.
-  if (commerce_paypal_ec_do_payment($payment_method, $order, $charge)) {
-    // Proceed to the next page if it succeeded.
-    $order_status = commerce_order_status_load($order->status);
-    $checkout_page = commerce_checkout_page_load($order_status['checkout_page']);
-    $next_page = $checkout_page['next_page'];
-
-    // Update the order status to the next checkout page.
-    $order = commerce_order_status_update($order, 'checkout_' . $next_page, FALSE, FALSE);
-
-    // Inform modules of checkout completion if the next page is Completed.
-    if ($next_page == 'complete') {
-      commerce_checkout_complete($order);
-    }
-
-    // Redirect to the URL for the new checkout page.
-    $form_state['redirect'] = commerce_checkout_order_uri($order);
-  }
-}
+//function commerce_paypal_ec_review_pane_checkout_form_submit($form, &$form_state) {
+//}
\ No newline at end of file
