diff --git a/README.txt b/README.txt
index b4d4bf7..0b0d31e 100644
--- a/README.txt
+++ b/README.txt
@@ -89,8 +89,13 @@
   by-mailkey theming can be performed:
     mimemail-message.tpl.php (for all messages)
     mimemail-message--[mailkey].tpl.php (for messages with a specific mailkey)
-  Note that if you are using a different administration theme than your default theme,
-  you should place the same template files into that theme folder too.
+
+  Messages can be rendered using different themes. You can choose the following
+  settings to render the e-mail:
+    'current': Theme currently used by the user who runs drupal_mail().
+    'default': Default theme, obtained via variable theme_default.
+    'domain': Theme obtained via Domain Theme module.
+  or any other active theme.
 
   Images with absolute URL will be available as remote content. To embed images
   into emails you have to use a relative URL or an internal path.
diff --git a/includes/mimemail.admin.inc b/includes/mimemail.admin.inc
index d7ad8b8..556aa0c 100644
--- a/includes/mimemail.admin.inc
+++ b/includes/mimemail.admin.inc
@@ -78,6 +78,26 @@ function mimemail_admin_settings() {
     '#attributes' => array('class' => array('filter-list')),
   );
 
+  // Generate a list of options which theme to use to render the emails.
+  $theme_options = array('current' => t('Current'), 'default' => t('Default'));
+  if (module_exists('domain_theme')) {
+    $theme_options['domain'] = t('Domain');
+  }
+  // Get a list of all themes.
+  $themes = list_themes();
+  foreach ($themes as $name => $theme) {
+    if ($theme->status == 1) {
+      $theme_options[$name] = $theme->info['name'];
+    }
+  }
+  $form['mimemail']['mimemail_theme'] = array(
+    '#type' => 'select',
+    '#title' => t('Theme to render the emails'),
+    '#description' => t('Select the theme that will be used to render the emails. This can be either the current theme, the default theme, the domain theme or any active theme.'),
+    '#options' => $theme_options,
+    '#default_value' => variable_get('mimemail_theme', 'current'),
+  );
+
   $form['mimemail']['advanced'] = array(
     '#type' => 'fieldset',
     '#title' => t('Advanced settings'),
@@ -137,5 +157,16 @@ function mimemail_admin_settings() {
     drupal_set_message(t('Please choose a mail engine.'), 'error');
   }
 
+  $form['#submit'][] = 'mimemail_admin_settings_submit';
+
   return system_settings_form($form);
 }
