From 9f139ef86592c5a180e92c91f1c26002c014eb04 Mon Sep 17 00:00:00 2001
From: grantnert48 <tobias.grantner@tuwien.ac.at>
Date: Mon, 12 Jun 2023 18:58:30 +0200
Subject: [PATCH] Propagated changes made in order to remove docker dependency
 to UI

---
 dbrepo-ui/api/container.mapper.js             |  16 ---
 dbrepo-ui/api/container.service.js            |  57 ---------
 dbrepo-ui/api/database.service.js             |  56 ++++-----
 dbrepo-ui/api/query.service.js                |  52 ++++-----
 dbrepo-ui/api/table.service.js                |  44 +++----
 dbrepo-ui/components/DBToolbar.vue            |  18 +--
 dbrepo-ui/components/DatabaseList.vue         | 110 ++++++------------
 dbrepo-ui/components/QueryList.vue            |   4 +-
 dbrepo-ui/components/TableList.vue            |   2 +-
 dbrepo-ui/components/TableSchema.vue          |  29 ++---
 dbrepo-ui/components/TableToolbar.vue         |  16 +--
 dbrepo-ui/components/ViewList.vue             |   4 +-
 dbrepo-ui/components/dialogs/CreateDB.vue     |  65 +++--------
 dbrepo-ui/components/dialogs/EditAccess.vue   |   6 +-
 dbrepo-ui/components/dialogs/EditTuple.vue    |   4 +-
 dbrepo-ui/components/dialogs/Persist.vue      |   4 +-
 dbrepo-ui/components/dialogs/TimeTravel.vue   |   2 +-
 dbrepo-ui/components/query/Builder.vue        |   6 +-
 dbrepo-ui/components/query/Results.vue        |  10 +-
 dbrepo-ui/layouts/default.vue                 |  21 ++--
 .../database/_database_id/index.vue           |  13 ---
 .../_database_id/table/_table_id/index.vue    |  10 --
 .../database/_database_id/admin.vue           |   8 +-
 .../pages/database/_database_id/index.vue     |  13 +++
 .../database/_database_id/info.vue            |  14 +--
 .../_database_id/query/_query_id/index.vue    |  24 ++--
 .../database/_database_id/query/create.vue    |   6 +-
 .../database/_database_id/query/index.vue     |   4 +-
 .../database/_database_id/settings.vue        |  10 +-
 .../_database_id/table/_table_id/data.vue     |  20 ++--
 .../_database_id/table/_table_id/import.vue   |  12 +-
 .../_database_id/table/_table_id/index.vue    |  10 ++
 .../_database_id/table/_table_id/info.vue     |  10 +-
 .../_database_id/table/_table_id/schema.vue   |  14 +--
 .../database/_database_id/table/create.vue    |  14 +--
 .../database/_database_id/table/import.vue    |  38 +++---
 .../database/_database_id/table/index.vue     |   8 +-
 .../_database_id/view/_view_id/index.vue      |  12 +-
 .../database/_database_id/view/create.vue     |   6 +-
 .../database/_database_id/view/index.vue      |   8 +-
 .../pages/{container => database}/index.vue   |   8 +-
 dbrepo-ui/pages/index.vue                     |   2 +-
 dbrepo-ui/pages/login.vue                     |   4 +-
 dbrepo-ui/pages/search/index.vue              |   8 +-
 dbrepo-ui/store/index.js                      |   6 +-
 45 files changed, 323 insertions(+), 485 deletions(-)
 delete mode 100644 dbrepo-ui/api/container.mapper.js
 delete mode 100644 dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue
 delete mode 100644 dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/admin.vue (86%)
 create mode 100644 dbrepo-ui/pages/database/_database_id/index.vue
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/info.vue (97%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/query/_query_id/index.vue (92%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/query/create.vue (74%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/query/index.vue (70%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/settings.vue (93%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/_table_id/data.vue (86%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/_table_id/import.vue (89%)
 create mode 100644 dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/_table_id/info.vue (91%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/_table_id/schema.vue (88%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/create.vue (88%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/import.vue (90%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/table/index.vue (61%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/view/_view_id/index.vue (88%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/view/create.vue (70%)
 rename dbrepo-ui/pages/{container/_container_id => }/database/_database_id/view/index.vue (59%)
 rename dbrepo-ui/pages/{container => database}/index.vue (88%)

diff --git a/dbrepo-ui/api/container.mapper.js b/dbrepo-ui/api/container.mapper.js
deleted file mode 100644
index 828a5fbc93..0000000000
--- a/dbrepo-ui/api/container.mapper.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import UserMapper from '@/api/user.mapper'
-import DatabaseMapper from '@/api/database.mapper'
-
-class ContainerMapper {
-  containerToCreator (container) {
-    if (!container) {
-      return null
-    }
-    if (container.database) {
-      return DatabaseMapper.databaseToOwner(container.database)
-    }
-    return UserMapper.userToFullName(container.creator)
-  }
-}
-
-export default new ContainerMapper()
diff --git a/dbrepo-ui/api/container.service.js b/dbrepo-ui/api/container.service.js
index c24ffbd9d5..97d0fc7164 100644
--- a/dbrepo-ui/api/container.service.js
+++ b/dbrepo-ui/api/container.service.js
@@ -19,23 +19,6 @@ class ContainerService {
     })
   }
 
-  findAllImages () {
-    return new Promise((resolve, reject) => {
-      api.get('/api/image', { headers: { Accept: 'application/json' } })
-        .then((response) => {
-          const images = response.data
-          console.debug('response images', images)
-          resolve(images)
-        })
-        .catch((error) => {
-          const { code, message } = error
-          console.error('Failed to load images', error)
-          Vue.$toast.error(`[${code}] Failed to load images: ${message}`)
-          reject(error)
-        })
-    })
-  }
-
   findOne (id) {
     return new Promise((resolve, reject) => {
       api.get(`/api/container/${id}`, { headers: { Accept: 'application/json' } })
@@ -69,46 +52,6 @@ class ContainerService {
         })
     })
   }
-
-  create (data) {
-    return new Promise((resolve, reject) => {
-      api.post('/api/container', data, { headers: { Accept: 'application/json' } })
-        .then((response) => {
-          const container = response.data
-          console.debug('response container', container)
-          resolve(container)
-        })
-        .catch((error) => {
-          const { code, message } = error
-          console.error('Failed to create container', error)
-          Vue.$toast.error(`[${code}] Failed to create container: ${message}`)
-          reject(error)
-        })
-    })
-  }
-
-  modify (id, action) {
-    return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}`, { action }, { headers: { Accept: 'application/json' } })
-        .then((response) => {
-          const container = response.data
-          console.debug('response container', container)
-          resolve(container)
-        })
-        .catch((error) => {
-          const { code, message, response } = error
-          const { status } = response
-          if (status === 409) {
-            console.warn('Failed to modify container', error)
-            reject(error)
-          } else {
-            console.error('Failed to modify container', error)
-            Vue.$toast.error(`[${code}] Failed to modify container: ${message}`)
-            reject(error)
-          }
-        })
-    })
-  }
 }
 
 export default new ContainerService()
diff --git a/dbrepo-ui/api/database.service.js b/dbrepo-ui/api/database.service.js
index db44002895..241f740031 100644
--- a/dbrepo-ui/api/database.service.js
+++ b/dbrepo-ui/api/database.service.js
@@ -2,9 +2,9 @@ import Vue from 'vue'
 import api from '@/api'
 
 class DatabaseService {
-  findAll (id) {
+  findAll () {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database`, { headers: { Accept: 'application/json' } })
+      api.get('/api/database', { headers: { Accept: 'application/json' } })
         .then((response) => {
           const databases = response.data
           console.debug('response databases', databases)
@@ -19,9 +19,9 @@ class DatabaseService {
     })
   }
 
-  findOne (id, databaseId) {
+  findOne (databaseId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const database = response.data
           console.debug('response database', database)
@@ -35,9 +35,9 @@ class DatabaseService {
     })
   }
 
-  create (id, data) {
+  create (data) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database`, data, { headers: { Accept: 'application/json' } })
+      api.post('/api/database', data, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const database = response.data
           console.debug('response database', database)
@@ -51,9 +51,9 @@ class DatabaseService {
     })
   }
 
-  delete (id, databaseId) {
+  delete (databaseId) {
     return new Promise((resolve, reject) => {
-      api.delete(`/api/container/${id}/database/${databaseId}`, { headers: { Accept: 'application/json' } })
+      api.delete(`/api/database/${databaseId}`, { headers: { Accept: 'application/json' } })
         .then(() => resolve())
         .catch((error) => {
           const { code, message } = error
@@ -64,9 +64,9 @@ class DatabaseService {
     })
   }
 
-  modifyVisibility (id, databaseId, isPublic) {
+  modifyVisibility (databaseId, isPublic) {
     return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}/database/${databaseId}/visibility`, { is_public: isPublic }, { headers: { Accept: 'application/json' } })
+      api.put(`/api/database/${databaseId}/visibility`, { is_public: isPublic }, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const database = response.data
           console.debug('response database', database)
@@ -80,9 +80,9 @@ class DatabaseService {
     })
   }
 
-  modifyOwner (id, databaseId, username) {
+  modifyOwner (databaseId, username) {
     return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}/database/${databaseId}/transfer`, { username }, { headers: { Accept: 'application/json' } })
+      api.put(`/api/database/${databaseId}/transfer`, { username }, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const database = response.data
           console.debug('response database', database)
@@ -96,9 +96,9 @@ class DatabaseService {
     })
   }
 
-  checkAccess (id, databaseId) {
+  checkAccess (databaseId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/access`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/access`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const databases = response.data
           console.debug('response databases', databases)
@@ -116,9 +116,9 @@ class DatabaseService {
     })
   }
 
-  modifyAccess (id, databaseId, username, type) {
+  modifyAccess (databaseId, username, type) {
     return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}/database/${databaseId}/access/${username}`, { type }, { headers: { Accept: 'application/json' } })
+      api.put(`/api/database/${databaseId}/access/${username}`, { type }, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const database = response.data
           console.debug('response database', database)
@@ -133,9 +133,9 @@ class DatabaseService {
     })
   }
 
-  revokeAccess (id, databaseId, username) {
+  revokeAccess (databaseId, username) {
     return new Promise((resolve, reject) => {
-      api.delete(`/api/container/${id}/database/${databaseId}/access/${username}`, { headers: { Accept: 'application/json' } })
+      api.delete(`/api/database/${databaseId}/access/${username}`, { headers: { Accept: 'application/json' } })
         .then(() => resolve())
         .catch((error) => {
           const { code, message } = error
@@ -146,9 +146,9 @@ class DatabaseService {
     })
   }
 
-  giveAccess (id, databaseId, username, type) {
+  giveAccess (databaseId, username, type) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database/${databaseId}/access`, { username, type }, { headers: { Accept: 'application/json' } })
+      api.post(`/api/database/${databaseId}/access`, { username, type }, { headers: { Accept: 'application/json' } })
         .then(() => resolve())
         .catch((error) => {
           const { code, message } = error
@@ -159,9 +159,9 @@ class DatabaseService {
     })
   }
 
-  findAllLicenses (id) {
+  findAllLicenses () {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/license`, { headers: { Accept: 'application/json' } })
+      api.get('/api/database/license', { headers: { Accept: 'application/json' } })
         .then((response) => {
           const licenses = response.data
           console.debug('response licenses', licenses)
@@ -176,9 +176,9 @@ class DatabaseService {
     })
   }
 
-  findView (id, databaseId, viewId) {
+  findView (databaseId, viewId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const view = response.data
           console.debug('response view', view)
@@ -193,9 +193,9 @@ class DatabaseService {
     })
   }
 
-  createView (id, databaseId, data) {
+  createView (databaseId, data) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database/${databaseId}/view`, data, { headers: { Accept: 'application/json' } })
+      api.post(`/api/database/${databaseId}/view`, data, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const view = response.data
           console.debug('response view', view)
@@ -210,9 +210,9 @@ class DatabaseService {
     })
   }
 
-  deleteView (id, databaseId, viewId) {
+  deleteView (databaseId, viewId) {
     return new Promise((resolve, reject) => {
-      api.delete(`/api/container/${id}/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } })
+      api.delete(`/api/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } })
         .then(() => resolve())
         .catch((error) => {
           const { code, message } = error
diff --git a/dbrepo-ui/api/query.service.js b/dbrepo-ui/api/query.service.js
index db1bc16f3a..bfb9be785b 100644
--- a/dbrepo-ui/api/query.service.js
+++ b/dbrepo-ui/api/query.service.js
@@ -2,9 +2,9 @@ import Vue from 'vue'
 import api from '@/api'
 
 class QueryService {
-  findAll (id, databaseId, persisted) {
+  findAll (databaseId, persisted) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/query${persisted === null ? '' : `?persisted=${persisted}`}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/query${persisted === null ? '' : `?persisted=${persisted}`}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const queries = response.data
           console.debug('response queries', queries)
@@ -19,9 +19,9 @@ class QueryService {
     })
   }
 
-  findOne (id, databaseId, queryId) {
+  findOne (databaseId, queryId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/query/${queryId}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const query = response.data
           console.debug('response query', query)
@@ -35,9 +35,9 @@ class QueryService {
     })
   }
 
-  persist (id, databaseId, queryId) {
+  persist (databaseId, queryId) {
     return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}/database/${databaseId}/query/${queryId}`, {}, { headers: { Accept: 'application/json' } })
+      api.put(`/api/database/${databaseId}/query/${queryId}`, {}, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const query = response.data
           console.debug('response query', query)
@@ -52,9 +52,9 @@ class QueryService {
     })
   }
 
-  importCsv (id, databaseId, tableId, data) {
+  importCsv (databaseId, tableId, data) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } })
+      api.post(`/api/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const table = response.data
           console.debug('response table', table)
@@ -69,9 +69,9 @@ class QueryService {
     })
   }
 
-  insertTuple (id, databaseId, tableId, data) {
+  insertTuple (databaseId, tableId, data) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } })
+      api.post(`/api/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } })
         .then((response) => {
           const tuple = response.data
           console.debug('response insert tuple', tuple)
@@ -92,9 +92,9 @@ class QueryService {
     })
   }
 
-  updateTuple (id, databaseId, tableId, data) {
+  updateTuple (databaseId, tableId, data) {
     return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } })
+      api.put(`/api/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } })
         .then((response) => {
           const tuple = response.data
           console.debug('response update tuple', tuple)
@@ -115,9 +115,9 @@ class QueryService {
     })
   }
 
-  exportSubset (id, databaseId, queryId) {
+  exportSubset (databaseId, queryId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}/export`, { headers: { Accept: 'text/csv' } })
+      api.get(`/api/database/${databaseId}/query/${queryId}/export`, { headers: { Accept: 'text/csv' } })
         .then((response) => {
           const subset = response.data
           console.debug('response subset', subset)
@@ -132,9 +132,9 @@ class QueryService {
     })
   }
 
-  exportMetadata (id, mime) {
+  exportMetadata (pid, mime) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/pid/${id}`, { headers: { Accept: mime } })
+      api.get(`/api/pid/${pid}`, { headers: { Accept: mime } })
         .then((response) => {
           const metadata = response.data
           console.debug('response metadata', metadata)
@@ -149,9 +149,9 @@ class QueryService {
     })
   }
 
-  execute (id, databaseId, data, page, size) {
+  execute (databaseId, data, page, size) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database/${databaseId}/query?page=${page}&size=${size}`, data, { headers: { Accept: 'application/json' } })
+      api.post(`/api/database/${databaseId}/query?page=${page}&size=${size}`, data, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const result = response.data
           console.debug('response result', result)
@@ -166,9 +166,9 @@ class QueryService {
     })
   }
 
-  reExecuteQuery (id, databaseId, queryId, page, size) {
+  reExecuteQuery (databaseId, queryId, page, size) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/query/${queryId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const result = response.data
           console.debug('response result', result)
@@ -183,9 +183,9 @@ class QueryService {
     })
   }
 
-  reExecuteQueryCount (id, databaseId, queryId) {
+  reExecuteQueryCount (databaseId, queryId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}/data/count`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/query/${queryId}/data/count`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const count = response.data
           console.debug('response count', count)
@@ -200,9 +200,9 @@ class QueryService {
     })
   }
 
