diff --git a/plugins/contexts/webform_submission.inc b/plugins/contexts/webform_submission.inc
new file mode 100644
index 0000000..3b67d85
--- /dev/null
+++ b/plugins/contexts/webform_submission.inc
@@ -0,0 +1,73 @@
+<?php
+
+include_once(drupal_get_path('module', 'webform') . '/includes/webform.submissions.inc');
+
+/**
+ * @file
+ * Webform sybmission ctools context type plugin.
+ *
+ */
+/**
+ * Plugins are described by creating a $plugin array which will be used
+ * by the system that includes this file.
+ */
+$plugin = array(
+  'title' => t('webform submisssion'),
+  'description' => t('Webform submission context'),
+  'context' => 'webform_context_create_webform_submission', // func to create context
+  'context name' => 'webform_submission',
+  'keyword' => 'webform',
+  'settings form' => 'webform_submission_setting_form',
+);
+
+/**
+ * Create a context, either from manual configuration or from an argument on the URL.
+ *
+ * @param $empty
+ *   If true, just return an empty context.
+ * @param $data
+ *   If from settings form, an array as from a form. If from argument, a string.
+ * @param $conf
+ *   TRUE if the $data is coming from admin configuration, FALSE if it's from a URL arg.
+ *
+ * @return
+ *   a Context object/
+ */
+function webform_context_create_webform_submission($empty, $data = NULL, $conf = FALSE) {
+  $context = new ctools_context('webform_submission');
+  $context->plugin = 'webform_submission';
+
+  if ($empty) {
+    return $context;
+  }
+  else {
+    $nid = arg(1);
+    $sid = arg(3);
+
+    $submission = webform_get_submission($nid, $sid);
+    $node = node_load($nid);
+    $components = $node->webform['components'];
+    $page_count = 1;
+    _webform_components_tree_build($components, $component_tree, 0, $page_count);
+
+    $data = new stdClass();
+
+    // Make sure at least one field is available
+    if (isset($component_tree['children'])) {
+      // Recursively add components to the form.
+      foreach ($component_tree['children'] as $cid => $component) {
+        $data->{$component['form_key']} = $submission->data[$cid]['value'][0];
+      }
+    }
+    $data->nid = $nid;
+    $data->sid = $sid;
+    $context->data = $data;
+  }
+  return $context;
+}
+
+function webform_submission_setting_form($conf, $external = FALSE) {
+  $form = array();
+
+  return $form;
+}
diff --git a/plugins/tasks/webform_submission_view.inc b/plugins/tasks/webform_submission_view.inc
new file mode 100644
index 0000000..d59e55d
--- /dev/null
+++ b/plugins/tasks/webform_submission_view.inc
@@ -0,0 +1,153 @@
+<?php
+
+/**
+ * @file
+ * Handle the 'node view' override task.
+ *
+ * This plugin overrides node/%node and reroutes it to the page manager, where
+ * a list of tasks can be used to service this request based upon criteria
+ * supplied by access plugins.
+ */
+
+/**
+ * Specialized implementation of hook_page_manager_task_tasks(). See api-task.html for
+ * more information.
+ */
+function webform_webform_submission_view_page_manager_tasks() {
+  return array(
+    // This is a 'page' task and will fall under the page admin UI
+    'task type' => 'page',
+    'title' => t('Webform submission template'),
+    'admin title' => t('Webform Submission template'),
+    'admin description' => t('When enabled, this overrides the default Drupal behavior for displaying nodes at <em>node/%node</em>. If you add variants, you may use selection criteria such as node type or language or user access to provide different views of nodes. If no variant is selected, the default Drupal node view will be used. This page only affects nodes viewed as pages, it will not affect nodes viewed in lists or at other locations. Also please note that if you are using pathauto, aliases may make a node to be somewhere else, but as far as Drupal is concerned, they are still at node/%node.'),
+    'admin path' => 'node/%webform_menu/submission/%webform_menu_submission',
+    // Menu hooks so that we can alter the node/%node menu entry to point to us.
+    'hook menu' => 'webform_webform_submission_view_menu',
+    'hook menu alter' => 'webform_webform_submission_view_menu_alter',
+    // This is task uses 'context' handlers and must implement these to give the
+    // handler data it needs.
+    'handler type' => 'context',
+    'get arguments' => 'webform_webform_submission_view_get_arguments',
+    'get context placeholders' => 'webform_webform_submission_view_get_contexts',
+    // Allow this to be enabled or disabled:
+    'disabled' => variable_get('webform_webform_submission_view_disabled', TRUE),
+    'enable callback' => 'webform_webform_submission_view_enable',
+  );
+}
+
+/**
+ * Callback defined by page_manager_node_view_page_manager_tasks().
+ *
+ * Alter the node view input so that node view comes to us rather than the
+ * normal node view process.
+ */
+function webform_webform_submission_view_menu_alter(&$items, $task) {
+  if (variable_get('webform_webform_submission_view_disabled', TRUE)) {
+    return;
+  }
+
+  // Override the node view handler for our purpose.
+  $callback = $items['node/%webform_menu/submission/%webform_menu_submission']['page callback'];
+  if ($callback == 'webform_submission_page' || variable_get('page_manager_override_anyway', FALSE)) {
+    $items['node/%webform_menu/submission/%webform_menu_submission']['page callback'] = 'webform_webform_submission_view_page';
+    $items['node/%webform_menu/submission/%webform_menu_submission']['file path'] = $task['path'];
+    $items['node/%webform_menu/submission/%webform_menu_submission']['file'] = $task['file'];
+  }
+  else {
+    // automatically disable this task if it cannot be enabled.
+    variable_set('webform_webform_submission_view_disabled', TRUE);
+    if (!empty($GLOBALS['webform_webform_submission_view_disabled'])) {
+      drupal_set_message(t('Page manager module is unable to enable node/%webform_menu/submission/%webform_menu_submission because some other module already has overridden with %callback.', array('%callback' => $callback)), 'error');
+    }
+  }
+
+  // @todo override node revision handler as well?
+}
+
+/**
+ * Entry point for our overridden webform submission view.
+ *
+ * This function asks its assigned handlers who, if anyone, would like
+ * to run with it. If no one does, it passes through to Drupal core's
+ * node view, which is node_page_view().
+ */
+function webform_webform_submission_view_page($node) {
+  // Load my task plugin
+  $task = page_manager_get_task('webform_submission_view');
+
+  // Load the node into a context.
+  ctools_include('context');
+  ctools_include('context-task-handler');
+
+  // We need to mimic Drupal's behavior of setting the node title here.
+  drupal_set_title($node->title . ' - Webform submission');
+  $uri = entity_uri('node', $node);
+  // Set the node path as the canonical URL to prevent duplicate content.
+  drupal_add_html_head_link(array('rel' => 'canonical', 'href' => url($uri['path'], $uri['options'])), TRUE);
+  // Set the non-aliased path as a default shortlink.
+  drupal_add_html_head_link(array('rel' => 'shortlink', 'href' => url($uri['path'], array_merge($uri['options'], array('alias' => TRUE)))), TRUE);
+  $contexts = ctools_context_handler_get_task_contexts($task, '', array($node));
+
+  $output = ctools_context_handler_render($task, '', $contexts, array($node->nid));
+  if ($output != FALSE) {
+    node_tag_new($node);
+    return $output;
+  }
+
+  $function = 'webform_submission_view';
+  foreach (module_implements('page_manager_override') as $module) {
+    $call = $module . '_page_manager_override';
+    if (($rc = $call('node_view')) && function_exists($rc)) {
+      $function = $rc;
+      break;
+    }
+  }
+
+  // Otherwise, fall back.
+  return $function($node);
+}
+
+/**
+ * Callback to get arguments provided by this task handler.
+ *
+ * Since this is the node view and there is no UI on the arguments, we
+ * create dummy arguments that contain the needed data.
+ */
+function webform_webform_submission_view_get_arguments($task, $subtask_id) {
+  return array(
+    array(
+      'keyword' => 'node',
+      'identifier' => t('Node being viewed'),
+      'id' => 1,
+      'name' => 'entity_id:node',
+      'settings' => array(),
+    ),
+    array(
+      'keyword' => 'webform',
+      'identifier' => t('Webform submission'),
+      'id' => 2,
+      'name' => 'webform submission',
+      'settings' => array(),
+    ),
+  );
+}
+
+/**
+ * Callback to get context placeholders provided by this handler.
+ */
+function webform_webform_submission_view_get_contexts($task, $subtask_id) {
+  return ctools_context_get_placeholders_from_argument(webform_webform_submission_view_get_arguments($task, $subtask_id));
+}
+
+/**
+ * Callback to enable/disable the page from the UI.
+ */
+function webform_webform_submission_view_enable($cache, $status) {
+  variable_set('webform_webform_submission_view_disabled', $status);
+
+  // Set a global flag so that the menu routine knows it needs
+  // to set a message if enabling cannot be done.
+  if (!$status) {
+    $GLOBALS['webform_webform_submission_view_disabled'] = TRUE;
+  }
+}
\ No newline at end of file
diff --git a/webform.info b/webform.info
index a47535b..428e242 100644
--- a/webform.info
+++ b/webform.info
@@ -4,6 +4,7 @@ description = Enables the creation of forms and questionnaires.
 core = 7.x
 package = Webform
 configure = admin/config/content/webform
+dependencies[] = ctools
 
 ; Files that contain classes:
 files[] = includes/webform.export.inc
diff --git a/webform.module b/webform.module
index 2559527..8424b24 100644
--- a/webform.module
+++ b/webform.module
@@ -3907,3 +3907,11 @@ function webform_mollom_form_info($form_id) {
 
   return $form_info;
 }
+
+/*
+ * Implementation of hook_ctools_plugin_dierctory() to let the system know
+ * we implement plugins.
+ */
+function webform_ctools_plugin_directory($module, $plugin) {
+  return 'plugins/' . $plugin;
+}
\ No newline at end of file