+
+/**
+ * Submit handler for the settings form.
+ *
+ * Rebuilds theme registry to make changes needed by theme rendering.
+ */
+function mimemail_admin_settings_submit($form, &$form_state) {
+  drupal_theme_rebuild();
+}
diff --git a/mimemail.module b/mimemail.module
index 9b4924b..8390db8 100644
--- a/mimemail.module
+++ b/mimemail.module
@@ -89,6 +89,14 @@ function mimemail_theme() {
 }
 
 /**
+ * Implements hook_theme_registry_alter().
+ */
+function mimemail_theme_registry_alter(&$theme_registry) {
+  module_load_include('inc', 'mimemail', 'theme/mimemail.theme');
+  return mimemail_theme_theme_registry_alter(&$theme_registry);
+}
+
+/**
  * Implements hook_rules_file_info().
  */
 function mimemail_rules_file_info() {
diff --git a/theme/mimemail.theme.inc b/theme/mimemail.theme.inc
index 7285f51..2d994af 100644
--- a/theme/mimemail.theme.inc
+++ b/theme/mimemail.theme.inc
@@ -4,7 +4,7 @@
  * @file
  * The theme system, which controls the output of the messages.
  */
- 
+
 function mimemail_theme_theme() {
   $path = drupal_get_path('module', 'mimemail') . '/theme';
 
@@ -20,6 +20,63 @@ function mimemail_theme_theme() {
 }
 
 /**
+ * Implements hook_theme_registry_alter().
+ */
+function mimemail_theme_theme_registry_alter(&$theme_registry) {
+  global $theme_key;
+  static $executed = array();
+
+  // Preventing double execution.
+  if (isset($executed[$theme_key])) {
+    return;
+  }
+
+  $executed[$theme_key] = TRUE;
+  foreach ($theme_registry as $name => $hook) {
+    if ($name == 'mimemail_message') {
+      $mimemail_theme = _mimemail_get_theme();
+
+      // We don't have to change anything in case the render theme is the current theme.
+      if ($mimemail_theme != $theme_key) {
+        $themes = list_themes();
+        // Getting the render theme.
+        $theme = isset($themes[$mimemail_theme]) ? clone $themes[$mimemail_theme] : NULL;
+        if ($theme != NULL) {
+          // Stablishing variables for further process.
+          $base_theme = array();
+          if (isset($theme->base_themes)) {
+            foreach (array_keys($theme->base_themes) as $base) {
+              $base_theme[$base] = clone $themes[$base];
+            }
+          }
+          if (isset($theme->base_theme) && !isset($base_theme[$theme->base_theme])) {
+            $base_theme[$theme->base_theme] = clone $themes[$theme->base_theme];
+          }
+          $theme_engine = isset($theme->engine) ? $theme->engine : NULL;
+
+          // Include template files to let _theme_load_registry add preprocess functions.
+          include_once(drupal_get_path('theme', $theme->name) . '/template.php');
+          foreach ($base_theme as $base) {
+            include_once(drupal_get_path('theme', $base->name) . '/template.php');
+          }
+
+          // Get the theme_registry cache.
+          $cache = _theme_load_registry($theme, $base_theme, $theme_engine);
+          if (isset($cache[$name])) {
+            $cache[$name]['includes'][] = drupal_get_path('theme', $theme->name) . '/template.php';
+            foreach ($base_theme as $base) {
+              $cache[$name]['includes'][] = drupal_get_path('theme', $base->name) . '/template.php';
+            }
+            // Changing current registry for the new record.
+            $theme_registry[$name] = $cache[$name];
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
  * A preprocess function for theme('mimemail_message').
  *
  * The $variables array initially contains the following arguments:
@@ -31,19 +88,7 @@ function mimemail_theme_theme() {
  * @see theme/mimemail-message.tpl.php for additional variables.
  */
 function template_preprocess_mimemail_message(&$variables) {
-  $theme = variable_get('theme_default', NULL);
-
-  // Fetch the theme for the current domain.
-  if (module_exists('domain_theme')) {
-    // Assign the selected theme, based on the active domain.
-    global $_domain;
-    $domain_theme = domain_theme_lookup($_domain['domain_id']);
-    // The above returns -1 on failure.
-    if ($domain_theme != -1) {
-      $theme = $domain_theme['theme'];
-    }
-  }
-
+  $theme = _mimemail_get_theme();
   $themepath = drupal_get_path('theme', $theme);
 
   $sitestyle = variable_get('mimemail_sitestyle', 1);
@@ -155,3 +200,34 @@ function _mimemail_process_comment($matches) {
       return '/*\_*/';
   }
 }
+
+/**
+ * Helper function to retrieve the key of the theme to render the emails.
+ *
+ * @todo Add some kind of hook to let other modules alter this behavior.
+ */
+function _mimemail_get_theme() {
+  global $theme_key;
+
+  $theme = variable_get('mimemail_theme', 'current');
+  switch ($theme) {
+    case 'default':
+      $theme = variable_get('theme_default', NULL);
+      break;
+    case 'current':
+      $theme = $theme_key;
+      break;
+    case 'domain_theme':
+      // Fetch the theme for the current domain.
+      if (module_exists('domain_theme')) {
+        // Assign the selected theme, based on the active domain.
+        global $_domain;
+        $domain_theme = domain_theme_lookup($_domain['domain_id']);
+        // The above returns -1 on failure.
+        $theme = ($domain_theme != -1) ? $domain_theme['theme'] : $theme_key;
+      }
+      break;
+  }
+
+  return $theme;
+}
