diff --git print.module print.module
index 40ecba8..86dda70 100644
--- print.module
+++ print.module
@@ -94,10 +94,50 @@ function print_theme() {
     'print_format_link' => array(
       'arguments' => array(),
     ),
+    'print_node' => array(
+      'arguments' => array('node' => NULL,'type' => ''),
+      'template' => 'print_node',
+    ),
+    'print_page' => array(
+      'arguments' => array('print' => NULL,'type' => '','node' => NULL),
+      'template' => 'print_page',
+    ),
   );
 }
 
 /**
+ * Clones the theme regestry for nodes for print_node to make it work the same way in the same directries
+ */
+function print_theme_registry_alter(&$theme_registry) {
+  $theme_registry['print_node']['theme paths'] += $theme_registry['node']['theme paths'];
+}
+
+/**
+ * Renders the content of the node using the theme api
+ */
+function print_preprocess_print_node($vars) {
+  $format =  $vars['type'];
+  $type = $vars['node']->type;
+  $vars['template_files'][] = "node";
+  $vars['template_files'][] = "node-$type";
+  $vars['template_files'][] = "print_node";
+  $vars['template_files'][] = "print_node_$format";
+  $vars['template_files'][] = "print_node_$format.node-$type";
+}
+
+
+/**
+ * Renders the print page, where the node content gets embedded
+ */
+function print_preprocess_print_page($vars) {
+  $format =  $vars['type'];
+  $type = $vars['node']->type;
+  $vars['template_files'][] = "print_page";
+  $vars['template_files'][] = "print_page_$format";
+  $vars['template_files'][] = "print_page_$format.node-$type";
+}
+
+/**
  * Implementation of hook_menu().
  */
 function print_menu() {
diff --git print.pages.inc print.pages.inc
index 23bdc04..e8b7e81 100644
--- print.pages.inc
+++ print.pages.inc
@@ -18,7 +18,6 @@ $_print_urls = PRINT_URLS_DEFAULT;
  * Generate an HTML version of the printer-friendly page
  *
  * @see print_controller()
- * @see _print_get_template()
  */
 function print_controller_html() {
   $args = func_get_args();
@@ -28,13 +27,7 @@ function print_controller_html() {
   $print = print_controller($path, $cid, PRINT_HTML_FORMAT);
   if ($print !== FALSE) {
     $node = $print['node'];
-
-    ob_start();
-    include_once(_print_get_template(PRINT_HTML_FORMAT, $print['type']));
-    $html = ob_get_contents();
-    ob_end_clean();
-    $html = drupal_final_markup($html);
-    print $html;
+    $html = theme('print_page', $print, 'html', $node);
 
     $nodepath = (isset($node->path)) ? drupal_get_normal_path($node->path) : 'node/'. $path;
     db_query("UPDATE {print_page_counter} SET totalcount = totalcount + 1, timestamp = %d WHERE path = '%s'", time(), $nodepath);
@@ -452,51 +445,6 @@ function _print_friendly_urls($url = 0) {
 }
 
 /**
- * Choose most appropriate template
- *
- * Auxiliary function to resolve the most appropriate template trying to find
- * a content specific template in the theme or module dir before falling back
- * on a generic template also in those dirs.
- *
- * @param format
- *   format of the PF page being rendered (html, pdf, etc.)
- * @param $type
- *   name of the node type being rendered in a PF page
- * @return
- *   filename of the most suitable template
- */
-function _print_get_template($format = NULL, $type = NULL) {
-  $filenames = array();
-  // First try to find a template defined both for the format and then the type
-  if (!empty($format) && !empty($type)) {
-    $filenames[] = "print_$format.node-$type.tpl.php";
-  }
-  // Then only for the format
-  if (!empty($format)) {
-    $filenames[] = "print_$format.tpl.php";
-  }
-  // If the node type is known, then try to find that type's template file
-  if (!empty($type)) {
-    $filenames[] = "print.node-$type.tpl.php";
-  }
-  // Finally search for a generic template file
-  $filenames[] = 'print.tpl.php';
-
-  foreach ($filenames as $value) {
-    // First in the theme directory
-    $file = drupal_get_path('theme', $GLOBALS['theme_key']) .'/'. $value;
-    if (file_exists($file)) {
-      return $file;
-    }
-    // Then in the module directory
-    $file = drupal_get_path('module', 'print') .'/'. $value;
-    if (file_exists($file)) {
-      return $file;
-    }
-  }
-}
-
-/**
  * Check URL list settings for this node
  *
  * @param node
@@ -585,8 +533,7 @@ function _print_generate_node($nid, $cid = NULL, $format = PRINT_HTML_FORMAT, $t
     // Disable service links module output
     unset($node->content['service_links']);
 
-    $content = drupal_render($node->content);
-
+    $content = theme('print_node', $node, $format);
     // Disable the AdSense module ads
     $content = preg_replace('!<div class=[\'"]adsense[\'"].*?</div>!sim', '', $content);
 
diff --git print.tpl.php print.tpl.php
deleted file mode 100644
index c47fb47..0000000
--- print.tpl.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-// $Id: print.tpl.php,v 1.8.2.15 2009/07/09 12:00:52 jcnventura Exp $
-
-/**
- * @file
- * Default print module template
- *
- * @ingroup print
- */
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php print $print['language']; ?>" xml:lang="<?php print $print['language']; ?>">
-  <head>
-    <?php print $print['head']; ?>
-    <title><?php print $print['title']; ?></title>
-    <?php print $print['scripts']; ?>
-    <?php print $print['robots_meta']; ?>
-    <?php print $print['base_href']; ?>
-    <?php print $print['favicon']; ?>
-    <?php print $print['css']; ?>
-  </head>
-  <body<?php print $print['sendtoprinter']; ?>>
-    <?php if (!empty($print['message'])) {
-      print '<div class="print-message">'. $print['message'] .'</div><p />';
-    } ?>
-    <div class="print-logo"><?php print $print['logo']; ?></div>
-    <div class="print-site_name"><?php print $print['site_name']; ?></div>
-    <p />
-    <div class="print-breadcrumb"><?php print $print['breadcrumb']; ?></div>
-    <hr class="print-hr" />
-    <h1 class="print-title"><?php print $print['title']; ?></h1>
-    <div class="print-submitted"><?php print $print['submitted']; ?></div>
-    <div class="print-created"><?php print $print['created']; ?></div>
-    <div class="print-content"><?php print $print['content']; ?></div>
-    <div class="print-taxonomy"><?php print $print['taxonomy']; ?></div>
-    <div class="print-footer"><?php print $print['footer_message']; ?></div>
-    <hr class="print-hr" />
-    <div class="print-source_url"><?php print $print['source_url']; ?></div>
-    <div class="print-links"><?php print $print['pfp_links']; ?></div>
-  </body>
-</html>
diff --git print_mail/print_mail.inc print_mail/print_mail.inc
index b3371ec..138c4b5 100644
--- print_mail/print_mail.inc
+++ print_mail/print_mail.inc
@@ -258,11 +258,7 @@ function print_mail_form_submit($form, &$form_state) {
       $params['subject'] = $form_state['values']['fld_subject'];
 
       $node = $print['node'];
-      ob_start();
-      include_once(_print_get_template(PRINT_MAIL_FORMAT, $print['type']));
-      $params['body'] = ob_get_contents();
-      ob_end_clean();
-      $params['body'] = drupal_final_markup($params['body']);
+      $params['body'] = theme('print_page', $print, 'email', $node);
 
       $ok = FALSE;
       if (function_exists('job_queue_add') && variable_get('print_mail_job_queue', PRINT_MAIL_JOB_QUEUE_DEFAULT)) {
diff --git print_page.tpl.php print_page.tpl.php
new file mode 100644
index 0000000..c47fb47
--- /dev/null
+++ print_page.tpl.php
@@ -0,0 +1,41 @@
+<?php
+// $Id: print.tpl.php,v 1.8.2.15 2009/07/09 12:00:52 jcnventura Exp $
+
+/**
+ * @file
+ * Default print module template
+ *
+ * @ingroup print
+ */
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php print $print['language']; ?>" xml:lang="<?php print $print['language']; ?>">
+  <head>
+    <?php print $print['head']; ?>
+    <title><?php print $print['title']; ?></title>
+    <?php print $print['scripts']; ?>
+    <?php print $print['robots_meta']; ?>
+    <?php print $print['base_href']; ?>
+    <?php print $print['favicon']; ?>
+    <?php print $print['css']; ?>
+  </head>
+  <body<?php print $print['sendtoprinter']; ?>>
+    <?php if (!empty($print['message'])) {
+      print '<div class="print-message">'. $print['message'] .'</div><p />';
+    } ?>
+    <div class="print-logo"><?php print $print['logo']; ?></div>
+    <div class="print-site_name"><?php print $print['site_name']; ?></div>
+    <p />
+    <div class="print-breadcrumb"><?php print $print['breadcrumb']; ?></div>
+    <hr class="print-hr" />
+    <h1 class="print-title"><?php print $print['title']; ?></h1>
+    <div class="print-submitted"><?php print $print['submitted']; ?></div>
+    <div class="print-created"><?php print $print['created']; ?></div>
+    <div class="print-content"><?php print $print['content']; ?></div>
+    <div class="print-taxonomy"><?php print $print['taxonomy']; ?></div>
+    <div class="print-footer"><?php print $print['footer_message']; ?></div>
+    <hr class="print-hr" />
+    <div class="print-source_url"><?php print $print['source_url']; ?></div>
+    <div class="print-links"><?php print $print['pfp_links']; ?></div>
+  </body>
+</html>
diff --git print_pdf/print_pdf.pages.inc print_pdf/print_pdf.pages.inc
index 95d767a..11f1144 100644
--- print_pdf/print_pdf.pages.inc
+++ print_pdf/print_pdf.pages.inc
@@ -17,7 +17,6 @@ require_once(drupal_get_path('module', 'print') .'/print.pages.inc');
  * Generate a PDF version of the printer-friendly page
  *
  * @see print_controller()
- * @see _print_get_template()
  * @see _print_pdf_dompdf()
  * @see _print_pdf_tcpdf()
  */
@@ -63,12 +62,7 @@ function print_pdf_controller() {
   }
 
   $node = $print['node'];
-  ob_start();
-  include_once(_print_get_template(PRINT_PDF_FORMAT, $print['type']));
-  $html = ob_get_contents();
-  ob_end_clean();
-  $html = drupal_final_markup($html);
-
+  $html = theme('print_page', $print, 'pdf', $node);
   // Convert the a href elements, to make sure no relative links remain
   $pattern = '!<(a\s[^>]*?)>!is';
   $html = preg_replace_callback($pattern, '_print_rewrite_urls', $html);
