diff --git a/modules/uc_donation/uc_donate/uc_donate.module b/modules/uc_donation/uc_donate/uc_donate.module
index 82678fa..2645b40 100644
--- a/modules/uc_donation/uc_donate/uc_donate.module
+++ b/modules/uc_donation/uc_donate/uc_donate.module
@@ -169,6 +169,25 @@ function uc_donate_checkout_pane() {
   }
 }
 
+/**
+ * Implementation of hook_order().
+ */
+function uc_donate_order($op, &$arg1, $arg2) {
+  switch ($op) {
+    case 'total':
+      // Could be improved upon.
+      if (is_array($arg1->line_items)) {
+        foreach ($arg1->line_items as $key => $line_item) {
+          if ($line_item['title'] == t('Added Donations')) {
+            print "returning: ".$line_item['amount'];
+            return $line_item['amount'];
+          }
+        }
+      }
+      break;
+  }
+}
+
 /*******************************************************************************
  * Callback Functions, Forms, and Tables
  ******************************************************************************/
@@ -189,7 +208,7 @@ function uc_checkout_pane_donate($op, &$arg1, $arg2) {
         if ($qid > 0) {
           $description = variable_get('uc_donate_featured_description', '');
           $count = variable_get('uc_donate_featured_count', 1);
-          $contents = uc_donate_featured_pane();
+          $contents = uc_donate_featured_pane($arg1, $arg2);
           drupal_add_js(drupal_get_path('module', 'uc_donate').'/jquery.highlightFade.js');
           drupal_add_js(drupal_get_path('module', 'uc_donate').'/uc_donate_pane.js');
           return array('description' => $description, 'contents' => $contents, 'next-button' => FALSE);
@@ -214,31 +233,71 @@ function uc_checkout_pane_donate($op, &$arg1, $arg2) {
         '#options' => uc_donate_queues(FALSE)
       );
       return $form;
+
+    case 'process':
+      $arg1->data['uc_donate'] = $arg2;
+      break;
+
+    case 'review':
+      $context = array(
+        'revision' => 'themed',
+        'type' => 'cart_item',
+        'subject' => array(),
+      );
+      flog_it(__FUNCTION__ . ': arg1=' . print_r($arg1, TRUE));
+      foreach ($arg1->products as $item) {
+        if ($item->data['donate_amount'] != 0) {
+          $desc = check_plain($item->title) . uc_product_get_description($item);
+          $price_info = array(
+            'price' => $item->price,
+            'qty' => $item->qty,
+          );
+          $context['subject'] = array(
+            'cart' => $items,
+            'cart_item' => $item,
+            'node' => node_load($item->nid),
+          );
+          $output .= '<tr valign="top"><td>'. $item->qty .'&times;</td><td width="100%">'. $desc
+                    .'</td><td nowrap="nowrap">'. uc_price($price_info, $context) .'</td></tr>';
+        }
+      }
+      if (!empty($output)) {
+        $output = '<table>' . $output . '</table>';
+        $review[] = $output;
+        return $review;
+      }
+      return;
   }
 }
 
-function uc_donate_cart_checkout_form_validate($form_id, $form_values) {
-  if (!empty($form_values['panes']['donate']) && is_array($form_values['panes']['donate'])) {
+function uc_donate_cart_checkout_form_validate($form, &$form_state) {
+  if (!empty($form_state['values']['panes']['donate']) && is_array($form_state['values']['panes']['donate'])) {
     $order_id = $_SESSION['cart_order'];
     $order = uc_order_load($order_id);
-    foreach ($form_values['panes']['donate'] as $k => $amount) {
+    foreach ($form_state['values']['panes']['donate'] as $k => $amount) {
       if ($amount > 0) {
         $cid = uc_cart_get_id();
         $nid = str_replace('uc_donate_featured_amount', '', $k);
         $node = node_load($nid);
-        $form = drupal_retrieve_form('uc_donation_add_to_cart_form_'.$nid, $node);
+
+        $tmp_form_state = array();
+        $add_to_cart_form = drupal_retrieve_form('uc_product_add_to_cart_form_'. $nid, $tmp_form_state, $node);
         $form_values = array();
-        foreach ($form as $key => $value) {
+        foreach ($add_to_cart_form as $key => $value) {
           if (!preg_match('/^#/', $key)) {
             $form_values[$key] = isset($value['#value']) ? $value['#value'] : $value['#default_value'];
           }
         }
+        $form_values['amount'] = $amount;
+        $form_values['donate_amount'] = $amount;
+        $form_values['module'] = 'uc_donation';
+
         $node->data = module_invoke_all('add_to_cart_data', $form_values);
-        $node->data['amount'] = $amount;
         $node->price = $amount;
         $node->qty = 1;
-        db_query("INSERT INTO {uc_cart_products} (cart_id, nid, qty, changed, data) VALUES ('%s', %d, %d, %d, '%s')", $cid, $node->nid, $node->qty, time(), serialize($node->data));
-        uc_order_product_save($order_id, $node);
+        $order->products[] = $node;
+        $order->order_total += $amount;
+        uc_order_save($order);
       }
     }
   }
@@ -289,7 +348,7 @@ function uc_donate_queues($limit = TRUE) {
   return $options;
 }
 
-function uc_donate_featured_pane() {
+function uc_donate_featured_pane($arg1, $arg2) {
   $queue = nodequeue_load(variable_get('uc_donate_featured_queue', 0));
   $items = array();
   $result = db_query("SELECT nid FROM {nodequeue_nodes} WHERE qid = %d ORDER BY timestamp", $queue->qid);
@@ -312,7 +371,7 @@ function uc_donate_featured_pane() {
       $items['uc_donate_featured_amount'.$node->nid] = array(
         '#type' => 'textfield',
         '#title' => t('Amount'),
-        '#default_value' => '0.00',
+        '#default_value' => (isset($arg1->data['uc_donate']['uc_donate_featured_amount' . $node->nid]) ? $arg1->data['uc_donate']['uc_donate_featured_amount' . $node->nid] : '0.00'),
         '#size' => 10,
         '#prefix' => '<div class="gift_form">',
         '#suffix' => '</div></div>',
diff --git a/modules/uc_donation/uc_donate/uc_donate_pane.js b/modules/uc_donation/uc_donate/uc_donate_pane.js
index 57aa901..ca019d0 100644
--- a/modules/uc_donation/uc_donate/uc_donate_pane.js
+++ b/modules/uc_donation/uc_donate/uc_donate_pane.js
@@ -18,7 +18,7 @@ if (Drupal.jsEnabled) {
         $('h4#donate_total').highlightFade({color:'yellow',speed:2000,iterator:'sinusoidal'});
         
         if (donateTotal > 0) {
-          set_line_item('donations','Added Donations',donateTotal,-1);
+          set_line_item('donations','Added Donations',donateTotal * 1,-1);
         }
       });
     });
