Index: uc_donate/uc_donate.module
===================================================================
--- uc_donate/uc_donate.module	(revision 1411)
+++ uc_donate/uc_donate.module	(working copy)
@@ -217,28 +217,34 @@
   }
 }
 
-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);
       }
     }
   }
