diff --git a/openbis_ng_ui/src/js/components/common/link/TypeLink.jsx b/openbis_ng_ui/src/js/components/common/link/EntityTypeLink.jsx
similarity index 89%
rename from openbis_ng_ui/src/js/components/common/link/TypeLink.jsx
rename to openbis_ng_ui/src/js/components/common/link/EntityTypeLink.jsx
index 0785c15fee6a419cab094181cdde4ea3c0f1a32d..c0b3d1712b9bb2c41c2efb09da2263b933a9a5b5 100644
--- a/openbis_ng_ui/src/js/components/common/link/TypeLink.jsx
+++ b/openbis_ng_ui/src/js/components/common/link/EntityTypeLink.jsx
@@ -5,9 +5,9 @@ import objectTypes from '@src/js/common/consts/objectType.js'
 import openbis from '@src/js/services/openbis.js'
 import logger from '@src/js/common/logger.js'
 
-class TypeLink extends React.PureComponent {
+class EntityTypeLink extends React.PureComponent {
   render() {
-    logger.log(logger.DEBUG, 'TypeLink.render')
+    logger.log(logger.DEBUG, 'EntityTypeLink.render')
 
     const { typeCode, typeKind } = this.props
 
@@ -43,4 +43,4 @@ class TypeLink extends React.PureComponent {
   }
 }
 
-export default TypeLink
+export default EntityTypeLink
diff --git a/openbis_ng_ui/src/js/components/common/link/VocabularyLink.jsx b/openbis_ng_ui/src/js/components/common/link/VocabularyTypeLink.jsx
similarity index 81%
rename from openbis_ng_ui/src/js/components/common/link/VocabularyLink.jsx
rename to openbis_ng_ui/src/js/components/common/link/VocabularyTypeLink.jsx
index 54404ff3b65b92ffd77c50562d16d03141fa2c52..6ac092e6b6386f1a8999c195eb73a6590f6aca19 100644
--- a/openbis_ng_ui/src/js/components/common/link/VocabularyLink.jsx
+++ b/openbis_ng_ui/src/js/components/common/link/VocabularyTypeLink.jsx
@@ -4,9 +4,9 @@ import pages from '@src/js/common/consts/pages.js'
 import objectTypes from '@src/js/common/consts/objectType.js'
 import logger from '@src/js/common/logger.js'
 
-class VocabularyLink extends React.PureComponent {
+class VocabularyTypeLink extends React.PureComponent {
   render() {
-    logger.log(logger.DEBUG, 'VocabularyLink.render')
+    logger.log(logger.DEBUG, 'VocabularyTypeLink.render')
 
     const { vocabularyCode } = this.props
 
@@ -28,4 +28,4 @@ class VocabularyLink extends React.PureComponent {
   }
 }
 
-export default VocabularyLink
+export default VocabularyTypeLink
diff --git a/openbis_ng_ui/src/js/components/types/common/EntityTypesGrid.jsx b/openbis_ng_ui/src/js/components/types/common/EntityTypesGrid.jsx
index d634dddded5e0987d76d85f077937ac59cde1108..ca7e09d3b7847f4e6a148e930e5412d625083c6c 100644
--- a/openbis_ng_ui/src/js/components/types/common/EntityTypesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/types/common/EntityTypesGrid.jsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import GridWithSettings from '@src/js/components/common/grid/GridWithSettings.jsx'
-import TypeLink from '@src/js/components/common/link/TypeLink.jsx'
+import EntityTypeLink from '@src/js/components/common/link/EntityTypeLink.jsx'
 import PluginLink from '@src/js/components/common/link/PluginLink.jsx'
 import openbis from '@src/js/services/openbis.js'
 import messages from '@src/js/common/messages.js'
@@ -51,7 +51,7 @@ class EntityTypesGrid extends React.PureComponent {
       label: messages.get(messages.CODE),
       getValue: ({ row }) => row.code,
       renderValue: ({ row }) => {
-        return <TypeLink typeCode={row.code} typeKind={kind} />
+        return <EntityTypeLink typeCode={row.code} typeKind={kind} />
       }
     })
 
diff --git a/openbis_ng_ui/src/js/components/types/common/PropertyTypesGrid.jsx b/openbis_ng_ui/src/js/components/types/common/PropertyTypesGrid.jsx
index 3171151df78e5a68ea7008d4a4a99508cff499b8..f264638ac6ed6b0783bce8eb4dc42bcfc014330f 100644
--- a/openbis_ng_ui/src/js/components/types/common/PropertyTypesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/types/common/PropertyTypesGrid.jsx
@@ -1,6 +1,9 @@
 import React from 'react'
 import GridWithSettings from '@src/js/components/common/grid/GridWithSettings.jsx'
+import EntityTypeLink from '@src/js/components/common/link/EntityTypeLink.jsx'
+import VocabularyTypeLink from '@src/js/components/common/link/VocabularyTypeLink.jsx'
 import PropertyTypesGridUsagesCell from '@src/js/components/types/common/PropertyTypesGridUsagesCell.jsx'
+import openbis from '@src/js/services/openbis.js'
 import messages from '@src/js/common/messages.js'
 import logger from '@src/js/common/logger.js'
 
@@ -40,17 +43,32 @@ class PropertyTypesGrid extends React.PureComponent {
           {
             name: 'vocabulary',
             label: messages.get(messages.VOCABULARY_TYPE),
-            getValue: ({ row }) => row.vocabulary
+            getValue: ({ row }) => row.vocabulary,
+            renderValue: ({ row }) => (
+              <VocabularyTypeLink vocabularyCode={row.vocabulary} />
+            )
           },
           {
             name: 'materialType',
             label: messages.get(messages.MATERIAL_TYPE),
-            getValue: ({ row }) => row.materialType
+            getValue: ({ row }) => row.materialType,
+            renderValue: ({ row }) => (
+              <EntityTypeLink
+                typeKind={openbis.EntityKind.MATERIAL}
+                typeCode={row.materialType}
+              />
+            )
           },
           {
             name: 'sampleType',
             label: messages.get(messages.OBJECT_TYPE),
-            getValue: ({ row }) => row.sampleType
+            getValue: ({ row }) => row.sampleType,
+            renderValue: ({ row }) => (
+              <EntityTypeLink
+                typeKind={openbis.EntityKind.SAMPLE}
+                typeCode={row.sampleType}
+              />
+            )
           },
           {
             name: 'schema',
diff --git a/openbis_ng_ui/src/js/components/types/common/PropertyTypesGridUsagesCell.jsx b/openbis_ng_ui/src/js/components/types/common/PropertyTypesGridUsagesCell.jsx
index 88b95ef792372352b53ab9fa9c5993a233c98f4c..3cbc21e132f2f33db2e92f555cc12f7a78031817 100644
--- a/openbis_ng_ui/src/js/components/types/common/PropertyTypesGridUsagesCell.jsx
+++ b/openbis_ng_ui/src/js/components/types/common/PropertyTypesGridUsagesCell.jsx
@@ -2,7 +2,7 @@ import React from 'react'
 import { withStyles } from '@material-ui/core/styles'
 import Collapse from '@material-ui/core/Collapse'
 import Link from '@material-ui/core/Link'
-import TypeLink from '@src/js/components/common/link/TypeLink.jsx'
+import EntityTypeLink from '@src/js/components/common/link/EntityTypeLink.jsx'
 import openbis from '@src/js/services/openbis.js'
 import messages from '@src/js/common/messages.js'
 import logger from '@src/js/common/logger.js'
@@ -100,7 +100,7 @@ class PropertyTypesGridUsagesCell extends React.PureComponent {
         {usagesHeader}:
         {usagesList.map(usage => (
           <li key={usage} className={classes.usage}>
-            <TypeLink typeKind={usageKind} typeCode={usage} />
+            <EntityTypeLink typeKind={usageKind} typeCode={usage} />
           </li>
         ))}
       </ul>
diff --git a/openbis_ng_ui/src/js/components/types/common/VocabularyTypesGrid.jsx b/openbis_ng_ui/src/js/components/types/common/VocabularyTypesGrid.jsx
index 776479c561a4a7ea57b2ee2f68cc55351b970d88..34ab388f9c33b788dbb15a1f2e4aad03cb8f7eb7 100644
--- a/openbis_ng_ui/src/js/components/types/common/VocabularyTypesGrid.jsx
+++ b/openbis_ng_ui/src/js/components/types/common/VocabularyTypesGrid.jsx
@@ -1,6 +1,6 @@
 import React from 'react'
 import GridWithSettings from '@src/js/components/common/grid/GridWithSettings.jsx'
-import VocabularyLink from '@src/js/components/common/link/VocabularyLink.jsx'
+import VocabularyTypeLink from '@src/js/components/common/link/VocabularyTypeLink.jsx'
 import messages from '@src/js/common/messages.js'
 import logger from '@src/js/common/logger.js'
 
@@ -22,7 +22,7 @@ class VocabularyTypesGrid extends React.PureComponent {
             label: messages.get(messages.CODE),
             getValue: ({ row }) => row.code,
             renderValue: ({ row }) => {
-              return <VocabularyLink vocabularyCode={row.code} />
+              return <VocabularyTypeLink vocabularyCode={row.code} />
             }
           },
           {