diff --git a/src/Form/WebformComponentsForm.php b/src/Form/WebformComponentsForm.php
index e12df2a..17d84cc 100644
--- a/src/Form/WebformComponentsForm.php
+++ b/src/Form/WebformComponentsForm.php
@@ -31,10 +31,10 @@ class WebformComponentsForm extends FormBase {
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL) {
+  public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $webform_node = NULL) {
     $form = [
       '#tree' => TRUE,
-      '#node' => $node,
+      '#node' => $webform_node,
       '#component_options' => webform_component_options(),
       '#component_weights' => [],
       'components' => [],
@@ -42,7 +42,7 @@ class WebformComponentsForm extends FormBase {
 
     $form['nid'] = [
       '#type' => 'value',
-      '#value' => $node->id(),
+      '#value' => $webform_node->id(),
     ];
 
     $form['components'] = [
@@ -84,7 +84,7 @@ class WebformComponentsForm extends FormBase {
     // Get max weight and set default weights for all components. Defaults
     // needed to adjust later if the add component form needs to be inserted
     // directly after newly added component.
-    foreach ($node->webform['components'] as $cid => $component) {
+    foreach ($webform_node->webform['components'] as $cid => $component) {
       $form['#component_weights'][$cid] = $component['weight'];
       if (!isset($max_weight) || $component['weight'] > $max_weight) {
         $max_weight = $component['weight'];
@@ -111,7 +111,7 @@ class WebformComponentsForm extends FormBase {
     $add_form['type'] = [
       '#type' => 'select',
       '#options' => $form['#component_options'],
-      '#default_value' => (isset($_GET['cid']) && isset($node->webform['components'][$_GET['cid']])) ? $node->webform['components'][$_GET['cid']]['type'] : 'textfield',
+      '#default_value' => (isset($_GET['cid']) && isset($webform_node->webform['components'][$_GET['cid']])) ? $webform_node->webform['components'][$_GET['cid']]['type'] : 'textfield',
       '#attributes' => [
         'class' => ['webform-component-type'],
       ],
@@ -135,17 +135,17 @@ class WebformComponentsForm extends FormBase {
       '#title' => $this->t('Weight for new component'),
       '#title_display' => 'invisible',
       '#size' => 4,
-      '#delta' => count($node->webform['components']) > 10 ? count($node->webform['components']) : 10,
+      '#delta' => count($webform_node->webform['components']) > 10 ? count($webform_node->webform['components']) : 10,
       '#attributes' => [
         'class' => ['webform-weight'],
       ],
     ];
 
-    if (isset($_GET['cid']) && isset($node->webform['components'][$_GET['cid']])) {
+    if (isset($_GET['cid']) && isset($webform_node->webform['components'][$_GET['cid']])) {
       // Make the add form appear by default directly after the one that was
       // just added.
       $add_form['weight']['#default_value'] = $form['#component_weights'][$_GET['cid']]['weight'] + 1;
-      foreach (array_keys($node->webform['components']) as $cid) {
+      foreach (array_keys($webform_node->webform['components']) as $cid) {
         // Adjust all later components also, to make sure none of them have the
         // same weight as the new component.
         if ($form['#component_weights'][$cid] >= $add_form['weight']['#default_value']) {
@@ -170,7 +170,7 @@ class WebformComponentsForm extends FormBase {
     $add_form['parent']['pid'] = [
       '#parents' => ['components', 'add', 'pid'],
       '#type' => 'hidden',
-      '#default_value' => (isset($_GET['cid']) && isset($node->webform['components'][$_GET['cid']])) ? $node->webform['components'][$_GET['cid']]['pid'] : 0,
+      '#default_value' => (isset($_GET['cid']) && isset($webform_node->webform['components'][$_GET['cid']])) ? $webform_node->webform['components'][$_GET['cid']]['pid'] : 0,
       '#attributes' => [
         'class' => ['webform-pid'],
       ],
@@ -186,14 +186,14 @@ class WebformComponentsForm extends FormBase {
     ];
 
     // Output all existing components.
-    if (!empty($node->webform['components'])) {
+    if (!empty($webform_node->webform['components'])) {
       $component_tree = [];
       $page_count = 1;
-      _webform_components_tree_build($node->webform['components'], $component_tree, 0, $page_count);
+      _webform_components_tree_build($webform_node->webform['components'], $component_tree, 0, $page_count);
       $component_tree = _webform_components_tree_sort($component_tree);
       // Build the table rows recursively.
       foreach ($component_tree['children'] as $cid => $component) {
-        $this->buildComponentsTableRow($node, $cid, $component, 0, $form, $add_form);
+        $this->buildComponentsTableRow($webform_node, $cid, $component, 0, $form, $add_form);
       }
     }
     else {
@@ -218,7 +218,7 @@ class WebformComponentsForm extends FormBase {
     $form['actions']['submit'] = [
       '#type' => 'submit',
       '#value' => $this->t('Save'),
-      '#access' => count($node->webform['components']) > 0,
+      '#access' => count($webform_node->webform['components']) > 0,
       '#validate' => ['::validateComponentsForm'],
     ];
 
@@ -353,7 +353,7 @@ class WebformComponentsForm extends FormBase {
    *
    * @see self::buildForm()
    */
-  protected function buildComponentsTableRow($node, $cid, $component, $level, &$form, &$add_form) {
+  protected function buildComponentsTableRow($webform_node, $cid, $component, $level, &$form, &$add_form) {
     $row_class = ['draggable'];
     if (!webform_component_feature($component['type'], 'group')) {
       $row_class[] = 'tabledrag-leaf';
@@ -417,7 +417,7 @@ class WebformComponentsForm extends FormBase {
       '#title' => $this->t('Weight for @title', ['@title' => $component['name']]),
       '#title_display' => 'invisible',
       '#size' => 4,
-      '#delta' => count($node->webform['components']) > 10 ? count($node->webform['components']) : 10,
+      '#delta' => count($webform_node->webform['components']) > 10 ? count($webform_node->webform['components']) : 10,
       '#default_value' => $form['#component_weights'][$cid],
       '#attributes' => [
         'class' => ['webform-weight'],
@@ -449,20 +449,19 @@ class WebformComponentsForm extends FormBase {
     // @todo Fix these links once the routes exist.
     $form['components'][$cid]['operations']['#links']['edit'] = [
       'title' => $this->t('Edit'),
-      'url' => Url::fromRoute('entity.node.webform', ['node' => $node->id()]),
+      'url' => Url::fromRoute('entity.webform_node.webform', ['webform_node' => $webform_node->id()]),
     ];
     $form['components'][$cid]['operations']['#links']['clone'] = [
       'title' => $this->t('Clone'),
-      'url' => Url::fromRoute('entity.node.webform', ['node' => $node->id()]),
+      'url' => Url::fromRoute('entity.webform_node.webform', ['webform_node' => $webform_node->id()]),
     ];
     $form['components'][$cid]['operations']['#links']['delete'] = [
       'title' => $this->t('Delete'),
-      'url' => Url::fromRoute('entity.node.webform', ['node' => $node->id()]),
+      'url' => Url::fromRoute('entity.webform_node.webform', ['webform_node' => $webform_node->id()]),
     ];
-
     if (isset($component['children']) && is_array($component['children'])) {
       foreach ($component['children'] as $cid => $component) {
-        $this->buildComponentsTableRow($node, $cid, $component, $level + 1, $form, $add_form);
+        $this->buildComponentsTableRow($webform_node, $cid, $component, $level + 1, $form, $add_form);
       }
     }
 
diff --git a/src/ParamConverter/WebformParamConverter.php b/src/ParamConverter/WebformParamConverter.php
new file mode 100644
index 0000000..510f6ab
--- /dev/null
+++ b/src/ParamConverter/WebformParamConverter.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\webform\ParamConverter\WebformParamConverter.
+ */
+
+namespace Drupal\webform\ParamConverter;
+
+use Drupal\Core\ParamConverter\ParamConverterInterface;
+use Drupal\node\Entity\Node;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Parameter converter for upcasting webform node ids to full objects.
+ */
+class WebformParamConverter implements ParamConverterInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function convert($value, $definition, $name, array $defaults) {
+    if (!is_numeric($value)) {
+      return FALSE;
+    }
+    $node = Node::load($value);
+    if (!$node->bundle() || !\Drupal::config('webform.settings')->get('node_' . $node->bundle())) {
+      return FALSE;
+    }
+    return $node;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function applies($definition, $name, Route $route) {
+    return (!empty($definition['type']) && $definition['type'] == 'webform_node');
+  }
+
+}
diff --git a/webform.links.task.yml b/webform.links.task.yml
index 813fc72..356de8a 100644
--- a/webform.links.task.yml
+++ b/webform.links.task.yml
@@ -2,9 +2,8 @@ webform.content_overview:
   title: 'Webforms'
   route_name: webform.content_overview
   base_route: system.admin_content
-
-entity.node.webform:
+entity.webform_node.webform:
   title: Webform
-  route_name: entity.node.webform
+  route_name: entity.webform_node.webform
   base_route: entity.node.canonical
   weight: 2
diff --git a/webform.routing.yml b/webform.routing.yml
index ad1307e..fd9b696 100644
--- a/webform.routing.yml
+++ b/webform.routing.yml
@@ -14,13 +14,15 @@ webform.settings:
     _permission: 'administer site configuration'
 
 # @todo Only show on webform enabled node types
-entity.node.webform:
-  path: '/node/{node}/webform'
+entity.webform_node.webform:
+  path: '/node/{webform_node}/webform'
   defaults:
     _title: 'Webform'
     _form: '\Drupal\webform\Form\WebformComponentsForm'
   requirements:
-    # @todo This needs to call/replicate webform_node_update_access().
     _permission: 'edit webform components'
   options:
     _node_operation_route: TRUE
+    parameters:
+      webform_node:
+        type: webform_node
diff --git a/webform.services.yml b/webform.services.yml
new file mode 100644
index 0000000..5d48b65
--- /dev/null
+++ b/webform.services.yml
@@ -0,0 +1,5 @@
+services:
+  webform_node:
+    class: Drupal\webform\ParamConverter\WebformParamConverter
+    tags:
+      - { name: paramconverter }
