--- ../../uc_expiry-old/uc_expiry.module	2007-07-20 04:41:34.000000000 -0500
+++ uc_expiry.module	2007-11-17 14:23:01.000000000 -0600
@@ -346,16 +347,25 @@ function uc_expiry_order($op, $arg1, $st
   switch ($op) {
     // order status updated
     case 'update':
-      $order = uc_order_load($arg1);
-      
+      // newer versions of ubercart pass the new order object as $arg1
+      // whereas older versions provide the order id.
+      if (is_object($arg1)) {
+        $order = $arg1;
+      }
+      else {
+        $order = uc_order_load($arg1);
+      }
+
+      $oldstate = uc_order_status_data($order->order_status, 'state');
+      $newstate = uc_order_status_data($status, 'state');
+
       // event: order payment accepted
-      if ($order->order_status <= uc_get_order_status_id('awaiting_payment') && $status >= uc_get_order_status_id('post_payment')) {
+      if ($oldstate != 'completed' && $newstate == 'completed') {
         foreach ($order->products as $product) {
           uc_expiry_product_payment_accepted($order, $product);
         }
       }
-      // event: previously accepted payment is cancelled
-      elseif ($order->order_status <= uc_get_order_status_id('post_payment') && $status >= uc_get_order_status_id('awaiting_payment')) {
+      else if ($newstate == 'canceled') {
         foreach ($order->products as $product) {
           uc_expiry_product_payment_cancelled($order, $product);
         }

