diff --git a/page_access.module b/page_access.module
index 6dc4cff..7ddb560 100644
--- a/page_access.module
+++ b/page_access.module
@@ -26,6 +26,9 @@ function page_access_form_node_form_alter(&$form, FormStateInterface &$form_stat
   $user_roles = user_role_names(TRUE);
   // Remove administrator role from available user roles.
   unset($user_roles['administrator']);
+  // Adding anonymous user.
+  $view_roles = $user_roles;
+  $view_roles['anonymous'] = t('Anonymous User');
   $form['page_access'] = [
     '#type' => 'details',
     '#title' => t('Page access settings'),
@@ -47,104 +50,68 @@ function page_access_form_node_form_alter(&$form, FormStateInterface &$form_stat
     '#title' => t('Enable page access control'),
     '#default_value' => (int) (bool) $defaults['id'],
   ];
-  $form['page_access']['roles'] = [
-    '#type' => 'checkboxes',
-    '#options' => $user_roles,
-    '#title' => t('Roles'),
-    '#description' => t('Select user roles, who can view or update.'),
+  // Node View access settings.
+  $form['page_access']['view_settings'] = array(
+    '#type' => 'details',
+    '#title' => t('View Access Settings'),
+    '#open' => FALSE,
     '#states' => [
       'invisible' => [
         'input[name="page_access[enabled]"]' => ['checked' => FALSE],
       ],
     ],
-    '#default_value' => $defaults['page_access']['roles'],
+  );
+  $form['page_access']['view_settings']['roles'] = [
+    '#type' => 'checkboxes',
+    '#options' => $view_roles,
+    '#title' => t('Roles'),
+    '#description' => t('Select the user roles who can view the node'),
+    '#default_value' => $defaults['page_access']['roles']['view'],
   ];
-  $form['page_access']['users'] = [
-    '#type' => 'item',
-    '#title' => 'Users',
-    '#description' => t('Add users, who can view or update.'),
-    '#states' => [
-      'invisible' => [
-        'input[name="page_access[enabled]"]' => ['checked' => FALSE],
-      ],
+  $user_view_reference = _get_user_reference_default_value($defaults['page_access']['users']['view']);
+  $user_edit_reference = _get_user_reference_default_value($defaults['page_access']['users']['edit']);
+  $form['page_access']['view_settings']['users'] = [
+    '#type' => 'entity_autocomplete',
+    '#target_type' => 'user',
+    '#default_value' => $user_view_reference,
+    '#tags' => TRUE,
+    '#selection_settings' => ['include_anonymous' => FALSE],
+    '#description' => t('Select particular users who can view the node. Seperate multiple users by comma'),
+    '#attributes' => [
+      'class' => ['page-access-user-autocomplete'],
+      'placeholder' => 'Username',
     ],
   ];
-  $form['page_access']['list'] = [
-    '#type' => 'container',
-    '#parents' => ['page_access'],
+
+  // Node Edit access settings.
+  $form['page_access']['edit_settings'] = array(
+    '#type' => 'details',
+    '#title' => t('Edit Access Settings'),
+    '#open' => FALSE,
     '#states' => [
       'invisible' => [
         'input[name="page_access[enabled]"]' => ['checked' => FALSE],
       ],
     ],
-    '#attributes' => ['id' => ['page_access_user_list']],
+  );
+  $form['page_access']['edit_settings']['roles'] = [
+    '#type' => 'checkboxes',
+    '#options' => $user_roles,
+    '#title' => t('Roles'),
+    '#description' => t('Select user roles, who can edit the node.'),
+    '#default_value' => $defaults['page_access']['roles']['edit'],
   ];
-  if (empty($form_state->get('page_access_users_count'))) {
-    if (!empty($defaults['page_access'])) {
-      $form_state->set('page_access_users_count', count($defaults['page_access']['users']));
-    }
-    else {
-      $form_state->set('page_access_users_count', 1);
-    }
-    $form_state->set('page_access_users_to_remove', []);
-  }
-  $page_access_users_count = $form_state->get('page_access_users_count');
-  $page_access_users_to_remove = $form_state->get('page_access_users_to_remove');
-  for ($i = 0; $i < $page_access_users_count; $i++) {
-    if (in_array($i, $page_access_users_to_remove)) {
-      unset($form['page_access']['list'][$i]);
-      continue;
-    }
-    $user_reference = _get_user_reference_default_value($defaults['page_access']['users'][$i]['user_autocomplete']);
-    $form['page_access']['list'][$i]['user_autocomplete'] = [
-      '#type' => 'entity_autocomplete',
-      '#target_type' => 'user',
-      '#selection_settings' => ['include_anonymous' => FALSE],
-      '#attributes' => [
-        'class' => ['page-access-user-autocomplete'],
-        'placeholder' => 'Username',
-      ],
-      '#prefix' => '<div class="container-inline" id="page-access-' . $i . '">',
-      '#default_value' => $user_reference,
-    ];
-    $form['page_access']['list'][$i]['edit_permission'] = [
-      '#type' => 'checkbox',
-      '#default_value' => 0,
-      '#title' => 'Edit',
-      '#attributes' => ['class' => ['page-access-edit-access']],
-      '#default_value' => (int) (bool) $defaults['page_access']['users'][$i]['edit_permission'],
-    ];
-    if ($i) {
-      $form['page_access']['list'][$i]['remove'] = [
-        '#type' => 'submit',
-        '#value' => 'X',
-        '#submit' => array('page_access_remove_user'),
-        '#ajax' => [
-          'callback' => 'page_access_add_or_remove_user_callback',
-          'wrapper' => 'page_access_user_list',
-          'options' => [
-            'query' => [
-              'triggering_element_index' => $i,
-            ],
-          ],
-        ],
-        '#attributes' => ['class' => ['page-access-remove-user']],
-        '#suffix' => '</div>',
-      ];
-    }
-    else {
-      $form['page_access']['list'][$i]['edit_permission']['#suffix'] = '</div>';
-    }
-  }
-  $form['page_access']['list']['add_user'] = [
-    '#type' => 'submit',
-    '#value' => t('Add user'),
-    '#submit' => array('page_access_add_user'),
-    '#ajax' => [
-      'callback' => 'page_access_add_or_remove_user_callback',
-      'wrapper' => 'page_access_user_list',
+  $form['page_access']['edit_settings']['users'] = [
+    '#type' => 'entity_autocomplete',
+    '#target_type' => 'user',
+    '#tags' => TRUE,
+    '#selection_settings' => ['include_anonymous' => FALSE],
+    '#default_value' => $user_edit_reference,
+    '#description' => t('Select particular users who can edit the node. Seperate multiple users by comma'),
+    '#attributes' => [
+      'class' => ['page-access-user-autocomplete'],
+      'placeholder' => 'Username',
     ],
-    '#attributes' => ['class' => ['page-access-add-user']],
   ];
 
   foreach (array_keys($form['actions']) as $action) {
@@ -155,44 +122,6 @@ function page_access_form_node_form_alter(&$form, FormStateInterface &$form_stat
 }
 
 /**
- * Add more user submit handler.
- *
- * @param array $form
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- */
-function page_access_add_user(array $form, FormStateInterface &$form_state) {
-  $page_access_users_count = $form_state->get('page_access_users_count');
-  $form_state->set('page_access_users_count', $page_access_users_count + 1);
-  $form_state->setRebuild();
-}
-
-/**
- * Remove user submit handler.
- *
- * @param array $form
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- */
-function page_access_remove_user(array $form, FormStateInterface &$form_state) {
-  $triggering_element_index = \Drupal::request()->query->get('triggering_element_index');
-  $page_access_users_to_remove = $form_state->get('page_access_users_to_remove');
-  $page_access_users_to_remove[] = $triggering_element_index;
-  $form_state->set('page_access_users_to_remove', $page_access_users_to_remove);
-  $form_state->setRebuild();
-}
-
-/**
- * Ajax callback for add and remove user.
- *
- * @param array $form
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- *
- * @return mixed
- */
-function page_access_add_or_remove_user_callback(array $form, FormStateInterface &$form_state) {
-  return $form['page_access']['list'];
-}
-
-/**
  * Returns the definition for page access for the given node.
  *
  * @param \Drupal\node\NodeInterface $node
@@ -265,17 +194,43 @@ function _page_access_node_save($node_id, $values, $entity_id) {
   else {
     $entity = PageAccess::create();
   }
-  $roles = array_shift($values);
-  $roles = array_filter($roles, function ($value) {
+
+  // Save the view settings value to node entity.
+  $view_roles = $values['view_settings']['roles'];
+  $view_access_users = $values['view_settings']['users'];
+  foreach ($view_access_users as $view_user) {
+    $view_users[$view_user['target_id']] = $view_user['target_id'];
+  }
+  $view_roles = array_filter($view_roles, function ($value) {
+    if ($value) {
+      return TRUE;
+    }
+    return FALSE;
+  });
+
+  // Save the edit settings value to node entity.
+  $edit_roles = $values['edit_settings']['roles'];
+  $edit_access_users = $values['edit_settings']['users'];
+  foreach ($edit_access_users as $edit_user) {
+    $edit_users[$edit_user['target_id']] = $edit_user['target_id'];
+  }
+  $edit_roles = array_filter($edit_roles, function ($value) {
     if ($value) {
       return TRUE;
     }
     return FALSE;
   });
   $entity->value = [
-    'roles' => array_values($roles),
-    'users' => array_values($values),
+    'roles' => [
+      'edit' => array_values($edit_roles),
+      'view' => array_values($view_roles),
+    ],
+    'users' => [
+      'edit' => array_values($edit_users),
+      'view' => array_values($view_users),
+    ],
   ];
+
   $entity->nid = $node_id;
   $entity->save();
 }
@@ -287,14 +242,17 @@ function _page_access_node_save($node_id, $values, $entity_id) {
  *
  * @return \Drupal\Core\Entity\EntityInterface|null|string|static
  */
-function _get_user_reference_default_value($uid) {
-  if (is_numeric($uid)) {
-    $user = User::load($uid);
-    if ($user instanceof User) {
-      return $user;
+function _get_user_reference_default_value($users) {
+  $output = array();
+  if (is_array($users)) {
+    foreach ($users as $uid) {
+      $user_obj = User::load($uid);
+      if ($user_obj instanceof User) {
+        $output[] =  $user_obj;
+      }
     }
   }
-  return '';
+  return $output;
 }
 
 /**
@@ -316,24 +274,18 @@ function _get_user_reference_default_value($uid) {
  * @ingroup node_access
  */
 function page_access_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Session\AccountInterface $account) {
-
-  switch ($op) {
-    case 'view':
-    case 'update':
-      $access = \Drupal::service('page_access.default')->get_user_node_access($node, $account);
-
-      if ($access === NULL) {
-        return AccessResult::neutral();
-      }
-      elseif (in_array($op, $access)) {
+  $page_access_enabled = \Drupal::service('page_access.default')->is_page_access_enabled($node);
+  if ($page_access_enabled) {
+    // Proceed only if operation is view or update, as page access is set
+    // only for view or update as of now.
+    if ($op == 'view' || $op == "update") {
+      $access = \Drupal::service('page_access.default')->get_user_node_access($node, $account, $op);
+      if ($access) {
         return AccessResult::allowed();
       }
       else {
         return AccessResult::forbidden();
       }
-
-    default:
-      // No opinion.
-      return AccessResult::neutral();
+    }
   }
 }
diff --git a/src/DefaultService.php b/src/DefaultService.php
index d58b38e..83c0e63 100644
--- a/src/DefaultService.php
+++ b/src/DefaultService.php
@@ -22,29 +22,53 @@ class DefaultService {
    *
    * @return array|null
    */
-  function get_user_node_access(NodeInterface $node, AccountInterface $account) {
+  function get_user_node_access(NodeInterface $node, AccountInterface $account, $op) {
     $page_access_settings = page_access_get_node_defaults($node);
-    if (!empty($page_access_settings['id'])) {
-      $user_has_access = [];
-      $user_roles = $account->getRoles();
-      $allowed_roles = $page_access_settings['page_access']['roles'];
-      if (!empty(array_intersect($user_roles, $allowed_roles))) {
-        return ['view', 'update'];
-      }
-
-      $uid = $account->id();
-      foreach ($page_access_settings['page_access']['users'] as $access) {
-        if ($access['user_autocomplete'] === $uid) {
-          $user_has_access[] = 'view';
-          if ($access['edit_permission']) {
-            $user_has_access[] = 'update';
+    $uid = $account->id();
+    $user_roles = $account->getRoles();
+    switch ($op) {
+      case 'view':
+        $allowed_roles = $page_access_settings['page_access']['roles']['view'];
+        if (!empty(array_intersect($user_roles, $allowed_roles))) {
+         return TRUE;
+        }
+        else {
+          $allowed_users = $page_access_settings['page_access']['users']['view'];
+          if (in_array($allowed_users, $uid)) {
+            return TRUE;
+          }
+        }
+        return FALSE;
+      case 'update':
+        $allowed_roles = $page_access_settings['page_access']['roles']['edit'];
+        if (!empty(array_intersect($user_roles, $allowed_roles))) {
+         return TRUE;
+        }
+        else {
+          $allowed_users = $page_access_settings['page_access']['users']['edit'];
+          if (in_array($allowed_users, $uid)) {
+            return TRUE;
           }
-          break;
         }
-      }
-      return $user_has_access;
+        return FALSE;
+      default:
+        return FALSE;
     }
-    return NULL;
+  }
+
+  /**
+   * Checks whether the page access is enabled for a
+   * particular node.
+   */
+  function is_page_access_enabled(NodeInterface $node) {
+    $page_access_settings = page_access_get_node_defaults($node);
+    if (!empty($page_access_settings['id'])) {
+      return TRUE;
+    }
+    else {
+      return FALSE;
+    }
+
   }
 
 }
