diff --git a/uc_followup/uc_followup.module b/uc_followup/uc_followup.module
--- a/uc_followup/uc_followup.module
+++ b/uc_followup/uc_followup.module
@@ -142,26 +142,36 @@ function uc_followup_cron() {
   if (variable_get('uc_followup_auto_send', TRUE)) {
     $time = time();
     // Select pending flow-ups.
-    $mega_query = '
-      SELECT o.order_id, fu.* , fus.date, fus.manual, fus.email
-      FROM {uc_followup} fu
-      LEFT JOIN {uc_orders} o ON fu.order_status = o.order_status
-      LEFT JOIN (
+    $sql = array();
+    $sql['SELECT'] = array('o.order_id','fu.*','fus.date','fus.manual','fus.email');
+    $sql['FROM'] = array('{uc_followup} fu');
+    $sql['JOIN'] = array(
+      'LEFT JOIN {uc_orders} o ON fu.order_status = o.order_status',
+      'LEFT JOIN (
         SELECT *, COUNT(order_id) as "sent_count"
           FROM {uc_followup_sent}
           GROUP BY followup_id, order_id
           ORDER BY date DESC 
-        ) fus ON fu.followup_id = fus.followup_id AND fus.order_id = o.order_id
-      WHERE
-      ( 
+      ) fus ON fu.followup_id = fus.followup_id AND fus.order_id = o.order_id'
+    );
+    $sql['WHERE'] = array(
+      '( 
         (fus.date IS NULL AND (o.modified + fu.hours_past * 3600 BETWEEN %d - fu.hours_past * 3600 AND %d)) OR
         (
           (fu.repeat_after > 0 AND (fus.date + fu.repeat_after * 3600 BETWEEN %d - fu.hours_past * 3600 AND %d)) AND
           (fu.repeat_max = 0 OR fu.repeat_max < fus.sent_count)
         )
-      )
-      AND fu.status = 1
-    ';
+      )',
+      'AND fu.status = 1'
+    );
+
+    drupal_alter('uc_followup_mega_query', $sql);
+
+    $mega_query = 'SELECT ' . implode(' ', $sql['SELECT']);
+    $mega_query .= "\n FROM " . implode(' ', $sql['FROM']);
+    $mega_query .= " \n"      . implode("\n ", $sql['JOIN']);
+    $mega_query .= " \n WHERE " .implode("\n", $sql['WHERE']);
+
     $result = db_query($mega_query, $time, $time, $time, $time);
     $i = 0;
     while (($pending = db_fetch_array($result)) && ($i < variable_get('uc_followup_send_limit', 100))) {
