diff --git a/menu_admin_per_menu.module b/menu_admin_per_menu.module
index 5fae00c..ba5fbe2 100644
--- a/menu_admin_per_menu.module
+++ b/menu_admin_per_menu.module
@@ -6,10 +6,10 @@
  */
 
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Render\Element;
 use Drupal\menu_ui\Form\MenuLinkEditForm;
 use Drupal\menu_ui\MenuForm;
 use Drupal\menu_link_content\Form\MenuLinkContentForm;
+use Drupal\Core\Session\AccountInterface;
 
 /**
  * Implementation of hook_form_alter().
@@ -20,7 +20,8 @@ function menu_admin_per_menu_form_alter(&$form, FormStateInterface $form_state,
     || $form_object instanceof MenuLinkContentForm) {
     $account = \Drupal::currentUser();
     if (!$account->hasPermission('administer menu')) {
-      menu_admin_per_menu_filter_parent_options($form['menu_parent']['#options']);
+      $options = $form['menu_parent']['#options'];
+      $form['menu_parent']['#options'] = menu_admin_per_menu_filter_parent_options($account, $options);
     }
   }
   if ($form_object instanceof MenuForm) {
@@ -39,52 +40,47 @@ function menu_admin_per_menu_form_alter(&$form, FormStateInterface $form_state,
 function menu_admin_per_menu_form_node_form_alter(&$form, FormStateInterface $form_state) {
   $account = \Drupal::currentUser();
   if (!$account->hasPermission('administer menu')) {
-    $menu_options = &$form['menu']['link']['menu_parent']['#options'];
-    $menu_exist = menu_admin_per_menu_filter_parent_options($menu_options);
-    if ($menu_exist){
-      $form['menu']['link']['menu_parent']['#default_value'] = reset($menu_options);
-    }
-    else {
+    /** @var \Drupal\menu_admin_per_menu\MenuAdminPerMenuAccessInterface $allowedMenusService */
+    $allowedMenusService = \Drupal::service('menu_admin_per_menu.allowed_menus');
+    $allowed_menus = $allowedMenusService->getPerMenuPermissions($account);
+
+    $default_value = &$form['menu']['link']['menu_parent']['#default_value'];
+    list($current_menu, ) = explode(':', $default_value, 2);
+    // Disallow editing the menu item if there is a pre-existing menu item
+    // belonging to a menu the user does not have permission to access.
+    if (!empty($current_menu) && !in_array($current_menu, $allowed_menus)) {
       $form['menu']['#access'] = FALSE;
+      return;
     }
-  }
-}
 
-/**
- * Deletes not allowed menu items from select element for current user.
- *
- * @param array &$element
- *   Reference to form select element with menu items.
- *
- * @return bool
- *   FALSE if there is no allowed menu items,
- *   TRUE if we have some allowed menu items.
- */
-function menu_admin_per_menu_filter_parent_options(&$element) {
-  $allowed_menus = menu_admin_per_menu_get_allowed_menus();
-  if (count($allowed_menus) && is_array($element)) {
-    $option_keys = array_keys($element);
-    foreach ($option_keys as $option_key) {
-      list($menu, $item) = explode(':', $option_key);
-      $permission = 'administer ' . $menu . ' menu items';
-      if (!isset($allowed_menus[$permission])) {
-        unset($element[$option_key]);
-      }
-    }
-    return count($element);
+    $options = &$form['menu']['link']['menu_parent']['#options'];
+    $options = menu_admin_per_menu_filter_parent_options($account, $options ? $options : []);
+    $form['menu']['#access'] = count($options) > 0;
   }
-  return FALSE;
 }
 
 /**
- * Returns an array of the allowed menus for current user.
+ * Removes menu items for menus a user does not have permission to access.
+ *
+ * @param \Drupal\Core\Session\AccountInterface
+ *   The user to check for access.
+ * @param array $options
+ *   An array of menu item labels keyed by menu item ID.
  *
  * @return array
- *   An array with the menus machine-readable names as values.
+ *   Filtered menu item labels keyed by menu item ID.
  */
-function menu_admin_per_menu_get_allowed_menus() {
-  $account = \Drupal::currentUser();
+function menu_admin_per_menu_filter_parent_options(AccountInterface $account, array $options) {
+  /** @var \Drupal\menu_admin_per_menu\MenuAdminPerMenuAccessInterface $allowedMenusService */
   $allowedMenusService = \Drupal::service('menu_admin_per_menu.allowed_menus');
   $allowed_menus = $allowedMenusService->getPerMenuPermissions($account);
-  return $allowed_menus;
+
+  foreach ($options as $key => $option) {
+    list($menu, ) = explode(':', $key, 2);
+    if (!in_array($menu, $allowed_menus)) {
+      unset($options[$key]);
+    }
+  }
+
+  return $options;
 }
diff --git a/src/Access/MenuAdminPerMenuAccess.php b/src/Access/MenuAdminPerMenuAccess.php
index c0a2b79..b69bd20 100644
--- a/src/Access/MenuAdminPerMenuAccess.php
+++ b/src/Access/MenuAdminPerMenuAccess.php
@@ -29,7 +29,7 @@ class MenuAdminPerMenuAccess implements MenuAdminPerMenuAccessInterface {
       foreach ($menus as $name => $title) {
         $permission = 'administer ' . $name . ' menu items';
         if ($account->hasPermission($permission)) {
-          $perms_menu[$permission] = $permission;
+          $perms_menu[$permission] = $name;
         }
       }
       \Drupal::moduleHandler()->alter('menu_admin_per_menu_get_permissions', $perms_menu, $account);
