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/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 b9ce5bf75380851e942d6df1864780127818d410..02d5fff9f039c8e45620da42143e1e614638c23a 100644
--- a/brian_dashboard_manager/grafana/provision.py
+++ b/brian_dashboard_manager/grafana/provision.py
@@ -674,20 +674,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):
@@ -716,9 +714,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):
@@ -857,8 +853,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')
@@ -882,17 +877,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/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