diff --git a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java
index 2dbb673776c635926937e51ca2115555c6d93c0c..abcb6ddbd3a7b1e7d71ee1995392f576f9d90582 100644
--- a/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java
+++ b/vospace-ui-backend/src/main/java/it/inaf/ia2/vospace/ui/controller/NodesController.java
@@ -10,7 +10,9 @@ import it.inaf.ia2.vospace.ui.client.VOSpaceClient;
 import it.inaf.ia2.vospace.ui.data.Job;
 import it.inaf.ia2.vospace.ui.data.ListNodeData;
 import it.inaf.ia2.vospace.ui.data.MoveOrCopyRequest;
+import it.inaf.ia2.vospace.ui.exception.PermissionDeniedException;
 import it.inaf.ia2.vospace.ui.exception.VOSpaceException;
+import it.inaf.ia2.vospace.ui.exception.VOSpaceStatusException;
 import it.inaf.ia2.vospace.ui.service.MainNodesHtmlGenerator;
 import it.inaf.ia2.vospace.ui.service.MoveOrCopyNodeModalHtmlGenerator;
 import it.inaf.oats.vospace.datamodel.NodeUtils;
@@ -72,7 +74,19 @@ public class NodesController extends BaseController {
 
         ListNodeData listNodeData = new ListNodeData();
 
-        Node node = client.getNode(path);
+        Node node;
+        try {
+            node = client.getNode(path);
+        } catch (VOSpaceStatusException ex) {
+            if (ex.getHttpStatus() == 403) {
+                String message = "You cannot access this node";
+                if (principal.getAccessToken() != null && principal.isTokenExpired()) {
+                    message += ". Token is expired, please repeat the login.";
+                }
+                throw new PermissionDeniedException(message);
+            }
+            throw ex;
+        }
 
         listNodeData.setWritable(NodeUtils.checkIfWritable(node, principal.getName(), principal.getGroups()));
 
diff --git a/vospace-ui-frontend/src/api/server/index.js b/vospace-ui-frontend/src/api/server/index.js
index 4d09ab4fb4181ed5f5f72916537c6bcb82e5ba0f..fb229612b5e0ad96bbe5a2b3299552bd7e270010 100644
--- a/vospace-ui-frontend/src/api/server/index.js
+++ b/vospace-ui-frontend/src/api/server/index.js
@@ -66,7 +66,7 @@ export default {
       headers: {
         'Cache-Control': 'no-cache'
       }
-    }, (typeof loading !== 'undefined') ? loading : true, true);
+    }, (typeof loading !== 'undefined') ? loading : true, true, true);
   },
   loadJobs() {
     let url = BASE_API_URL + 'jobs';
diff --git a/vospace-ui-frontend/src/store.js b/vospace-ui-frontend/src/store.js
index c2d82b97cc1308a741169d0e629e7f21784c8a7a..ccdf1a331268bab4636c2514410d6ed018fb74e9 100644
--- a/vospace-ui-frontend/src/store.js
+++ b/vospace-ui-frontend/src/store.js
@@ -145,12 +145,22 @@ export default new Vuex.Store({
   },
   actions: {
     setPath({ state, commit, dispatch }, path) {
+      let previousPath = state.path;
       commit('setPath', path);
       commit('setNodesLoading', true);
       client.getNode(state.path)
         .then(res => {
           dispatch('setNodes', res);
         })
+        .catch(error => {
+          if (error.response && error.response.data) {
+            main.showError(error.response.data.message);
+          } else {
+            main.showError('Error while accessing node');
+          }
+          commit('setPath', previousPath);
+          commit('setLoading', false);
+        })
         .finally(() => commit('setNodesLoading', false));
     },
     setNodes({ commit, dispatch }, res) {