diff --git a/openbis_ng_ui/src/js/components/AppController.js b/openbis_ng_ui/src/js/components/AppController.js
index 20f17f11ce583afec9bf91fcfb4c2c8dbcbc8c9c..1d84b4353fcbff0548bdf6c1a7fa733a398a8376 100644
--- a/openbis_ng_ui/src/js/components/AppController.js
+++ b/openbis_ng_ui/src/js/components/AppController.js
@@ -9,7 +9,7 @@ class AppController {
     this.context = context
 
     const initialState = {
-      lastObjectModifications: 'abc'
+      lastObjectModifications: {}
     }
 
     context.initState(initialState)
@@ -19,10 +19,21 @@ class AppController {
     return this.context.getState().lastObjectModifications
   }
 
-  setLastObjectModifications(lastObjectModifications) {
-    this.context.setState({
-      lastObjectModifications: lastObjectModifications
-    })
+  setLastObjectModification(type, operation, timestamp) {
+    const { lastObjectModifications } = this.context.getState()
+
+    if (
+      !lastObjectModifications[type] ||
+      !lastObjectModifications[type][operation] ||
+      lastObjectModifications[type][operation] < timestamp
+    ) {
+      this.context.setState({
+        lastObjectModifications: {
+          ...lastObjectModifications,
+          [type]: { ...lastObjectModifications[type], [operation]: timestamp }
+        }
+      })
+    }
   }
 
   withLastObjectModifications() {
diff --git a/openbis_ng_ui/src/js/components/common/browser/Browser.jsx b/openbis_ng_ui/src/js/components/common/browser/Browser.jsx
index b610cf3116ebd2c55e70170d6c280bdefeeb04cf..f1980f18cc720712124ad24bd90e93f5cd67e3aa 100644
--- a/openbis_ng_ui/src/js/components/common/browser/Browser.jsx
+++ b/openbis_ng_ui/src/js/components/common/browser/Browser.jsx
@@ -8,6 +8,7 @@ import ComponentContext from '@src/js/components/common/ComponentContext.js'
 import BrowserNodes from '@src/js/components/common/browser/BrowserNodes.jsx'
 import BrowserButtons from '@src/js/components/common/browser/BrowserButtons.jsx'
 import BrowserDialogRemoveNode from '@src/js/components/common/browser/BrowserDialogRemoveNode.jsx'
+import AppController from '@src/js/components/AppController.js'
 import selectors from '@src/js/store/selectors/selectors.js'
 import logger from '@src/js/common/logger.js'
 
@@ -35,8 +36,7 @@ function mapStateToProps() {
       selectedObject: selectors.getSelectedObject(
         state,
         ownProps.controller.getPage()
-      ),
-      lastObjectModifications: selectors.getLastObjectModifications(state)
+      )
     }
   }
 }
@@ -124,4 +124,8 @@ class Browser extends React.PureComponent {
   }
 }
 
-export default _.flow(connect(mapStateToProps), withStyles(styles))(Browser)
+export default _.flow(
+  connect(mapStateToProps),
+  withStyles(styles),
+  AppController.withLastObjectModifications()
+)(Browser)
diff --git a/openbis_ng_ui/src/js/components/common/browser/BrowserButtons.jsx b/openbis_ng_ui/src/js/components/common/browser/BrowserButtons.jsx
index 4aece59442f9ff62c6426f892bfc022bf78139d0..ed6505afb9447e022333891b4ba0c6d698de824f 100644
--- a/openbis_ng_ui/src/js/components/common/browser/BrowserButtons.jsx
+++ b/openbis_ng_ui/src/js/components/common/browser/BrowserButtons.jsx
@@ -1,4 +1,3 @@
-import _ from 'lodash'
 import React from 'react'
 import { withStyles } from '@material-ui/core/styles'
 import Container from '@src/js/components/common/form/Container.jsx'
@@ -6,8 +5,6 @@ import Button from '@src/js/components/common/form/Button.jsx'
 import messages from '@src/js/common/messages.js'
 import logger from '@src/js/common/logger.js'
 
