diff --git a/regcode.links.menu.yml b/regcode.links.menu.yml
index f905e705322173c1b1358003dadfc9390c44b2bd..6e085217d70dd0ebc9050132f04963d8dcdec986 100644
--- a/regcode.links.menu.yml
+++ b/regcode.links.menu.yml
@@ -1,5 +1,5 @@
 regcode.admin_list:
-  route_name: regcode.admin_list
   title: 'Registration codes'
   description: 'Manage registration codes.'
+  route_name: view.regcode.page_admin
   parent: user.admin_index
diff --git a/regcode.links.task.yml b/regcode.links.task.yml
index 0d8a423dc913fae6259957c4ecac583d5446e2df..521e206dbf3dec4a1b61a223a8a5624fbaa67d6d 100644
--- a/regcode.links.task.yml
+++ b/regcode.links.task.yml
@@ -1,23 +1,17 @@
-regcode.admin_list:
-  route_name: regcode.admin_list
-  title: List
-  weight: 10
-  base_route: regcode.admin_list
-  
 regcode.admin_create:
-  route_name: regcode.admin_create
   title: Create
+  route_name: regcode.admin_create
+  base_route: view.regcode.page_admin
   weight: 20
-  base_route: regcode.admin_list
 
 regcode.admin_manage:
-  route_name: regcode.admin_manage
   title: Manage
+  route_name: regcode.admin_manage
+  base_route: view.regcode.page_admin
   weight: 30
-  base_route: regcode.admin_list
   
 regcode.admin_settings:
-  route_name: regcode.admin_settings
   title: Settings
+  route_name: regcode.admin_settings
+  base_route: view.regcode.page_admin
   weight: 40
-  base_route: regcode.admin_list
diff --git a/regcode.module b/regcode.module
index 972f25725bd7c47b17f786a3db41804e725962eb..4116fccc00ce70b0ccb99191ef343e83e9ac1251 100644
--- a/regcode.module
+++ b/regcode.module
@@ -18,7 +18,7 @@ use Drupal\regcode\RegistrationCodeInterface;
 function regcode_help($path, $arg) {
   $output = '';
   switch ($path) {
-    case 'regcode.admin_list':
+    case 'view.regcode.page_admin':
       $output = '<p>' . t('View and manage created registration codes.') . '</p>';
       break;
 
diff --git a/tests/src/Functional/RegcodeSettingsTest.php b/tests/src/Functional/RegcodeSettingsTest.php
index b0bf1bc98f30d09e9a3b48873bf6c651b6f8ae8b..fb917ebe9024c81cf9eb970447f4498f40833f3a 100644
--- a/tests/src/Functional/RegcodeSettingsTest.php
+++ b/tests/src/Functional/RegcodeSettingsTest.php
@@ -18,7 +18,7 @@ class RegcodeSettingsTest extends BrowserTestBase {
   /**
    * {@inheritdoc}
    */
-  protected static $modules = ['regcode', 'help', 'block'];
+  protected static $modules = ['regcode', 'help', 'block', 'views'];
 
   /**
    * {@inheritdoc}
@@ -58,9 +58,9 @@ class RegcodeSettingsTest extends BrowserTestBase {
   }
 
   /**
-   * Tests module permissions / access to configuration page.
+   * Tests access to module settings tab.
    */
-  public function testUserAccess(): void {
+  public function testSettingsTab(): void {
     /** @var \Drupal\Tests\WebAssert $assert */
     $assert = $this->assertSession();
 
@@ -84,4 +84,85 @@ class RegcodeSettingsTest extends BrowserTestBase {
     $this->drupalLogout();
   }
 
+  /**
+   * Tests access to code list tab.
+   */
+  public function testListTab(): void {
+    /** @var \Drupal\Tests\WebAssert $assert */
+    $assert = $this->assertSession();
+
+    // Test as anonymous user.
+    $this->drupalGet('admin/config/people/regcode');
+    $assert->statusCodeEquals(403);
+    $assert->pageTextContains('Access denied');
+    $assert->pageTextContains('You are not authorized to access this page.');
+
+    // Test as authenticated but unprivileged user.
+    $this->drupalLogin($this->unprivUser);
+    $this->drupalGet('admin/config/people/regcode');
+    $assert->statusCodeEquals(403);
+    $this->drupalLogout();
+
+    // Test as admin user.
+    $this->drupalLogin($this->adminUser);
+    $this->drupalGet('admin/config/people/regcode');
+    $assert->statusCodeEquals(200);
+    $assert->pageTextContains('View and manage created registration codes.');
+    $this->drupalLogout();
+  }
+
+  /**
+   * Tests access to code creation tab.
+   */
+  public function testCreateTab(): void {
+    /** @var \Drupal\Tests\WebAssert $assert */
+    $assert = $this->assertSession();
+
+    // Test as anonymous user.
+    $this->drupalGet('admin/config/people/regcode/create');
+    $assert->statusCodeEquals(403);
+    $assert->pageTextContains('Access denied');
+    $assert->pageTextContains('You are not authorized to access this page.');
+
+    // Test as authenticated but unprivileged user.
+    $this->drupalLogin($this->unprivUser);
+    $this->drupalGet('admin/config/people/regcode/create');
+    $assert->statusCodeEquals(403);
+    $this->drupalLogout();
+
+    // Test as admin user.
+    $this->drupalLogin($this->adminUser);
+    $this->drupalGet('admin/config/people/regcode/create');
+    $assert->statusCodeEquals(200);
+    $assert->pageTextContains('Create manually or generate new registration codes.');
+    $this->drupalLogout();
+  }
+
+  /**
+   * Tests access to code manage tab.
+   */
+  public function testManageTab(): void {
+    /** @var \Drupal\Tests\WebAssert $assert */
+    $assert = $this->assertSession();
+
+    // Test as anonymous user.
+    $this->drupalGet('admin/config/people/regcode/manage');
+    $assert->statusCodeEquals(403);
+    $assert->pageTextContains('Access denied');
+    $assert->pageTextContains('You are not authorized to access this page.');
+
+    // Test as authenticated but unprivileged user.
+    $this->drupalLogin($this->unprivUser);
+    $this->drupalGet('admin/config/people/regcode/manage');
+    $assert->statusCodeEquals(403);
+    $this->drupalLogout();
+
+    // Test as admin user.
+    $this->drupalLogin($this->adminUser);
+    $this->drupalGet('admin/config/people/regcode/manage');
+    $assert->statusCodeEquals(200);
+    $assert->pageTextContains('Provides bulk management features for created registration codes.');
+    $this->drupalLogout();
+  }
+
 }