diff --git a/openbis_ng_ui/src/js/components/common/browser/BrowserController.js b/openbis_ng_ui/src/js/components/common/browser/BrowserController.js
index d642179fd83d016164038c6d112bc04f833cca22..271cb71682cb9eeb3713702140f284becee4f50f 100644
--- a/openbis_ng_ui/src/js/components/common/browser/BrowserController.js
+++ b/openbis_ng_ui/src/js/components/common/browser/BrowserController.js
@@ -9,10 +9,26 @@ export default class BrowserController {
     throw 'Method not implemented'
   }
 
+  async _doLoadNodePath(params) {
+    try {
+      return await this.doLoadNodePath(params)
+    } catch (error) {
+      this._onError(error)
+    }
+  }
+
   async doLoadNodes() {
     throw 'Method not implemented'
   }
 
+  async _doLoadNodes(params) {
+    try {
+      return await this.doLoadNodes(params)
+    } catch (error) {
+      this._onError(error)
+    }
+  }
+
   constructor() {
     autoBind(this)
 
@@ -20,10 +36,10 @@ export default class BrowserController {
 
     class FullTreeController extends BrowserTreeController {
       async doLoadNodePath(params) {
-        return controller.doLoadNodePath(params)
+        return controller._doLoadNodePath(params)
       }
       async doLoadNodes(params) {
-        return await controller.doLoadNodes({
+        return await controller._doLoadNodes({
           ...params,
           filter: null
         })
@@ -32,11 +48,11 @@ export default class BrowserController {
 
     class FilteredTreeController extends BrowserTreeController {
       async doLoadNodePath(params) {
-        return controller.doLoadNodePath(params)
+        return controller._doLoadNodePath(params)
       }
       async doLoadNodes(params) {
         const { filter } = controller.context.getState()
-        return await controller.doLoadNodes({
+        return await controller._doLoadNodes({
           ...params,
           filter: util.trim(filter)
         })
@@ -96,7 +112,7 @@ export default class BrowserController {
     let { nodeSetAsRoot } = this.context.getState()
 
     if (nodeSetAsRoot) {
-      const nodeSetAsRootPath = await this.doLoadNodePath({
+      const nodeSetAsRootPath = await this._doLoadNodePath({
         object: nodeSetAsRoot.object
       })
       if (!_.isEmpty(nodeSetAsRootPath)) {
@@ -177,7 +193,7 @@ export default class BrowserController {
     let nodeSetAsRoot = null
 
     if (node) {
-      const path = await this.doLoadNodePath({
+      const path = await this._doLoadNodePath({
         object: node.object
       })
 
@@ -365,4 +381,11 @@ export default class BrowserController {
       await onSettingsChange(settings)
     }
   }
+
+  _onError(error) {
+    const { onError } = this.context.getProps()
+    if (onError) {
+      onError(error)
+    }
+  }
 }
diff --git a/openbis_ng_ui/src/js/components/common/browser/BrowserWithOpenbis.jsx b/openbis_ng_ui/src/js/components/common/browser/BrowserWithOpenbis.jsx
index 5153d6c28d37583ee4a3663fd862de6b96b7f2a4..9f710297dc6e3b40c3c4beef60e729d27dde89ed 100644
--- a/openbis_ng_ui/src/js/components/common/browser/BrowserWithOpenbis.jsx
+++ b/openbis_ng_ui/src/js/components/common/browser/BrowserWithOpenbis.jsx
@@ -31,6 +31,7 @@ class BrowserWithOpenbis extends React.PureComponent {
           {...this.props}
           loadSettings={this.loadSettings}
           onSettingsChange={this.onSettingsChange}
+          onError={this.onError}
         />
       </ResizableWithOpenbis>
     )
@@ -43,6 +44,10 @@ class BrowserWithOpenbis extends React.PureComponent {
   async onSettingsChange(settings) {
     await AppController.getInstance().setSetting(this.props.id, settings)
   }
+
+  async onError(error) {
+    await AppController.getInstance().errorChange(error)
+  }
 }
 
 export default BrowserWithOpenbis