diff --git a/modules/commerce_billy_pdf/commerce_billy_pdf.admin.inc b/modules/commerce_billy_pdf/commerce_billy_pdf.admin.inc
index 0aabb85..4ac79b5 100644
--- a/modules/commerce_billy_pdf/commerce_billy_pdf.admin.inc
+++ b/modules/commerce_billy_pdf/commerce_billy_pdf.admin.inc
@@ -7,10 +7,13 @@
 
 /**
  * Admin settings form for invoice pdf.
+ *
+ * @param $temp_id
+ *  The ID of the template needed for variable storage.
  */
-function commerce_billy_pdf_admin_form($form, &$form_state) {
+function commerce_billy_pdf_admin_form($form, &$form_state, $temp_id) {
 
-  $settings = variable_get('commerce_billy_pdf_text_settings', array());
+  $settings = variable_get('commerce_billy_pdf_text_settings_' . $temp_id, array());
 
   $form['commerce_billy_pdf_settings'] = array(
     '#tree' => TRUE,
@@ -47,12 +50,12 @@ function commerce_billy_pdf_admin_form($form, &$form_state) {
   $form['commerce_billy_pdf_logo'] = array(
     '#type' => 'textfield',
     '#title' => t('Logo'),
-    '#default_value' => variable_get('commerce_billy_pdf_logo', 'misc/druplicon.png'),
+    '#default_value' => variable_get('commerce_billy_pdf_logo_' . $temp_id, 'misc/druplicon.png'),
     '#required' => TRUE,
     '#description' => t('Path to invoice logo.'),
   );
 
-  $css_files = variable_get('commerce_billy_pdf_css_files', array(drupal_get_path('module', 'commerce_billy_pdf') . '/css/pdf.css'));
+  $css_files = variable_get('commerce_billy_pdf_css_files_' . $temp_id, array(drupal_get_path('module', 'commerce_billy_pdf') . '/css/pdf.css'));
   $default_value = "";
   foreach ($css_files as $file) {
     $default_value .= $file . "\n";
@@ -66,6 +69,7 @@ function commerce_billy_pdf_admin_form($form, &$form_state) {
   );
 
   $form = system_settings_form($form);
+  $form_state['commerce_billy_pdf_temp_id'] = $temp_id;
   // Use custom submit handler.
   $form['#submit'] = array('commerce_billy_pdf_admin_form_submit');
   return $form;
@@ -76,10 +80,11 @@ function commerce_billy_pdf_admin_form($form, &$form_state) {
  */
 function commerce_billy_pdf_admin_form_submit($form, $form_state) {
   $settings = array();
+  $temp_id = $form_state['commerce_billy_pdf_temp_id'];
   foreach ($form_state['values']['commerce_billy_pdf_settings'] as $key => $value) {
     $settings[$key] = $value;
   }
-  variable_set('commerce_billy_pdf_text_settings', $settings);
+  variable_set('commerce_billy_pdf_text_settings_' . $temp_id, $settings);
 
   $css_files = array();
   foreach (explode("\n", $form_state['values']['commerce_billy_pdf_css_files']) as $file) {
@@ -88,8 +93,8 @@ function commerce_billy_pdf_admin_form_submit($form, $form_state) {
       $css_files[] = $file;
     }
   }
-  variable_set('commerce_billy_pdf_css_files', $css_files);
+  variable_set('commerce_billy_pdf_css_files_' . $temp_id, $css_files);
 
-  variable_set('commerce_billy_pdf_logo', $form_state['values']['commerce_billy_pdf_logo']);
+  variable_set('commerce_billy_pdf_logo_' . $temp_id, $form_state['values']['commerce_billy_pdf_logo']);
   drupal_set_message(t('The configuration options have been saved.'));
 }
diff --git a/modules/commerce_billy_pdf/commerce_billy_pdf.install b/modules/commerce_billy_pdf/commerce_billy_pdf.install
index e18642f..9742dfa 100644
--- a/modules/commerce_billy_pdf/commerce_billy_pdf.install
+++ b/modules/commerce_billy_pdf/commerce_billy_pdf.install
@@ -16,7 +16,7 @@ function commerce_billy_pdf_enable() {
     'invoice_text' => '',
     'invoice_footer' => 'My company, Street 123, State, United States',
   );
-  variable_set('commerce_billy_pdf_text_settings', $settings);
+  variable_set('commerce_billy_pdf_text_settings_default', $settings);
 }
 
 
@@ -24,7 +24,7 @@ function commerce_billy_pdf_enable() {
  * Implements hook_uninstall().
  */
 function commerce_billy_pdf_uninstall() {
-  variable_del('commerce_billy_pdf_text_settings');
-  variable_del('commerce_billy_pdf_logo');
-  variable_del('commerce_billy_pdf_css_files');
+  variable_del('commerce_billy_pdf_text_settings_default');
+  variable_del('commerce_billy_pdf_logo_default');
+  variable_del('commerce_billy_pdf_css_files_default');
 }
diff --git a/modules/commerce_billy_pdf/commerce_billy_pdf.module b/modules/commerce_billy_pdf/commerce_billy_pdf.module
index 234b2dd..a9653a7 100644
--- a/modules/commerce_billy_pdf/commerce_billy_pdf.module
+++ b/modules/commerce_billy_pdf/commerce_billy_pdf.module
@@ -20,11 +20,31 @@ function commerce_billy_pdf_menu() {
   $items['admin/commerce/config/billy-invoice/pdf'] = array(
     'title' => 'PDF',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('commerce_billy_pdf_admin_form'),
+    'page arguments' => array('commerce_billy_pdf_admin_form', 'default'),
     'access arguments' => array('configure order settings'),
     'type' => MENU_LOCAL_TASK,
     'file' => 'commerce_billy_pdf.admin.inc',
   );
+  // Allow other modules to define templates.
+  $templates = module_invoke_all('commerce_billy_pdf_templates');
+
+  $items['admin/commerce/config/billy-invoice/pdf/default'] = array(
+    'title' => 'Default',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => -10,
+  );
+  // Create a menu item for each template.
+  foreach ($templates as $template) {
+    $items['admin/commerce/config/billy-invoice/pdf/' . $template['id']] = array(
+      'title' => $template['title'],
+      'page callback' => 'drupal_get_form',
+      'page arguments' => array('commerce_billy_pdf_admin_form', 5),
+      'access arguments' => array('configure order settings'),
+      'type' => MENU_LOCAL_TASK,
+      'file' => 'commerce_billy_pdf.admin.inc',
+    );
+  }
+
   return $items;
 }
 
@@ -111,7 +131,10 @@ function commerce_billy_pdf_preprocess_entity(&$variables) {
  * Page callback for invoice PDF.
  */
 function commerce_billy_pdf($order) {
-  $html = commerce_billy_pdf_html($order);
+  // Allow other modules to specify a template ID for a given order.
+  $temp_ids = module_invoke_all('commerce_billy_pdf_get_order_template', $order);
+  $temp_id = empty($temp_ids) ? 'default' : reset($temp_ids);
+  $html = commerce_billy_pdf_html($order, $temp_id);
   $filename = preg_replace('/[^a-z0-9]/', '_', drupal_strtolower('invoice_' . $order->order_number)) . '.pdf';
 
   try {
@@ -131,8 +154,11 @@ function commerce_billy_pdf($order) {
  *
  * @param object[] $orders
  *   Array of order objects.
+ *
+ * @param $temp_id
+ *   The template ID to use when retrieving template info.
  */
-function commerce_billy_pdf_html($orders) {
+function commerce_billy_pdf_html($orders, $temp_id) {
   // Backwards compatibilty: also accept a single order object.
   if (is_object($orders)) {
     $orders = array($orders);
@@ -144,7 +170,7 @@ function commerce_billy_pdf_html($orders) {
       $vars['viewed_orders'][] = entity_view('commerce_order', array($order->order_id => $order), 'canceled', NULL, TRUE);
     }
   }
-  $css_files = variable_get('commerce_billy_pdf_css_files', array(drupal_get_path('module', 'commerce_billy_pdf') . '/css/pdf.css'));
+  $css_files = variable_get('commerce_billy_pdf_css_files_' . $temp_id, array(drupal_get_path('module', 'commerce_billy_pdf') . '/css/pdf.css'));
   $vars['inline_css'] = "";
   foreach ($css_files as $file) {
     $vars['inline_css'] .= file_get_contents($file);
@@ -158,7 +184,9 @@ function commerce_billy_pdf_html($orders) {
  */
 function commerce_billy_pdf_commerce_order_view($order, $view_mode) {
   // Add content variables for the PDF generation.
-  $settings = variable_get('commerce_billy_pdf_text_settings', array());
+  $temp_ids = module_invoke_all('commerce_billy_pdf_get_order_template', $order);
+  $temp_id = empty($temp_ids) ? 'default' : reset($temp_ids);
+  $settings = variable_get('commerce_billy_pdf_text_settings_' . $temp_id, array());
   $custom_date_format = !empty($settings['invoice_date_format']) ? $settings['invoice_date_format'] : 'Y-m-d';
   if ($view_mode == "pdf" || $view_mode == 'canceled') {
     $order->content['invoice_footer'] = array(
@@ -187,7 +215,7 @@ function commerce_billy_pdf_commerce_order_view($order, $view_mode) {
       '#markup' => t('Order No.: @id', array('@id' => $order->order_id)),
     );
     $order->content['invoice_logo'] = array(
-      '#value' => variable_get('commerce_billy_pdf_logo', 'misc/druplicon.png'),
+      '#value' => variable_get('commerce_billy_pdf_logo_' . $temp_id, 'misc/druplicon.png'),
     );
   }
   if ($view_mode == "canceled") {
