diff --git a/dbrepo-ui/api/index.js b/dbrepo-ui/api/index.js
index 3050d758e88968c1cb5c25f8c056c426a9935538..ed74b41a8085364ff600214cba82c5ff62bc8efb 100644
--- a/dbrepo-ui/api/index.js
+++ b/dbrepo-ui/api/index.js
@@ -1,4 +1,5 @@
 import axios from 'axios'
+import Vue from 'vue'
 
 const baseUrl = `${location.protocol}//${location.host}`
 
@@ -10,4 +11,13 @@ const instance = axios.create({
   baseURL: baseUrl
 })
 
+function displayError (error, warning) {
+  const { code, message } = error.response.data
+  console.error(warning, error)
+  Vue.$toast.error(`[${code}] ${warning}: ${message}`)
+}
+
 export default instance
+export {
+  displayError
+}
diff --git a/dbrepo-ui/api/semantic.service.js b/dbrepo-ui/api/semantic.service.js
index 88c6b75388c4d51734ca282c968238d556240c83..662106eb5416aa2943c458f3cbcc797e89615e3e 100644
--- a/dbrepo-ui/api/semantic.service.js
+++ b/dbrepo-ui/api/semantic.service.js
@@ -1,5 +1,4 @@
-import Vue from 'vue'
-import api from '@/api'
+import api, { displayError } from '@/api'
 
 class SemanticService {
   findAllOntologies () {
@@ -11,9 +10,7 @@ class SemanticService {
           resolve(ontologies)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to load ontologies', error)
-          Vue.$toast.error(`[${code}] Failed to load ontologies: ${message}`)
+          displayError(error, 'Failed to load ontologies')
           reject(error)
         })
     })
@@ -28,9 +25,7 @@ class SemanticService {
           resolve(concepts)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to load concepts', error)
-          Vue.$toast.error(`[${code}] Failed to load concepts: ${message}`)
+          displayError(error, 'Failed to load concepts')
           reject(error)
         })
     })
@@ -45,9 +40,7 @@ class SemanticService {
           resolve(concept)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to update concept', error)
-          Vue.$toast.error(`[${code}] Failed to update concept: ${message}`)
+          displayError(error, 'Failed to update concept')
           reject(error)
         })
     })
@@ -62,9 +55,7 @@ class SemanticService {
           resolve(units)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to load units', error)
-          Vue.$toast.error(`[${code}] Failed to load units: ${message}`)
+          displayError(error, 'Failed to load units')
           reject(error)
         })
     })
@@ -79,9 +70,7 @@ class SemanticService {
           resolve(unit)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to update unit', error)
-          Vue.$toast.error(`[${code}] Failed to update unit: ${message}`)
+          displayError(error, 'Failed to update unit')
           reject(error)
         })
     })
@@ -96,9 +85,7 @@ class SemanticService {
           resolve(ontology)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to load ontology', error)
-          Vue.$toast.error(`[${code}] Failed to load ontology: ${message}`)
+          displayError(error, 'Failed to find ontology')
           reject(error)
         })
     })
@@ -113,9 +100,7 @@ class SemanticService {
           resolve(ontology)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to register ontology', error)
-          Vue.$toast.error(`[${code}] Failed to register ontology: ${message}`)
+          displayError(error, 'Failed to register ontology')
           reject(error)
         })
     })
@@ -130,9 +115,7 @@ class SemanticService {
           resolve(ontology)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to update ontology', error)
-          Vue.$toast.error(`[${code}] Failed to update ontology: ${message}`)
+          displayError(error, 'Failed to update ontology')
           reject(error)
         })
     })
@@ -143,9 +126,7 @@ class SemanticService {
       api.delete(`/api/semantic/ontology/${id}`, { headers: { Accept: 'application/json' } })
         .then(() => resolve())
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to delete ontology', error)
-          Vue.$toast.error(`[${code}] Failed to delete ontology: ${message}`)
+          displayError(error, 'Failed to unregister ontology')
           reject(error)
         })
     })
@@ -160,9 +141,7 @@ class SemanticService {
           resolve(semantics)
         })
         .catch((error) => {
-          const { code, message } = error.response.data
-          console.error('Failed to load table column semantics', error)
-          Vue.$toast.error(`[${code}] Failed to load table column semantics: ${message}`)
+          displayError(error, 'Failed to suggest table column semantic')
           reject(error)
         })
     })
diff --git a/dbrepo-ui/pages/search/index.vue b/dbrepo-ui/pages/search/index.vue
index e3ffd53d8f12494187a025c724c11e2860000243..20a0e24fcb10d60c8663acf6375957a3053c9369 100644
--- a/dbrepo-ui/pages/search/index.vue
+++ b/dbrepo-ui/pages/search/index.vue
@@ -137,6 +137,24 @@ export default {
       }
       return item.exchangeName !== undefined
     },
+    isConcept (item) {
+      if (!item) {
+        return false
+      }
+      if ('_class' in item) {
+        return /at.tuwien.api.database.table.columns.concepts.ConceptDto/.test(item._class)
+      }
+      return false
+    },
+    isUnit (item) {
+      if (!item) {
+        return false
+      }
+      if ('_class' in item) {
+        return /at.tuwien.api.database.table.columns.concepts.UnitDto/.test(item._class)
+      }
+      return false
+    },
     isTable (item) {
       if (!item) {
         return false
@@ -188,7 +206,7 @@ export default {
       return false
     },
     title (item) {
-      if (this.isDatabase(item) || this.isTable(item) || this.isColumn(item) || this.isView(item)) {
+      if (this.isDatabase(item) || this.isTable(item) || this.isColumn(item) || this.isView(item) || this.isConcept(item) || this.isUnit(item)) {
         return item.name
       } else if (this.isIdentifier(item)) {
         return item.title
@@ -196,16 +214,12 @@ export default {
       return null
     },
     description (item) {
-      if (this.isDatabase(item)) {
-        return item.description
-      } else if (this.isTable(item)) {
+      if (this.isDatabase(item) || this.isTable(item) || this.isIdentifier(item) || this.isConcept(item) || this.isUnit(item)) {
         return item.description
       } else if (this.isColumn(item)) {
         return null
       } else if (this.isView(item)) {
         return item.query
-      } else if (this.isIdentifier(item)) {
-        return item.description
       }
       return false
     },