diff --git a/openbis_ng_ui/package.json b/openbis_ng_ui/package.json
index c98328cf991b7925534c8e41435a9441d768395d..1ab341c0622c77fe2bbe0ae8072507ef07674432 100644
--- a/openbis_ng_ui/package.json
+++ b/openbis_ng_ui/package.json
@@ -24,10 +24,7 @@
     "react": "^16.13.1",
     "react-beautiful-dnd": "^13.0.0",
     "react-dom": "^16.13.1",
-    "react-redux": "^7.2.1",
     "react-simple-code-editor": "^0.11.0",
-    "redux": "^4.0.5",
-    "redux-saga": "^1.1.3",
     "reselect": "^4.0.0",
     "typeface-roboto": "^0.0.75"
   },
diff --git a/openbis_ng_ui/src/js/store/actions/actions.js b/openbis_ng_ui/src/js/store/actions/actions.js
deleted file mode 100644
index f8bfa7de940b1e0782674f5c751a45b92c70c1fa..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/actions/actions.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import api from '@src/js/store/actions/api.js'
-import app from '@src/js/store/actions/app.js'
-import page from '@src/js/store/actions/page.js'
-
-export default {
-  ...api,
-  ...app,
-  ...page
-}
diff --git a/openbis_ng_ui/src/js/store/actions/api.js b/openbis_ng_ui/src/js/store/actions/api.js
deleted file mode 100644
index 41e41e522b7534baa7ce4f128d2942347c749e00..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/actions/api.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const API_REQUEST = 'API_REQUEST'
-const API_SUCCESS = 'API_SUCCESS'
-const API_ERROR = 'API_ERROR'
-
-const apiRequest = ({ method, params, meta }) => ({
-  type: API_REQUEST,
-  payload: {
-    method,
-    params
-  },
-  meta
-})
-
-const apiSuccess = ({ result, meta }) => ({
-  type: API_SUCCESS,
-  payload: {
-    result
-  },
-  meta
-})
-
-const apiError = ({ error, meta }) => ({
-  type: API_ERROR,
-  payload: {
-    error
-  },
-  meta
-})
-
-export default {
-  API_REQUEST,
-  API_SUCCESS,
-  API_ERROR,
-  apiRequest,
-  apiSuccess,
-  apiError
-}
diff --git a/openbis_ng_ui/src/js/store/actions/app.js b/openbis_ng_ui/src/js/store/actions/app.js
deleted file mode 100644
index aacb241ce5aac25d7f1c9f0576a1e2414aee55f9..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/actions/app.js
+++ /dev/null
@@ -1,158 +0,0 @@
-const INIT = 'INIT'
-const CLEAR = 'CLEAR'
-const LOGIN = 'LOGIN'
-const LOGOUT = 'LOGOUT'
-const SEARCH = 'SEARCH'
-const CURRENT_PAGE_CHANGE = 'CURRENT_PAGE_CHANGE'
-const SEARCH_CHANGE = 'SEARCH_CHANGE'
-const ERROR_CHANGE = 'ERROR_CHANGE'
-const ROUTE_CHANGE = 'ROUTE_CHANGE'
-const ROUTE_REPLACE = 'ROUTE_REPLACE'
-const SET_INITIALIZED = 'SET_INITIALIZED'
-const SET_LOADING = 'SET_LOADING'
-const SET_SEARCH = 'SET_SEARCH'
-const SET_SESSION = 'SET_SESSION'
-const SET_ERROR = 'SET_ERROR'
-const SET_ROUTE = 'SET_ROUTE'
-
-const init = () => ({
-  type: INIT
-})
-
-const clear = () => ({
-  type: CLEAR
-})
-
-const login = (username, password) => ({
-  type: LOGIN,
-  payload: {
-    username,
-    password
-  }
-})
-
-const logout = () => ({
-  type: LOGOUT
-})
-
-const search = (page, text) => ({
-  type: SEARCH,
-  payload: {
-    page,
-    text
-  }
-})
-
-const currentPageChange = currentPage => ({
-  type: CURRENT_PAGE_CHANGE,
-  payload: {
-    currentPage
-  }
-})
-
-const searchChange = search => ({
-  type: SEARCH_CHANGE,
-  payload: {
-    search
-  }
-})
-
-const errorChange = error => ({
-  type: ERROR_CHANGE,
-  payload: {
-    error
-  }
-})
-
-const routeChange = (route, state) => ({
-  type: ROUTE_CHANGE,
-  payload: {
-    route,
-    state
-  }
-})
-
-const routeReplace = (route, state) => ({
-  type: ROUTE_REPLACE,
-  payload: {
-    route,
-    state
-  }
-})
-
-const setInitialized = initialized => ({
-  type: SET_INITIALIZED,
-  payload: {
-    initialized
-  }
-})
-
-const setLoading = loading => ({
-  type: SET_LOADING,
-  payload: {
-    loading
-  }
-})
-
-const setSearch = search => ({
-  type: SET_SEARCH,
-  payload: {
-    search
-  }
-})
-
-const setSession = session => ({
-  type: SET_SESSION,
-  payload: {
-    session
-  }
-})
-
-const setError = error => ({
-  type: SET_ERROR,
-  payload: {
-    error
-  }
-})
-
-const setRoute = route => ({
-  type: SET_ROUTE,
-  payload: {
-    route
-  }
-})
-
-export default {
-  INIT,
-  CLEAR,
-  LOGIN,
-  LOGOUT,
-  SEARCH,
-  CURRENT_PAGE_CHANGE,
-  SEARCH_CHANGE,
-  ERROR_CHANGE,
-  ROUTE_CHANGE,
-  ROUTE_REPLACE,
-  SET_INITIALIZED,
-  SET_LOADING,
-  SET_SEARCH,
-  SET_SESSION,
-  SET_ERROR,
-  SET_ROUTE,
-  init,
-  clear,
-  login,
-  logout,
-  search,
-  currentPageChange,
-  searchChange,
-  errorChange,
-  routeChange,
-  routeReplace,
-  setInitialized,
-  setLoading,
-  setSearch,
-  setSession,
-  setError,
-  setRoute
-}
diff --git a/openbis_ng_ui/src/js/store/actions/page.js b/openbis_ng_ui/src/js/store/actions/page.js
deleted file mode 100644
index ae04252212cbadfdb7a3250afd2c14d1505bf454..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/actions/page.js
+++ /dev/null
@@ -1,134 +0,0 @@
-const OBJECT_NEW = 'OBJECT_NEW'
-const OBJECT_CREATE = 'OBJECT_CREATE'
-const OBJECT_OPEN = 'OBJECT_OPEN'
-const OBJECT_UPDATE = 'OBJECT_UPDATE'
-const OBJECT_DELETE = 'OBJECT_DELETE'
-const OBJECT_CHANGE = 'OBJECT_CHANGE'
-const OBJECT_CLOSE = 'OBJECT_CLOSE'
-const ADD_OPEN_TAB = 'ADD_OPEN_TAB'
-const REMOVE_OPEN_TAB = 'REMOVE_OPEN_TAB'
-const REPLACE_OPEN_TAB = 'REPLACE_OPEN_TAB'
-const SET_CURRENT_ROUTE = 'SET_CURRENT_ROUTE'
-
-const objectNew = (page, type) => ({
-  type: OBJECT_NEW,
-  payload: {
-    page,
-    type
-  }
-})
-
-const objectCreate = (page, oldType, oldId, newType, newId) => ({
-  type: OBJECT_CREATE,
-  payload: {
-    page,
-    oldType,
-    oldId,
-    newType,
-    newId
-  }
-})
-
-const objectOpen = (page, type, id) => ({
-  type: OBJECT_OPEN,
-  payload: {
-    page,
-    type,
-    id
-  }
-})
-
-const objectUpdate = (page, type, id) => ({
-  type: OBJECT_UPDATE,
-  payload: {
-    page,
-    type,
-    id
-  }
-})
-
-const objectDelete = (page, type, id) => ({
-  type: OBJECT_DELETE,
-  payload: {
-    page,
-    type,
-    id
-  }
-})
-
-const objectChange = (page, type, id, changed) => ({
-  type: OBJECT_CHANGE,
-  payload: {
-    page,
-    type,
-    id,
-    changed
-  }
-})
-
-const objectClose = (page, type, id) => ({
-  type: OBJECT_CLOSE,
-  payload: {
-    page,
-    type,
-    id
-  }
-})
-
-const addOpenTab = (page, tab) => ({
-  type: ADD_OPEN_TAB,
-  payload: {
-    page,
-    tab
-  }
-})
-
-const removeOpenTab = (page, id) => ({
-  type: REMOVE_OPEN_TAB,
-  payload: {
-    page,
-    id
-  }
-})
-
-const replaceOpenTab = (page, id, tab) => ({
-  type: REPLACE_OPEN_TAB,
-  payload: {
-    page,
-    id,
-    tab
-  }
-})
-
-const setCurrentRoute = (page, currentRoute) => ({
-  type: SET_CURRENT_ROUTE,
-  payload: {
-    page,
-    currentRoute
-  }
-})
-
-export default {
-  OBJECT_NEW,
-  OBJECT_CREATE,
-  OBJECT_OPEN,
-  OBJECT_UPDATE,
-  OBJECT_DELETE,
-  OBJECT_CHANGE,
-  OBJECT_CLOSE,
-  ADD_OPEN_TAB,
-  REMOVE_OPEN_TAB,
-  REPLACE_OPEN_TAB,
-  SET_CURRENT_ROUTE,
-  objectNew,
-  objectCreate,
-  objectOpen,
-  objectUpdate,
-  objectDelete,
-  objectChange,
-  objectClose,
-  addOpenTab,
-  removeOpenTab,
-  replaceOpenTab,
-  setCurrentRoute
-}
diff --git a/openbis_ng_ui/src/js/store/history.js b/openbis_ng_ui/src/js/store/history.js
deleted file mode 100644
index 49da3566429b308216bb987d801eef1400a9252e..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/history.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { createBrowserHistory } from 'history'
-import AppController from '@src/js/components/AppController.js'
-import routes from '@src/js/common/consts/routes.js'
-import url from '@src/js/common/url.js'
-
-let history = createBrowserHistory({
-  basename: url.getApplicationPath() + '#'
-})
-
-history.configure = store => {
-  history.listen(location => {
-    let route = routes.parse(location.pathname)
-
-    if (route.path !== store.getState().route) {
-      AppController.routeChange(route.path, location.state)
-    }
-  })
-
-  let currentRoute = store.getState().route
-
-  store.subscribe(() => {
-    let newRoute = store.getState().route
-
-    if (newRoute && newRoute !== currentRoute) {
-      currentRoute = newRoute
-      if (currentRoute && currentRoute !== history.location.pathname) {
-        history.push(currentRoute)
-      }
-    }
-  })
-}
-
-export default history
diff --git a/openbis_ng_ui/src/js/store/middleware/loadingThrottle.js b/openbis_ng_ui/src/js/store/middleware/loadingThrottle.js
deleted file mode 100644
index 0cc07bcf7c998384508ded289bfe9559d7ab8303..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/middleware/loadingThrottle.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import actions from '@src/js/store/actions/actions.js'
-
-const MIN_LOADING_TIME = 500
-let startLoadingTimestamp = null
-
-export default () => next => action => {
-  if (action.type === actions.SET_LOADING) {
-    if (action.payload.loading) {
-      if (startLoadingTimestamp === null) {
-        startLoadingTimestamp = new Date().getTime()
-      }
-      next(action)
-    } else {
-      let timeToWait =
-        startLoadingTimestamp + MIN_LOADING_TIME - new Date().getTime()
-      if (timeToWait > 0) {
-        setTimeout(() => {
-          startLoadingTimestamp = null
-          next(action)
-        }, timeToWait)
-      } else {
-        startLoadingTimestamp = null
-        next(action)
-      }
-    }
-  } else {
-    next(action)
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/middleware/middlewares.js b/openbis_ng_ui/src/js/store/middleware/middlewares.js
deleted file mode 100644
index 88906e6be9496161004ad4658514615209001f91..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/middleware/middlewares.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import stateChangeCheck from '@src/js/store/middleware/stateChangeCheck.js'
-
-export default [stateChangeCheck]
diff --git a/openbis_ng_ui/src/js/store/middleware/stateChangeCheck.js b/openbis_ng_ui/src/js/store/middleware/stateChangeCheck.js
deleted file mode 100644
index f16b8cd6787233383bed19fed6398a90ae30eff7..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/middleware/stateChangeCheck.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import _ from 'lodash'
-import diff from '@src/js/common/diff.js'
-import logger from '@src/js/common/logger.js'
-
-export default store => next => action => {
-  if (logger.isLevelEnabled(logger.DEBUG)) {
-    logger.group(logger.DEBUG, 'Action ' + action.type, action)
-
-    let beforeState = store.getState()
-    let beforeStateClone = _.cloneDeep(beforeState)
-    next(action)
-    let afterState = store.getState()
-
-    logger.group(logger.DEBUG, 'State diff')
-    let unmodifiedNewObjects = diff(beforeState, afterState, 'root')
-    let modifiedPreviousState = !_.isEqual(beforeState, beforeStateClone)
-    logger.groupEnd(logger.DEBUG)
-
-    if (unmodifiedNewObjects || modifiedPreviousState) {
-      if (unmodifiedNewObjects) {
-        logger.log(
-          logger.ERROR,
-          'ERROR state changed incorrectly - returned new objects without changes',
-          beforeState,
-          afterState
-        )
-      }
-      if (modifiedPreviousState) {
-        logger.log(
-          logger.ERROR,
-          'ERROR state changed incorrectly - reducer modified previous state object',
-          beforeStateClone,
-          beforeState,
-          afterState
-        )
-      }
-    } else {
-      if (_.isEqual(beforeState, afterState)) {
-        logger.log(logger.DEBUG, 'OK state not changed', afterState)
-      } else {
-        logger.log(
-          logger.DEBUG,
-          'OK state changed correctly',
-          beforeState,
-          afterState
-        )
-      }
-    }
-
-    logger.groupEnd(logger.DEBUG)
-  } else {
-    next(action)
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/reducers.js b/openbis_ng_ui/src/js/store/reducers/reducers.js
deleted file mode 100644
index 90bf93921ed5d6dc9d5e9574385677ee78e4a38a..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/reducers.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { combineReducers } from 'redux'
-import actions from '@src/js/store/actions/actions.js'
-import ui from '@src/js/store/reducers/ui/ui.js'
-import session from '@src/js/store/reducers/session/session.js'
-import route from '@src/js/store/reducers/route/route.js'
-
-export default function root(state = {}, action) {
-  if (action.type === actions.CLEAR) {
-    state = {
-      initialized: state.initialized
-    }
-  }
-  return combineReducers({
-    initialized,
-    ui,
-    session,
-    route
-  })(state, action)
-}
-
-function initialized(state = false, action) {
-  switch (action.type) {
-    case actions.SET_INITIALIZED: {
-      return action.payload.initialized
-    }
-    default: {
-      return state
-    }
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/route/route.js b/openbis_ng_ui/src/js/store/reducers/route/route.js
deleted file mode 100644
index afda4474d50afd2b24dacb4e833c759e3bbbf7f2..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/route/route.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import actions from '@src/js/store/actions/actions.js'
-
-export default function route(state = null, action) {
-  switch (action.type) {
-    case actions.SET_ROUTE: {
-      return action.payload.route
-    }
-    default: {
-      return state
-    }
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/session/session.js b/openbis_ng_ui/src/js/store/reducers/session/session.js
deleted file mode 100644
index 7338983eb9586e59a48a7fb04cbd5f1a44e1350e..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/session/session.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import actions from '@src/js/store/actions/actions.js'
-
-export default function session(state = null, action) {
-  switch (action.type) {
-    case actions.SET_SESSION: {
-      return action.payload.session
-    }
-    default: {
-      return state
-    }
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/common/page.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/common/page.js
deleted file mode 100644
index 06ebb005f17c130e7033bf40af23bb075a593213..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/pages/common/page.js
+++ /dev/null
@@ -1,73 +0,0 @@
-import _ from 'lodash'
-import actions from '@src/js/store/actions/actions.js'
-
-const isPageAction = (page, action) => {
-  return (
-    action.type === actions.INIT ||
-    action.type === actions.CLEAR ||
-    page === (action.payload && action.payload.page)
-  )
-}
-
-const currentRoute = (state = null, action) => {
-  switch (action.type) {
-    case actions.SET_CURRENT_ROUTE: {
-      return action.payload.currentRoute
-    }
-    default: {
-      return state
-    }
-  }
-}
-
-const openTabs = (state = [], action) => {
-  let newState = null
-
-  switch (action.type) {
-    case actions.ADD_OPEN_TAB: {
-      const index = _.findIndex(state, { id: action.payload.id }, _.isMatch)
-      if (index !== -1) {
-        return state
-      } else {
-        newState = Array.from(state)
-        newState.push(action.payload.tab)
-      }
-      break
-    }
-    case actions.REMOVE_OPEN_TAB: {
-      const index = _.findIndex(state, { id: action.payload.id }, _.isMatch)
-      if (index !== -1) {
-        newState = Array.from(state)
-        newState.splice(index, 1)
-      } else {
-        return state
-      }
-      break
-    }
-    case actions.REPLACE_OPEN_TAB: {
-      const index = _.findIndex(state, { id: action.payload.id }, _.isMatch)
-      if (index !== -1) {
-        newState = Array.from(state)
-        newState[index] = action.payload.tab
-      } else {
-        return state
-      }
-      break
-    }
-    default: {
-      return state
-    }
-  }
-
-  if (_.isEqual(state, newState)) {
-    return state
-  } else {
-    return newState
-  }
-}
-
-export default {
-  isPageAction,
-  currentRoute,
-  openTabs
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/login/login.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/login/login.js
deleted file mode 100644
index 9780c6f45516aeb29ba87c530072a5a22e0e2881..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/pages/login/login.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function login(state = {}) {
-  return state
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/pages.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/pages.js
deleted file mode 100644
index 97fdf85fb2109f5fed3da305c23f2cc03dc42f50..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/pages/pages.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { combineReducers } from 'redux'
-import login from '@src/js/store/reducers/ui/pages/login/login.js'
-import types from '@src/js/store/reducers/ui/pages/types/types.js'
-import users from '@src/js/store/reducers/ui/pages/users/users.js'
-import tools from '@src/js/store/reducers/ui/pages/tools/tools.js'
-
-export default combineReducers({
-  login,
-  types,
-  users,
-  tools
-})
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/tools/tools.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/tools/tools.js
deleted file mode 100644
index ffb16deaa11e3a0804373bcf052c157580f07ac3..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/pages/tools/tools.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { combineReducers } from 'redux'
-import pages from '@src/js/common/consts/pages.js'
-import page from '@src/js/store/reducers/ui/pages/common/page.js'
-
-export default function types(state = {}, action) {
-  if (page.isPageAction(pages.TOOLS, action)) {
-    return combineReducers({
-      currentRoute: page.currentRoute,
-      openTabs: page.openTabs
-    })(state, action)
-  } else {
-    return state
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/types/types.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/types/types.js
deleted file mode 100644
index 1bec7842442913a9f8bbc11eed70fa69faececbf..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/pages/types/types.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { combineReducers } from 'redux'
-import pages from '@src/js/common/consts/pages.js'
-import page from '@src/js/store/reducers/ui/pages/common/page.js'
-
-export default function types(state = {}, action) {
-  if (page.isPageAction(pages.TYPES, action)) {
-    return combineReducers({
-      currentRoute: page.currentRoute,
-      openTabs: page.openTabs
-    })(state, action)
-  } else {
-    return state
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/pages/users/users.js b/openbis_ng_ui/src/js/store/reducers/ui/pages/users/users.js
deleted file mode 100644
index f4b2e9c4cab29532462df636c7d45f09a956a14e..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/pages/users/users.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import { combineReducers } from 'redux'
-import pages from '@src/js/common/consts/pages.js'
-import page from '@src/js/store/reducers/ui/pages/common/page.js'
-
-export default function types(state = {}, action) {
-  if (page.isPageAction(pages.USERS, action)) {
-    return combineReducers({
-      currentRoute: page.currentRoute,
-      openTabs: page.openTabs
-    })(state, action)
-  } else {
-    return state
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/reducers/ui/ui.js b/openbis_ng_ui/src/js/store/reducers/ui/ui.js
deleted file mode 100644
index 85f60cd5c7777ec27e6fd6cc648956a64166c657..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/reducers/ui/ui.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import { combineReducers } from 'redux'
-import actions from '@src/js/store/actions/actions.js'
-import pages from '@src/js/store/reducers/ui/pages/pages.js'
-
-export default combineReducers({
-  loading,
-  search,
-  pages,
-  error
-})
-
-function loading(state = false, action) {
-  switch (action.type) {
-    case actions.SET_LOADING: {
-      return action.payload.loading
-    }
-    default: {
-      return state
-    }
-  }
-}
-
-function search(state = '', action) {
-  switch (action.type) {
-    case actions.SET_SEARCH: {
-      return action.payload.search
-    }
-    default: {
-      return state
-    }
-  }
-}
-
-function error(state = null, action) {
-  switch (action.type) {
-    case actions.SET_ERROR: {
-      return action.payload.error
-    }
-    default: {
-      return state
-    }
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/sagas/api.js b/openbis_ng_ui/src/js/store/sagas/api.js
deleted file mode 100644
index 796fa020aa15dd0cf824beb042d3ab47f36cf860..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/sagas/api.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { put, takeEvery, apply } from 'redux-saga/effects'
-import openbis from '@src/js/services/openbis.js'
-import actions from '@src/js/store/actions/actions.js'
-
-export default function* apiSaga() {
-  yield takeEvery(actions.API_REQUEST, apiRequest)
-}
-
-function* apiRequest(action) {
-  const { method, params } = action.payload
-
-  try {
-    let result = yield apply(openbis, openbis[method], params || [])
-    yield put(
-      actions.apiSuccess({
-        result,
-        meta: Object.assign({}, action.meta, { method, params })
-      })
-    )
-  } catch (error) {
-    yield put(
-      actions.apiError({
-        error,
-        meta: Object.assign({}, action.meta, { method, params })
-      })
-    )
-  }
-}
diff --git a/openbis_ng_ui/src/js/store/sagas/app.js b/openbis_ng_ui/src/js/store/sagas/app.js
deleted file mode 100644
index e833dc84d11b827c75c3b6208b66d79b7e22b598..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/sagas/app.js
+++ /dev/null
@@ -1,152 +0,0 @@
-import {
-  call,
-  put,
-  putAndWait,
-  takeEvery,
-  select
-} from '@src/js/store/sagas/effects.js'
-import openbis from '@src/js/services/openbis.js'
-import selectors from '@src/js/store/selectors/selectors.js'
-import actions from '@src/js/store/actions/actions.js'
-import objectType from '@src/js/common/consts/objectType.js'
-import routes from '@src/js/common/consts/routes.js'
-import cookie from '@src/js/common/cookie.js'
-import history from '@src/js/store/history.js'
-
-export default function* appSaga() {
-  yield takeEvery(actions.INIT, init)
-  yield takeEvery(actions.LOGIN, login)
-  yield takeEvery(actions.LOGOUT, logout)
-  yield takeEvery(actions.SEARCH, search)
-  yield takeEvery(actions.CURRENT_PAGE_CHANGE, currentPageChange)
-  yield takeEvery(actions.SEARCH_CHANGE, searchChange)
-  yield takeEvery(actions.ERROR_CHANGE, errorChange)
-  yield takeEvery(actions.ROUTE_CHANGE, routeChange)
-  yield takeEvery(actions.ROUTE_REPLACE, routeReplace)
-}
-
-function* init() {
-  let initialized = yield select(selectors.getInitialized)
-
-  if (!initialized) {
-    try {
-      yield put(actions.setLoading(true))
-      yield call([openbis, openbis.init])
-
-      let sessionToken = cookie.read(cookie.OPENBIS_COOKIE)
-
-      if (sessionToken) {
-        try {
-          openbis.useSession(sessionToken)
-          let sessionInformation = yield call([
-            openbis,
-            openbis.getSessionInformation
-          ])
-          if (sessionInformation) {
-            yield put(
-              actions.setSession({
-                sessionToken: sessionToken,
-                userName: sessionInformation.userName
-              })
-            )
-          } else {
-            openbis.useSession(null)
-          }
-        } catch (e) {
-          openbis.useSession(null)
-        }
-      }
-
-      yield put(actions.setInitialized(true))
-    } catch (e) {
-      yield put(actions.setError(e))
-    } finally {
-      yield put(actions.setLoading(false))
-    }
-  }
-}
-
-function* login(action) {
-  try {
-    yield put(actions.setLoading(true))
-
-    let { username, password } = action.payload
-    let loginResponse = yield putAndWait(
-      actions.apiRequest({ method: 'login', params: [username, password] })
-    )
-
-    if (loginResponse.payload.result) {
-      let sessionToken = loginResponse.payload.result
-
-      yield put(
-        actions.setSession({
-          sessionToken: sessionToken,
-          userName: username
-        })
-      )
-      cookie.create(cookie.OPENBIS_COOKIE, sessionToken, 7)
-
-      let path = yield select(selectors.getRoute)
-      let route = routes.parse(path)
-      yield put(actions.routeChange(route.path))
-    } else {
-      throw { message: 'Incorrect user or password' }
-    }
-  } catch (e) {
-    yield put(actions.setError(e))
-  } finally {
-    yield put(actions.setLoading(false))
-  }
-}
-
-function* logout() {
-  try {
-    yield put(actions.setLoading(true))
-    yield putAndWait(actions.apiRequest({ method: 'logout' }))
-    yield put(actions.clear())
-    cookie.erase(cookie.OPENBIS_COOKIE)
-    yield put(actions.routeChange('/'))
-  } catch (e) {
-    yield put(actions.setError(e))
-  } finally {
-    yield put(actions.setLoading(false))
-  }
-}
-
-function* search(action) {
-  const { page, text } = action.payload
-  if (text.trim().length > 0) {
-    yield put(actions.objectOpen(page, objectType.SEARCH, text.trim()))
-  }
-  yield put(actions.setSearch(''))
-}
-
-function* currentPageChange(action) {
-  let page = action.payload.currentPage
-  let route = yield select(selectors.getCurrentRoute, page)
-
-  if (route) {
-    yield put(actions.routeChange(route))
-  } else {
-    route = routes.format({ page })
-    yield put(actions.routeChange(route))
-  }
-}
-
-function* searchChange(action) {
-  yield put(actions.setSearch(action.payload.search))
-}
-
-function* errorChange(action) {
-  yield put(actions.setError(action.payload.error))
-}
-
-function* routeChange(action) {
-  const route = action.payload.route
-  yield put(actions.setRoute(route))
-}
-
-function routeReplace(action) {
-  const { route, state } = action.payload
-  history.replace(route, state)
-}
diff --git a/openbis_ng_ui/src/js/store/sagas/effects.js b/openbis_ng_ui/src/js/store/sagas/effects.js
deleted file mode 100644
index 783b763f1094e76fd57abecff831e895a92e0f7b..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/sagas/effects.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import _ from 'lodash'
-import { put, take } from 'redux-saga/effects'
-
-function generateCorrelationId() {
-  let date = new Date()
-  let timestamp =
-    date.getUTCHours() + ':' + date.getUTCMinutes() + ':' + date.getUTCSeconds()
-  let random = Math.floor(Math.random() * 1000000)
-  return timestamp + '-' + random
-}
-
-export function* putAndWait(actionOrActionsMap) {
-  let actionsMap = _.isString(actionOrActionsMap.type)
-    ? { action: actionOrActionsMap }
-    : actionOrActionsMap
-
-  let correlationId = generateCorrelationId()
-  let correlationKeys = []
-  let actions = []
-
-  _.forEach(actionsMap, (action, correlationKey) => {
-    correlationKeys.push(correlationKey)
-    actions.push(action)
-  })
-
-  for (let i = 0; i < actions.length; i++) {
-    let actionWithCorrelation = Object.assign(actions[i], {
-      meta: { correlation: { id: correlationId, key: correlationKeys[i] } }
-    })
-    yield put(actionWithCorrelation)
-  }
-
-  let responsesMap = {}
-
-  while (_.size(responsesMap) < correlationKeys.length) {
-    let potentialResponse = yield take('*')
-    if (
-      potentialResponse.meta &&
-      potentialResponse.meta.correlation &&
-      potentialResponse.meta.correlation.id === correlationId
-    ) {
-      if (potentialResponse.payload.error) {
-        throw potentialResponse.payload.error
-      }
-      let correlationKey = potentialResponse.meta.correlation.key
-      responsesMap[correlationKey] = potentialResponse
-    }
-  }
-
-  return _.isString(actionOrActionsMap.type)
-    ? responsesMap.action
-    : responsesMap
-}
-
-export * from 'redux-saga/effects'
diff --git a/openbis_ng_ui/src/js/store/sagas/page.js b/openbis_ng_ui/src/js/store/sagas/page.js
deleted file mode 100644
index 97d92c09433b7861d6b834d8b027cab3f1dffcf4..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/sagas/page.js
+++ /dev/null
@@ -1,164 +0,0 @@
-import _ from 'lodash'
-import { put, takeEvery, select } from '@src/js/store/sagas/effects.js'
-import selectors from '@src/js/store/selectors/selectors.js'
-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)
-  yield takeEvery(actions.OBJECT_OPEN, objectOpen)
-  yield takeEvery(actions.OBJECT_UPDATE, objectUpdate)
-  yield takeEvery(actions.OBJECT_DELETE, objectDelete)
-  yield takeEvery(actions.OBJECT_CHANGE, objectChange)
-  yield takeEvery(actions.OBJECT_CLOSE, objectClose)
-  yield takeEvery(actions.ROUTE_CHANGE, routeChange)
-}
-
-function* objectNew(action) {
-  const { page, type } = action.payload
-
-  let id = 1
-
-  const openObjects = yield select(selectors.getOpenObjects, page)
-  openObjects.forEach(openObject => {
-    if (openObject.type === type) {
-      id++
-    }
-  })
-
-  const route = routes.format({ page, type, id })
-  yield put(actions.routeChange(route))
-}
-
-function* objectCreate(action) {
-  const { page, oldType, oldId, newType, newId } = action.payload
-
-  const openTabs = yield select(selectors.getOpenTabs, page)
-  const oldTab = _.find(openTabs, { object: { type: oldType, id: oldId } })
-
-  if (oldTab) {
-    const newTab = {
-      ...oldTab,
-      object: { type: newType, id: newId },
-      changed: false
-    }
-    yield put(actions.replaceOpenTab(page, oldTab.id, newTab))
-
-    yield AppController.setLastObjectModification(
-      newType,
-      objectOperation.CREATE,
-      Date.now()
-    )
-
-    const route = routes.format({ page, type: newType, id: newId })
-    yield put(actions.routeReplace(route))
-  }
-}
-
-function* objectOpen(action) {
-  const { page, type, id } = action.payload
-  const route = routes.format({ page, type, id })
-  yield put(actions.routeChange(route))
-}
-
-function* objectUpdate(action) {
-  const { type } = action.payload
-  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 AppController.setLastObjectModification(
-    type,
-    objectOperation.DELETE,
-    Date.now()
-  )
-}
-
-function* objectChange(action) {
-  const { page, type, id, changed } = action.payload
-
-  const openTabs = yield select(selectors.getOpenTabs, page)
-  const oldTab = _.find(openTabs, { object: { type, id } })
-
-  if (oldTab) {
-    const newTab = { ...oldTab, changed }
-    yield put(actions.replaceOpenTab(page, oldTab.id, newTab))
-  }
-}
-
-function* objectClose(action) {
-  const { page, type, id } = action.payload
-
-  const objectToClose = { type, id }
-  const openTabs = yield select(selectors.getOpenTabs, page)
-  let selectedObject = yield select(selectors.getSelectedObject, page)
-
-  if (selectedObject && _.isEqual(selectedObject, objectToClose)) {
-    if (_.size(openTabs) === 1) {
-      selectedObject = null
-    } else {
-      let selectedIndex = _.findIndex(openTabs, { object: selectedObject })
-      if (selectedIndex === 0) {
-        selectedObject = openTabs[selectedIndex + 1].object
-      } else {
-        selectedObject = openTabs[selectedIndex - 1].object
-      }
-    }
-  }
-
-  let tabToClose = _.find(openTabs, { object: objectToClose })
-  if (tabToClose) {
-    yield put(actions.removeOpenTab(page, tabToClose.id))
-  }
-
-  if (selectedObject) {
-    let route = routes.format({
-      page,
-      type: selectedObject.type,
-      id: selectedObject.id
-    })
-    yield put(actions.routeChange(route))
-  } else {
-    let route = routes.format({ page })
-    yield put(actions.routeChange(route))
-  }
-}
-
-function* routeChange(action) {
-  const route = routes.parse(action.payload.route)
-
-  if (route.type && route.id) {
-    const object = { type: route.type, id: route.id }
-    const openTabs = yield select(selectors.getOpenTabs, route.page)
-
-    if (openTabs) {
-      let found = false
-      let id = 1
-
-      openTabs.forEach(openTab => {
-        if (_.isMatch(openTab.object, object)) {
-          found = true
-        }
-        if (openTab.id >= id) {
-          id = openTab.id + 1
-        }
-      })
-
-      if (!found) {
-        yield put(actions.addOpenTab(route.page, { id, object }))
-      }
-    }
-  }
-
-  yield put(actions.setCurrentRoute(route.page, route.path))
-}
diff --git a/openbis_ng_ui/src/js/store/sagas/sagas.js b/openbis_ng_ui/src/js/store/sagas/sagas.js
deleted file mode 100644
index 04ce65514512d9fe3d774bce56e512c6fed872a9..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/sagas/sagas.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import { all } from 'redux-saga/effects'
-import app from '@src/js/store/sagas/app.js'
-import api from '@src/js/store/sagas/api.js'
-import page from '@src/js/store/sagas/page.js'
-
-export default function* root() {
-  yield all([api(), app(), page()])
-}
diff --git a/openbis_ng_ui/src/js/store/selectors/app.js b/openbis_ng_ui/src/js/store/selectors/app.js
deleted file mode 100644
index 662fd1712a74f49c4ace029797a09210d1e349dc..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/selectors/app.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import routes from '@src/js/common/consts/routes.js'
-
-const getInitialized = state => {
-  return state.initialized
-}
-
-const getLoading = state => {
-  return state.ui.loading
-}
-
-const getSearch = state => {
-  return state.ui.search
-}
-
-const getRoute = state => {
-  return state.route
-}
-
-const getCurrentPage = state => {
-  let route = routes.parse(state.route)
-  return route.page
-}
-
-const getError = state => {
-  return state.ui.error
-}
-
-const getSession = state => {
-  return state.session
-}
-
-export default {
-  getInitialized,
-  getLoading,
-  getSearch,
-  getRoute,
-  getCurrentPage,
-  getError,
-  getSession
-}
diff --git a/openbis_ng_ui/src/js/store/selectors/page.js b/openbis_ng_ui/src/js/store/selectors/page.js
deleted file mode 100644
index deaefdc54640097ab2a5cd88f41af0ce6efb80a1..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/selectors/page.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import _ from 'lodash'
-import { createSelector } from 'reselect'
-import logger from '@src/js/common/logger.js'
-import routes from '@src/js/common/consts/routes.js'
-
-const getCurrentRoute = (state, page) => {
-  logger.log(logger.DEBUG, 'pageSelector.getCurrentRoute')
-  return state.ui.pages[page].currentRoute
-}
-
-const getOpenTabs = (state, page) => {
-  logger.log(logger.DEBUG, 'pageSelector.getOpenTabs')
-  return state.ui.pages[page].openTabs
-}
-
-const getOpenObjects = createSelector(getOpenTabs, openTabs => {
-  logger.log(logger.DEBUG, 'pageSelector.getOpenObjects')
-  return openTabs.map(openTab => {
-    return openTab.object
-  })
-})
-
-const getSelectedTab = (state, page) => {
-  logger.log(logger.DEBUG, 'pageSelector.getSelectedTab')
-  const selectedObject = getSelectedObject(state, page)
-  if (selectedObject) {
-    const openTabs = getOpenTabs(state, page)
-    return _.find(openTabs, { object: selectedObject })
-  } else {
-    return null
-  }
-}
-
-const getSelectedObject = createSelector(getCurrentRoute, path => {
-  logger.log(logger.DEBUG, 'pageSelector.getSelectedObject')
-  if (path) {
-    let route = routes.parse(path)
-    if (route && route.type && route.id) {
-      return { type: route.type, id: route.id }
-    }
-  }
-  return null
-})
-
-export default {
-  getCurrentRoute,
-  getOpenTabs,
-  getOpenObjects,
-  getSelectedTab,
-  getSelectedObject
-}
diff --git a/openbis_ng_ui/src/js/store/selectors/selectors.js b/openbis_ng_ui/src/js/store/selectors/selectors.js
deleted file mode 100644
index 208e96bbd2fa4ac952755b628c962f61bd4c32e8..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/selectors/selectors.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import app from '@src/js/store/selectors/app.js'
-import page from '@src/js/store/selectors/page.js'
-
-export default {
-  ...app,
-  ...page
-}
diff --git a/openbis_ng_ui/src/js/store/store.js b/openbis_ng_ui/src/js/store/store.js
deleted file mode 100644
index bba1a07b67a4ad3d7d1a35c5fe4d7775dd737239..0000000000000000000000000000000000000000
--- a/openbis_ng_ui/src/js/store/store.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import { createStore, applyMiddleware, compose } from 'redux'
-import createSagaMiddleware from 'redux-saga'
-import middlewares from '@src/js/store/middleware/middlewares.js'
-import rootReducer from '@src/js/store/reducers/reducers.js'
-import rootSaga from '@src/js/store/sagas/sagas.js'
-import history from '@src/js/store/history.js'
-
-function createStoreWithMiddleware() {
-  const sagaMiddleware = createSagaMiddleware()
-  const composeEnhancers =
-    (window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ &&
-      window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
-        trace: true,
-        traceLimit: 25
-      })) ||
-    compose
-
-  let store = createStore(
-    rootReducer,
-    composeEnhancers(applyMiddleware(...middlewares, sagaMiddleware))
-  )
-  sagaMiddleware.run(rootSaga)
-
-  history.configure(store)
-
-  return store
-}
-
-let store = createStoreWithMiddleware()
-
-/* eslint-disable no-undef */
-if (module.hot) {
-  module.hot.accept('./reducers/reducers.js', () => {
-    const nextRootReducer = require('./reducers/reducers.js').default
-    store.replaceReducer(nextRootReducer)
-  })
-}
-
-export { createStoreWithMiddleware as createStore }
-export default store