diff --git a/src/Controller/TokenDevelController.php b/src/Controller/TokenDevelController.php
index 189ae01..332bad2 100644
--- a/src/Controller/TokenDevelController.php
+++ b/src/Controller/TokenDevelController.php
@@ -97,6 +97,7 @@ class TokenDevelController extends ControllerBase {
     $build['tokens'] = [
       '#type' => 'token_tree_table',
       '#show_restricted' => FALSE,
+      '#show_nested' => FALSE,
       '#skip_empty_values' => TRUE,
       '#token_tree' => $token_tree,
       '#columns' => ['token', 'value'],
diff --git a/src/Element/TokenTreeTable.php b/src/Element/TokenTreeTable.php
index 447c463..6de9c95 100644
--- a/src/Element/TokenTreeTable.php
+++ b/src/Element/TokenTreeTable.php
@@ -26,6 +26,7 @@ class TokenTreeTable extends Table {
       '#columns' => ['name', 'token', 'description'],
       '#empty' => '',
       '#show_restricted' => FALSE,
+      '#show_nested' => FALSE,
       '#skip_empty_values' => FALSE,
       '#click_insert' => TRUE,
       '#sticky' => FALSE,
@@ -55,6 +56,11 @@ class TokenTreeTable extends Table {
   public static function preRenderTokenTree($element) {
     $multiple_token_types = count($element['#token_tree']) > 1;
     foreach ($element['#token_tree'] as $token_type => $type_info) {
+      // Do not show nested tokens.
+      if (!empty($type_info['nested']) && empty($element['#show_nested'])) {
+        continue;
+      }
+
       if ($multiple_token_types) {
         $row = static::formatRow($token_type, $type_info, $element['#columns'], TRUE);
         $element['#rows'][] = $row;
diff --git a/src/Tests/Tree/HelpPageTest.php b/src/Tests/Tree/HelpPageTest.php
index 7d310eb..a957e32 100644
--- a/src/Tests/Tree/HelpPageTest.php
+++ b/src/Tests/Tree/HelpPageTest.php
@@ -39,7 +39,6 @@ class HelpPageTest extends TokenTestBase {
     $this->drupalGet('admin/help/token');
     $this->assertText('The list of the currently available tokens on this site are shown below.');
 
-    $this->assertTokenGroup('Array');
     $this->assertTokenGroup('Current date');
     $this->assertTokenGroup('Site information');
 
@@ -58,5 +57,13 @@ class HelpPageTest extends TokenTestBase {
     // Assert some of the restricted tokens to ensure they are shown.
     $this->assertTokenInTree('[user:one-time-login-url]', 'user');
     $this->assertTokenInTree('[user:original:cancel-url]', 'user--original');
+
+    // The Array token is marked as nested, so it should not show up as a top
+    // level token, only nested under another token. For instance, user:roles
+    // is of type Array and tokens of type Array have 'nested' setting true.
+    $this->assertTokenNotGroup('Array');
+    $this->assertTokenNotGroup('user:roles');
+    $this->assertTokenInTree('[user:roles]', 'user');
   }
+
 }
diff --git a/src/Tests/Tree/TokenTreeTestTrait.php b/src/Tests/Tree/TokenTreeTestTrait.php
index 4479497..dc70a23 100644
--- a/src/Tests/Tree/TokenTreeTestTrait.php
+++ b/src/Tests/Tree/TokenTreeTestTrait.php
@@ -42,6 +42,28 @@ trait TokenTreeTestTrait {
   }
 
   /**
+   * Check to see if the specified token group is not present in the token
+   * browser.
+   *
+   * @param string $token_group
+   *   The name of the token group.
+   * @param string $message
+   *   (optional) A message to display with the assertion.
+   * @param string $group
+   *   (optional) The group this message is not in, which is displayed in a
+   *   column in test output.
+   */
+  protected function assertTokenNotGroup($token_group, $message = '', $group = 'Other') {
+    $groups = $this->getTokenGroups();
+
+    if (!$message) {
+      $message = "Token group $token_group not found.";
+    }
+
+    $this->assertFalse(in_array($token_group, $groups), $message, $group);
+  }
+
+  /**
    * Check to see if the specified token is present in the token browser.
    *
    * @param $token
diff --git a/src/Tests/Tree/TreeTest.php b/src/Tests/Tree/TreeTest.php
index 1618211..12e1d18 100644
--- a/src/Tests/Tree/TreeTest.php
+++ b/src/Tests/Tree/TreeTest.php
@@ -39,7 +39,6 @@ class TreeTest extends TokenTestBase {
   public function testAllTokens() {
     $this->drupalGet($this->getTokenTreeUrl(['token_types' => 'all']));
 
-    $this->assertTokenGroup('Array');
     $this->assertTokenGroup('Current date');
     $this->assertTokenGroup('Site information');
 
diff --git a/src/TreeBuilder.php b/src/TreeBuilder.php
index 6af76db..80ebca2 100644
--- a/src/TreeBuilder.php
+++ b/src/TreeBuilder.php
@@ -52,6 +52,7 @@ class TreeBuilder implements TreeBuilderInterface {
       'global_types' => TRUE,
       'click_insert' => TRUE,
       'show_restricted' => FALSE,
+      'show_nested' => FALSE,
       'recursion_limit' => 3,
     ];
 
@@ -75,6 +76,7 @@ class TreeBuilder implements TreeBuilderInterface {
     $tree_options = [
       'flat' => TRUE,
       'restricted' => $options['show_restricted'],
+      'nested' => $options['show_nested'],
       'depth' => $options['recursion_limit'],
     ];
 
@@ -92,6 +94,7 @@ class TreeBuilder implements TreeBuilderInterface {
       '#type' => 'token_tree_table',
       '#token_tree' => $token_tree,
       '#show_restricted' => $options['show_restricted'],
+      '#show_nested' => $options['show_nested'],
       '#click_insert' => $options['click_insert'],
       '#columns' => ['name', 'token', 'description'],
       '#empty' => t('No tokens available'),
diff --git a/src/TreeBuilderInterface.php b/src/TreeBuilderInterface.php
index e47aae8..c4212c2 100644
--- a/src/TreeBuilderInterface.php
+++ b/src/TreeBuilderInterface.php
@@ -54,6 +54,8 @@ interface TreeBuilderInterface {
    *     allow inserting tokens in fields by clicking on them.
    *   - 'show_restricted' (defaults to FALSE): Show restricted tokens in the
    *     tree.
+   *   - 'show_nested' (defaults to FALSE): If this token is nested and should
+   *     therefor not show on the token browser as a top level token.
    *   - 'recursion_limit' (defaults to 3): Only show tokens up to the specified
    *     depth.
    *
diff --git a/token.module b/token.module
index e9291cd..f67c458 100644
--- a/token.module
+++ b/token.module
@@ -24,6 +24,7 @@ function token_help($route_name, RouteMatchInterface $route_match) {
     $token_tree = \Drupal::service('token.tree_builder')->buildAllRenderable([
       'click_insert' => FALSE,
       'show_restricted' => TRUE,
+      'show_nested' => FALSE,
     ]);
     $output = '<h3>' . t('About') . '</h3>';
     $output .= '<p>' . t('The <a href=":project">Token</a> module provides a user interface for the site token system. It also adds some additional tokens that are used extensively during site development. Tokens are specially formatted chunks of text that serve as placeholders for a dynamically generated value. For more information, covering both the token system and the additional tools provided by the Token module, see the <a href=":online">online documentation</a>.', [':online' => 'https://www.drupal.org/documentation/modules/token', ':project' => 'https://www.drupal.org/project/token']) . '</p>';
@@ -54,6 +55,7 @@ function token_theme() {
       'global_types' => TRUE,
       'click_insert' => TRUE,
       'show_restricted' => FALSE,
+      'show_nested' => FALSE,
       'recursion_limit' => 3,
       'text' => NULL,
       'options' => [],
@@ -397,6 +399,7 @@ function token_form_user_admin_settings_alter(&$form, FormStateInterface $form_s
     '#theme' => 'token_tree_link',
     '#token_types' => array('user'),
     '#show_restricted' => TRUE,
+    '#show_nested' => FALSE,
     '#weight' => 90,
   );
 }
diff --git a/token.pages.inc b/token.pages.inc
index 026bc18..164438d 100644
--- a/token.pages.inc
+++ b/token.pages.inc
@@ -28,6 +28,7 @@ function template_preprocess_token_tree_link(&$variables) {
     'global_types' => TRUE,
     'click_insert' => TRUE,
     'show_restricted' => FALSE,
+    'show_nested' => FALSE,
     'recursion_limit' => 3,
   ];
   $query_options = array_intersect_key($variables, $tree_variables);
diff --git a/token.tokens.inc b/token.tokens.inc
index f38955a..717fad8 100644
--- a/token.tokens.inc
+++ b/token.tokens.inc
@@ -329,6 +329,7 @@ function token_token_info() {
     'name' => t('Array'),
     'description' => t('Tokens related to arrays of strings.'),
     'needs-data' => 'array',
+    'nested' => TRUE,
   );
   $info['tokens']['array']['first'] = array(
     'name' => t('First'),
