Index: uc_order.module
===================================================================
--- uc_order.module	(revision 1186)
+++ uc_order.module	(working copy)
@@ -1437,6 +1437,7 @@
 }
 
 function uc_order_load_invoice($order, $op = 'view', $template = 'customer') {
+  global $theme;
   static $invoice;
 
   if (isset($invoice[$order->order_id][$template])) {
@@ -1445,7 +1446,15 @@
 
   $thank_you_message = FALSE;
 
-  $file = drupal_get_path('module', 'uc_order') .'/templates/'. $template .'.itpl.php';
+  // Check the current theme directory for the template first.
+  $theme_path = drupal_get_path('theme', $theme);
+  $file = $theme_path .'/uc_order_templates/'. $template .'.itpl.php';
+
+  // Then check the module directory if it doesn't exist.
+  if (!file_exists($file)) {
+    $file = drupal_get_path('module', 'uc_order') .'/templates/'. $template .'.itpl.php';
+  }
+
   if (file_exists($file)) {
     switch ($op) {
       case 'checkout-mail':
@@ -1504,6 +1513,7 @@
 
 // Return an array of invoice templates found in ubercart/uc_order/templates.
 function uc_invoice_template_list() {
+  global $theme_path;
   static $templates = array();
 
   // If the template list hasn't already been loaded...
@@ -1517,6 +1527,14 @@
       $templates[] = substr($file->name, 0, strlen($file->name) - 5);
     }
 
+    // Add to that, all files found in the current theme's directory.
+    foreach (file_scan_directory($theme_path .'/uc_order_templates', '.*\.itpl\.php', array('.', '..', 'CVS'), 0, FALSE) as $file) {
+      $template_name = substr($file->name, 0, strlen($file->name) - 5);
+      if (!in_array($template_name, $templates)) {
+        $templates[] = $template_name;
+      }
+    }
+
     // Sort the template names alphabetically.
     sort($templates);
   }
