diff --git a/config/schema/page_manager.schema.yml b/config/schema/page_manager.schema.yml
index c51fade..d96ece0 100644
--- a/config/schema/page_manager.schema.yml
+++ b/config/schema/page_manager.schema.yml
@@ -44,6 +44,12 @@ page_manager.page.*:
             value:
               type: string
               label: 'Context value'
+    menu_type:
+      type: string
+      label: 'Menu type'
+    menu_settings:
+      type: page_manager.menu.settings.[id]
+      label: 'Menu settings'
 
 page_manager.page_variant.*:
   type: config_entity
diff --git a/page_manager.services.yml b/page_manager.services.yml
index 37a83bd..99a9276 100644
--- a/page_manager.services.yml
+++ b/page_manager.services.yml
@@ -1,4 +1,7 @@
 services:
+  plugin.manager.page_manager_menu:
+    class: Drupal\page_manager\Plugin\PageManagerMenuManager
+    parent: default_plugin_manager
   page_manager.current_user_context:
     class: Drupal\page_manager\EventSubscriber\CurrentUserContext
     arguments: ['@current_user', '@entity_type.manager']
diff --git a/src/Annotation/PageManagerMenu.php b/src/Annotation/PageManagerMenu.php
new file mode 100644
index 0000000..2d400ff
--- /dev/null
+++ b/src/Annotation/PageManagerMenu.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Annotation\PageManagerMenu.
+ */
+
+namespace Drupal\page_manager\Annotation;
+
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines a PageManagerMenu annotation object.
+ *
+ * @Annotation
+ */
+class PageManagerMenu extends Plugin {
+
+  /**
+   * The plugin ID.
+   *
+   * @var string
+   */
+  public $id;
+
+  /**
+   * The label of the menu type.
+   *
+   * @var \Drupal\Core\Annotation\Translation
+   *
+   * @ingroup plugin_translatable
+   */
+  public $label;
+
+}
diff --git a/src/Entity/Page.php b/src/Entity/Page.php
index fa14938..9bdde71 100644
--- a/src/Entity/Page.php
+++ b/src/Entity/Page.php
@@ -49,6 +49,8 @@ use Drupal\page_manager\PageVariantInterface;
  *     "access_logic",
  *     "access_conditions",
  *     "static_context",
