diff --git a/brian_dashboard_manager/config.py b/brian_dashboard_manager/config.py
index 19fd6c836997d142dbe928dedcd313bc6ba474af..7e215f8bfc2c472aec99e0d6aaad787639974099 100644
--- a/brian_dashboard_manager/config.py
+++ b/brian_dashboard_manager/config.py
@@ -150,8 +150,6 @@ DEFAULT_ORGANIZATIONS = [
 ]
 
 CONFIG_SCHEMA = {
-    "$schema": "http://json-schema.org/draft-07/schema#",
-
     "definitions": {
         "influx-datasource": {
             "type": "object",
diff --git a/brian_dashboard_manager/dashboards/services_eumetsat.json b/brian_dashboard_manager/dashboards/services_eumetsat.json
index 6cc2b5afcd725ff7a51f77a5fe30b677c4d391f1..46554a253d0b41c1c69be135dd546bbc77af8cf5 100755
--- a/brian_dashboard_manager/dashboards/services_eumetsat.json
+++ b/brian_dashboard_manager/dashboards/services_eumetsat.json
@@ -116,5 +116,6 @@
   },
   "timezone": "",
   "title": "EUMETSAT",
+  "uid": "eumetsat",
   "version": 1
 }
diff --git a/brian_dashboard_manager/environment.py b/brian_dashboard_manager/environment.py
index 865f17a9398f932ad788947da0a3e1640d904c55..05804f27fa994c79866b08717e2d82b8cc0c9f86 100644
--- a/brian_dashboard_manager/environment.py
+++ b/brian_dashboard_manager/environment.py
@@ -1,7 +1,7 @@
 import json
 import logging.config
 import os
-import pkg_resources
+from importlib.metadata import distribution
 import sentry_sdk
 from sentry_sdk.integrations.flask import FlaskIntegration
 
@@ -16,13 +16,12 @@ def setup_logging():
     default_filename = os.path.join(
         os.path.dirname(__file__), 'logging_default_config.json')
     filename = os.getenv('LOGGING_CONFIG', default_filename)
-
     sentry_dsn = os.getenv('SENTRY_DSN')
     if sentry_dsn:
         sentry_sdk.init(
             dsn=sentry_dsn,
             integrations=[FlaskIntegration()],
-            release=pkg_resources.get_distribution('brian-dashboard-manager').version)
+            release=distribution('brian-dashboard-manager').version)
 
     with open(filename) as f:
         # TODO: this mac workaround should be removed ...
diff --git a/brian_dashboard_manager/grafana/dashboard.py b/brian_dashboard_manager/grafana/dashboard.py
index 74723ee0cc89d306a81bf3e1120debbe971f3192..9ef8db0d648f9cbcdcd4b2d64b6a8a096548a549 100644
--- a/brian_dashboard_manager/grafana/dashboard.py
+++ b/brian_dashboard_manager/grafana/dashboard.py
@@ -207,16 +207,7 @@ def create_dashboard(request: TokenRequest, dashboard: dict, folder_id=None):
     has_uid = dashboard.get('uid') is not None
     if has_uid:
         existing_dashboard = _get_dashboard(request, uid=dashboard['uid'])
-
-    # The title might not match the one that's provisioned with that UID.
-    # Try to find it by searching for the title instead.
-    if existing_dashboard is not None:
-        grafana_title = existing_dashboard['title']
-        different = grafana_title != title
     else:
-        different = False
-
-    if existing_dashboard is None or different:
         existing_dashboard = _search_dashboard(request, dashboard, folder_id)
 
     if existing_dashboard:
diff --git a/brian_dashboard_manager/grafana/datasource.py b/brian_dashboard_manager/grafana/datasource.py
index 5ba9ea3ca631c4ab50c83ca4623ae69fe4d011cd..716987f0d0d5a2b715e41e98bef8eadb2ca896e8 100644
--- a/brian_dashboard_manager/grafana/datasource.py
+++ b/brian_dashboard_manager/grafana/datasource.py
@@ -25,7 +25,7 @@ def _datasource_exists(datasource_to_check, provisioned_datasources):
         return True
     for datasource in provisioned_datasources:
         exists = all(datasource.get(key) == datasource_to_check.get(key)
-                     for key in datasource_to_check)
+                     for key in datasource_to_check if key != 'secureJsonData')  # we can't compare secureJsonData
         if exists:
             return True
     return False
