diff --git a/CHANGELOG.md b/CHANGELOG.md
index 23ddf8609f2467865cdee0964ef53931d1ef115c..20f2498a09e5599933c18606febf8f160594a3c8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ## [Unreleased] ##
 
 ### Added ###
+- convenience functions `value_matches_versionid`, `get_id_from_versionid` and `get_versionid`
 
 ### Changed ###
 
diff --git a/src/linkahead/common/models.py b/src/linkahead/common/models.py
index 75b03b70907abdde50fb383c54a02e94cad115ad..bfe43b01367c9a8b47768240aa3f47a3cf31354c 100644
--- a/src/linkahead/common/models.py
+++ b/src/linkahead/common/models.py
@@ -505,6 +505,10 @@ class Entity:
 
         return self
 
+    def get_versionid(self):
+        """Returns the concatenation of ID and version"""
+        return str(self.id)+"@"+str(self.version.id)
+
     def get_importance(self, property):  # @ReservedAssignment
         """Get the importance of a given property regarding this entity."""
 
@@ -2125,6 +2129,14 @@ class Property(Entity):
         else:
             return is_reference(self.datatype)
 
+    def value_matches_versionid(self):
+        """Returns True if the value matches the pattern <id>@<version>"""
+        return value_matches_versionid(self.value)
+
+    def get_id_from_versionid_value(self):
+        """Returns the ID part of the versionid with the pattern <id>@<version>"""
+        return get_id_from_versionid(self.value)
+
 
 class Message(object):
 
@@ -5670,3 +5682,18 @@ def _filter_entity_list_by_identity(listobject: list[Entity],
             if pid_none and name_match:
                 matches.append(candidate)
     return matches
+
+
+def value_matches_versionid(value: Union[int, str]):
+    """Returns True if the value matches the pattern <id>@<version>"""
+    if isinstance(value, int):
+        return False
+    if not isinstance(value, str):
+        raise ValueError(f"A reference value needs to be int or str. It was {type(value)}. "
+                         "Did you call value_matches_versionid on a non reference value?")
+    return "@" in value
+
+
+def get_id_from_versionid(versionid: str):
+    """Returns the ID part of the versionid with the pattern <id>@<version>"""
+    return versionid.split("@")[0]
diff --git a/unittests/test_entity.py b/unittests/test_entity.py
index 855e5a39d53180d32a40de46bc7bb43d0bbd58bc..2f413717c48f9e5424b6a380127db6a6be9760df 100644
--- a/unittests/test_entity.py
+++ b/unittests/test_entity.py
@@ -30,7 +30,9 @@ import linkahead
 from linkahead import (INTEGER, Entity, Parent, Property, Record, RecordType,
                        configure_connection)
 import warnings
-from linkahead.common.models import SPECIAL_ATTRIBUTES
+from linkahead.common.models import (SPECIAL_ATTRIBUTES, get_id_from_versionid,
+                                     value_matches_versionid)
+from linkahead.common.versioning import Version
 from linkahead.connection.mockup import MockUpServerConnection
 from lxml import etree
 from pytest import raises
@@ -295,3 +297,29 @@ def test_filter_by_identity():
         t.parents.filter(pid=234)
         assert issubclass(w[-1].category, DeprecationWarning)
         assert "This function was renamed" in str(w[-1].message)
+
+
+def test_value_matches_versionid():
+    assert value_matches_versionid(234) is False, "integer is no version id"
+    assert value_matches_versionid("234") is False, ("string that only contains an integer is no "
+                                                     "version id")
+    assert value_matches_versionid("234@bfe1a42cb37aae8ac625a757715d38814c274158") is True, (
+        "integer is no version id") is True
+    with raises(ValueError):
+        value_matches_versionid(234.0)
+    p = Property(value=234)
+    assert p.value_matches_versionid() is False
+    p = Property(value="234@bfe1a42cb37aae8ac625a757715d38814c274158")
+    assert p.value_matches_versionid() is True
+
+
+def test_get_id_from_versionid():
+    assert get_id_from_versionid("234@bfe1a42cb37aae8ac625a757715d38814c274158") == "234"
+    p = Property(value="234@bfe1a42cb37aae8ac625a757715d38814c274158")
+    assert p.get_id_from_versionid_value() == "234"
+
+
+def test_get_versionid():
+    e = Entity(id=234)
+    e.version = Version(id="bfe1a42cb37aae8ac625a757715d38814c274158")
+    assert e.get_versionid() == "234@bfe1a42cb37aae8ac625a757715d38814c274158"