-import AppController from '@src/js/components/AppController.js'
-
 const styles = theme => ({
   container: {
     display: 'flex',
@@ -25,13 +22,7 @@ class BrowserButtons extends React.Component {
   render() {
     logger.log(logger.DEBUG, 'BrowserButtons.render')
 
-    const {
-      controller,
-      classes,
-      addEnabled,
-      removeEnabled,
-      lastObjectModifications
-    } = this.props
+    const { controller, classes, addEnabled, removeEnabled } = this.props
 
     return (
       <Container className={classes.container}>
@@ -49,13 +40,9 @@ class BrowserButtons extends React.Component {
           onClick={controller.nodeRemove}
           disabled={!removeEnabled}
         />
-        {lastObjectModifications}
       </Container>
     )
   }
 }
 
-export default _.flow(
-  withStyles(styles),
-  AppController.withLastObjectModifications()
-)(BrowserButtons)
+export default withStyles(styles)(BrowserButtons)
diff --git a/openbis_ng_ui/src/js/components/common/grid/Grid.jsx b/openbis_ng_ui/src/js/components/common/grid/Grid.jsx
index 2ff2aa5e6e17f98aaeab002f68b56999648343da..c92e7f64234b5775ad0b2e1fe32e18fdc4fcddae 100644
--- a/openbis_ng_ui/src/js/components/common/grid/Grid.jsx
+++ b/openbis_ng_ui/src/js/components/common/grid/Grid.jsx
@@ -19,8 +19,6 @@ import GridFiltersConfig from '@src/js/components/common/grid/GridFiltersConfig.
 import ComponentContext from '@src/js/components/common/ComponentContext.js'
 import logger from '@src/js/common/logger.js'
 
-import AppController from '@src/js/components/AppController.js'
-
 const styles = theme => ({
   container: {
     minWidth: '800px',
@@ -178,13 +176,6 @@ class Grid extends React.PureComponent {
         {this.renderPaging()}
         {this.renderConfigs()}
         {this.renderExports()}
-        <button
-          onClick={() => {
-            AppController.setLastObjectModifications(Math.random())
-          }}
-        >
-          Test
-        </button>
       </GridRowFullWidth>
     )
   }
diff --git a/openbis_ng_ui/src/js/store/sagas/page.js b/openbis_ng_ui/src/js/store/sagas/page.js
index 19ab3934782eb3562f18554641751149a6c255c8..97d92c09433b7861d6b834d8b027cab3f1dffcf4 100644
--- a/openbis_ng_ui/src/js/store/sagas/page.js
+++ b/openbis_ng_ui/src/js/store/sagas/page.js
@@ -5,6 +5,8 @@ import actions from '@src/js/store/actions/actions.js'
 import routes from '@src/js/common/consts/routes.js'
 import objectOperation from '@src/js/common/consts/objectOperation.js'
 
+import AppController from '@src/js/components/AppController.js'
+
 export default function* pageSaga() {
   yield takeEvery(actions.OBJECT_NEW, objectNew)
   yield takeEvery(actions.OBJECT_CREATE, objectCreate)
@@ -46,12 +48,10 @@ function* objectCreate(action) {
     }
     yield put(actions.replaceOpenTab(page, oldTab.id, newTab))
 
-    yield put(
-      actions.setLastObjectModification(
-        newType,
-        objectOperation.CREATE,
-        Date.now()
-      )
+    yield AppController.setLastObjectModification(
+      newType,
+      objectOperation.CREATE,
+      Date.now()
     )
 
     const route = routes.format({ page, type: newType, id: newId })
@@ -67,16 +67,20 @@ function* objectOpen(action) {
 
 function* objectUpdate(action) {
   const { type } = action.payload
-  yield put(
-    actions.setLastObjectModification(type, objectOperation.UPDATE, Date.now())
+  yield AppController.setLastObjectModification(
+    type,
+    objectOperation.UPDATE,
+    Date.now()
   )
 }
 
 function* objectDelete(action) {
   const { page, type, id } = action.payload
   yield put(actions.objectClose(page, type, id))
-  yield put(
-    actions.setLastObjectModification(type, objectOperation.DELETE, Date.now())
+  yield AppController.setLastObjectModification(
+    type,
+    objectOperation.DELETE,
+    Date.now()
   )
 }