diff --git a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml
index 302882f0386ad5a595e168fa037d7b25be9aab23..c0286fd652c68773165d1c295656394d350ea47a 100644
--- a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml
+++ b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.action.yml
@@ -4,6 +4,7 @@ salesforce_mapping.add_action:
   route_name: entity.salesforce_mapping.add_form
   title: 'Add Mapping'
   appears_on:
+    - salesforce.structure_index
     - entity.salesforce_mapping.list
 
 salesforce_mapped_object.add_action:
diff --git a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml
index d78498a3c31f7da36e5230186e251d0d67e7cc06..853eca6da408d45cdb7e32a9bee3b77f6866a908 100644
--- a/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml
+++ b/modules/salesforce_mapping_ui/salesforce_mapping_ui.links.menu.yml
@@ -1,13 +1,7 @@
-salesforce.structure_index:
-  route_name: salesforce.structure_index
-  parent: system.admin_structure
-  title: Salesforce
-  description: 'Manage Salesforce mappings.'
-
 salesforce_mapping.admin:
   title: Salesforce Mappings
   description: 'Salesforce Mappings'
-  parent: salesforce.structure_index
+  parent: system.admin_structure
   route_name: entity.salesforce_mapping.list
 
 salesforce_mapped_object.admin:
@@ -15,3 +9,7 @@ salesforce_mapped_object.admin:
   description: 'Salesforce Mapped Objects'
   parent: system.admin_content
   route_name: entity.salesforce_mapped_object.list
+
+salesforce_mapping.extra_links:
+  deriver: \Drupal\salesforce_mapping_ui\Plugin\Derivative\SalesforceMappingExtraLinks
+  menu_name: admin
diff --git a/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml b/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml
index 6cee4c1a767b3609feb666e11a2f9e1af60e8f57..38a44fc744e794c623c0ad71f1ec38da75297580 100644
--- a/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml
+++ b/modules/salesforce_mapping_ui/salesforce_mapping_ui.routing.yml
@@ -1,9 +1,9 @@
+# Legacy path for structure/salesforce, which was an unnncessary extra layer.
 salesforce.structure_index:
   path: '/admin/structure/salesforce'
   defaults:
-    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
-    _title: 'Salesforce'
-    _description: 'Manage Salesforce mappings.'
+    _entity_list: 'salesforce_mapping'
+    _title: 'Salesforce Mappings'
   requirements:
     _permission: 'administer salesforce'
 
diff --git a/modules/salesforce_mapping_ui/src/Plugin/Derivative/SalesforceMappingExtraLinks.php b/modules/salesforce_mapping_ui/src/Plugin/Derivative/SalesforceMappingExtraLinks.php
new file mode 100644
index 0000000000000000000000000000000000000000..516c17a75d0a629d932d5dcdbd69b114e0c135ab
--- /dev/null
+++ b/modules/salesforce_mapping_ui/src/Plugin/Derivative/SalesforceMappingExtraLinks.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace Drupal\salesforce_mapping_ui\Plugin\Derivative;
+
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Extension\ThemeHandlerInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
+use Drupal\Core\Routing\RouteProviderInterface;
+use Drupal\Core\Session\AccountInterface;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\system\Entity\Menu;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a default implementation for menu link plugins.
+ */
+class SalesforceMappingExtraLinks extends DeriverBase implements ContainerDeriverInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * The route provider.
+   *
+   * @var \Drupal\Core\Routing\RouteProviderInterface
+   */
+  protected $routeProvider;
+
+  /**
+   * The theme handler.
+   *
+   * @var \Drupal\Core\Extension\ThemeHandlerInterface
+   */
+  protected $themeHandler;
+
+  /**
+   * The admin toolbar tools configuration.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $config;
+
+  /**
+   * The current user.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, ModuleHandlerInterface $module_handler, RouteProviderInterface $route_provider, ThemeHandlerInterface $theme_handler, ConfigFactoryInterface $config_factory, AccountInterface $current_user) {
+    $this->entityTypeManager = $entity_type_manager;
+    $this->moduleHandler = $module_handler;
+    $this->routeProvider = $route_provider;
+    $this->themeHandler = $theme_handler;
+    $this->config = $config_factory->get('admin_toolbar_tools.settings');
+    $this->currentUser = $current_user;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) {
+    return new static(
+      $container->get('entity_type.manager'),
+      $container->get('module_handler'),
+      $container->get('router.route_provider'),
+      $container->get('theme_handler'),
+      $container->get('config.factory'),
+      $container->get('current_user')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) {
+    $links = [];
+    $entity_types = $this->entityTypeManager->getDefinitions();
+    $content_entities = [];
+    foreach ($entity_types as $key => $entity_type) {
+      if ($entity_type->getBundleEntityType() && ($entity_type->get('field_ui_base_route') != '')) {
+        $content_entities[$key] = [
+          'content_entity' => $key,
+          'content_entity_bundle' => $entity_type->getBundleEntityType(),
+        ];
+      }
+    }
+
+    $links['entity.salesforce_mapping.add_form'] = [
+      'menu_name' => 'admin',
+      'route_name' => 'entity.salesforce_mapping.add_form',
+      'parent' => 'salesforce_mapping.admin',
+      'title' => 'Add Mapping',
+      'provider' => 'salesforce_mapping_ui',
+    ];
+
+    $mappings = $this->entityTypeManager->getStorage('salesforce_mapping')
+      ->loadMultiple();
+    foreach ($mappings as $mapping) {
+      $mapping_root = 'entity.salesforce_mapping.edit_form.' . $mapping->id();
+      $links[$mapping_root] = [
+        'menu_name' => 'admin',
+        'route_name' => 'entity.salesforce_mapping.fields',
+        'parent' => 'salesforce_mapping.admin',
+        'route_parameters' => ['salesforce_mapping' => $mapping->id()],
+        'title' => $mapping->label(),
+        'provider' => 'salesforce_mapping_ui',
+      ];
+      $links[$mapping_root . '.fields'] = [
+        'menu_name' => 'admin',
+        'route_name' => 'entity.salesforce_mapping.fields',
+        'parent' => $base_plugin_definition['id'] . ':' . $mapping_root,
+        'route_parameters' => ['salesforce_mapping' => $mapping->id()],
+        'title' => 'Fields',
+        'provider' => 'salesforce_mapping_ui',
+      ];
+      $links[$mapping_root . '.settings'] = [
+        'menu_name' => 'admin',
+        'route_name' => 'entity.salesforce_mapping.edit_form',
+        'parent' => $base_plugin_definition['id'] . ':' . $mapping_root,
+        'route_parameters' => ['salesforce_mapping' => $mapping->id()],
+        'title' => 'Settings',
+        'provider' => 'salesforce_mapping_ui',
+      ];
+
+    }
+    return $links;
+  }
+
+  /**
+   * Determine if a route exists by name.
+   *
+   * @param string $route_name
+   *   The name of the route to check.
+   *
+   * @return bool
+   *   Whether a route with that route name exists.
+   */
+  public function routeExists($route_name) {
+    return (count($this->routeProvider->getRoutesByNames([$route_name])) === 1);
+  }
+
+}
diff --git a/salesforce.links.menu.yml b/salesforce.links.menu.yml
index 698b1032e4d5b8c59bb554862141efb663793c58..bd35e039952653b68ebd4e3fd3fb1b2de93e8238 100644
--- a/salesforce.links.menu.yml
+++ b/salesforce.links.menu.yml
@@ -22,3 +22,4 @@ entity.salesforce_auth.collection:
   parent: salesforce.auth_config
   title: Salesforce Authorization Providers
   description: 'Salesforce Authorization Providers.'
+