diff --git a/brian_dashboard_manager/grafana/organization.py b/brian_dashboard_manager/grafana/organization.py
index eb2313f702582f60f40bbb6c21b89009bb9f5c7f..9fbfb33a84cfbf9b6e659cbc4de89a192747921a 100644
--- a/brian_dashboard_manager/grafana/organization.py
+++ b/brian_dashboard_manager/grafana/organization.py
@@ -220,7 +220,7 @@ def set_home_dashboard(request: TokenRequest, is_staff):
     """
     payload = render_homedashboard(staff=is_staff)
     dashboard = create_dashboard(request, payload)
-    r = request.put('api/org/preferences', json={
+    request.put('api/org/preferences', json={
         'homeDashboardId': dashboard.get('id')
     }).json()
-    return r and r.get('message') == 'Preferences updated'
+    return dashboard
diff --git a/brian_dashboard_manager/grafana/provision.py b/brian_dashboard_manager/grafana/provision.py
index 24e96aad08eb5ac94880a7295158ad30d1083b79..d7519c06924a8d75a5b56eae2f73eac2357cf4a8 100644
--- a/brian_dashboard_manager/grafana/provision.py
+++ b/brian_dashboard_manager/grafana/provision.py
@@ -698,20 +698,18 @@ def _provision_static_dashboards(config, org_config, ds_name, token):
     logger.info('Provisioning static dashboards')
     for dashboard in get_dashboard_definitions():
         if dashboard['title'] not in excluded_dashboards:
+            logger.info(f'Provisioning static {dashboard["title"]} dashboard')
             res = create_dashboard(token, dashboard)
             if res:
-                # yield a fake dashboard dict
-                # ... only the 'uid' element is referenced
-                yield {'uid': res.get('uid')}
+                yield res
         else:
+            logger.info(f'Ensuring {dashboard["title"]} static dashboard is deleted')
             delete_dashboard(token, dashboard)
 
     # Home dashboard is always called "Home"
     # Make sure it's set for the organization
     logger.info('Configuring Home dashboard')
-    set_home_dashboard(token, is_staff=org_config['name'] == 'GÉANT Staff')
-
-    yield {'uid': 'home'}
+    yield set_home_dashboard(token, is_staff=org_config['name'] == 'GÉANT Staff')
 
 
 def _get_ignored_dashboards(config, org_config, token):
@@ -740,9 +738,7 @@ def _get_ignored_dashboards(config, org_config, token):
             continue
 
         for dash in to_ignore:
-            # return a hard-coded fake dashboard dict
-            # ... only the 'uid' element is referenced
-            yield {'uid': dash['uid']}  # could just yield dash
+            yield dash
 
 
 def _provision_datasource(config, token):
@@ -881,8 +877,7 @@ def provision(config, raise_exceptions=False):
             logger.debug(accounts)
 
             all_original_dashboards = list_dashboards(token_request)
-            all_original_dashboard_uids = {
-                d['uid'] for d in all_original_dashboards}
+            all_original_dashboard_uids = {d['uid']: d.get('folderUrl', '') + d['url'] for d in all_original_dashboards}
 
             datasource = _provision_datasource(config, token_request)
             ds_name = datasource.get('name', 'PollerInfluxDB')
@@ -906,17 +901,21 @@ def provision(config, raise_exceptions=False):
                     config, org_config, token_request)
             )
 
-            managed_dashboard_uids = set()
+            managed_dashboard_uids = {}
             for dashboard in managed_dashboards:
                 if isinstance(dashboard, Future):
                     dashboard = dashboard.result()
                 if dashboard is None:
                     continue
-                managed_dashboard_uids.add(dashboard['uid'])
+                assert dashboard['uid'] not in managed_dashboard_uids, \
+                    f'Dashboard with UID {dashboard["uid"]} already exists: {dashboard}'
+                managed_dashboard_uids[dashboard['uid']] = dashboard['url']
 
-            for uid in all_original_dashboard_uids - managed_dashboard_uids:
+            difference = set(all_original_dashboard_uids.keys()) - set(managed_dashboard_uids.keys())
+            for uid in difference:
+                info = all_original_dashboard_uids[uid]
                 # delete unmanaged dashboards
-                logger.info(f'Deleting stale dashboard with UID {uid}')
+                logger.info(f'Deleting stale dashboard {info} with UID {uid}')
                 delete_dashboard(token_request, {'uid': uid})
 
             folders_to_keep = {
diff --git a/brian_dashboard_manager/inventory_provider/interfaces.py b/brian_dashboard_manager/inventory_provider/interfaces.py
index 7a74d987b4601a87dd7588f722dd6cc3c4dc2f9a..44951bcba912970d44bc367f94b179354bab7ab9 100644
--- a/brian_dashboard_manager/inventory_provider/interfaces.py
+++ b/brian_dashboard_manager/inventory_provider/interfaces.py
@@ -62,7 +62,6 @@ _PORT_TYPES = [t.name for t in list(PORT_TYPES)]
 _INTERFACE_TYPES = [i.name for i in list(INTERFACE_TYPES)]
 
 ROUTER_INTERFACES_SCHEMA = {
-    "$schema": "http://json-schema.org/draft-07/schema#",
     "type": "array",
     "items": {
         "type": "object",
@@ -89,8 +88,6 @@ ROUTER_INTERFACES_SCHEMA = {
 }
 
 INTERFACE_LIST_SCHEMA = {
-    '$schema': 'http://json-schema.org/draft-07/schema#',
-
     'definitions': {
         'service': {
             'type': 'object',
@@ -137,8 +134,6 @@ INTERFACE_LIST_SCHEMA = {
 }
 
 GWS_DIRECT_DATA_SCHEMA = {
-    '$schema': 'http://json-schema.org/draft-07/schema#',
-
     'definitions': {
         'oid': {
             'type': 'string',
@@ -214,8 +209,6 @@ GWS_DIRECT_DATA_SCHEMA = {
 }
 
 MULTICAST_SUBSCRIPTION_LIST_SCHEMA = {
-    '$schema': 'http://json-schema.org/draft-07/schema#',
-
     'definitions': {
         'ipv4-address': {
             'type': 'string',
@@ -243,7 +236,6 @@ MULTICAST_SUBSCRIPTION_LIST_SCHEMA = {
 }
 
 NREN_REGION_LIST_SCHEMA = {
-    '$schema': 'https://json-schema.org/draft-07/schema#',
     'definitions': {
         'nren_region': {
             'type': 'object',
diff --git a/brian_dashboard_manager/routes/update.py b/brian_dashboard_manager/routes/update.py
index 4674d82c85041886e04c692e35cc8debe58c72b2..8a042dfbfba511e0bcb42bf2bd3aa55c3f7823b0 100644
--- a/brian_dashboard_manager/routes/update.py
+++ b/brian_dashboard_manager/routes/update.py
@@ -13,7 +13,6 @@ from brian_dashboard_manager.config import STATE_PATH
 routes = Blueprint("update", __name__)
 
 UPDATE_RESPONSE_SCHEMA = {
-    '$schema': 'http://json-schema.org/draft-07/schema#',
     'type': 'object',
     'properties': {
         'message': {
diff --git a/brian_dashboard_manager/routes/version.py b/brian_dashboard_manager/routes/version.py
index 55d6a88ff1081fc2c3f29b73697ec4c2b6a2bfc7..26da9b5b37e9da5470dc56549b56abee624e25df 100644
--- a/brian_dashboard_manager/routes/version.py
+++ b/brian_dashboard_manager/routes/version.py
@@ -1,5 +1,4 @@
-import pkg_resources
-
+from importlib.metadata import distribution
 from flask import Blueprint, jsonify
 from brian_dashboard_manager.routes import common
 
@@ -18,6 +17,6 @@ def version():
     version_params = {
         'api': API_VERSION,
         'module':
-            pkg_resources.get_distribution('brian-dashboard-manager').version
+            distribution('brian-dashboard-manager').version
     }
     return jsonify(version_params)
diff --git a/changelog.md b/changelog.md
index b1f465b75ac4a4f8daefad021cb10a9accfbebc6..4e47c6cf5ee711b81afac2ad55a075c2ea183506 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,13 @@
 
 All notable changes to this project will be documented in this file.
 
+## [0.67] - 2024-10-14
+- Fix provisioning of static EUMETSAT dashboard
+- Give the EUMETSAT dashboard a fixed UID
+- When searching for dashboards with UID, don't attempt to search by name afterwards
+- Fix various warnings for deprecated code
+
+
 ## [0.66] - 2024-10-14
 - POL1-430 - Add EAP NREN Access dashboard to access EAP NRENs and aggregate dashboard
 
diff --git a/setup.py b/setup.py
index 07237d5a6535a8b2f8b19f31c6cce1f60e7560a0..5eb544169e9e84dfa5cda490113ba425bf4c2a29 100644
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
 
 setup(
     name='brian-dashboard-manager',
-    version="0.66",
+    version="0.67",
     author='GEANT',
     author_email='swd@geant.org',
     description='',
diff --git a/test/conftest.py b/test/conftest.py
index dbc0f52723b405677db6d72a7fef7ecf827d9981..963d78c118f63a0415f612b75a42d8bc95f333d3 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -223,11 +223,12 @@ def mock_grafana(data_config):
 
         def _create_object(self, obj, all_objects):
             id = obj.get("id")
-            uid = obj.get("uid")
+            uid = obj.get("uid") or next(self.uids)
             obj = {
+                'url': '/fake/grafana/' + str(uid),
                 **obj,
                 "id": id if id is not None else next(self.ids),
-                "uid": str(uid if uid is not None else next(self.uids)),
+                "uid": str(uid),
             }
             all_objects[obj["uid"]] = obj
             return obj