+ *     "menu_type",
+ *     "menu_settings"
  *   },
  *   links = {
  *     "collection" = "/admin/structure/page_manager",
@@ -132,6 +134,10 @@ class Page extends ConfigEntityBase implements PageInterface {
    */
   protected $use_admin_theme;
 
+  protected $menu_type = 'route';
+
+  protected $menu_settings = [];
+
   /**
    * Static context references.
    *
@@ -361,10 +367,18 @@ class Page extends ConfigEntityBase implements PageInterface {
     return $this->getParameters();
   }
 
+  public function getMenuType() {
+    return $this->menu_type;
+  }
+
   public static function preDelete(EntityStorageInterface $storage, array $entities) {
     parent::preDelete($storage, $entities); // TODO: Change the autogenerated stub
   }
 
+  public function getMenuSettings() {
+    return $this->menu_settings;
+  }
+
   /**
    * {@inheritdoc}
    */
diff --git a/src/Form/PageGeneralForm.php b/src/Form/PageGeneralForm.php
index cd0ef17..6e715ce 100644
--- a/src/Form/PageGeneralForm.php
+++ b/src/Form/PageGeneralForm.php
@@ -102,6 +102,7 @@ class PageGeneralForm extends FormBase {
         '#description' => $this->t('Check any optional features you need to be presented with forms for configuring them. If you do not check them here you will still be able to utilize these features once the new page is created. If you are not sure, leave these unchecked.'),
         '#options' => [
           'access' => $this->t('Access controls'),
+          'menu' => $this->t('Visible menu item'),
           'selection' => $this->t('Selection rules'),
           //'contexts' => $this->t('Contexts'),
         ],
diff --git a/src/Form/PageMenuForm.php b/src/Form/PageMenuForm.php
new file mode 100644
index 0000000..c221ad3
--- /dev/null
+++ b/src/Form/PageMenuForm.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Form\PageMenuForm.
+ */
+
+namespace Drupal\page_manager\Form;
+
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\RedirectCommand;
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormState;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+use Drupal\page_manager\Plugin\PageManagerMenuManager;
+use Drupal\user\SharedTempStoreFactory;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+class PageMenuForm extends FormBase {
+
+  /**
+   * @var \Drupal\page_manager\Plugin\PageManagerMenuManager
+   */
+  protected $manager;
+
+  /**
+   * @var \Drupal\user\SharedTempStoreFactory
+   */
+  protected $tempstore;
+
+  public static function create(ContainerInterface $container) {
+    return new static($container->get('plugin.manager.page_manager_menu'), $container->get('user.shared_tempstore'));
+  }
+
+  function __construct(PageManagerMenuManager $manager, SharedTempStoreFactory $tempstore) {
+    $this->manager = $manager;
+    $this->tempstore = $tempstore;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'page_manager_menu_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $cached_values = $form_state->getTemporaryValue('wizard');
+    /** @var $page \Drupal\page_manager\Entity\Page */
+    $page = $cached_values['page'];
+    // Set the machine_name into the form_state for later use.
+    $form_state->set('machine_name', $page->id());
+    $form['#tree'] = TRUE;
+    $options = [
+      'route' => $this->t('No menu entry'),
+    ];
+    foreach($this->manager->getDefinitions() as $plugin_id => $definition) {
+      $options[$plugin_id] = $definition['label'];
+    }
+    $form['menu_type'] = [
+      '#type' => 'radios',
+      '#title' => $this->t('Menu type'),
+      '#options' => $options,
+      '#default_value' => $page->getMenuType(),
+      '#ajax' => [
+        'callback' => [$this, 'menuSettings'],
+      ]
+    ];
+    if ($page->getMenuType() != 'route') {
+      // @todo remove the array ternary when the entity is complete with defaults.
+      $instance = $this->manager->createInstance($page->getMenuType(), $page->getMenuSettings());
+      $form['instance'] = [
+        '#type' => 'value',
+        '#value' => $instance,
+      ];
+      $form['menu_settings'] = $instance->buildConfigurationForm([], $form_state);
+    }
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, FormStateInterface $form_state) {
+    if ($form_state->hasValue('menu_settings')) {
+      $settings = (new FormState())->setValues($form_state->getValue('menu_settings'));
+      $instance = $form_state->getValue('instance');
+      $instance->validateConfigurationForm($form, $settings);
+    }
+  }
+
+  /**
+   * Get information about the current route.
+   *
+   * @param mixed $cached_values
+   *   The cached values from the wizard.
+   *
+   * @return array
+   *   A two item array containing the route name and array of parameters.
+   */
+  protected function getRouteInfo($cached_values) {
+    /** @var $page \Drupal\page_manager\Entity\Page */
+    $page = $cached_values['page'];
+
+    $route_name = $page->isNew() ? 'entity.page.add_step_form' : 'entity.page.edit_form';
+    return [$route_name, [
+     'machine_name' => $cached_values['id'],
+     'step' => 'menu'
+    ]];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    if ($form_state->hasValue('menu_settings')) {
+      $cached_values = $form_state->getTemporaryValue('wizard');
+      /** @var $page \Drupal\page_manager\Entity\Page */
+      $page = $cached_values['page'];
+      $settings = (new FormState())->setValues($form_state->getValue('menu_settings'));
+      $instance = $form_state->getValue('instance');
+      $instance->submitConfigurationForm($form, $settings);
+      $page->set('menu_settings', $instance->getConfiguration());
+      $form_state->setTemporaryValue('wizard', $cached_values);
+    }
+  }
+
+  /**
+   * Ajax menu settings rendering.
+   */
+  public function menuSettings(array $form, FormStateInterface $form_state) {
+    $cached_values = $form_state->getTemporaryValue('wizard');
+    /** @var $page \Drupal\page_manager\Entity\Page */
+    $page = $cached_values['page'];
+    $page->set('menu_type', $form_state->getValue('menu_type'));
+    $this->tempstore->get('page_manager.page')->set($cached_values['id'], $cached_values);
+    $response = new AjaxResponse();
+    list($route_name, $route_parameters) = $this->getRouteInfo($cached_values);
+    $response->addCommand(new RedirectCommand($this->url($route_name, $route_parameters)));
+    return $response;
+  }
+
+}
diff --git a/src/Plugin/MenuBase.php b/src/Plugin/MenuBase.php
new file mode 100644
index 0000000..c3d2c49
--- /dev/null
+++ b/src/Plugin/MenuBase.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\MenuBase.
+ */
+
+namespace Drupal\page_manager\Plugin;
+
+
+use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\DependencyInjection\DependencySerializationTrait;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+abstract class MenuBase implements PageManagerMenuInterface {
+  use StringTranslationTrait, DependencySerializationTrait;
+
+  /**
+   * The plugin_id.
+   *
+   * @var string
+   */
+  protected $pluginId;
+
+  /**
+   * The plugin implementation definition.
+   *
+   * @var array
+   */
+  protected $pluginDefinition;
+
+  /**
+   * Configuration information passed into the plugin.
+   *
+   * When using an interface like
+   * \Drupal\Component\Plugin\ConfigurablePluginInterface, this is where the
+   * configuration should be stored.
+   *
+   * Plugin configuration is optional, so plugin implementations must provide
+   * their own setters and getters.
+   *
+   * @var array
+   */
+  protected $configuration;
+
+  /**
+   * Constructs a Drupal\Component\Plugin\PluginBase object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition) {
+    $this->pluginId = $plugin_id;
+    $this->pluginDefinition = $plugin_definition;
+    $this->setConfiguration($configuration);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfiguration() {
+    return $this->configuration;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setConfiguration(array $configuration) {
+    $this->configuration = NestedArray::mergeDeep(
+      $this->defaultConfiguration(),
+      $configuration
+    );
+    // Unset keys that are not relevant to this plugin instance.
+    $keys = array_keys($this->defaultConfiguration());
+    foreach ($this->configuration as $key => $value) {
+      if (array_search($key, $keys) === FALSE) {
+        unset($this->configuration[$key]);
+      }
+    }
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPluginId() {
+    return $this->pluginId;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPluginDefinition() {
+    return $this->pluginDefinition;
+  }
+
+}
diff --git a/src/Plugin/PageManagerMenu/DefaultMenuTab.php b/src/Plugin/PageManagerMenu/DefaultMenuTab.php
new file mode 100644
index 0000000..773de31
--- /dev/null
+++ b/src/Plugin/PageManagerMenu/DefaultMenuTab.php
@@ -0,0 +1,101 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\PageManagerMenu\DefaultMenuTab.
+ */
+
+namespace Drupal\page_manager\Plugin\PageManagerMenu;
+
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Menu\LocalTaskManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @PageManagerMenu(
+ *   id = "default_menu_tab",
+ *   label = @Translation("Default menu tab")
+ * )
+ */
+class DefaultMenuTab extends MenuTab {
+
+  /**
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $storage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($container->get('entity.manager')->getStorage('menu'), $container->get('plugin.manager.menu.local_task'), $configuration, $plugin_id, $plugin_definition);
+  }
+
+  public function __construct(EntityStorageInterface $entity_storage, LocalTaskManagerInterface $task_manager, array $configuration, $plugin_id, $plugin_definition) {
+    $this->storage = $entity_storage;
+    parent::__construct($task_manager, $configuration, $plugin_id, $plugin_definition);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildConfigurationForm($form, $form_state);
+    $form['parent_menu_type'] = [
+      '#type' => 'radios',
+      '#title' => $this->t('Parent menu type'),
+      '#options' => [
+        'route' => $this->t('No menu entry'),
+        'menu' => $this->t('Normal menu entry'),
+        'task' => $this->t('Menu tab'),
+      ],
+      '#default_value' => 'route',
+    ];
+    $form['parent_title'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Parent title'),
+      '#description' => $this->t('If set to normal or tab, enter the text to use for the menu item.'),
+      '#states' => [
+        'visible' => [
+          ':input[name="parent_menu_type"]' => [['value' => 'menu'], ['value' => 'task']],
+        ]
+      ],
+    ];
+    $menus = [];
+    foreach ($this->storage->loadMultiple() as $id => $menu) {
+      $menus[$id] = $menu->label();
+    }
+    $form['parent_menu'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Parent menu'),
+      '#options' => $menus,
+      '#states' => [
+        'visible' => [
+          ':input[name="parent_menu_type"]' => ['value' => 'menu'],
+        ]
+      ],
+    ];
+
+    $form['parent_weight'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Parent weight'),
+      '#description' => $this->t('The lower the weight the higher/further left it will appear.'),
+      '#default_value' => 0,
+      '#states' => [
+        'visible' => [
+          ':input[name="parent_menu_type"]' => [['value' => 'menu'], ['value' => 'task']],
+        ]
+      ],
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+}
diff --git a/src/Plugin/PageManagerMenu/MenuAction.php b/src/Plugin/PageManagerMenu/MenuAction.php
new file mode 100644
index 0000000..c0b8f04
--- /dev/null
+++ b/src/Plugin/PageManagerMenu/MenuAction.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\PageManagerMenu\MenuAction
+ */
+
+namespace Drupal\page_manager\Plugin\PageManagerMenu;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Menu\LocalActionManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\page_manager\Plugin\MenuBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @PageManagerMenu(
+ *   id = "menu_action",
+ *   label = @Translation("Local action")
+ * )
+ */
+class MenuAction extends MenuBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * @var \Drupal\Core\Menu\LocalActionManagerInterface
+   */
+  protected $actionManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($container->get('plugin.manager.menu.local_action'), $configuration, $plugin_id, $plugin_definition);
+  }
+
+  public function __construct(LocalActionManagerInterface $action_manager, array $configuration, $plugin_id, $plugin_definition) {
+    $this->actionManager = $action_manager;
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+  }
+
+  public function invalidate() {
+    $this->actionManager->clearCachedDefinitions();
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'title' => '',
+      'weight' => 0,
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['title'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Title'),
+      '#description' => $this->t('If set to normal or tab, enter the text to use for the menu item.'),
+      '#default_value' => $this->configuration['title'],
+    ];
+
+    $form['weight'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Weight'),
+      '#description' => $this->t('The lower the weight the higher/further left it will appear.'),
+      '#default_value' => $this->configuration['weight'],
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['title'] = $form_state->getValue('title');
+    $this->configuration['weight'] = $form_state->getValue('weight');
+  }
+
+}
diff --git a/src/Plugin/PageManagerMenu/MenuTab.php b/src/Plugin/PageManagerMenu/MenuTab.php
new file mode 100644
index 0000000..31501aa
--- /dev/null
+++ b/src/Plugin/PageManagerMenu/MenuTab.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\PageManagerMenu\MenuTab.
+ */
+
+namespace Drupal\page_manager\Plugin\PageManagerMenu;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Menu\LocalTaskManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\page_manager\Plugin\MenuBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @PageManagerMenu(
+ *   id = "menu_tab",
+ *   label = @Translation("Menu tab")
+ * )
+ */
+class MenuTab extends MenuBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * @var \Drupal\Core\Menu\LocalTaskManagerInterface
+   */
+  protected $taskManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($container->get('plugin.manager.menu.local_task'), $configuration, $plugin_id, $plugin_definition);
+  }
+
+  public function __construct(LocalTaskManagerInterface $task_manager, array $configuration, $plugin_id, $plugin_definition) {
+    $this->taskManager = $task_manager;
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function invalidate() {
+    $this->taskManager->clearCachedDefinitions();
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return [
+      'title' => '',
+      'weight' => 0,
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['title'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Title'),
+      '#description' => $this->t('If set to normal or tab, enter the text to use for the menu item.'),
+      '#default_value' => $this->configuration['title'],
+    ];
+
+    $form['weight'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Weight'),
+      '#description' => $this->t('The lower the weight the higher/further left it will appear.'),
+      '#default_value' => $this->configuration['weight'],
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['title'] = $form_state->getValue('title');
+    $this->configuration['weight'] = $form_state->getValue('weight');
+  }
+
+}
diff --git a/src/Plugin/PageManagerMenu/NormalMenu.php b/src/Plugin/PageManagerMenu/NormalMenu.php
new file mode 100644
index 0000000..8884979
--- /dev/null
+++ b/src/Plugin/PageManagerMenu/NormalMenu.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\PageManagerMenu\NormalMenu
+ */
+
+namespace Drupal\page_manager\Plugin\PageManagerMenu;
+
+
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Menu\MenuLinkManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\page_manager\Plugin\MenuBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @PageManagerMenu(
+ *   id = "normal_menu",
+ *   label = @Translation("Normal menu entry")
+ * )
+ */
+class NormalMenu extends MenuBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * @var \Drupal\Core\Menu\MenuLinkManagerInterface
+   */
+  protected $linkManager;
+
+  /**
+   * @var \Drupal\Core\Entity\EntityStorageInterface
+   */
+  protected $menuStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($container->get('plugin.manager.menu.link'), $container->get('entity.manager')->getStorage('menu'), $configuration, $plugin_id, $plugin_definition);
+  }
+
+  public function __construct(MenuLinkManagerInterface $link_manager, EntityStorageInterface $menu_storage, array $configuration, $plugin_id, $plugin_definition) {
+    $this->linkManager = $link_manager;
+    $this->menuStorage = $menu_storage;
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+  }
+
+  public function invalidate() {
+    $this->linkManager->rebuild();
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form['title'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Title'),
+      '#description' => $this->t('If set to normal or tab, enter the text to use for the menu item.'),
+      '#default_value' => $this->configuration['title'],
+    ];
+
+    $menus = [];
+    foreach ($this->menuStorage->loadMultiple() as $id => $menu) {
+      $menus[$id] = $menu->label();
+    }
+    $form['menu'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Menu'),
+      '#options' => $menus,
+      '#default_value' => $this->configuration['menu'],
+    ];
+
+    $form['weight'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Weight'),
+      '#description' => $this->t('The lower the weight the higher/further left it will appear.'),
+      '#default_value' => $this->configuration['weight'],
+    ];
+
+    return $form;
+  }
+
+  public function defaultConfiguration() {
+    return [
+      'title' => '',
+      'menu' => '',
+      'weight' => 0,
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $this->configuration['title'] = $form_state->getValue('title');
+    $this->configuration['menu'] = $form_state->getValue('menu');
+    $this->configuration['weight'] = $form_state->getValue('weight');
+  }
+
+}
diff --git a/src/Plugin/PageManagerMenuInterface.php b/src/Plugin/PageManagerMenuInterface.php
new file mode 100644
index 0000000..902641a
--- /dev/null
+++ b/src/Plugin/PageManagerMenuInterface.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\PageManagerMenuInterface.
+ */
+
+namespace Drupal\page_manager\Plugin;
+
+
+use Drupal\Component\Plugin\ConfigurablePluginInterface;
+use Drupal\Component\Plugin\PluginInspectionInterface;
+use Drupal\Core\Plugin\PluginFormInterface;
+
+interface PageManagerMenuInterface extends PluginFormInterface, ConfigurablePluginInterface, PluginInspectionInterface{
+
+  public function invalidate();
+
+}
diff --git a/src/Plugin/PageManagerMenuManager.php b/src/Plugin/PageManagerMenuManager.php
new file mode 100644
index 0000000..b60e5bf
--- /dev/null
+++ b/src/Plugin/PageManagerMenuManager.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\page_manager\Plugin\PageManagerMenuManager.
+ */
+
+namespace Drupal\page_manager\Plugin;
+
+
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\DefaultPluginManager;
+
+class PageManagerMenuManager extends DefaultPluginManager {
+
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
+    $this->alterInfo('page_manager_menu_info');
+    $this->setCacheBackend($cache_backend, 'page_manager_menu_plugins');
+    parent::__construct('Plugin/PageManagerMenu', $namespaces, $module_handler, 'Drupal\page_manager\Plugin\PageManagerMenuInterface', 'Drupal\page_manager\Annotation\PageManagerMenu');
+  }
+
+}
diff --git a/src/Wizard/PageAddWizard.php b/src/Wizard/PageAddWizard.php
index acd35ad..e680854 100644
--- a/src/Wizard/PageAddWizard.php
+++ b/src/Wizard/PageAddWizard.php
@@ -32,7 +32,7 @@ class PageAddWizard extends PageWizardBase {
     ];
 
     // Hide any optional steps that aren't selected.
-    $optional_steps = ['access', 'contexts', 'selection'];
+    $optional_steps = ['access', 'menu', 'contexts', 'selection'];
     foreach ($optional_steps as $step_name) {
       if (empty($cached_values['wizard_options'][$step_name])) {
         unset($operations[$step_name]);
diff --git a/src/Wizard/PageWizardBase.php b/src/Wizard/PageWizardBase.php
index 27c7e68..a5cb64f 100644
--- a/src/Wizard/PageWizardBase.php
+++ b/src/Wizard/PageWizardBase.php
@@ -68,6 +68,10 @@ class PageWizardBase extends EntityFormWizardBase {
       'title' => $this->t('Page Access'),
       'form' => '\Drupal\page_manager\Form\PageAccessForm',
     ];
+    $operations['menu'] = [
+      'title' => $this->t('Menu Information'),
+      'form' => '\Drupal\page_manager\Form\PageMenuForm',
+    ];
     $operations['contexts'] = [
       'title' => $this->t('Configure Contexts'),
       'form' => '\Drupal\page_manager\Form\PageContextsForm',
