diff --git a/includes/print_views_handler.inc b/includes/print_views_handler.inc
new file mode 100644
index 0000000..2d2f18d
--- /dev/null
+++ b/includes/print_views_handler.inc
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @file
+ * Definition of print_views_handler.
+ */
+
+/**
+ * Views print handler. Insert a link to printer-friendly version of views.
+ *
+ * @ingroup views_area_handlers
+ */
+class print_views_handler extends views_handler_area {
+
+  function option_definition() {
+    $options = parent::option_definition();
+
+    $options['link_text'] = array(
+      'default' => '<p><a href="!current_path" rel="alternate">Printer-friendly version</a></p>',
+      'translatable' => TRUE,
+      'format_key' => 'format'
+    );
+    return $options;
+  }
+
+  /**
+   * Default options form that provides the label widget that all fields
+   * should have.
+   */
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    $form['link_text'] = array(
+      '#type' => 'textarea',
+      '#title' => t('Link text'),
+      '#default_value' => $this->options['link_text'],
+      '#description' => t('You may use HTML code in this field. The following token is supported: !current_path.'),
+    );
+  }
+
+  /**
+   * Render the link to printer-friendly version.
+   */
+  function render($empty = FALSE) {
+    if (!$empty || !empty($this->options['link_text'])) {
+      $path = base_path() . 'print/' . $_GET['q'] . ($_SERVER['QUERY_STRING'] ? '?' .$_SERVER['QUERY_STRING'] : '');
+      $value = t($this->options['link_text'], array('!current_path' => $path));
+      return $this->sanitize_value($value, 'xss_admin');
+    }
+    return '';
+  }
+}
diff --git a/print.info b/print.info
index 6fa82c6..9471c5c 100644
--- a/print.info
+++ b/print.info
@@ -8,6 +8,7 @@ files[] = print.pages.inc
 files[] = print.install
 files[] = print.views.inc
 files[] = print_join_page_counter.inc
+files[] = includes/print_views_handler.inc
 configure = admin/config/user-interface/print
 
 ; Information added by drupal.org packaging script on 2012-09-04
diff --git a/print.views.inc b/print.views.inc
index c50e183..e694c6f 100644
--- a/print.views.inc
+++ b/print.views.inc
@@ -17,6 +17,11 @@ function print_views_data() {
   // from.
   $data['print_node_conf']['table']['group'] = t('Printer-friendly version');
   $data['print_page_counter']['table']['group'] = t('Printer-friendly version');
+  $data['print_page_views']['table']['group'] = t('Global');
+  $data['print_page_views']['table']['join'] = array(
+    // #global is a special flag which let's a table appear all the time.
+    '#global' => array(),
+  );
 
   // This table references the {node} table. The declaration below creates an
   // 'implicit' relationship to the node table, so that when 'node' is the base
@@ -118,5 +123,13 @@ function print_views_data() {
     ),
   );
 
+  $data['print_page_views']['print'] = array(
+    'title' => t('Printer-friendly version'),
+    'help' => t('Link to printer-friendly version.'),
+    'area' => array(
+      'handler' => 'print_views_handler',
+    ),
+  );
+
   return $data;
 }
