diff --git a/bundles/org.openhab.ui/web/src/assets/definitions/metadata/namespaces.js b/bundles/org.openhab.ui/web/src/assets/definitions/metadata/namespaces.js
index 61582e309..c04200855 100644
--- a/bundles/org.openhab.ui/web/src/assets/definitions/metadata/namespaces.js
+++ b/bundles/org.openhab.ui/web/src/assets/definitions/metadata/namespaces.js
@@ -6,6 +6,7 @@ export default [
{ name: 'listWidget', label: 'Default List Item Widget' },
{ name: 'cellWidget', label: 'Default Cell Widget' },
{ name: 'autoupdate', label: 'Auto-update' },
+ { name: 'expire', label: 'Expiration timer' },
{ name: 'alexa', label: 'Amazon Alexa' },
{ name: 'homekit', label: 'Apple HomeKit' },
{ name: 'ga', label: 'Google Assistant' }
diff --git a/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-expire.vue b/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-expire.vue
new file mode 100644
index 000000000..91f24009a
--- /dev/null
+++ b/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-expire.vue
@@ -0,0 +1,166 @@
+
+
+
Do
+
+
+
+ updateActionValue(evt.target.value)"
+ />
+
+
+ After a different command or state update is received, perform the chosen action when the duration specified below has passed. The timer is reset if another state update or command is received before it expires.
+
+
After
+
+ updateDuration(evt.target.value)"
+ pattern="(\d+h)*(\d+m)*(\d+s)*" validate validate-on-blur>
+
+
+
+
+
+
+ Delay to wait before the timer expires and the action specified above is performed.
+
+
+
+
+
diff --git a/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-menu.vue b/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-menu.vue
index a2e6fe17e..d68137271 100644
--- a/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-menu.vue
+++ b/bundles/org.openhab.ui/web/src/components/item/metadata/item-metadata-menu.vue
@@ -1,13 +1,21 @@
-
-
- Edit Custom Metadata
-
+
+
+
+
+
+
+
+ Add Metadata
+
+