-  reExecuteView (id, databaseId, viewId, page, size) {
+  reExecuteView (databaseId, viewId, page, size) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/view/${viewId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/view/${viewId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const result = response.data
           console.debug('response result', result)
@@ -217,9 +217,9 @@ class QueryService {
     })
   }
 
-  reExecuteViewCount (id, databaseId, viewId) {
+  reExecuteViewCount (databaseId, viewId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/view/${viewId}/data/count`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/view/${viewId}/data/count`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const count = response.data
           console.debug('response count', count)
diff --git a/dbrepo-ui/api/table.service.js b/dbrepo-ui/api/table.service.js
index 4ec9769323..457b014ab6 100644
--- a/dbrepo-ui/api/table.service.js
+++ b/dbrepo-ui/api/table.service.js
@@ -7,9 +7,9 @@ import api from '@/api'
  * @author Martin Weise
  */
 class TableService {
-  findAll (id, databaseId) {
+  findAll (databaseId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/table`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/table`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const tables = response.data
           console.debug('response tables', tables)
@@ -24,9 +24,9 @@ class TableService {
     })
   }
 
-  findOne (id, databaseId, tableId) {
+  findOne (databaseId, tableId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/table/${tableId}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const table = response.data
           console.debug('response table', table)
@@ -41,9 +41,9 @@ class TableService {
     })
   }
 
-  updateColumn (id, databaseId, tableId, columnId, data) {
+  updateColumn (databaseId, tableId, columnId, data) {
     return new Promise((resolve, reject) => {
-      api.put(`/api/container/${id}/database/${databaseId}/table/${tableId}/column/${columnId}`, data, { headers: { Accept: 'application/json' } })
+      api.put(`/api/database/${databaseId}/table/${tableId}/column/${columnId}`, data, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const column = response.data
           console.debug('response column', column)
@@ -58,9 +58,9 @@ class TableService {
     })
   }
 
-  importCsv (id, databaseId, tableId, data) {
+  importCsv (databaseId, tableId, data) {
     return new Promise((resolve, reject) => {
-      api.post(`/api/container/${id}/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } })
+      api.post(`/api/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } })
         .then(() => resolve())
         .catch((error) => {
           const { code, message } = error
@@ -71,9 +71,9 @@ class TableService {
     })
   }
 
-  data (id, databaseId, tableId, page, size, timestamp) {
+  data (databaseId, tableId, page, size, timestamp) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/data?page=${page}&size=${size}&timestamp=${timestamp}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/table/${tableId}/data?page=${page}&size=${size}&timestamp=${timestamp}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const data = response.data
           console.debug('response data', data)
@@ -88,9 +88,9 @@ class TableService {
     })
   }
 
-  dataCount (id, databaseId, tableId, timestamp) {
+  dataCount (databaseId, tableId, timestamp) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/data/count?timestamp=${timestamp}`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/table/${tableId}/data/count?timestamp=${timestamp}`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const count = response.data
           console.debug('response count', count)
@@ -105,9 +105,9 @@ class TableService {
     })
   }
 
-  findHistory (id, databaseId, tableId) {
+  findHistory (databaseId, tableId) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/history`, { headers: { Accept: 'application/json' } })
+      api.get(`/api/database/${databaseId}/table/${tableId}/history`, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const history = response.data
           console.debug('response history', history)
@@ -122,13 +122,13 @@ class TableService {
     })
   }
 
-  exportData (id, databaseId, tableId) {
-    return this.exportDataTimestamp(id, databaseId, tableId, null)
+  exportData (databaseId, tableId) {
+    return this.exportDataTimestamp(databaseId, tableId, null)
   }
 
-  exportDataTimestamp (id, databaseId, tableId, timestamp) {
+  exportDataTimestamp (databaseId, tableId, timestamp) {
     return new Promise((resolve, reject) => {
-      api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/export?timestamp=${timestamp}`, { responseType: 'text' })
+      api.get(`/api/database/${databaseId}/table/${tableId}/export?timestamp=${timestamp}`, { responseType: 'text' })
         .then((response) => {
           const data = response.data
           console.debug('response data', data)
@@ -143,10 +143,10 @@ class TableService {
     })
   }
 
-  create (id, databaseId, data) {
+  create (databaseId, data) {
     return new Promise((resolve, reject) => {
       console.debug('====>', data)
-      api.post(`/api/container/${id}/database/${databaseId}/table`, data, { headers: { Accept: 'application/json' } })
+      api.post(`/api/database/${databaseId}/table`, data, { headers: { Accept: 'application/json' } })
         .then((response) => {
           const table = response.data
           console.debug('response table', table)
@@ -161,9 +161,9 @@ class TableService {
     })
   }
 
-  deleteTuple (id, databaseId, tableId, data) {
+  deleteTuple (databaseId, tableId, data) {
     return new Promise((resolve, reject) => {
-      api.delete(`/api/container/${id}/database/${databaseId}/table/${tableId}/data`, { headers: { Accept: 'application/json' }, data })
+      api.delete(`/api/database/${databaseId}/table/${tableId}/data`, { headers: { Accept: 'application/json' }, data })
         .then(() => resolve())
         .catch((error) => {
           const { code, message } = error
diff --git a/dbrepo-ui/components/DBToolbar.vue b/dbrepo-ui/components/DBToolbar.vue
index c899ab03eb..b815c6850a 100644
--- a/dbrepo-ui/components/DBToolbar.vue
+++ b/dbrepo-ui/components/DBToolbar.vue
@@ -28,7 +28,7 @@
       </v-toolbar-title>
       <v-spacer />
       <v-toolbar-title>
-        <v-btn v-if="canImportCsv" class="mr-2 mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/import`">
+        <v-btn v-if="canImportCsv" class="mr-2 mb-1" :to="`/database/${$route.params.database_id}/table/import`">
           <v-icon left>mdi-cloud-upload</v-icon> Import .csv
         </v-btn>
         <DownloadButton
@@ -37,31 +37,31 @@
           class="mr-2 mb-1">
           <v-icon left>mdi-code-tags</v-icon> Identifier .xml
         </DownloadButton>
-        <v-btn v-if="canCreateSubset" color="secondary" class="mb-1 white--text" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query/create`">
+        <v-btn v-if="canCreateSubset" color="secondary" class="mb-1 white--text" :to="`/database/${$route.params.database_id}/query/create`">
           <v-icon left>mdi-wrench</v-icon> Create Subset
         </v-btn>
-        <v-btn v-if="canCreateView" color="secondary" class="ml-2 mr-2 mb-1 white--text" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view/create`">
+        <v-btn v-if="canCreateView" color="secondary" class="ml-2 mr-2 mb-1 white--text" :to="`/database/${$route.params.database_id}/view/create`">
           <v-icon left>mdi-view-carousel-outline</v-icon> Create View
         </v-btn>
-        <v-btn v-if="canCreateTable" color="primary" class="mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/create`">
+        <v-btn v-if="canCreateTable" color="primary" class="mb-1" :to="`/database/${$route.params.database_id}/table/create`">
           <v-icon left>mdi-table-large-plus</v-icon> Create Table
         </v-btn>
       </v-toolbar-title>
       <template v-slot:extension>
         <v-tabs v-model="tab" color="primary">
-          <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/info`">
+          <v-tab :to="`/database/${$route.params.database_id}/info`">
             {{ $t('databases.toolbar.info', { name: 'vue-i18n' }) }}
           </v-tab>
-          <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`">
+          <v-tab :to="`/database/${$route.params.database_id}/table`">
             {{ $t('databases.toolbar.tables', { name: 'vue-i18n' }) }}
           </v-tab>
-          <v-tab v-if="canViewQueries" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query`">
+          <v-tab v-if="canViewQueries" :to="`/database/${$route.params.database_id}/query`">
             {{ $t('databases.toolbar.subsets', { name: 'vue-i18n' }) }}
           </v-tab>
-          <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view`">
+          <v-tab :to="`/database/${$route.params.database_id}/view`">
             {{ $t('databases.toolbar.views', { name: 'vue-i18n' }) }}
           </v-tab>
-          <v-tab v-if="isOwner" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/settings`">
+          <v-tab v-if="isOwner" :to="`/database/${$route.params.database_id}/settings`">
             {{ $t('databases.toolbar.settings', { name: 'vue-i18n' }) }}
           </v-tab>
         </v-tabs>
diff --git a/dbrepo-ui/components/DatabaseList.vue b/dbrepo-ui/components/DatabaseList.vue
index aefcbfb70d..1fd05770e5 100644
--- a/dbrepo-ui/components/DatabaseList.vue
+++ b/dbrepo-ui/components/DatabaseList.vue
@@ -1,45 +1,36 @@
 <template>
   <div>
-    <v-progress-linear v-if="loadingContainers || loadingDatabases" :indeterminate="!error" />
+    <v-progress-linear v-if="loadingDatabases" :indeterminate="!error" />
     <v-card v-if="!$vuetify.theme.dark && containers.length> 0" flat tile>
       <v-divider class="mx-4" />
     </v-card>
     <v-card
-      v-for="(container, idx) in containers"
+      v-for="(database, idx) in databases"
       :key="idx"
-      :to="link(container)"
+      :to="link(database)"
       flat
       tile>
       <v-divider v-if="idx !== 0" class="mx-4" />
-      <v-card-title v-if="!hasDatabase(container)" v-text="container.name" />
-      <v-card-title v-if="hasDatabase(container)">
-        <a :href="`/container/${container.id}/database/${container.database.id}`">{{ container.name }}</a>
+      <v-card-title>
+        <a :href="`/database/${database.id}`">{{ database.name }}</a>
       </v-card-title>
-      <v-card-subtitle class="db-subtitle" v-text="formatCreators(container)" />
-      <v-card-text v-if="hasDatabase(container)" class="db-description">
+      <v-card-subtitle class="db-subtitle" v-text="formatCreators(database)" />
+      <v-card-text class="db-description">
         <div class="db-tags">
-          <v-chip v-if="hasDatabase(container) && container.database.is_public" small color="green" outlined>Public</v-chip>
-          <v-chip v-if="hasDatabase(container) && !container.database.is_public" small color="red" outlined>Private</v-chip>
+          <v-chip v-if="database.is_public" small color="green" outlined>Public</v-chip>
+          <v-chip v-if="!database.is_public" small color="red" outlined>Private</v-chip>
           <v-chip
-            v-if="identifierYear(container)"
+            v-if="identifierYear(database)"
             small
             outlined
-            v-text="identifierYear(container)" />
+            v-text="identifierYear(database)" />
           <v-chip
-            v-if="hasIdentifier(container)"
+            v-if="hasIdentifier(database)"
             small
             outlined
-            v-text="container.database.identifier.publisher" />
+            v-text="database.identifier.publisher" />
         </div>
-        <div v-text="identifierDescription(container)" />
-        <v-btn
-          v-if="needsDatabase(container)"
-          small
-          secondary
-          :loading="container?.loading"
-          @click.stop="createDatabase(container)">
-          Create Database
-        </v-btn>
+        <div v-text="identifierDescription(database)" />
       </v-card-text>
     </v-card>
     <v-toolbar v-if="false" flat>
@@ -56,23 +47,20 @@
 
 <script>
 import DatabaseService from '@/api/database.service'
-import ContainerService from '@/api/container.service'
-import ContainerMapper from '@/api/container.mapper'
+import DatabaseMapper from '@/api/database.mapper'
 
 export default {
   data () {
     return {
-      loadingContainers: false,
+      loadingDatabases: false,
       loadingCreate: false,
       createDbDialog: false,
       databases: [],
-      containers: [],
       searchQuery: null,
       limit: 100,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' }
       ],
-      loadingDatabases: false,
       error: false
     }
   },
@@ -85,64 +73,42 @@ export default {
     }
   },
   mounted () {
-    this.loadContainers()
+    this.loadDatabases()
   },
   methods: {
-    formatCreators (container) {
-      return ContainerMapper.containerToCreator(container)
-    },
-    needsDatabase (container) {
-      if (!this.user) {
-        return false
-      }
-      if (container.creator.username !== this.user.username) {
-        return false
-      }
-      return !container.database
-    },
-    hasDatabase (container) {
-      return container.database
+    formatCreators (database) {
+      return DatabaseMapper.databaseToOwner(database)
     },
-    hasIdentifier (container) {
-      return container.database && container.database.identifier
+    hasIdentifier (database) {
+      return database && database.identifier
     },
-    identifierYear (container) {
-      if (!container || !container.database || !container.database.identifier || !container.database.identifier.publication_year) {
+    identifierYear (database) {
+      if (!database || !database.identifier || !database.identifier.publication_year) {
         return null
       }
-      return container.database.identifier.publication_year
+      return database.identifier.publication_year
     },
-    identifierDescription (container) {
-      if (!container || !container.database || !container.database.identifier) {
+    identifierDescription (database) {
+      if (!database || !database.identifier) {
         return null
       }
-      return container.database.identifier.description
+      return database.identifier.description
     },
-    loadContainers () {
+    loadDatabases () {
       this.createDbDialog = false
-      this.loadingContainers = true
-      ContainerService.findAll(this.limit)
-        .then((containers) => {
-          this.containers = containers
-          console.info('Found', this.containers.length, 'container(s)')
-        })
-        .finally(() => {
-          this.loadingContainers = false
-        })
-    },
-    createDatabase (container) {
-      container.loading = true
-      DatabaseService.create(container.id, { name: container.name, is_public: true })
-        .then((database) => {
-          container.loading = false
-          this.$router.push(`/container/${container.id}/database/${database.id}`)
+      this.loadingDatabases = true
+      DatabaseService.findAll() // TODO: write a findAllDatabases method
+        .then((databases) => {
+          this.databases = databases
+          console.info('Found', this.databases.length, 'container(s)')
         })
+      this.loadingDatabases = false
     },
-    link (container) {
-      if (!container.database || !container.database.id) {
+    link (database) {
+      if (!database || !database.container) {
         return null
       }
-      return `/container/${container.id}/database/${container.database.id}`
+      return `/database/${database.id}`
     }
   }
 }
diff --git a/dbrepo-ui/components/QueryList.vue b/dbrepo-ui/components/QueryList.vue
index 4485e34945..2a7e2a9f9f 100644
--- a/dbrepo-ui/components/QueryList.vue
+++ b/dbrepo-ui/components/QueryList.vue
@@ -147,7 +147,7 @@ export default {
     },
     loadQueries () {
       this.loadingQueries = true
-      QueryService.findAll(this.$route.params.container_id, this.$route.params.database_id, true)
+      QueryService.findAll(this.$route.params.database_id, true)
         .then((queries) => {
           this.queries = queries
         })
@@ -166,7 +166,7 @@ export default {
     },
     link (queryOrIdentifier) {
       if (queryOrIdentifier.identifier === null) {
-        return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query/${queryOrIdentifier.id}`
+        return `/database/${this.$route.params.database_id}/query/${queryOrIdentifier.id}`
       }
       if ('query_id' in queryOrIdentifier) {
         return null
diff --git a/dbrepo-ui/components/TableList.vue b/dbrepo-ui/components/TableList.vue
index f627f9387e..790e98a209 100644
--- a/dbrepo-ui/components/TableList.vue
+++ b/dbrepo-ui/components/TableList.vue
@@ -11,7 +11,7 @@
       <v-list-item-group>
         <v-list-item
           two-line
-          :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${item.id}`">
+          :to="`/database/${$route.params.database_id}/table/${item.id}`">
           <v-list-item-content>
             <v-list-item-title v-text="item.name" />
             <v-list-item-subtitle class="mt-2" v-text="item.description" />
diff --git a/dbrepo-ui/components/TableSchema.vue b/dbrepo-ui/components/TableSchema.vue
index a70d6c7563..2db4e48213 100644
--- a/dbrepo-ui/components/TableSchema.vue
+++ b/dbrepo-ui/components/TableSchema.vue
@@ -99,7 +99,7 @@
 </template>
 
 <script>
-import ContainerService from '@/api/container.service'
+import DatabaseService from '@/api/database.service'
 export default {
   props: {
     columns: {
@@ -134,11 +134,6 @@ export default {
       valid: true,
       finished: false,
       tableColumns: [],
-      container: {
-        image: {
-          id: null
-        }
-      },
       columnTypes: [
         // { value: 'ENUM', text: 'Enumeration' }, // Disabled for now, not implemented, #145
         { value: 'boolean', text: 'Boolean' },
@@ -165,7 +160,7 @@ export default {
   },
   mounted () {
     this.localLoading = this.loading
-    this.loadContainer()
+    this.loadDateFormats()
   },
   methods: {
     needsShift (column) {
@@ -174,19 +169,13 @@ export default {
       }
       return this.columns.filter(c => c.type === 'date' || c.type === 'timestamp').length > 0
     },
-    loadContainer () {
-      this.localLoading = true
-      ContainerService.findOne(this.$route.params.container_id)
-        .then((container) => {
-          this.container = container
-          ContainerService.findImage(container.image.id)
-            .then((image) => {
-              this.dateFormats = image.date_formats
-            })
-        })
-        .finally(() => {
-          this.localLoading = false
-        })
+    async loadDateFormats () {
+      try {
+        const database = await DatabaseService.findOne(this.$route.params.database_id)
+        this.dateFormats = database.container.image.date_formats
+      } finally {
+        this.localLoading = false
+      }
     },
     submit () {
       this.finished = true
diff --git a/dbrepo-ui/components/TableToolbar.vue b/dbrepo-ui/components/TableToolbar.vue
index 69351b3121..0db2e9f3c8 100644
--- a/dbrepo-ui/components/TableToolbar.vue
+++ b/dbrepo-ui/components/TableToolbar.vue
@@ -2,7 +2,7 @@
   <div v-if="table">
     <v-toolbar flat>
       <v-toolbar-title>
-        <v-btn id="back-btn" plain class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`">
+        <v-btn id="back-btn" plain class="mr-2" :to="`/database/${$route.params.database_id}/table`">
           <v-icon left>mdi-arrow-left</v-icon>
         </v-btn>
       </v-toolbar-title>
@@ -20,25 +20,25 @@
         <v-btn v-if="canDeleteTuple" color="error" class="mr-2 mb-1" :loading="loadingDelete" @click="deleteItems">
           <v-icon left>mdi-delete</v-icon> Delete <span v-if="selection.length > 1">&nbsp;{{ selection.length }}</span>
         </v-btn>
-        <v-btn v-if="canExecuteQuery" class="mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query/create?tid=${$route.params.table_id}`" color="secondary">
+        <v-btn v-if="canExecuteQuery" class="mb-1" :to="`/database/${$route.params.database_id}/query/create?tid=${$route.params.table_id}`" color="secondary">
           <v-icon left>mdi-wrench</v-icon> Create Subset
         </v-btn>
-        <v-btn v-if="canCreateView" class="ml-2 mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view/create?tid=${$route.params.table_id}`" color="secondary">
+        <v-btn v-if="canCreateView" class="ml-2 mb-1" :to="`/database/${$route.params.database_id}/view/create?tid=${$route.params.table_id}`" color="secondary">
           <v-icon left>mdi-view-carousel</v-icon> Create View
         </v-btn>
-        <v-btn v-if="canImportCsv" class="ml-2 mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/import`">
+        <v-btn v-if="canImportCsv" class="ml-2 mb-1" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/import`">
           <v-icon left>mdi-cloud-upload</v-icon> Import .csv
         </v-btn>
       </v-toolbar-title>
     </v-toolbar>
     <v-tabs v-model="tab" color="primary">
-      <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/info`">
+      <v-tab :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/info`">
         Info
       </v-tab>
-      <v-tab v-if="canViewTableData" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/data`">
+      <v-tab v-if="canViewTableData" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/data`">
         Data
       </v-tab>
-      <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/schema`">
+      <v-tab :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/schema`">
         Schema
       </v-tab>
     </v-tabs>
@@ -203,7 +203,7 @@ export default {
           .forEach((c) => {
             constraints[c.internal_name] = select[c.internal_name]
           })
-        TableService.deleteTuple(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, { keys: constraints })
+        TableService.deleteTuple(this.$route.params.database_id, this.$route.params.table_id, { keys: constraints })
           .then(() => {
             this.$toast.success(`Deleted ${this.selection.length} row${this.selection.length !== 1 ? 's' : ''}`)
             this.$emit('modified', { success: true, action: 'delete' })
diff --git a/dbrepo-ui/components/ViewList.vue b/dbrepo-ui/components/ViewList.vue
index 340a624c57..4f28e1a718 100644
--- a/dbrepo-ui/components/ViewList.vue
+++ b/dbrepo-ui/components/ViewList.vue
@@ -9,7 +9,7 @@
     <div v-for="(item,i) in views" :key="i">
       <v-divider v-if="i !== 0" class="mx-4" />
       <v-list-item-group>
-        <v-list-item two-line :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view/${item.id}`">
+        <v-list-item two-line :to="`/database/${$route.params.database_id}/view/${item.id}`">
           <v-list-item-content>
             <v-list-item-title v-text="item.name" />
             <v-list-item-subtitle class="mt-2">
@@ -91,7 +91,7 @@ export default {
   methods: {
     deleteView (view) {
       this.loading = true
-      DatabaseService.deleteView(this.$route.params.container_id, this.$route.params.database_id, view.id)
+      DatabaseService.deleteView(this.$route.params.database_id, view.id)
         .then(() => {
           this.$toast.success(`Successfully deleted view with id ${view.id}`)
         })
diff --git a/dbrepo-ui/components/dialogs/CreateDB.vue b/dbrepo-ui/components/dialogs/CreateDB.vue
index 0259ba127e..19d5bbef1c 100644
--- a/dbrepo-ui/components/dialogs/CreateDB.vue
+++ b/dbrepo-ui/components/dialogs/CreateDB.vue
@@ -9,7 +9,7 @@
             <v-col>
               <v-text-field
                 id="database"
-                v-model="createContainerDto.name"
+                v-model="createDatabaseDto.name"
                 name="database"
                 label="Name *"
                 autofocus
@@ -25,7 +25,7 @@
                 name="engine"
                 label="Engine *"
                 :items="engines"
-                :item-text="item => `${item.repository}:${item.tag}`"
+                :item-text="item => `${item.name}`"
                 :rules="[v => !!v || $t('Required')]"
                 return-object
                 required />
@@ -70,19 +70,10 @@ export default {
         tag: null
       },
       engines: [],
-      createContainerDto: {
-        name: null,
-        repository: null,
-        tag: null
-      },
       createDatabaseDto: {
         name: null,
         is_public: true
       },
-      container: {
-        id: null,
-        name: null
-      },
       database: {
         id: null
       }
@@ -108,9 +99,9 @@ export default {
     },
     getImages () {
       this.loading = true
-      ContainerService.findAllImages()
-        .then((images) => {
-          this.engines = images
+      ContainerService.findAll()
+        .then((containers) => {
+          this.engines = containers
           if (this.engines.length > 0) {
             this.engine = this.engines[0]
           }
@@ -120,45 +111,17 @@ export default {
         })
     },
     async create () {
-      await this.createContainer()
-        .then(() => this.startContainer(this.container)
-          .then(() => this.createDatabase(this.container)))
-    },
-    createContainer () {
-      this.createContainerDto.repository = this.engine.repository
-      this.createContainerDto.tag = this.engine.tag
-      this.loading = true
-      return new Promise((resolve, reject) => {
-        ContainerService.create(this.createContainerDto)
-          .then((container) => {
-            this.container = container
-            this.loading = false
-            resolve(container)
-          })
-          .catch(error => reject(error))
-      })
+      await this.createDatabase(this.engine)
     },
-    startContainer (container) {
+    async createDatabase (container) {
       this.loading = true
-      return new Promise((resolve, reject) => {
-        ContainerService.modify(container.id, 'start')
-          .then(() => {
-            this.loading = false
-            resolve()
-          })
-          .catch(error => reject(error))
-      })
-    },
-    createDatabase (container) {
-      this.loading = true
-      DatabaseService.create(container.id, { name: container.name, is_public: true })
-        .then((database) => {
-          container.database = database
-          this.$emit('close', { success: true })
-        })
-        .finally(() => {
-          this.loading = false
-        })
+      try {
+        this.database = await DatabaseService.create({ container_id: this.engine.id, name: this.createDatabaseDto.name, is_public: true })
+        this.$emit('close', { success: true })
+        return this.database
+      } finally {
+        this.loading = false
+      }
     },
     notEmpty
   }
diff --git a/dbrepo-ui/components/dialogs/EditAccess.vue b/dbrepo-ui/components/dialogs/EditAccess.vue
index 6048006744..d6c761f029 100644
--- a/dbrepo-ui/components/dialogs/EditAccess.vue
+++ b/dbrepo-ui/components/dialogs/EditAccess.vue
@@ -201,7 +201,7 @@ export default {
     },
     revokeAccess () {
       this.loading = true
-      DatabaseService.revokeAccess(this.$route.params.container_id, this.$route.params.database_id, this.modify.username)
+      DatabaseService.revokeAccess(this.$route.params.database_id, this.modify.username)
         .then(() => {
           this.$toast.success(`Successfully revoked access of ${this.modify.username}`)
           this.$emit('close-dialog', { success: true })
@@ -212,7 +212,7 @@ export default {
     },
     modifyAccess () {
       this.loading = true
-      DatabaseService.modifyAccess(this.$route.params.container_id, this.$route.params.database_id, this.modify.username, this.modify.type)
+      DatabaseService.modifyAccess(this.$route.params.database_id, this.modify.username, this.modify.type)
         .then(() => {
           this.$toast.success(`Successfully modified access of ${this.modify.username}`)
           this.$emit('close-dialog', { success: true })
@@ -223,7 +223,7 @@ export default {
     },
     giveAccess () {
       this.loading = true
-      DatabaseService.giveAccess(this.$route.params.container_id, this.$route.params.database_id, this.modify.username, this.modify.type)
+      DatabaseService.giveAccess(this.$route.params.database_id, this.modify.username, this.modify.type)
         .then(() => {
           this.$toast.success(`Successfully gave ${this.modify.username} access`)
           this.$emit('close-dialog', { success: true })
diff --git a/dbrepo-ui/components/dialogs/EditTuple.vue b/dbrepo-ui/components/dialogs/EditTuple.vue
index 8527fa95b5..da01223f23 100644
--- a/dbrepo-ui/components/dialogs/EditTuple.vue
+++ b/dbrepo-ui/components/dialogs/EditTuple.vue
@@ -198,7 +198,7 @@ export default {
         data: this.localTuple,
         keys: constraints
       }
-      QueryService.updateTuple(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, data)
+      QueryService.updateTuple(this.$route.params.database_id, this.$route.params.table_id, data)
         .then(() => {
           this.$toast.success('Successfully updated tuple!')
           this.$emit('close', { success: true })
@@ -216,7 +216,7 @@ export default {
           this.localTuple[column.internal_name] = null
         }
       })
-      QueryService.insertTuple(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, { data: this.localTuple })
+      QueryService.insertTuple(this.$route.params.database_id, this.$route.params.table_id, { data: this.localTuple })
         .then(() => {
           this.$toast.success('Successfully added tuple!')
           this.$emit('close', { success: true })
diff --git a/dbrepo-ui/components/dialogs/Persist.vue b/dbrepo-ui/components/dialogs/Persist.vue
index bcc3068d66..90946d8164 100644
--- a/dbrepo-ui/components/dialogs/Persist.vue
+++ b/dbrepo-ui/components/dialogs/Persist.vue
@@ -238,7 +238,6 @@ export default {
         { name: 'Private', value: 'self' }
       ],
       identifier: {
-        cid: parseInt(this.$route.params.container_id),
         dbid: parseInt(this.$route.params.database_id),
         qid: parseInt(this.$route.params.query_id),
         title: null,
@@ -420,7 +419,6 @@ export default {
     update () {
       this.loading = true
       const payload = {
-        cid: parseInt(this.$route.params.container_id),
         dbid: parseInt(this.$route.params.database_id),
         qid: parseInt(this.$route.params.query_id),
         title: this.identifier.title,
@@ -448,7 +446,7 @@ export default {
         return
       }
       this.loading = true
-      DatabaseService.findAllLicenses(this.$route.params.container_id)
+      DatabaseService.findAllLicenses()
         .then((licenses) => {
           this.licenses = licenses
         })
diff --git a/dbrepo-ui/components/dialogs/TimeTravel.vue b/dbrepo-ui/components/dialogs/TimeTravel.vue
index 1007db8b50..6dece28569 100644
--- a/dbrepo-ui/components/dialogs/TimeTravel.vue
+++ b/dbrepo-ui/components/dialogs/TimeTravel.vue
@@ -115,7 +115,7 @@ export default {
     },
     loadHistory () {
       this.loading = true
-      TableService.findHistory(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id)
+      TableService.findHistory(this.$route.params.database_id, this.$route.params.table_id)
         .then((history) => {
           this.chartData.labels = history.map(function (d, idx) {
             if (idx === 0) {
diff --git a/dbrepo-ui/components/query/Builder.vue b/dbrepo-ui/components/query/Builder.vue
index 9acae34636..3a15a3acea 100644
--- a/dbrepo-ui/components/query/Builder.vue
+++ b/dbrepo-ui/components/query/Builder.vue
@@ -234,7 +234,7 @@ export default {
       return this.$store.state.database
     },
     viewLink () {
-      return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}` + (this.isView ? '/view' : '/query') + `/${this.resultId}`
+      return `/database/${this.$route.params.database_id}` + (this.isView ? '/view' : '/query') + `/${this.resultId}`
     },
     token () {
       return this.$store.state.token
@@ -261,7 +261,7 @@ export default {
       return !(!this.sql || this.sql.length === 0)
     },
     backTo () {
-      return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/` + (this.isView ? 'view' : 'query')
+      return `/database/${this.$route.params.database_id}/` + (this.isView ? 'view' : 'query')
     },
     isView () {
       return this.mode === 'view'
@@ -322,7 +322,7 @@ export default {
     createView () {
       this.loadingQuery = true
       this.view.query = this.sql
-      DatabaseService.createView(this.$route.params.container_id, this.$route.params.database_id, this.view)
+      DatabaseService.createView(this.$route.params.database_id, this.view)
         .then(async (view) => {
           this.resultId = view.id
           await this.$store.dispatch('reloadDatabase')
diff --git a/dbrepo-ui/components/query/Results.vue b/dbrepo-ui/components/query/Results.vue
index 74a06f23e8..26bb001c96 100644
--- a/dbrepo-ui/components/query/Results.vue
+++ b/dbrepo-ui/components/query/Results.vue
@@ -48,7 +48,7 @@ export default {
         statement: sql,
         timestamp
       }
-      QueryService.execute(this.$route.params.container_id, this.$route.params.database_id, payload, 0, this.options.itemsPerPage)
+      QueryService.execute(this.$route.params.database_id, payload, 0, this.options.itemsPerPage)
         .then((result) => {
           this.mapResults(result)
           parent.resultId = result.id
@@ -70,7 +70,7 @@ export default {
       }
       this.loading++
       if (this.type === 'query') {
-        QueryService.reExecuteQuery(this.$route.params.container_id, this.$route.params.database_id, id, 0, this.options.itemsPerPage)
+        QueryService.reExecuteQuery(this.$route.params.database_id, id, 0, this.options.itemsPerPage)
           .then((result) => {
             this.mapResults(result)
             this.id = id
@@ -79,7 +79,7 @@ export default {
             this.loading--
           })
       } else {
-        QueryService.reExecuteView(this.$route.params.container_id, this.$route.params.database_id, id, 0, this.options.itemsPerPage)
+        QueryService.reExecuteView(this.$route.params.database_id, id, 0, this.options.itemsPerPage)
           .then((result) => {
             this.mapResults(result)
             this.id = id
@@ -95,7 +95,7 @@ export default {
       }
       this.loading++
       if (this.type === 'query') {
-        QueryService.reExecuteQueryCount(this.$route.params.container_id, this.$route.params.database_id, id)
+        QueryService.reExecuteQueryCount(this.$route.params.database_id, id)
           .then((count) => {
             this.total = count
           })
@@ -103,7 +103,7 @@ export default {
             this.loading--
           })
       } else {
-        QueryService.reExecuteViewCount(this.$route.params.container_id, this.$route.params.database_id, id)
+        QueryService.reExecuteViewCount(this.$route.params.database_id, id)
           .then((count) => {
             this.total = count
           })
diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue
index bbc3bdc862..dc4fe88be2 100644
--- a/dbrepo-ui/layouts/default.vue
+++ b/dbrepo-ui/layouts/default.vue
@@ -29,7 +29,7 @@
           </v-list-item-content>
         </v-list-item>
         <v-list-item
-          to="/container"
+          to="/database"
           router>
           <v-list-item-action>
             <v-icon>mdi-database</v-icon>
@@ -105,12 +105,14 @@
               </v-btn>
             </template>
             <v-list>
+              <!--
               <v-list-item
                 v-for="locale in []"
                 :key="locale.code"
                 :to="switchLocalePath(locale.code)">
                 <v-list-item-title>{{ locale.name }}</v-list-item-title>
               </v-list-item>
+              -->
               <v-list-item
                 v-if="user"
                 @click="logout">
@@ -162,9 +164,6 @@ export default {
     user () {
       return this.$store.state.user
     },
-    container () {
-      return this.$store.state.container
-    },
     locale () {
       return this.$store.state.locale
     },
@@ -257,15 +256,15 @@ export default {
       this.$store.commit('SET_USER', null)
       this.$store.commit('SET_ACCESS', null)
       this.$vuetify.theme.dark = false
-      this.$router.push('/container')
+      this.$router.push('/database')
     },
     loadDatabase () {
-      if (!this.$route.params.container_id || !this.$route.params.database_id) {
+      if (!this.$route.params.database_id) {
         this.$store.commit('SET_DATABASE', null)
         return
       }
       this.loading = true
-      DatabaseService.findOne(this.$route.params.container_id, this.$route.params.database_id)
+      DatabaseService.findOne(this.$route.params.database_id)
         .then((database) => {
           this.$store.commit('SET_DATABASE', database)
           this.loading = false
@@ -276,11 +275,11 @@ export default {
         })
     },
     loadTable () {
-      if (!this.$route.params.container_id || !this.$route.params.database_id || !this.$route.params.table_id) {
+      if (!this.$route.params.database_id || !this.$route.params.table_id) {
         return
       }
       this.loading = true
-      TableService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id)
+      TableService.findOne(this.$route.params.database_id, this.$route.params.table_id)
         .then((table) => {
           this.$store.commit('SET_TABLE', table)
         })
@@ -289,14 +288,14 @@ export default {
         })
     },
     loadAccess () {
-      if (!this.$route.params.container_id || !this.$route.params.database_id) {
+      if (!this.$route.params.database_id) {
         return
       }
       if (!this.token) {
         return
       }
       this.loading = true
-      DatabaseService.checkAccess(this.$route.params.container_id, this.$route.params.database_id)
+      DatabaseService.checkAccess(this.$route.params.database_id)
         .then((access) => {
           this.$store.commit('SET_ACCESS', access)
           this.loading = false
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue
deleted file mode 100644
index e39d3d7b62..0000000000
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <div />
-</template>
-
-<script>
-export default {
-  mounted () {
-    this.$router.push(`/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`)
-  }
-}
-</script>
-<style>
-</style>
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue
deleted file mode 100644
index 6d0e9b5002..0000000000
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-<template>
-  <div />
-</template>
-<script>
-export default {
-  mounted () {
-    this.$router.push(`/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}/info`)
-  }
-}
-</script>
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/admin.vue b/dbrepo-ui/pages/database/_database_id/admin.vue
similarity index 86%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/admin.vue
rename to dbrepo-ui/pages/database/_database_id/admin.vue
index c3d1f0f47f..6cd3647777 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/admin.vue
+++ b/dbrepo-ui/pages/database/_database_id/admin.vue
@@ -37,7 +37,7 @@
 </template>
 
 <script>
-import DBToolbar from '@/components/DBToolbar'
+import DBToolbar from '@/components/DBToolbar.vue'
 import DatabaseService from '@/api/database.service'
 
 export default {
@@ -49,10 +49,10 @@ export default {
       dialogDelete: false,
       confirm: null,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         }
       ]
@@ -74,7 +74,7 @@ export default {
   },
   methods: {
     deleteDatabase () {
-      DatabaseService.delete(this.$route.params.container_id, this.$route.params.database_id)
+      DatabaseService.delete(this.$route.params.database_id)
         .then(async () => {
           this.$toast.success(`Database "${this.db.name}" deleted.`)
           await this.$router.push({ path: '/databases' })
diff --git a/dbrepo-ui/pages/database/_database_id/index.vue b/dbrepo-ui/pages/database/_database_id/index.vue
new file mode 100644
index 0000000000..185b5d4961
--- /dev/null
+++ b/dbrepo-ui/pages/database/_database_id/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div />
+</template>
+
+<script>
+export default {
+  mounted () {
+    this.$router.push(`/database/${this.$route.params.database_id}/info`)
+  }
+}
+</script>
+<style>
+</style>
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue b/dbrepo-ui/pages/database/_database_id/info.vue
similarity index 97%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue
rename to dbrepo-ui/pages/database/_database_id/info.vue
index 3abeb30d7c..543b0c8d57 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue
+++ b/dbrepo-ui/pages/database/_database_id/info.vue
@@ -271,12 +271,12 @@
 </template>
 
 <script>
-import DBToolbar from '@/components/DBToolbar'
-import Persist from '@/components/dialogs/Persist'
-import OrcidIcon from '@/components/icons/OrcidIcon'
-import Citation from '@/components/identifier/Citation'
+import DBToolbar from '@/components/DBToolbar.vue'
+import Persist from '@/components/dialogs/Persist.vue'
+import OrcidIcon from '@/components/icons/OrcidIcon.vue'
+import Citation from '@/components/identifier/Citation.vue'
 import { formatTimestampUTCLabel } from '@/utils'
-import Banner from '@/components/identifier/Banner'
+import Banner from '@/components/identifier/Banner.vue'
 import DatabaseMapper from '@/api/database.mapper'
 import DeleteIdentifier from '@/components/dialogs/DeleteIdentifier.vue'
 import ContainerService from '@/api/container.service'
@@ -300,10 +300,10 @@ export default {
       deleteDialog: false,
       persistDialog: false,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         }
       ]
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue b/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue
similarity index 92%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue
rename to dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue
index b2a84bcc32..21b02e5a05 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue
+++ b/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue
@@ -219,10 +219,10 @@
   </div>
 </template>
 <script>
-import Persist from '@/components/dialogs/Persist'
-import Citation from '@/components/identifier/Citation'
-import Banner from '@/components/identifier/Banner'
-import DownloadButton from '@/components/identifier/DownloadButton'
+import Persist from '@/components/dialogs/Persist.vue'
+import Citation from '@/components/identifier/Citation.vue'
+import Banner from '@/components/identifier/Banner.vue'
+import DownloadButton from '@/components/identifier/DownloadButton.vue'
 import { formatTimestampUTCLabel, formatDateUTC } from '@/utils'
 import QueryService from '@/api/query.service'
 import UserUtils from '@/api/user.utils'
@@ -238,10 +238,10 @@ export default {
   data () {
     return {
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}`, activeClass: '' },
-        { text: 'Queries', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`, activeClass: '' },
-        { text: `${this.$route.params.query_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' },
+        { text: 'Queries', to: `/database/${this.$route.params.database_id}/query`, activeClass: '' },
+        { text: `${this.$route.params.query_id}`, to: `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' }
       ],
       query: {
         id: parseInt(this.$route.params.query_id),
@@ -318,7 +318,7 @@ export default {
       return this.database.publisher
     },
     backTo () {
-      return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`
+      return `/database/${this.$route.params.database_id}/query`
     },
     result_visibility () {
       if (!this.database || this.database.is_public === null) {
@@ -365,7 +365,7 @@ export default {
     },
     downloadSubset () {
       this.downloadLoading = true
-      QueryService.exportSubset(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.query_id)
+      QueryService.exportSubset(this.$route.params.database_id, this.$route.params.query_id)
         .then((data) => {
           const url = window.URL.createObjectURL(new Blob([data]))
           const link = document.createElement('a')
@@ -381,7 +381,7 @@ export default {
     loadQuery () {
       this.loadingQuery = true
       return new Promise((resolve, reject) => {
-        QueryService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.query_id)
+        QueryService.findOne(this.$route.params.database_id, this.$route.params.query_id)
           .then((query) => {
             this.query = query
             resolve(query)
@@ -394,7 +394,7 @@ export default {
     },
     save () {
       this.loadingSave = true
-      QueryService.persist(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.query_id)
+      QueryService.persist(this.$route.params.database_id, this.$route.params.query_id)
         .then((query) => {
           this.query = query
         })
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/create.vue b/dbrepo-ui/pages/database/_database_id/query/create.vue
similarity index 74%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/query/create.vue
rename to dbrepo-ui/pages/database/_database_id/query/create.vue
index f6864c8b03..5b24d2f136 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/create.vue
+++ b/dbrepo-ui/pages/database/_database_id/query/create.vue
@@ -12,15 +12,15 @@ export default {
   data () {
     return {
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         },
         {
           text: 'Queries',
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`,
+          to: `/database/${this.$route.params.database_id}/query`,
           activeClass: ''
         }
       ]
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/index.vue b/dbrepo-ui/pages/database/_database_id/query/index.vue
similarity index 70%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/query/index.vue
rename to dbrepo-ui/pages/database/_database_id/query/index.vue
index 0a8bb9111f..8b2f7103ad 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/index.vue
+++ b/dbrepo-ui/pages/database/_database_id/query/index.vue
@@ -12,10 +12,10 @@ export default {
   data () {
     return {
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`,
+          to: `/database/${this.$route.params.database_id}/query`,
           activeClass: ''
         }
       ]
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/settings.vue b/dbrepo-ui/pages/database/_database_id/settings.vue
similarity index 93%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/settings.vue
rename to dbrepo-ui/pages/database/_database_id/settings.vue
index 28cf44a215..c53b66b17d 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/settings.vue
+++ b/dbrepo-ui/pages/database/_database_id/settings.vue
@@ -94,8 +94,8 @@
 </template>
 
 <script>
-import DBToolbar from '@/components/DBToolbar'
-import EditAccess from '@/components/dialogs/EditAccess'
+import DBToolbar from '@/components/DBToolbar.vue'
+import EditAccess from '@/components/dialogs/EditAccess.vue'
 import DatabaseService from '@/api/database.service'
 import UserService from '@/api/user.service'
 
@@ -135,7 +135,7 @@ export default {
         { text: 'Databases', to: '/container', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         }
       ]
@@ -226,7 +226,7 @@ export default {
     },
     updateDatabaseVisibility () {
       this.loading = true
-      DatabaseService.modifyVisibility(this.$route.params.container_id, this.$route.params.database_id, this.modifyVisibility.is_public)
+      DatabaseService.modifyVisibility(this.$route.params.database_id, this.modifyVisibility.is_public)
         .then(() => {
           this.$toast.success('Successfully updated the database visibility')
           location.reload()
@@ -237,7 +237,7 @@ export default {
     },
     updateDatabaseOwner () {
       this.loading = true
-      DatabaseService.modifyOwner(this.$route.params.container_id, this.$route.params.database_id, this.modifyOwner.username)
+      DatabaseService.modifyOwner(this.$route.params.database_id, this.modifyOwner.username)
         .then(() => {
           this.$toast.success('Successfully updated the database owner')
           location.reload()
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/data.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue
similarity index 86%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/data.vue
rename to dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue
index 925403b70d..a628cd1786 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/data.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue
@@ -45,8 +45,8 @@
   </div>
 </template>
 <script>
-import TimeTravel from '@/components/dialogs/TimeTravel'
-import TableToolbar from '@/components/TableToolbar'
+import TimeTravel from '@/components/dialogs/TimeTravel.vue'
+import TableToolbar from '@/components/TableToolbar.vue'
 import TableService from '@/api/table.service'
 import { formatTimestampUTC, formatDateUTC, formatTimestamp } from '@/utils'
 
@@ -80,10 +80,10 @@ export default {
       },
       dateColumns: [],
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, activeClass: '' },
-        { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' },
-        { text: `${this.$route.params.table_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/info`, activeClass: '' },
+        { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' },
+        { text: `${this.$route.params.table_id}`, to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' }
       ],
       headers: [],
       rows: []
@@ -180,7 +180,7 @@ export default {
     download () {
       this.downloadLoading = true
       if (!this.version) {
-        TableService.exportData(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id)
+        TableService.exportData(this.$route.params.database_id, this.$route.params.table_id)
           .then((data) => {
             const url = window.URL.createObjectURL(new Blob([data]))
             const link = document.createElement('a')
@@ -193,7 +193,7 @@ export default {
             this.downloadLoading = false
           })
       } else {
-        TableService.exportData(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, this.versionISO)
+        TableService.exportData(this.$route.params.database_id, this.$route.params.table_id, this.versionISO)
           .then((data) => {
             const url = window.URL.createObjectURL(new Blob([data]))
             const link = document.createElement('a')
@@ -266,7 +266,7 @@ export default {
     },
     loadData () {
       this.loadingData++
-      TableService.data(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, (this.options.page - 1), this.options.itemsPerPage, (this.versionISO || this.lastReload.toISOString()))
+      TableService.data(this.$route.params.database_id, this.$route.params.table_id, (this.options.page - 1), this.options.itemsPerPage, (this.versionISO || this.lastReload.toISOString()))
         .then((data) => {
           this.rows = data.result.map((row) => {
             for (const col in row) {
@@ -291,7 +291,7 @@ export default {
     },
     loadCount () {
       this.loadingData++
-      TableService.dataCount(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, (this.versionISO || this.lastReload.toISOString()))
+      TableService.dataCount(this.$route.params.database_id, this.$route.params.table_id, (this.versionISO || this.lastReload.toISOString()))
         .then((count) => {
           this.total = count
         })
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/import.vue
similarity index 89%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue
rename to dbrepo-ui/pages/database/_database_id/table/_table_id/import.vue
index d2caacbd0d..2a1a53d73c 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/import.vue
@@ -2,7 +2,7 @@
   <div v-if="canInsertTableData">
     <v-toolbar flat>
       <v-toolbar-title>
-        <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`">
+        <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/table`">
           <v-icon left>mdi-arrow-left</v-icon>
         </v-btn>
       </v-toolbar-title>
@@ -144,10 +144,10 @@ export default {
       },
       fileModel: null,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         }
       ]
@@ -189,10 +189,10 @@ export default {
         .then((file) => {
           this.file = file
           this.tableImport.location = `/tmp/${this.file.filename}`
-          QueryService.importCsv(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, this.tableImport)
+          QueryService.importCsv(this.$route.params.database_id, this.$route.params.table_id, this.tableImport)
             .then(() => {
               this.$toast.success('Successfully imported data')
-              this.$router.push(`/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`)
+              this.$router.push(`/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`)
             })
             .finally(() => {
               this.loading = false
@@ -207,7 +207,7 @@ export default {
     },
     loadTableMetadata () {
       this.loading = true
-      TableService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id)
+      TableService.findOne(this.$route.params.database_id, this.$route.params.table_id)
         .then((table) => {
           this.table = table
         })
diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue
new file mode 100644
index 0000000000..21e09b79c0
--- /dev/null
+++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue
@@ -0,0 +1,10 @@
+<template>
+  <div />
+</template>
+<script>
+export default {
+  mounted () {
+    this.$router.push(`/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}/info`)
+  }
+}
+</script>
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/info.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue
similarity index 91%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/info.vue
rename to dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue
index 13fd456916..4f57d6130a 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/info.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue
@@ -93,7 +93,7 @@
   </div>
 </template>
 <script>
-import TableToolbar from '@/components/TableToolbar'
+import TableToolbar from '@/components/TableToolbar.vue'
 import { formatTimestampUTCLabel } from '@/utils'
 import BrokerService from '@/api/broker.service'
 import UserMapper from '@/api/user.mapper'
@@ -107,10 +107,10 @@ export default {
       selection: [],
       consumers: [],
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, activeClass: '' },
-        { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' },
-        { text: `${this.$route.params.table_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/info`, activeClass: '' },
+        { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' },
+        { text: `${this.$route.params.table_id}`, to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' }
       ],
       headers: [],
       dateColumns: []
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/schema.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue
similarity index 88%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/schema.vue
rename to dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue
index 54d9181559..9c2551938d 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/schema.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue
@@ -76,7 +76,7 @@
   </div>
 </template>
 <script>
-import TableToolbar from '@/components/TableToolbar'
+import TableToolbar from '@/components/TableToolbar.vue'
 import TableService from '@/api/table.service'
 
 export default {
@@ -90,10 +90,10 @@ export default {
       mode: null,
       dialogSemantic: false,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, activeClass: '' },
-        { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' },
-        { text: `${this.$route.params.table_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/info`, activeClass: '' },
+        { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' },
+        { text: `${this.$route.params.table_id}`, to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' }
       ],
       headers: [
         { value: 'internal_name', text: 'Column Name' },
@@ -207,11 +207,11 @@ export default {
       this.dialogSemantic = false
     },
     loadTable () {
-      if (!this.$route.params.container_id || !this.$route.params.database_id || !this.$route.params.table_id) {
+      if (!this.$route.params.database_id || !this.$route.params.table_id) {
         return
       }
       this.loading = true
-      TableService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id)
+      TableService.findOne(this.$route.params.database_id, this.$route.params.table_id)
         .then((table) => {
           this.$store.commit('SET_TABLE', table)
         })
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/create.vue b/dbrepo-ui/pages/database/_database_id/table/create.vue
similarity index 88%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/create.vue
rename to dbrepo-ui/pages/database/_database_id/table/create.vue
index 728b71f7da..9ae7e955cd 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/create.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/create.vue
@@ -2,7 +2,7 @@
   <div v-if="canCreateTable">
     <v-toolbar flat>
       <v-toolbar-title>
-        <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`">
+        <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/table`">
           <v-icon left>mdi-arrow-left</v-icon>
         </v-btn>
       </v-toolbar-title>
@@ -59,7 +59,7 @@
 </template>
 
 <script>
-import TableSchema from '@/components/TableSchema'
+import TableSchema from '@/components/TableSchema.vue'
 import { notEmpty } from '@/utils'
 import TableService from '@/api/table.service'
 
@@ -82,13 +82,13 @@ export default {
         columns: []
       },
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         },
-        { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }
+        { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }
       ]
     }
   },
@@ -186,11 +186,11 @@ export default {
           checks: []
         }
       })
-      TableService.create(this.$route.params.container_id, this.$route.params.database_id, table)
+      TableService.create(this.$route.params.database_id, table)
         .then(async (table) => {
           this.$toast.success('Table created')
           await this.$store.dispatch('reloadDatabase')
-          await this.$router.push(`/container/${this.$route.params.container_id}/database/${this.databaseId}/table/${table.id}`)
+          await this.$router.push(`/database/${this.databaseId}/table/${table.id}`)
         })
     },
     schemaClose (event) {
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue b/dbrepo-ui/pages/database/_database_id/table/import.vue
similarity index 90%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue
rename to dbrepo-ui/pages/database/_database_id/table/import.vue
index d3358405f2..ce7e0951b4 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/import.vue
@@ -2,7 +2,7 @@
   <div v-if="canInsertTableData">
     <v-toolbar flat>
       <v-toolbar-title>
-        <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`">
+        <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/table`">
           <v-icon left>mdi-arrow-left</v-icon>
         </v-btn>
       </v-toolbar-title>
@@ -183,7 +183,7 @@
       </v-stepper-step>
       <v-stepper-content step="5">
         <div class="mt-2">
-          <v-btn class="mb-1" color="primary" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${newTableId}`">
+          <v-btn class="mb-1" color="primary" :to="`/database/${$route.params.database_id}/table/${newTableId}`">
             View Table
           </v-btn>
         </div>
@@ -194,11 +194,11 @@
 </template>
 <script>
 import { notEmpty, isNonNegativeInteger } from '@/utils'
-import TableSchema from '@/components/TableSchema'
-import ContainerService from '@/api/container.service'
+import TableSchema from '@/components/TableSchema.vue'
 import TableService from '@/api/table.service'
 import MiddlewareService from '@/api/middleware.service'
 import AnalyseService from '@/api/analyse.service'
+import DatabaseService from '@/api/database.service'
 
 export default {
   name: 'TableFromCSV',
@@ -228,13 +228,13 @@ export default {
         { key: 'Single \'', value: '\'' }
       ],
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         },
-        { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }
+        { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }
       ],
       rules: {
         required: value => !!value || 'Required'
@@ -358,7 +358,7 @@ export default {
     },
     listTables () {
       this.loading = true
-      TableService.findAll(this.$route.params.container_id, this.$route.params.database_id)
+      TableService.findAll(this.$route.params.database_id)
         .then((tables) => {
           this.tableNames = tables.map(t => t.internal_name)
         })
@@ -375,18 +375,14 @@ export default {
       this.validStep4 = true
       this.createTable()
     },
-    loadDateFormats () {
+    async loadDateFormats () {
       this.loadingImage = true
-      ContainerService.findOne(this.$route.params.container_id)
-        .then((container) => {
-          ContainerService.findImage(container.image.id)
-            .then((image) => {
-              this.dateFormats = image.date_formats
-            })
-        })
-        .finally(() => {
-          this.loadingImage = true
-        })
+      try {
+        const database = await DatabaseService.findOne(this.$route.params.database_id)
+        this.dateFormats = database.container.image.date_formats
+      } finally {
+        this.localLoading = false
+      }
     },
     createTable () {
       /* make enum values to array */
@@ -441,10 +437,10 @@ export default {
           checks: []
         }
       })
-      TableService.create(this.$route.params.container_id, this.$route.params.database_id, table)
+      TableService.create(this.$route.params.database_id, table)
         .then((table) => {
           this.newTableId = table.id
-          TableService.importCsv(this.$route.params.container_id, this.$route.params.database_id, table.id, this.tableImport)
+          TableService.importCsv(this.$route.params.database_id, table.id, this.tableImport)
             .then(async () => {
               this.$toast.success('Successfully created table from import!')
               await this.$store.dispatch('reloadDatabase')
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/index.vue b/dbrepo-ui/pages/database/_database_id/table/index.vue
similarity index 61%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/index.vue
rename to dbrepo-ui/pages/database/_database_id/table/index.vue
index 04026449a9..eefef94036 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/index.vue
+++ b/dbrepo-ui/pages/database/_database_id/table/index.vue
@@ -8,8 +8,8 @@
   </div>
 </template>
 <script>
-import TableList from '@/components/TableList'
-import DBToolbar from '@/components/DBToolbar'
+import TableList from '@/components/TableList.vue'
+import DBToolbar from '@/components/DBToolbar.vue'
 
 export default {
   name: 'Tables',
@@ -21,8 +21,8 @@ export default {
     return {
       db: null,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }
       ]
     }
   },
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/_view_id/index.vue b/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue
similarity index 88%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/view/_view_id/index.vue
rename to dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue
index 9d95d70e3d..8cd7fbee43 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/_view_id/index.vue
+++ b/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue
@@ -2,7 +2,7 @@
   <div>
     <v-toolbar flat>
       <v-toolbar-title>
-        <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view`">
+        <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/view`">
           <v-icon left>mdi-arrow-left</v-icon>
         </v-btn>
       </v-toolbar-title>
@@ -111,10 +111,10 @@ export default {
   data () {
     return {
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}`, activeClass: '' },
-        { text: 'Views', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/view`, activeClass: '' },
-        { text: `${this.$route.params.view_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' },
+        { text: 'Views', to: `/database/${this.$route.params.database_id}/view`, activeClass: '' },
+        { text: `${this.$route.params.view_id}`, to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' }
       ],
       view: {
         id: null /* only loaded if user has access to view */
@@ -175,7 +175,7 @@ export default {
   methods: {
     loadView () {
       this.loadingView = true
-      DatabaseService.findView(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.view_id)
+      DatabaseService.findView(this.$route.params.database_id, this.$route.params.view_id)
         .then((view) => {
           this.view = view
         })
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/create.vue b/dbrepo-ui/pages/database/_database_id/view/create.vue
similarity index 70%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/view/create.vue
rename to dbrepo-ui/pages/database/_database_id/view/create.vue
index 7c06ccead7..18da418db8 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/create.vue
+++ b/dbrepo-ui/pages/database/_database_id/view/create.vue
@@ -10,15 +10,15 @@ export default {
   data () {
     return {
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
+        { text: 'Databases', to: '/database', activeClass: '' },
         {
           text: `${this.$route.params.database_id}`,
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`,
+          to: `/database/${this.$route.params.database_id}/info`,
           activeClass: ''
         },
         {
           text: 'Views',
-          to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/view`,
+          to: `/database/${this.$route.params.database_id}/view`,
           activeClass: ''
         }
       ]
diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/index.vue b/dbrepo-ui/pages/database/_database_id/view/index.vue
similarity index 59%
rename from dbrepo-ui/pages/container/_container_id/database/_database_id/view/index.vue
rename to dbrepo-ui/pages/database/_database_id/view/index.vue
index 3001dc4adc..9c53dd3fe2 100644
--- a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/index.vue
+++ b/dbrepo-ui/pages/database/_database_id/view/index.vue
@@ -8,8 +8,8 @@
   </div>
 </template>
 <script>
-import DBToolbar from '@/components/DBToolbar'
-import ViewList from '@/components/ViewList'
+import DBToolbar from '@/components/DBToolbar.vue'
+import ViewList from '@/components/ViewList.vue'
 
 export default {
   name: 'Views',
@@ -21,8 +21,8 @@ export default {
     return {
       db: null,
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' },
-        { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' },
+        { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }
       ]
     }
   },
diff --git a/dbrepo-ui/pages/container/index.vue b/dbrepo-ui/pages/database/index.vue
similarity index 88%
rename from dbrepo-ui/pages/container/index.vue
rename to dbrepo-ui/pages/database/index.vue
index 1c1735c681..b8287a1821 100644
--- a/dbrepo-ui/pages/container/index.vue
+++ b/dbrepo-ui/pages/database/index.vue
@@ -23,8 +23,8 @@
 </template>
 <script>
 import { mdiDatabaseArrowRightOutline } from '@mdi/js'
-import CreateDB from '@/components/dialogs/CreateDB'
-import DatabaseList from '@/components/DatabaseList'
+import CreateDB from '@/components/dialogs/CreateDB.vue'
+import DatabaseList from '@/components/DatabaseList.vue'
 
 export default {
   components: {
@@ -41,7 +41,7 @@ export default {
         is_public: true
       },
       items: [
-        { text: 'Databases', to: '/container', activeClass: '' }
+        { text: 'Databases', to: '/database', activeClass: '' }
       ],
       loadingDatabases: false,
       error: false,
@@ -77,7 +77,7 @@ export default {
     closed (event) {
       this.createDbDialog = false
       if (event.success) {
-        this.$refs.databases.loadContainers()
+        this.$refs.databases.loadDatabases()
       }
     }
   }
diff --git a/dbrepo-ui/pages/index.vue b/dbrepo-ui/pages/index.vue
index bbe24a3a33..46d3e3626b 100644
--- a/dbrepo-ui/pages/index.vue
+++ b/dbrepo-ui/pages/index.vue
@@ -28,7 +28,7 @@
         <v-btn
           class="ml-2 mb-2"
           color="primary"
-          to="/container">
+          to="/database">
           Get Started
         </v-btn>
       </v-card-actions>
diff --git a/dbrepo-ui/pages/login.vue b/dbrepo-ui/pages/login.vue
index 23944a3803..1da06f2f51 100644
--- a/dbrepo-ui/pages/login.vue
+++ b/dbrepo-ui/pages/login.vue
@@ -83,7 +83,7 @@ export default {
   },
   mounted () {
     if (this.token) {
-      this.$router.push('/container')
+      this.$router.push('/database')
     }
   },
   methods: {
@@ -99,7 +99,7 @@ export default {
             .then(async (user) => {
               this.$store.commit('SET_USER', user)
               this.$vuetify.theme.dark = user.attributes.theme_dark
-              await this.$router.push('/container')
+              await this.$router.push('/database')
             })
         })
         .catch(() => {
diff --git a/dbrepo-ui/pages/search/index.vue b/dbrepo-ui/pages/search/index.vue
index b812900945..4ba9babe48 100644
--- a/dbrepo-ui/pages/search/index.vue
+++ b/dbrepo-ui/pages/search/index.vue
@@ -179,16 +179,16 @@ export default {
     },
     link (item) {
       if (this.isDatabase(item)) {
-        return `/container/${item.id}/database/${item.id}`
+        return `/database/${item.id}`
       }
       if (this.isTable(item)) {
-        return `/container/${item.containerId}/database/${item.databaseId}/table/${item.id}`
+        return `/database/${item.databaseId}/table/${item.id}`
       }
       if (this.isView(item)) {
-        return `/container/${item.vdbid}/database/${item.vdbid}/view/${item.id}`
+        return `/database/${item.vdbid}/view/${item.id}`
       }
       if (this.isColumn(item)) {
-        return `/container/${item.cdbid}/database/${item.cdbid}/table/${item.tid}`
+        return `/database/${item.cdbid}/table/${item.tid}`
       }
       if (this.isIdentifier(item)) {
         return `/pid/${item.id}`
diff --git a/dbrepo-ui/store/index.js b/dbrepo-ui/store/index.js
index b1d9ebfa36..cd3b41bdda 100644
--- a/dbrepo-ui/store/index.js
+++ b/dbrepo-ui/store/index.js
@@ -74,19 +74,19 @@ const store = new Store({
         })
     },
     reloadAccess ({ state, commit }) {
-      DatabaseService.checkAccess(state.container.id, state.database.id)
+      DatabaseService.checkAccess(state.database.id)
         .then((access) => {
           commit('SET_ACCESS', access)
         })
     },
     reloadDatabase ({ state, commit }) {
-      DatabaseService.findOne(state.database.container.id, state.database.id)
+      DatabaseService.findOne(state.database.id)
         .then((database) => {
           commit('SET_DATABASE', database)
         })
     },
     reloadTable ({ state, commit }) {
-      TableService.findOne(state.database.container.id, state.database.id, state.table.id)
+      TableService.findOne(state.database.id, state.table.id)
         .then((table) => {
           commit('SET_TABLE', table)
         })
-- 
GitLab