diff --git a/greg/management/commands/notification_publisher.py b/greg/management/commands/notification_publisher.py
index 6d44a6571fb0038b000ae4d67d5359adae53fe78..3ea725874a97273a0ac3a95b7ce32cb8d2b6a058 100644
--- a/greg/management/commands/notification_publisher.py
+++ b/greg/management/commands/notification_publisher.py
@@ -26,7 +26,7 @@ def generate_event_type(n: Notification) -> str:
     routing key is removed results in minor changes to the code.
     """
     object_type = camel_to_snake(n.object_type)
-    return f"{settings.INTERNAL_RK_PREFIX}.{object_type}.{n.operation}"
+    return f"{object_type}.{n.operation}"
 
 
 def create_cloud_event_payload(n: Notification) -> str:
@@ -52,14 +52,12 @@ def create_cloud_event_payload(n: Notification) -> str:
     object_type = camel_to_snake(n.object_type)
     content: dict[str, Union[str, dict[str, str]]] = {
         "id": str(n.id),
-        "source": f"urn:greg:{settings.INSTANCE_NAME}:{object_type}:{n.identifier}",
+        "source": f"greg:{settings.INSTANCE_NAME}:{settings.ENVIRONMENT}",
         "specversion": "1.0",
         "type": generate_event_type(n),
     }
-    if n.object_type in ("Role", "Consent", "Identity"):
-        content["data"] = {
-            "person_id": n.meta.get("person_id"),
-        }
+    if n.meta:
+        content["data"] = n.meta
     return json.dumps(content)
 
 
diff --git a/greg/signals.py b/greg/signals.py
index 51c1dfc0c1d581b106f215b38c3874a783dbd052..20110bc8fc7f1374ce48a735f135d917025ddb06 100644
--- a/greg/signals.py
+++ b/greg/signals.py
@@ -167,15 +167,22 @@ def m2m_changed_notification_callback(
 
 def _create_metadata(instance) -> Dict:
     meta = {}
-
-    if isinstance(instance, Role):
+    if isinstance(instance, Person):
+        meta["person_id"] = instance.id
+    elif isinstance(instance, Role):
         meta["person_id"] = instance.person.id
-        meta["type_id"] = instance.type.id
-    if isinstance(instance, Identity):
+        meta["role_id"] = instance.id
+        meta["role_type"] = instance.type.identifier
+        meta["role_type_id"] = instance.type.id
+    elif isinstance(instance, RoleType):
+        meta["role_type_id"] = instance.id
+    elif isinstance(instance, Identity):
         meta["person_id"] = instance.person.id
         meta["identity_id"] = instance.id
-    if isinstance(instance, Consent):
+        meta["identity_type"] = instance.type
+    elif isinstance(instance, Consent):
         meta["person_id"] = instance.person.id
-        meta["consent_id"] = instance.type.id
-
+        meta["consent_id"] = instance.id
+        meta["consent_type"] = instance.type.identifier
+        meta["consent_type_id"] = instance.type.id
     return meta
diff --git a/greg/tests/management/test_notification_publisher.py b/greg/tests/management/test_notification_publisher.py
index 0207e5bf38f716c0618bb28463b7b700e4718226..c428d7bc32d9c29896be2c5478a20c28aeb31c08 100644
--- a/greg/tests/management/test_notification_publisher.py
+++ b/greg/tests/management/test_notification_publisher.py
@@ -1,14 +1,43 @@
+import json
 import pytest
 
 from greg.management.commands.notification_publisher import (
     handle_one_notification,
+    create_cloud_event_payload,
 )
 from greg.models import Notification
 
 
+@pytest.fixture
+def role_type_notification():
+    Notification.objects.create(
+        identifier=5,
+        object_type="RoleType",
+        operation="update",
+        issued_at=1234,
+        meta={
+            "integer": 123,
+            "string": "foo",
+        },
+    )
+    return Notification.objects.get(id=1)
+
+
 @pytest.mark.django_db
-def test_handle_one_notification(notification, pcm_mock):
+def test_handle_one_notification(role_type_notification, pcm_mock):
     """Check that Notifications are deleted when published to message queue"""
     assert Notification.objects.count() == 1
-    handle_one_notification(notification, pcm_mock, exchange="bar")
+    handle_one_notification(role_type_notification, pcm_mock, exchange="bar")
     assert Notification.objects.count() == 0
+
+
+@pytest.mark.django_db
+def test_create_cloud_event_payload(role_type_notification):
+    payload = create_cloud_event_payload(role_type_notification)
+    assert json.loads(payload) == {
+        "id": "1",
+        "source": "greg:local:unittest",
+        "specversion": "1.0",
+        "type": "role_type.update",
+        "data": {"integer": 123, "string": "foo"},
+    }
diff --git a/greg/tests/test_notifications.py b/greg/tests/test_notifications.py
index 7fcbb4494aed29bc9d35d7404676d37dec89dfb0..ad1475887036ff6ea785e2df5f3a5ad8598e5e42 100644
--- a/greg/tests/test_notifications.py
+++ b/greg/tests/test_notifications.py
@@ -68,7 +68,7 @@ def test_role_add_notification(
     org_unit_bar: OrganizationalUnit,
     sponsor: Sponsor,
 ):
-    Role.objects.create(
+    role = Role.objects.create(
         person=person,
         type=role_type_foo,
         start_date="2021-05-06",
@@ -79,9 +79,10 @@ def test_role_add_notification(
     notifications = Notification.objects.filter(object_type="Role")
     assert len(notifications) == 1
     assert notifications[0].operation == "add"
-    meta_data = notifications[0].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["type_id"] == role_type_foo.id
+    meta = notifications[0].meta
+    assert meta["person_id"] == person.id
+    assert meta["role_id"] == role.id
+    assert meta["role_type"] == role_type_foo.identifier
 
 
 @pytest.mark.django_db
@@ -91,7 +92,7 @@ def test_role_update_notification(
     org_unit_bar: OrganizationalUnit,
     sponsor: Sponsor,
 ):
-    Role.objects.create(
+    role = Role.objects.create(
         person=person,
         type=role_type_foo,
         start_date="2021-05-06",
@@ -106,9 +107,10 @@ def test_role_update_notification(
     notifications = Notification.objects.filter(object_type="Role")
     assert len(notifications) == 2
     assert notifications[1].operation == "update"
-    meta_data = notifications[1].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["type_id"] == role_type_foo.id
+    meta = notifications[1].meta
+    assert meta["person_id"] == person.id
+    assert meta["role_id"] == role.id
+    assert meta["role_type"] == role_type_foo.identifier
 
 
 @pytest.mark.django_db
@@ -118,7 +120,7 @@ def test_role_delete_notification(
     org_unit_bar: OrganizationalUnit,
     sponsor: Sponsor,
 ):
-    Role.objects.create(
+    role = Role.objects.create(
         person=person,
         type=role_type_foo,
         start_date="2021-05-06",
@@ -132,27 +134,31 @@ def test_role_delete_notification(
     notifications = Notification.objects.filter(object_type="Role")
     assert len(notifications) == 2
     assert notifications[1].operation == "delete"
-    meta_data = notifications[1].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["type_id"] == role_type_foo.id
+    meta = notifications[1].meta
+    assert meta["person_id"] == person.id
+    assert meta["role_id"] == role.id
+    assert meta["role_type"] == role_type_foo.identifier
+    assert meta["role_type_id"] == role_type_foo.id
 
 
 @pytest.mark.django_db
 def test_consent_add_notification(person: Person, consent_type: ConsentType):
-    Consent.objects.create(
+    consent = Consent.objects.create(
         person=person, type=consent_type, consent_given_at="2021-06-20"
     )
     notifications = Notification.objects.filter(object_type="Consent")
     assert len(notifications) == 1
     assert notifications[0].identifier == person.id
-    meta_data = notifications[0].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["consent_id"] == consent_type.id
+    meta = notifications[0].meta
+    assert meta["person_id"] == person.id
+    assert meta["consent_id"] == consent.id
+    assert meta["consent_type"] == consent.type.identifier
+    assert meta["consent_type_id"] == consent.type.id
 
 
 @pytest.mark.django_db
 def test_consent_update_notification(person: Person, consent_type: ConsentType):
-    Consent.objects.create(
+    consent = Consent.objects.create(
         person=person, type=consent_type, consent_given_at="2021-06-20"
     )
     consents = Consent.objects.filter(person=person, type=consent_type)
@@ -162,14 +168,16 @@ def test_consent_update_notification(person: Person, consent_type: ConsentType):
     notifications = Notification.objects.filter(object_type="Consent")
     assert len(notifications) == 2
     assert notifications[0].identifier == person.id
-    meta_data = notifications[0].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["consent_id"] == consent_type.id
+    meta = notifications[0].meta
+    assert meta["person_id"] == person.id
+    assert meta["consent_id"] == consent.id
+    assert meta["consent_type"] == consent.type.identifier
+    assert meta["consent_type_id"] == consent.type.id
 
 
 @pytest.mark.django_db
 def test_consent_delete_notification(person: Person, consent_type: ConsentType):
-    Consent.objects.create(
+    consent = Consent.objects.create(
         person=person, type=consent_type, consent_given_at="2021-06-20"
     )
     consents = Consent.objects.filter(person=person, type=consent_type)
@@ -179,9 +187,11 @@ def test_consent_delete_notification(person: Person, consent_type: ConsentType):
     assert len(notifications) == 2
     assert notifications[1].identifier == person.id
     assert notifications[1].operation == "delete"
-    meta_data = notifications[0].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["consent_id"] == consent_type.id
+    meta = notifications[0].meta
+    assert meta["person_id"] == person.id
+    assert meta["consent_id"] == consent.id
+    assert meta["consent_type"] == consent_type.identifier
+    assert meta["consent_type_id"] == consent_type.id
 
 
 @pytest.mark.django_db
@@ -193,9 +203,10 @@ def test_identity_add_notification(
     assert notifications[0].identifier == person.id
     assert notifications[0].operation == "add"
 
-    meta_data = notifications[0].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["identity_id"] == identity.id
+    meta = notifications[0].meta
+    assert meta["person_id"] == person.id
+    assert meta["identity_id"] == identity.id
+    assert meta["identity_type"] == identity.type
 
 
 @pytest.mark.django_db
@@ -212,6 +223,7 @@ def test_identity_update_notification(
     assert len(notifications) == 2
     assert notifications[1].operation == "update"
 
-    meta_data = notifications[1].meta
-    assert meta_data["person_id"] == person.id
-    assert meta_data["identity_id"] == identity.id
+    meta = notifications[1].meta
+    assert meta["person_id"] == person.id
+    assert meta["identity_id"] == identity.id
+    assert meta["identity_type"] == identity.type