From b300fffdc5627ad8c3b825e8e232a74b134458f8 Mon Sep 17 00:00:00 2001
From: Pieter Vander Vennet <pietervdvn@posteo.net>
Date: Mon, 10 Feb 2025 02:04:58 +0100
Subject: [PATCH] Chore: housekeeping

---
 Docs/BuiltinIndex.md                          |  28 +-
 Docs/CalculatedTags.md                        |   4 +
 Docs/ELI-overview.md                          |  87 +-
 Docs/Layers/address.md                        |  48 +-
 Docs/Layers/artwork.md                        |   4 +-
 Docs/Layers/artwork_on_wall.md                |   4 +-
 Docs/Layers/bench.md                          |   4 +-
 Docs/Layers/bike_shop.md                      | 288 +++++-
 Docs/Layers/campsite.md                       | 155 +++
 Docs/Layers/dentist.md                        |  59 ++
 Docs/Layers/doctors.md                        |  67 +-
 Docs/Layers/group_campsite.md                 | 151 +++
 Docs/Layers/hospital.md                       |  59 ++
 Docs/Layers/medical_shops.md                  |   2 +-
 Docs/Layers/memorial.md                       |   4 +-
 Docs/Layers/named_streets.md                  |   2 -
 Docs/Layers/pharmacy.md                       |  59 ++
 Docs/Layers/physiotherapist.md                |  59 ++
 Docs/Layers/school.md                         | 134 ++-
 Docs/Layers/shop_dog_friendly.md              |   2 +-
 Docs/Layers/shops.md                          |   2 +-
 Docs/Layers/shops_glutenfree.md               |   2 +-
 Docs/Layers/shops_lactosefree.md              |   2 +-
 Docs/Layers/shops_second_hand.md              |   2 +-
 .../Layers/shops_with_climbing_shoe_repair.md |   2 +-
 Docs/Layers/sport_shops.md                    |   2 +-
 Docs/Layers/tertiary_education.md             |   2 +-
 Docs/SpecialRenderings.md                     |  10 +-
 Docs/TagInfo/mapcomplete_cyclofix.json        | 925 ++++++++++++++++++
 .../mapcomplete_disaster_response.json        | 111 +++
 Docs/TagInfo/mapcomplete_education.json       | 152 ++-
 Docs/TagInfo/mapcomplete_healthcare.json      | 185 ++++
 Docs/TagInfo/mapcomplete_onwheels.json        | 111 +++
 Docs/TagInfo/mapcomplete_scouting.json        | 108 ++
 Docs/TagInfo/mapcomplete_shops.json           |  37 +
 Docs/Themes/circular_economy.md               |   2 +-
 Docs/Themes/climbing.md                       |   2 +-
 Docs/Themes/ghostsigns.md                     |   4 +-
 Docs/Themes/glutenfree.md                     |   2 +-
 Docs/Themes/grb.md                            |   1 -
 Docs/Themes/healthcare.md                     |   2 +-
 Docs/Themes/lactosefree.md                    |   2 +-
 Docs/Themes/openlovemap.md                    |  12 +-
 Docs/Themes/personal.md                       |   1 +
 Docs/Themes/pets.md                           |   2 +-
 Docs/Themes/scouting.md                       | 149 +++
 Docs/Themes/sports.md                         |   2 +-
 Docs/URL_Parameters.md                        |  18 +-
 Docs/wikiIndex.txt                            |   4 +-
 app/AppIndex.svelte                           |  24 +-
 app/land.ts                                   |  16 +-
 assets/layers/campsite/campsite.json          |   1 -
 .../mapcomplete-changes.json                  |  71 +-
 .../mapcomplete-changes.proto.json            |  31 +-
 capacitor.config.ts                           |  14 +-
 langs/themes/cs.json                          |   7 +
 langs/themes/de.json                          |   7 +
 langs/themes/en.json                          |  24 +
 langs/themes/es.json                          |   7 +
 langs/themes/ko.json                          |   7 +
 langs/themes/nl.json                          |   7 +
 package-lock.json                             |  15 +-
 scripts/downloadCommunityIndex.ts             |  59 +-
 scripts/generateDocs.ts                       |   3 +-
 scripts/generateLayerOverview.ts              |  13 +-
 scripts/generateLayouts.ts                    |   2 +-
 src/Logic/Actors/GeoLocationHandler.ts        |   1 -
 src/Logic/BBox.ts                             |  26 +-
 .../Actors/SaveFeatureSourceToLocalStorage.ts |  43 +-
 .../DynamicGeoJsonTileSource.ts               |   7 +-
 src/Logic/GeoOperations.ts                    | 127 ++-
 src/Logic/ImageProviders/AllImageProviders.ts |  10 +-
 src/Logic/ImageProviders/Panoramax.ts         |   2 +-
 src/Logic/Osm/ChangesetHandler.ts             |  26 +-
 src/Logic/Osm/OsmConnection.ts                | 149 +--
 src/Logic/Search/CombinedSearcher.ts          |   6 +-
 src/Logic/Search/PhotonSearch.ts              |   2 +-
 src/Logic/Search/ThemeSearch.ts               |   5 +-
 src/Logic/SimpleMetaTagger.ts                 |  84 +-
 src/Logic/State/FeatureSwitchState.ts         |   4 +-
 src/Logic/State/GeoLocationState.ts           |  20 +-
 src/Logic/State/UserRelatedState.ts           |   4 +-
 src/Logic/State/UserSettingsMetaTagging.ts    |  48 +-
 src/Logic/Web/AndroidPolyfill.ts              |  90 +-
 src/Logic/Web/CommunityIndex.ts               |  11 +-
 src/Logic/Web/ThemeViewStateHashActor.ts      |  11 +-
 src/Models/ThemeConfig/TagRenderingConfig.ts  |   4 +-
 .../ThemeViewState/WithSpecialLayers.ts       |   7 +-
 src/Models/TileRange.ts                       |   6 +-
 src/UI/AllThemesGui.svelte                    |  29 +-
 src/UI/Base/DirectionIndicator.svelte         |   4 +-
 src/UI/Base/FloatOver.svelte                  |   6 +-
 src/UI/Base/Loading.svelte                    |   2 +-
 src/UI/Base/LoginToggle.svelte                |   2 +-
 src/UI/Base/ModalRight.svelte                 |   2 +-
 src/UI/Base/Searchbar.svelte                  |   2 +-
 src/UI/Base/TitledPanel.svelte                |   3 +-
 .../BigComponents/CommunityIndexView.svelte   |  23 +-
 src/UI/BigComponents/ContactLink.svelte       |   5 +-
 .../BigComponents/CopyrightSingleIcon.svelte  |   2 +-
 src/UI/BigComponents/MenuDrawer.svelte        |   2 +-
 src/UI/BigComponents/ThemeButton.svelte       |  12 +-
 src/UI/Comparison/ComparisonAction.svelte     |   2 +-
 src/UI/Comparison/ComparisonTable.svelte      |   2 +-
 src/UI/Image/AttributedImage.svelte           |   4 +-
 src/UI/Image/DeletableImage.svelte            |  13 +-
 src/UI/Image/ImageOperations.svelte           |   2 +-
 .../Helpers/DirectionInput.svelte             |   4 +-
 .../InputElement/Helpers/LocationInput.svelte |   6 +-
 .../Helpers/OpeningHours/OHTable.svelte       |   2 +-
 .../Helpers/OpeningHoursInput.svelte          |   2 +-
 src/UI/Map/DynamicMarker.svelte               |   2 +-
 src/UI/Map/MapLibreAdaptor.ts                 |  45 +-
 src/UI/Map/MaplibreMap.svelte                 |   2 +-
 src/UI/Map/Marker.svelte                      |   2 +-
 src/UI/Map/ShowDataLayer.ts                   |  18 +-
 src/UI/PlantNet/PlantNet.svelte               |   2 +-
 src/UI/PlantNet/PlantNetSpeciesList.svelte    |   2 +-
 src/UI/Popup/AddNewPoint/AddNewPoint.svelte   |   2 +-
 src/UI/Popup/AutoApplyButton.ts               |   4 +-
 src/UI/Popup/GroupedView.svelte               |  10 +-
 .../Popup/LanguageElement/LanguageElement.ts  |   2 +-
 src/UI/Popup/SplitRoadWizard.svelte           |   9 +-
 src/UI/Popup/TagHint.svelte                   |  18 +-
 src/UI/Popup/TagRendering/Questionbox.svelte  |   2 +-
 .../TagRendering/SpecialTranslation.svelte    |   5 +-
 .../TagRendering/TagRenderingQuestion.svelte  |   4 +-
 src/UI/PrivacyGui.svelte                      |  10 +-
 src/UI/Search/SearchResults.svelte            |   6 +-
 src/UI/SingleThemeGui.svelte                  |   4 +-
 .../DataImportSpecialVisualisations.ts        | 505 +++++-----
 .../FavouriteVisualisations.ts                |  48 +-
 .../ImageVisualisations.ts                    |  35 +-
 .../NoteVisualisations.ts                     |  59 +-
 .../ReviewSpecialVisualisations.ts            |  56 +-
 .../SettingsVisualisations.ts                 |  43 +-
 ...deringManipulationSpecialVisualisations.ts |  51 +-
 .../UISpecialVisualisations.ts                |  53 +-
 ...ebAndCommunicationSpecialVisualisations.ts |  55 +-
 src/UI/SpecialVisualization.ts                |   1 -
 src/UI/SpecialVisualizations.ts               | 181 ++--
 src/UI/Statistics/AllStats.svelte             |  16 +-
 src/UI/Statistics/StatisticsGui.svelte        |  14 +-
 src/UI/StatusGui.ts                           |   2 +-
 src/UI/StudioGui.ts                           |   2 +-
 src/UI/StylesheetTestGui.svelte               |   3 -
 src/UI/Test.svelte                            |   9 +-
 src/UI/ThemeViewGUI.svelte                    |  12 +-
 src/assets/contributors.json                  |  22 +-
 src/assets/schemas/layerconfigmeta.json       |  12 +-
 src/assets/schemas/layoutconfigmeta.json      |  36 +-
 src/assets/translators.json                   |  46 +-
 src/land.ts                                   |   5 +-
 src/test.ts                                   |   2 +-
 test/Logic/Actors/Actors.spec.ts              |   6 +-
 test/Logic/GeoOperations.spec.ts              | 123 +--
 156 files changed, 4436 insertions(+), 1318 deletions(-)
 create mode 100644 Docs/Layers/campsite.md
 create mode 100644 Docs/Layers/group_campsite.md

diff --git a/Docs/BuiltinIndex.md b/Docs/BuiltinIndex.md
index 27048c3cd..843c5ed7e 100644
--- a/Docs/BuiltinIndex.md
+++ b/Docs/BuiltinIndex.md
@@ -31,6 +31,7 @@
  - birdhide
  - brothel
  - cafe_pub
+ - campsite
  - car_rental
  - caravansites
  - charge_point
@@ -203,9 +204,7 @@
  - climbing_club
  - climbing_gym
  - cycle_highways
- - dentist
  - disaster_response
- - doctors
  - dogpark
  - elongated_coin
  - fitness_centre
@@ -216,7 +215,6 @@
  - nature_reserve
  - observation_tower
  - outdoor_seating
- - physiotherapist
  - playground
  - recycling
  - shops
@@ -241,14 +239,11 @@
  - childcare
  - climbing_club
  - climbing_gym
- - dentist
- - doctors
  - fitness_centre
  - food
  - food_courts
  - governments
  - hackerspace
- - physiotherapist
  - recycling
  - shops
  - sports_centre
@@ -268,13 +263,10 @@
  - childcare
  - climbing_club
  - climbing_gym
- - dentist
- - doctors
  - fitness_centre
  - food
  - governments
  - hackerspace
- - physiotherapist
  - recycling
  - shops
  - sports_centre
@@ -301,6 +293,7 @@
  - lighthouse
  - nature_reserve
  - observation_tower
+ - school
             
             ### memorial.memorial-questions
 
@@ -320,11 +313,15 @@
 
              - assisted_repair
  - brothel
+ - campsite
  - cinema
+ - dentist
+ - doctors
  - hospital
  - ice_cream
  - love_hotel
  - pharmacy
+ - physiotherapist
  - police
  - postoffices
  - school
@@ -336,6 +333,7 @@
             ### mastodon
 
              - assisted_repair
+ - campsite
  - hackerspace
  - scouting_group
             
@@ -493,7 +491,8 @@
             
             ### questions
 
-             - caravansites
+             - campsite
+ - caravansites
  - charge_point
  - charging_station
  - etymology
@@ -582,6 +581,15 @@
  - search
  - summary
             
+            ### address.address
+
+             - dentist
+ - doctors
+ - hospital
+ - pharmacy
+ - physiotherapist
+ - school
+            
             ### seasonal
 
              - drinking_water
diff --git a/Docs/CalculatedTags.md b/Docs/CalculatedTags.md
index 41c657b3f..ceef0e5a3 100644
--- a/Docs/CalculatedTags.md
+++ b/Docs/CalculatedTags.md
@@ -95,6 +95,10 @@ Adds the currency valid for the object, based on country or explicit tagging. Ca
 
 This is a lazy metatag and is only calculated when needed
 
+### panoramax
+
+Converts a `panoramax=hash1;hash2;hash3;...` into `panoramax=hash1`,`panoramax:0=hash1`...
+
  Calculating tags with Javascript 
 ----------------------------------
 
diff --git a/Docs/ELI-overview.md b/Docs/ELI-overview.md
index 211245f23..c56b4de22 100644
--- a/Docs/ELI-overview.md
+++ b/Docs/ELI-overview.md
@@ -239,6 +239,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl
 | ICGC-topo | ICGC - Topogràfic de Catalunya  | other |  | Institut Cartogràfic i Geològic de Catalunya |
 | PNOA-Spain-TMS | PNOA Spain | photo | ⭐ | PNOA |
 | SITNA-catastro | Catastro Navarra | other |  | SITNA - Gobierno de Navarra / Nafarroako Gobernua |
+| geoEuskadi-basemap | geoEuskadiren Kartografia | map |  | Eusko Jaurlaritza / Gobierno Vasco. geoEuskadi |
 | geoEuskadi-ORTO | geoEuskadiren Ortoargazkiak | photo | ⭐ | Eusko Jaurlaritza / Gobierno Vasco. geoEuskadi |
 | IDEIB | IDEIB - Ortofoto més recent de les Illes Balears | photo | ⭐ | Infraestructura de Dades Espacials de les Illes Balears |
 | hri-orto | Helsinki region orthophoto | photo | ⭐ | © Espoon, Helsingin ja Vantaan kaupungit, Kirkkonummen ja Nurmijärven kunnat sekä HSL ja HSY |
@@ -488,11 +489,11 @@ This table gives a summary of ids, names and other metainformation. [See the onl
 | Lodz-2015 | Łódź: Orthophotomap 2015 (aerial image) |  |  | Urząd Miasta Łodzi |
 | Lodz-2017 | Łódź: Orthophotomap 2017 (aerial image) |  |  | Urząd Miasta Łodzi |
 | MDT2M_LITORAL_2014_15 | Elevation hillshade of the coastal areas of mainland Portugal - 2m - 2014-2015 (DGT) | elevation |  | Informação geográfica cedida pela Direção-Geral do Território |
-| ORTOS_DGT_2014_15 | Orthophotos of the coastal areas of mainland Portugal - 10cm - 2014-2015 (DGT) | historicphoto |  | Informação geográfica cedida pela Direção-Geral do Território |
-| ORTOS_DGT_2018_WMS | Orthophotos of mainland Portugal - 25cm - 2018 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território |
-| ORTOS_DGRF_2004_06 | Orthophotos of mainland Portugal - 50cm - 2004-2006 (DGT) | historicphoto |  | Informação geográfica cedida pela Direção-Geral do Território |
-| ORTOS_DGT_2021_RGB | Orthophotos of the northern portion of mainland Portugal - 25cm - 2021 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território |
-| ORTOSAT_DGT_2023_RGB | OrtoSat - Portugal Continental - 30cm - 2023 (DGT) | photo |  | Informação geográfica cedida pela Direção-Geral do Território |
+| ORTOS_DGT_2014_15 | Orthophotos of the coastal areas of mainland Portugal - 10 cm - 2014-2015 (DGT) | historicphoto |  | Informação geográfica cedida pela Direção-Geral do Território |
+| ORTOS_DGT_2018_WMS | Orthophotos of mainland Portugal - 25 cm - 2018 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território |
+| ORTOS_DGRF_2004_06 | Orthophotos of mainland Portugal - 50 cm - 2004-2006 (DGT) | historicphoto |  | Informação geográfica cedida pela Direção-Geral do Território |
+| ORTOS_DGT_2021_RGB | Orthophotos of the northern portion of mainland Portugal - 25 cm - 2021 (DGT) | photo | ⭐ | Informação geográfica cedida pela Direção-Geral do Território |
+| ORTOSAT_DGT_2023_RGB | OrtoSat - Portugal Continental - 30 cm - 2023 (DGT) | photo |  | Informação geográfica cedida pela Direção-Geral do Território |
 | rs-osm-official-cyr | Official Serbia OSM (cyr) | osmbasedmap |  | openstreetmap.rs |
 | rs-osm-official-lat | Official Serbia OSM (lat) | osmbasedmap |  | openstreetmap.rs |
 | lantmateriet-orto1960 | Lantmäteriet Historic Orthophoto 1960 | historicphoto |  | © Lantmäteriet, CC0 |
@@ -696,7 +697,7 @@ This table gives a summary of ids, names and other metainformation. [See the onl
 | IndianaMap_Latest | IndianaMap Orthoimagery - Latest Available | photo |  | IndianaMap, Indiana Geographic Information Office |
 | Kansas_NG911_2014 | Kansas NG911 Orthoimagery (2014) | historicphoto |  | Kansas 911 Coordinating Council |
 | Kansas_NG911_2018 | Kansas NG911 Orthoimagery (2018) | historicphoto |  | Kansas 911 Coordinating Council |
-| Kansas_NG911_2021 | Kansas NG911 Orthoimagery (2021) | photo |  | Kansas 911 Coordinating Council |
+| Kansas_NG911_2021 | Kansas NG911 Orthoimagery (2021) | photo | ⭐ | Kansas 911 Coordinating Council |
 | KYAPED_Phase_1 | KyFromAbove Aerial Imagery (2012-2014) | historicphoto |  | KyFromAbove |
 | KYAPED_Phase_2 | KyFromAbove Aerial Imagery (2018-2022) | photo |  | KyFromAbove |
 | MassGIS-LIDAR-Shaded-Relief | MassGIS LIDAR Shaded Relief | elevation |  | MassGIS |
@@ -842,16 +843,84 @@ This table gives a summary of ids, names and other metainformation. [See the onl
 | ACT202311 | ACTmapi Imagery Nov 2023 | photo |  | Aerial Imagery from ACTMapi ©ACT Government and MetroMap |
 | ACT202402 | ACTmapi Imagery Feb 2024 | photo |  | Aerial Imagery from ACTMapi ©ACT Government and MetroMap |
 | ACT202409 | ACTmapi Imagery Sep 2024 | photo | ⭐ | Aerial Imagery from ACTMapi ©ACT Government and MetroMap |
+| NSW_DCS_SS_HAPE_Imagery_1943 | NSW DCS SS HAPE Imagery 1943 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1944 | NSW DCS SS HAPE Imagery 1944 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1947 | NSW DCS SS HAPE Imagery 1947 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1955 | NSW DCS SS HAPE Imagery 1955 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1965 | NSW DCS SS HAPE Imagery 1965 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1966 | NSW DCS SS HAPE Imagery 1966 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1969 | NSW DCS SS HAPE Imagery 1969 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1970 | NSW DCS SS HAPE Imagery 1970 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1971 | NSW DCS SS HAPE Imagery 1971 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1972 | NSW DCS SS HAPE Imagery 1972 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1975 | NSW DCS SS HAPE Imagery 1975 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1976 | NSW DCS SS HAPE Imagery 1976 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1978 | NSW DCS SS HAPE Imagery 1978 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1980 | NSW DCS SS HAPE Imagery 1980 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1982 | NSW DCS SS HAPE Imagery 1982 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1983 | NSW DCS SS HAPE Imagery 1983 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1984 | NSW DCS SS HAPE Imagery 1984 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1986 | NSW DCS SS HAPE Imagery 1986 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1989 | NSW DCS SS HAPE Imagery 1989 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1990 | NSW DCS SS HAPE Imagery 1990 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1991 | NSW DCS SS HAPE Imagery 1991 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1993 | NSW DCS SS HAPE Imagery 1993 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1994 | NSW DCS SS HAPE Imagery 1994 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1996 | NSW DCS SS HAPE Imagery 1996 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_1998 | NSW DCS SS HAPE Imagery 1998 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_2001 | NSW DCS SS HAPE Imagery 2001 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_2004 | NSW DCS SS HAPE Imagery 2004 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_2005 | NSW DCS SS HAPE Imagery 2005 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_2006 | NSW DCS SS HAPE Imagery 2006 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| NSW_DCS_SS_HAPE_Imagery_2013 | NSW DCS SS HAPE Imagery 2013 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
 | Maxar_19-20_Australian_Bushfires_PreEvent | Maxar 2019-2020 Australian Bushfires Pre-event | photo |  | ©2020 DigitalGlobe |
 | NSW_LPI_BaseMap | DCS NSW Base Map | map |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
-| DCS_NSW_Floods2021 | DCS NSW Floods 2021 | photo |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
-| DCS_NSW_Floods2022 | DCS NSW Floods 2022 | photo |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
 | NSW_LPI_Imagery | DCS NSW Imagery | photo |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Bourke_flood_2021_04_15cm | DCS NSW Floods 2021 Bourke flood 2021 04 15cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Brewarrina_flood_2021_04_14_15cm | DCS NSW Floods 2021 Brewarrina flood 2021 04 14 15cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Hawkesbury-Nepean_Floods_Central_Sector_2021_03_15cm_RGB | DCS NSW Floods 2021 Hawkesbury-Nepean Floods Central Sector 2021 03 15cm RGB | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Hawkesbury-Nepean_Floods_West_Sector_2021_03_15cm | DCS NSW Floods 2021 Hawkesbury-Nepean Floods West Sector 2021 03 15cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Hawkesbury-nepean_floods_eastern_sector_2021_03_25cm | DCS NSW Floods 2021 Hawkesbury-nepean floods eastern sector 2021 03 25cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Hawkesbury-nepean_floods_southern_sector_2021_03_16cm | DCS NSW Floods 2021 Hawkesbury-nepean floods southern sector 2021 03 16cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Lower_clarence_flood_2021_03_16cm | DCS NSW Floods 2021 Lower clarence flood 2021 03 16cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Mogil_Mogil_RGB_2021_04_10_Flood_15cm_Rapid_ortho | DCS NSW Floods 2021 Mogil Mogil RGB 2021 04 10 Flood 15cm Rapid ortho | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Mungindi_RGB_2021_04_10_Flood_15cm_Rapid_ortho | DCS NSW Floods 2021 Mungindi RGB 2021 04 10 Flood 15cm Rapid ortho | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_2021_Walgett_flood_2021_04_14_15cm | DCS NSW Floods 2021 Walgett flood 2021 04 14 15cm | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Historical_Forbes_flood_2012_03_20cm_bgrn | DCS NSW Floods Historical Forbes 2012-03 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Historical_forbesflood_2016_10_20cm_bgrn | DCS NSW Floods Historical Forbes 2016-10 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Mar_2022_Grafton_Flood_2022_03_02_10cm_P3 | DCS NSW Floods Mar 2022 Grafton Flood 2022 03 02 10cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Mar_2022_Hawkesbury-Nepean_Flood_2022_03_09_13cm_P3 | DCS NSW Floods Mar 2022 Hawkesbury-Nepean Flood 2022 03 09 13cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Mar_2022_Lismore_Flood_2022_03_02_8cm_P3 | DCS NSW Floods Mar 2022 Lismore Flood 2022 03 02 8cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Mar_2022_Ulmarra_Flood_2022_03_03_8cm_p3 | DCS NSW Floods Mar 2022 Ulmarra Flood 2022 03 03 8cm p3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Mar_2022_Wisemans_Ferry_2022_03_13cm_P3 | DCS NSW Floods Mar 2022 Wisemans Ferry 2022 03 13cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Mar_2022_singleton_flood_2022_03_10_10cm_p3 | DCS NSW Floods Mar 2022 singleton flood 2022 03 10 10cm p3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_Condobolin_Flood_2021_11_13cm_P3 | DCS NSW Floods Nov 2021 Condobolin Flood 2021 11 13cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_Forbes_Flood_East_2021_11_16_15cm_P3 | DCS NSW Floods Nov 2021 Forbes Flood East 2021 11 16 15cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_Forbes_Flood_West_2021_11_17_15cm_P3 | DCS NSW Floods Nov 2021 Forbes Flood West 2021 11 17 15cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_Lake_Cowal_North_Flood_2021_12_36cm_P3 | DCS NSW Floods Nov 2021 Lake Cowal North Flood 2021 12 36cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_Nanami_Flood_East_2021_11_15_9cm_P3 | DCS NSW Floods Nov 2021 Nanami Flood East 2021 11 15 9cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_Nanami_Flood_West_2021_11_15_9cm_P3 | DCS NSW Floods Nov 2021 Nanami Flood West 2021 11 15 9cm P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_humbug_creek_flood_2021_12_16cm_p3 | DCS NSW Floods Nov 2021 humbug creek flood 2021 12 16cm p3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2021_mirrool_creek_flood_2021_11_16cm_p3 | DCS NSW Floods Nov 2021 mirrool creek flood 2021 11 16cm p3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Balranald_Flood_02122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Balranald Flood 02122022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Bathurst_Flood_14112022_10cm_BGRN_P3 | DCS NSW Floods Nov 2022 Bathurst Flood 14112022 10cm BGRN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Billabong_Creek_Flood_26112022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Billabong Creek Flood 26112022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Condobolin_Flood_22112022_10cm_RGBN_P3 | DCS NSW Floods Nov 2022 Condobolin Flood 22112022 10cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Coreen_Flood_17112022_10cm_RGBN_P3 | DCS NSW Floods Nov 2022 Coreen Flood 17112022 10cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Corowa_Yarrawonga_Flood_25112022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Corowa Yarrawonga Flood 25112022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Derriwong_Flood_22112022_10cm_P3_RGBN_P3 | DCS NSW Floods Nov 2022 Derriwong Flood 22112022 10cm P3 RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Forbes_Flood_05112022_10cm_RGBN_P3 | DCS NSW Floods Nov 2022 Forbes Flood 05112022 10cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Lake-Cargelligo_Euabolong_Flood_04122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Lake-Cargelligo Euabolong Flood 04122022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Murray_Wakool_Flood_01122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Murray Wakool Flood 01122022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Swan_Hill_Flood_25112022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Swan-Hill Flood 25112022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Tooleybuc_Flood_01122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Tooleybuc Flood 01122022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
+| DCS_NSW_Floods_Nov_2022_Wentworth_Flood_03122022_15cm_RGBN_P3 | DCS NSW Floods Nov 2022 Wentworth Flood 03122022 15cm RGBN P3 | historicphoto |  | © State of New South Wales (Spatial Services, a business unit of the Department of Customer Service NSW). For current information go to spatial.nsw.gov.au. |
 | ARA_Bushfires_2020 | ARA Bushfires 2020 | photo | ⭐ | ARA - Airborne Research Australia |
 | CityOfLaunceston_2011 | Launceston OrthoPhoto 2011 | historicphoto |  | © City of Launceston |
 | CityOfLaunceston_2013 | Launceston OrthoPhoto 2013 | photo |  | © City of Launceston |
-| City_of_Melbourne_Feb_2019 | City of Melbourne Feb 2019 | photo | ⭐ | City of Melbourne |
+| City_of_Melbourne_Feb_2019 | City of Melbourne Feb 2019 | photo |  | City of Melbourne |
 | City_of_Melbourne_May_2018 | City of Melbourne May 2018 | historicphoto |  | City of Melbourne |
+| City_of_Melbourne_May_2020 | City of Melbourne May 2020 | photo | ⭐ | City of Melbourne |
 | USDA_Micronesia_2023 | USDA Micronesia Imagery (2023) | photo |  | U.S. Department of Agriculture |
 | USDA_Guam_2022 | USDA Guam Imagery (2022) | photo |  | U.S. Department of Agriculture |
 | USDA_Marshall_Islands_2023 | USDA Marshall Islands Imagery (2023) | photo |  | U.S. Department of Agriculture |
diff --git a/Docs/Layers/address.md b/Docs/Layers/address.md
index e1e833bf0..b6246c471 100644
--- a/Docs/Layers/address.md
+++ b/Docs/Layers/address.md
@@ -5,15 +5,17 @@
 Addresses
 
  - This layer is shown at zoomlevel **18** and higher
- - This layer will automatically load  [named_streets](./named_streets.md)  into the layout as it depends on it:  a calculated tag loads features from this layer (calculatedTag[0] which calculates the value for _closest_3_street_names)
 
 ## Table of contents
 
 1. [Themes using this layer](#themes-using-this-layer)
 2. [Basic tags for this layer](#basic-tags-for-this-layer)
 3. [Supported attributes](#supported-attributes)
+  - [address_joined](#address_joined)
+  - [header](#header)
   - [housenumber](#housenumber)
   - [street](#street)
+  - [unit](#unit)
   - [fixme](#fixme)
   - [leftover-questions](#leftover-questions)
   - [move-button](#move-button)
@@ -39,10 +41,31 @@ Elements must match **any** of the following expressions:
 
 | attribute | type | values which are supported by this layer |
 -----|-----|----- |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
-| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/fixme#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/fixme/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [fixme](https://wiki.openstreetmap.org/wiki/Key:fixme) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:fixme%3D) |
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### housenumber
 
 The question is `What is the number of this house?`
@@ -50,14 +73,29 @@ The question is `What is the number of this house?`
 
  -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
 
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### street
 
 The question is `What street is this address located in?`
 *This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
 
- -  *Located in <b>{_closest_street:0:name}</b>* is shown if with addr:street=
- -  *Located in <b>{_closest_street:1:name}</b>* is shown if with addr:street=
- -  *Located in <b>{_closest_street:2:name}</b>* is shown if with addr:street=
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
 
 ### fixme
 
diff --git a/Docs/Layers/artwork.md b/Docs/Layers/artwork.md
index 6cac1afb9..4419330ca 100644
--- a/Docs/Layers/artwork.md
+++ b/Docs/Layers/artwork.md
@@ -208,8 +208,8 @@ The question is `Does this artwork serve as a bench?`
 The question is `Does this bench have a backrest?`
 
  - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/two_sided.svg' style='width: 3rem; height: 3rem'> *This bench is two-sided and shares the backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a> & <a href='https://wiki.openstreetmap.org/wiki/Key:two_sided' target='_blank'>two_sided</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:two_sided%3Dyes' target='_blank'>yes</a>
- -  *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
- -  *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/one_sided.svg' style='width: 3rem; height: 3rem'> *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/no_backrest.svg' style='width: 3rem; height: 3rem'> *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbench' target='_blank'>bench</a>
 This tagrendering has labels 
diff --git a/Docs/Layers/artwork_on_wall.md b/Docs/Layers/artwork_on_wall.md
index 596012dd4..6b683cae2 100644
--- a/Docs/Layers/artwork_on_wall.md
+++ b/Docs/Layers/artwork_on_wall.md
@@ -211,8 +211,8 @@ The question is `Does this artwork serve as a bench?`
 The question is `Does this bench have a backrest?`
 
  - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/two_sided.svg' style='width: 3rem; height: 3rem'> *This bench is two-sided and shares the backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a> & <a href='https://wiki.openstreetmap.org/wiki/Key:two_sided' target='_blank'>two_sided</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:two_sided%3Dyes' target='_blank'>yes</a>
- -  *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
- -  *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/one_sided.svg' style='width: 3rem; height: 3rem'> *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/no_backrest.svg' style='width: 3rem; height: 3rem'> *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbench' target='_blank'>bench</a>
 This tagrendering has labels 
diff --git a/Docs/Layers/bench.md b/Docs/Layers/bench.md
index eb63b2d31..2288b15f4 100644
--- a/Docs/Layers/bench.md
+++ b/Docs/Layers/bench.md
@@ -88,8 +88,8 @@ _This tagrendering has no question and is thus read-only_
 The question is `Does this bench have a backrest?`
 
  - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/two_sided.svg' style='width: 3rem; height: 3rem'> *This bench is two-sided and shares the backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a> & <a href='https://wiki.openstreetmap.org/wiki/Key:two_sided' target='_blank'>two_sided</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:two_sided%3Dyes' target='_blank'>yes</a>
- -  *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
- -  *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/one_sided.svg' style='width: 3rem; height: 3rem'> *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/no_backrest.svg' style='width: 3rem; height: 3rem'> *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
 
 This tagrendering has labels 
 `bench-questions`
diff --git a/Docs/Layers/bike_shop.md b/Docs/Layers/bike_shop.md
index d9d511d92..42e765cb9 100644
--- a/Docs/Layers/bike_shop.md
+++ b/Docs/Layers/bike_shop.md
@@ -15,6 +15,7 @@ A shop specifically selling bicycles or related items
   - [images](#images)
   - [reviews](#reviews)
   - [shops-name](#shops-name)
+  - [shop_types](#shop_types)
   - [brand](#brand)
   - [second_hand](#second_hand)
   - [opening_hours](#opening_hours)
@@ -33,9 +34,18 @@ A shop specifically selling bicycles or related items
   - [bike_second_hand](#bike_second_hand)
   - [repairs_bikes](#repairs_bikes)
   - [bicycle_rental](#bicycle_rental)
+  - [bicycle-types](#bicycle-types)
+  - [rental-capacity-city_bike](#rental-capacity-city_bike)
+  - [rental-capacity-ebike](#rental-capacity-ebike)
+  - [rental-capacity-kid_bike](#rental-capacity-kid_bike)
+  - [rental-capacity-bmx](#rental-capacity-bmx)
+  - [rental-capacity-mtb](#rental-capacity-mtb)
+  - [rental-capacity-bicycle_pannier](#rental-capacity-bicycle_pannier)
+  - [rental-capacity-tandem_bicycle](#rental-capacity-tandem_bicycle)
   - [bike_pump_service](#bike_pump_service)
   - [bike_repair_tools](#bike_repair_tools)
   - [bike_wash](#bike_wash)
+  - [bike_cleaning-service_bicycle_cleaning_charge](#bike_cleaning-service_bicycle_cleaning_charge)
   - [internet](#internet)
   - [internet-fee](#internet-fee)
   - [internet-ssid](#internet-ssid)
@@ -81,6 +91,7 @@ Elements must match **any** of the following expressions:
 | attribute | type | values which are supported by this layer |
 -----|-----|----- |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/name#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/name/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/shop#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/shop/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [shop](https://wiki.openstreetmap.org/wiki/Key:shop) | [string](../SpecialInputElements.md#string) | [bicycle_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_rental) [agrarian](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian) [alcohol](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol) [anime](https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime) [antiques](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques) [appliance](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance) [art](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart) [baby_goods](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods) [bag](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag) [bakery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery) [bathroom_furnishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing) [beauty](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty) [bed](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed) [beverages](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages) [bicycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle) [boat](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat) [bookmaker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker) [books](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks) [brewing_supplies](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies) [butcher](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher) [camera](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera) [candles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles) [cannabis](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis) [car](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar) [car_parts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts) [car_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair) [caravan](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan) [carpet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet) [catalogue](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue) [charity](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity) [cheese](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese) [chemist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist) [chocolate](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate) [clothes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes) [coffee](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee) [collector](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector) [computer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer) [confectionery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery) [convenience](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience) [copyshop](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop) [cosmetics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics) [country_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store) [craft](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft) [curtain](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain) [dairy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy) [deli](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli) [department_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store) [doityourself](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself) [doors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors) [dry_cleaning](https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning) [e-cigarette](https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette) [electrical](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical) [electronics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics) [erotic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic) [fabric](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric) [farm](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm) [fashion_accessories](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories) [fireplace](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace) [fishing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing) [flooring](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring) [florist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist) [frame](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe) [frozen_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food) [fuel](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel) [funeral_directors](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors) [furniture](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture) [games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames) [garden_centre](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre) [gas](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas) [general](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral) [gift](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift) [greengrocer](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer) [hairdresser](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser) [hairdresser_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply) [hardware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware) [health_food](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food) [hearing_aids](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids) [herbalist](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist) [hifi](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi) [honey](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhoney) [household_linen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen) [houseware](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware) [hunting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting) [interior_decoration](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration) [jewelry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry) [kiosk](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk) [kitchen](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen) [laundry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry) [leather](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather) [lighting](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting) [locksmith](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith) [lottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery) [mall](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall) [massage](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage) [medical_supply](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply) [military_surplus](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus) [mobile_phone](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone) [model](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel) [money_lender](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender) [motorcycle](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle) [motorcycle_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair) [music](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic) [musical_instrument](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument) [newsagent](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent) [nutrition_supplements](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements) [nuts](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnuts) [optician](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor) [outpost](https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost) [paint](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint) [party](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty) [pasta](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpasta) [pastry](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry) [pawnbroker](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker) [perfumery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery) [pet](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet) [pet_grooming](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming) [photo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto) [pottery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery) [printer_ink](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink) [psychic](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic) [pyrotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics) [radiotechnics](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics) [religion](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion) [rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental) [repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair) [rice](https://wiki.openstreetmap.org/wiki/Tag:shop%3Drice) [scuba_diving](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving) [seafood](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood) [second_hand](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand) [sewing](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing) [shoe_repair](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair) [shoes](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes) [spices](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices) [sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports) [stationery](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery) [storage_rental](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental) [supermarket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket) [swimming_pool](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool) [tailor](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor) [tattoo](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo) [tea](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea) [telecommunication](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication) [ticket](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket) [tiles](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles) [tobacco](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco) [tool_hire](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire) [toys](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys) [trade](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade) [travel_agency](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency) [trophy](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy) [tyres](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres) [vacuum_cleaner](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner) [variety_store](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store) [video](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo) [video_games](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games) [watches](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches) [water](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater) [water_sports](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports) [weapons](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons) [wholesale](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale) [wigs](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs) [window_blind](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind) [wine](https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/brand#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/brand/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [brand](https://wiki.openstreetmap.org/wiki/Key:brand) | [string](../SpecialInputElements.md#string) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/second_hand#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/second_hand/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [second_hand](https://wiki.openstreetmap.org/wiki/Key:second_hand) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Donly) [yes](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:second_hand%3Dno) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/opening_hours#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/opening_hours/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [opening_hours](https://wiki.openstreetmap.org/wiki/Key:opening_hours) | [opening_hours](../SpecialInputElements.md#opening_hours) |  |
@@ -94,9 +105,18 @@ Elements must match **any** of the following expressions:
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:second_hand#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Asecond_hand/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:second_hand](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:second_hand) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Dno) [only](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:second_hand%3Donly) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:repair#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Arepair/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:repair](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:repair) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Donly_sold) [brand](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:repair%3Dbrand) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:rental#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Arental/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:rental](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dno) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/rental#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/rental/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [rental](https://wiki.openstreetmap.org/wiki/Key:rental) | [string](../SpecialInputElements.md#string) | [city_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike) [ebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike) [bmx](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx) [mtb](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb) [kid_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike) [tandem](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem) [racebike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike) [bike_helmet](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet) [cargo_bike](https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcargo_bike) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:city_bike#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Acity_bike/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:city_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:city_bike) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:ebike#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Aebike/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:ebike](https://wiki.openstreetmap.org/wiki/Key:capacity:ebike) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:kid_bike#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Akid_bike/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:kid_bike](https://wiki.openstreetmap.org/wiki/Key:capacity:kid_bike) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:bmx#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Abmx/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:bmx](https://wiki.openstreetmap.org/wiki/Key:capacity:bmx) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:mtb#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Amtb/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:mtb](https://wiki.openstreetmap.org/wiki/Key:capacity:mtb) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:bicycle_pannier#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Abicycle_pannier/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:bicycle_pannier](https://wiki.openstreetmap.org/wiki/Key:capacity:bicycle_pannier) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:tandem_bicycle#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Atandem_bicycle/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:tandem_bicycle](https://wiki.openstreetmap.org/wiki/Key:capacity:tandem_bicycle) | [pnat](../SpecialInputElements.md#pnat) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:pump#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Apump/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:pump](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:pump) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dno) [separate](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:pump%3Dseparate) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:diy#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Adiy/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:diy](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:diy) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Dno) [only_sold](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:diy%3Donly_sold) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:cleaning#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Acleaning/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:cleaning](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dyes) [diy](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Ddiy) [no](https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning%3Dno) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/service:bicycle:cleaning:charge#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/service%3Abicycle%3Acleaning%3Acharge/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [service:bicycle:cleaning:charge](https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:charge) | [string](../SpecialInputElements.md#string) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/internet_access#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/internet_access/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [internet_access](https://wiki.openstreetmap.org/wiki/Key:internet_access) | Multiple choice | [wlan](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwlan) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dno) [terminal](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal) [wired](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dwired) [terminal;wifi](https://wiki.openstreetmap.org/wiki/Tag:internet_access%3Dterminal;wifi) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/internet_access:fee#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/internet_access%3Afee/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [internet_access:fee](https://wiki.openstreetmap.org/wiki/Key:internet_access:fee) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dno) [customers](https://wiki.openstreetmap.org/wiki/Tag:internet_access:fee%3Dcustomers) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/internet_access:ssid#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/internet_access%3Assid/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [internet_access:ssid](https://wiki.openstreetmap.org/wiki/Key:internet_access:ssid) | [string](../SpecialInputElements.md#string) | [Telekom](https://wiki.openstreetmap.org/wiki/Tag:internet_access:ssid%3DTelekom) |
@@ -122,6 +142,180 @@ _This tagrendering has no question and is thus read-only_
 The question is `What is the name of this shop?`
 *This shop is called <i>{name}</i>* is shown if `name` is set
 
+### shop_types
+
+The question is `What kind of shop is this?`
+*This is a {shop}* is shown if `shop` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/bicycle_rental.svg' style='width: 3rem; height: 3rem'> *Bicycle rental shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_rental' target='_blank'>bicycle_rental</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-tractor.svg' style='width: 3rem; height: 3rem'> *Farm Supply Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dagrarian' target='_blank'>agrarian</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-wine-bottle.svg' style='width: 3rem; height: 3rem'> *Liquor Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dalcohol' target='_blank'>alcohol</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-dragon.svg' style='width: 3rem; height: 3rem'> *Anime / Manga Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Danime' target='_blank'>anime</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-furniture.svg' style='width: 3rem; height: 3rem'> *Antique Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dantiques' target='_blank'>antiques</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-laundry.svg' style='width: 3rem; height: 3rem'> *Appliance Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dappliance' target='_blank'>appliance</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Art Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dart' target='_blank'>art</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-baby-carriage.svg' style='width: 3rem; height: 3rem'> *Baby Goods Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbaby_goods' target='_blank'>baby_goods</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-suitcase-rolling.svg' style='width: 3rem; height: 3rem'> *Bag/Luggage Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbag' target='_blank'>bag</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-bakery.svg' style='width: 3rem; height: 3rem'> *Bakery* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbakery' target='_blank'>bakery</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-bath.svg' style='width: 3rem; height: 3rem'> *Bathroom Furnishing Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbathroom_furnishing' target='_blank'>bathroom_furnishing</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-lipstick.svg' style='width: 3rem; height: 3rem'> *Beauty Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeauty' target='_blank'>beauty</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-lodging.svg' style='width: 3rem; height: 3rem'> *Bedding/Mattress Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbed' target='_blank'>bed</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-bottles.svg' style='width: 3rem; height: 3rem'> *Beverage Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbeverages' target='_blank'>beverages</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-bicycle.svg' style='width: 3rem; height: 3rem'> *Bicycle Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-boat.svg' style='width: 3rem; height: 3rem'> *Boat Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dboat' target='_blank'>boat</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-money_hand.svg' style='width: 3rem; height: 3rem'> *Bookmaker* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbookmaker' target='_blank'>bookmaker</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-book.svg' style='width: 3rem; height: 3rem'> *Bookstore* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbooks' target='_blank'>books</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-storage_fermenter.svg' style='width: 3rem; height: 3rem'> *Brewing Supply Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbrewing_supplies' target='_blank'>brewing_supplies</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-cleaver.svg' style='width: 3rem; height: 3rem'> *Butcher* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbutcher' target='_blank'>butcher</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-camera-retro.svg' style='width: 3rem; height: 3rem'> *Camera Equipment Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcamera' target='_blank'>camera</a>
+ -  *Candle Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcandles' target='_blank'>candles</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-cannabis.svg' style='width: 3rem; height: 3rem'> *Cannabis Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcannabis' target='_blank'>cannabis</a>
+ -  *Car Dealership* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar' target='_blank'>car</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-car-battery.svg' style='width: 3rem; height: 3rem'> *Car Parts Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_parts' target='_blank'>car_parts</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-car-repair.svg' style='width: 3rem; height: 3rem'> *Car Repair Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcar_repair' target='_blank'>car_repair</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-camper_trailer.svg' style='width: 3rem; height: 3rem'> *RV Dealership* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcaravan' target='_blank'>caravan</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-tape.svg' style='width: 3rem; height: 3rem'> *Carpet Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcarpet' target='_blank'>carpet</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Catalog Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcatalogue' target='_blank'>catalogue</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Charity Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcharity' target='_blank'>charity</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-cheese.svg' style='width: 3rem; height: 3rem'> *Cheese Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcheese' target='_blank'>cheese</a>
+ -  *Drugstore* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchemist' target='_blank'>chemist</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-confectionery.svg' style='width: 3rem; height: 3rem'> *Chocolate Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dchocolate' target='_blank'>chocolate</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-clothing-store.svg' style='width: 3rem; height: 3rem'> *Clothing Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dclothes' target='_blank'>clothes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-coffee.svg' style='width: 3rem; height: 3rem'> *Coffee Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcoffee' target='_blank'>coffee</a>
+ -  *Collectibles Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcollector' target='_blank'>collector</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-laptop.svg' style='width: 3rem; height: 3rem'> *Computer Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcomputer' target='_blank'>computer</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-confectionery.svg' style='width: 3rem; height: 3rem'> *Candy Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconfectionery' target='_blank'>confectionery</a>
+ -  *Convenience Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dconvenience' target='_blank'>convenience</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-print.svg' style='width: 3rem; height: 3rem'> *Copy Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcopyshop' target='_blank'>copyshop</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-lipstick.svg' style='width: 3rem; height: 3rem'> *Cosmetics Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcosmetics' target='_blank'>cosmetics</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-hat-cowboy-side.svg' style='width: 3rem; height: 3rem'> *Rural Supplies Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcountry_store' target='_blank'>country_store</a>
+ -  *Arts & Crafts Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcraft' target='_blank'>craft</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-curtains.svg' style='width: 3rem; height: 3rem'> *Curtain Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dcurtain' target='_blank'>curtain</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-cheese.svg' style='width: 3rem; height: 3rem'> *Dairy Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddairy' target='_blank'>dairy</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-jar.svg' style='width: 3rem; height: 3rem'> *Delicatessen* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddeli' target='_blank'>deli</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Department Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddepartment_store' target='_blank'>department_store</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tools.svg' style='width: 3rem; height: 3rem'> *DIY Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoityourself' target='_blank'>doityourself</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-door-open.svg' style='width: 3rem; height: 3rem'> *Door Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddoors' target='_blank'>doors</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-clothes_hanger.svg' style='width: 3rem; height: 3rem'> *Dry Cleaner* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Ddry_cleaning' target='_blank'>dry_cleaning</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *E-Cigarette Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3De-cigarette' target='_blank'>e-cigarette</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-power.svg' style='width: 3rem; height: 3rem'> *Electrical Equipment Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectrical' target='_blank'>electrical</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-plug.svg' style='width: 3rem; height: 3rem'> *Electronics Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Delectronics' target='_blank'>electronics</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Erotic Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Derotic' target='_blank'>erotic</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-tape.svg' style='width: 3rem; height: 3rem'> *Fabric Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfabric' target='_blank'>fabric</a>
+ -  *Produce Stand* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfarm' target='_blank'>farm</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-fashion_accessories.svg' style='width: 3rem; height: 3rem'> *Fashion Accessories Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfashion_accessories' target='_blank'>fashion_accessories</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-fireplace.svg' style='width: 3rem; height: 3rem'> *Fireplace Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfireplace' target='_blank'>fireplace</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-ice_fishing.svg' style='width: 3rem; height: 3rem'> *Fishing Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfishing' target='_blank'>fishing</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tools.svg' style='width: 3rem; height: 3rem'> *Flooring Supply Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflooring' target='_blank'>flooring</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-florist.svg' style='width: 3rem; height: 3rem'> *Florist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dflorist' target='_blank'>florist</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-vector-square.svg' style='width: 3rem; height: 3rem'> *Framing Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dframe' target='_blank'>frame</a>
+ -  *Frozen Food Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfrozen_food' target='_blank'>frozen_food</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-propane_tank.svg' style='width: 3rem; height: 3rem'> *Fuel Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuel' target='_blank'>fuel</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-cemetery.svg' style='width: 3rem; height: 3rem'> *Funeral Home* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfuneral_directors' target='_blank'>funeral_directors</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-couch.svg' style='width: 3rem; height: 3rem'> *Furniture Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dfurniture' target='_blank'>furniture</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-dice.svg' style='width: 3rem; height: 3rem'> *Tabletop Game Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgames' target='_blank'>games</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-garden-centre.svg' style='width: 3rem; height: 3rem'> *Garden Center* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgarden_centre' target='_blank'>garden_centre</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-propane_tank.svg' style='width: 3rem; height: 3rem'> *Bottled Gas Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgas' target='_blank'>gas</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *General Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgeneral' target='_blank'>general</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-gift.svg' style='width: 3rem; height: 3rem'> *Gift Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgift' target='_blank'>gift</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-carrot.svg' style='width: 3rem; height: 3rem'> *Greengrocer* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dgreengrocer' target='_blank'>greengrocer</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-beauty_salon.svg' style='width: 3rem; height: 3rem'> *Hairdresser* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser' target='_blank'>hairdresser</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-hair_care.svg' style='width: 3rem; height: 3rem'> *Hairdresser Supply Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhairdresser_supply' target='_blank'>hairdresser_supply</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tools.svg' style='width: 3rem; height: 3rem'> *Hardware Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhardware' target='_blank'>hardware</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Health Food Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhealth_food' target='_blank'>health_food</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-hearing_aid.svg' style='width: 3rem; height: 3rem'> *Hearing Aids Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aids' target='_blank'>hearing_aids</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-leaf.svg' style='width: 3rem; height: 3rem'> *Herbalist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dherbalist' target='_blank'>herbalist</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-speaker.svg' style='width: 3rem; height: 3rem'> *Hifi Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhifi' target='_blank'>hifi</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Honey Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhoney' target='_blank'>honey</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-cloth.svg' style='width: 3rem; height: 3rem'> *Household Linen Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhousehold_linen' target='_blank'>household_linen</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-blender.svg' style='width: 3rem; height: 3rem'> *Houseware Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhouseware' target='_blank'>houseware</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-bow_and_arrow.svg' style='width: 3rem; height: 3rem'> *Hunting Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhunting' target='_blank'>hunting</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Interior Decoration Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dinterior_decoration' target='_blank'>interior_decoration</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-jewelry-store.svg' style='width: 3rem; height: 3rem'> *Jewelry Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Djewelry' target='_blank'>jewelry</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-store.svg' style='width: 3rem; height: 3rem'> *Kiosk* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkiosk' target='_blank'>kiosk</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-kitchen_sink.svg' style='width: 3rem; height: 3rem'> *Kitchen Design Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dkitchen' target='_blank'>kitchen</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-laundry.svg' style='width: 3rem; height: 3rem'> *Laundry* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlaundry' target='_blank'>laundry</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-handbag.svg' style='width: 3rem; height: 3rem'> *Leather Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dleather' target='_blank'>leather</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-desk_lamp.svg' style='width: 3rem; height: 3rem'> *Lighting Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlighting' target='_blank'>lighting</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-key.svg' style='width: 3rem; height: 3rem'> *Locksmith* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlocksmith' target='_blank'>locksmith</a>
+ -  *Lottery Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dlottery' target='_blank'>lottery</a>
+ -  *Mall* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmall' target='_blank'>mall</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-spa.svg' style='width: 3rem; height: 3rem'> *Massage Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmassage' target='_blank'>massage</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-crutch.svg' style='width: 3rem; height: 3rem'> *Medical Supply Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-military.svg' style='width: 3rem; height: 3rem'> *Military Surplus Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmilitary_surplus' target='_blank'>military_surplus</a>
+ -  *Mobile Phone Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmobile_phone' target='_blank'>mobile_phone</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Model Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmodel' target='_blank'>model</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-money_hand.svg' style='width: 3rem; height: 3rem'> *Money Lender* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmoney_lender' target='_blank'>money_lender</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-motorcycle.svg' style='width: 3rem; height: 3rem'> *Motorcycle Dealership* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle' target='_blank'>motorcycle</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-motorcycle_repair.svg' style='width: 3rem; height: 3rem'> *Motorcycle Repair Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmotorcycle_repair' target='_blank'>motorcycle_repair</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-compact-disc.svg' style='width: 3rem; height: 3rem'> *Music Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusic' target='_blank'>music</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-guitar.svg' style='width: 3rem; height: 3rem'> *Musical Instrument Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmusical_instrument' target='_blank'>musical_instrument</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-newspaper.svg' style='width: 3rem; height: 3rem'> *Newsstand* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnewsagent' target='_blank'>newsagent</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-pills.svg' style='width: 3rem; height: 3rem'> *Nutrition Supplements Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnutrition_supplements' target='_blank'>nutrition_supplements</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Nuts Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dnuts' target='_blank'>nuts</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-optician.svg' style='width: 3rem; height: 3rem'> *Optician* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-compass.svg' style='width: 3rem; height: 3rem'> *Outdoors Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor' target='_blank'>outdoor</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Online Retailer Outpost* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutpost' target='_blank'>outpost</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-paint-roller.svg' style='width: 3rem; height: 3rem'> *Paint Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpaint' target='_blank'>paint</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-balloon.svg' style='width: 3rem; height: 3rem'> *Party Supply Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dparty' target='_blank'>party</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-plate-wheat.svg' style='width: 3rem; height: 3rem'> *Pasta Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpasta' target='_blank'>pasta</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-bakery.svg' style='width: 3rem; height: 3rem'> *Pastry Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpastry' target='_blank'>pastry</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-money_hand.svg' style='width: 3rem; height: 3rem'> *Pawnshop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpawnbroker' target='_blank'>pawnbroker</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-perfume.svg' style='width: 3rem; height: 3rem'> *Perfume Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dperfumery' target='_blank'>perfumery</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-cat.svg' style='width: 3rem; height: 3rem'> *Pet Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet' target='_blank'>pet</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-pet_grooming.svg' style='width: 3rem; height: 3rem'> *Pet Groomer* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpet_grooming' target='_blank'>pet_grooming</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-camera-retro.svg' style='width: 3rem; height: 3rem'> *Photography Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dphoto' target='_blank'>photo</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-vase.svg' style='width: 3rem; height: 3rem'> *Pottery Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpottery' target='_blank'>pottery</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-print.svg' style='width: 3rem; height: 3rem'> *Printer Ink Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dprinter_ink' target='_blank'>printer_ink</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-psychic.svg' style='width: 3rem; height: 3rem'> *Psychic* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpsychic' target='_blank'>psychic</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-rocket_firework.svg' style='width: 3rem; height: 3rem'> *Fireworks Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dpyrotechnics' target='_blank'>pyrotechnics</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-microchip.svg' style='width: 3rem; height: 3rem'> *Radio/Electronic Component Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dradiotechnics' target='_blank'>radiotechnics</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Religious Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dreligion' target='_blank'>religion</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-dolly.svg' style='width: 3rem; height: 3rem'> *Rental Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental' target='_blank'>rental</a>
+ -  *Repair Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Drepair' target='_blank'>repair</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-bowl-rice.svg' style='width: 3rem; height: 3rem'> *Rice Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Drice' target='_blank'>rice</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-scuba_diving.svg' style='width: 3rem; height: 3rem'> *Scuba Diving Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dscuba_diving' target='_blank'>scuba_diving</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-fish_cleaning.svg' style='width: 3rem; height: 3rem'> *Seafood Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dseafood' target='_blank'>seafood</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Thrift Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsecond_hand' target='_blank'>second_hand</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-needle_and_spool.svg' style='width: 3rem; height: 3rem'> *Sewing Supply Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsewing' target='_blank'>sewing</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-hammer_shoe.svg' style='width: 3rem; height: 3rem'> *Shoe Repair Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoe_repair' target='_blank'>shoe_repair</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shoe.svg' style='width: 3rem; height: 3rem'> *Shoe Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dshoes' target='_blank'>shoes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-spice_bottle.svg' style='width: 3rem; height: 3rem'> *Spice Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dspices' target='_blank'>spices</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-futbol.svg' style='width: 3rem; height: 3rem'> *Sporting Goods Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports' target='_blank'>sports</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-paperclip.svg' style='width: 3rem; height: 3rem'> *Stationery Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstationery' target='_blank'>stationery</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-storage_rental.svg' style='width: 3rem; height: 3rem'> *Storage Rental* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dstorage_rental' target='_blank'>storage_rental</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-grocery.svg' style='width: 3rem; height: 3rem'> *Supermarket* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsupermarket' target='_blank'>supermarket</a>
+ -  *Pool Supply Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dswimming_pool' target='_blank'>swimming_pool</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-needle_and_spool.svg' style='width: 3rem; height: 3rem'> *Tailor* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtailor' target='_blank'>tailor</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tattoo_machine.svg' style='width: 3rem; height: 3rem'> *Tattoo Parlor* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtattoo' target='_blank'>tattoo</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-teahouse.svg' style='width: 3rem; height: 3rem'> *Tea Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtea' target='_blank'>tea</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-telephone.svg' style='width: 3rem; height: 3rem'> *Telecom Retail Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtelecommunication' target='_blank'>telecommunication</a>
+ -  *Ticket Seller* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dticket' target='_blank'>ticket</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tiling.svg' style='width: 3rem; height: 3rem'> *Tile Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtiles' target='_blank'>tiles</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-pipe.svg' style='width: 3rem; height: 3rem'> *Tobacco Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtobacco' target='_blank'>tobacco</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tools.svg' style='width: 3rem; height: 3rem'> *Tool Rental* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtool_hire' target='_blank'>tool_hire</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-rocket.svg' style='width: 3rem; height: 3rem'> *Toy Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtoys' target='_blank'>toys</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tools.svg' style='width: 3rem; height: 3rem'> *Trade Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrade' target='_blank'>trade</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-suitcase.svg' style='width: 3rem; height: 3rem'> *Travel Agency* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtravel_agency' target='_blank'>travel_agency</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/fas-trophy.svg' style='width: 3rem; height: 3rem'> *Trophy Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtrophy' target='_blank'>trophy</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-tire.svg' style='width: 3rem; height: 3rem'> *Tire Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dtyres' target='_blank'>tyres</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-vacuum.svg' style='width: 3rem; height: 3rem'> *Vacuum Cleaner Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvacuum_cleaner' target='_blank'>vacuum_cleaner</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Discount Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvariety_store' target='_blank'>variety_store</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-movie_rental.svg' style='width: 3rem; height: 3rem'> *Video Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo' target='_blank'>video</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-gaming.svg' style='width: 3rem; height: 3rem'> *Video Game Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dvideo_games' target='_blank'>video_games</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-watch.svg' style='width: 3rem; height: 3rem'> *Watches Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwatches' target='_blank'>watches</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-water_bottle.svg' style='width: 3rem; height: 3rem'> *Drinking Water Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater' target='_blank'>water</a>
+ -  *Watersport/Swim Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwater_sports' target='_blank'>water_sports</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-dagger.svg' style='width: 3rem; height: 3rem'> *Weapon Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dweapons' target='_blank'>weapons</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-warehouse.svg' style='width: 3rem; height: 3rem'> *Wholesale Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwholesale' target='_blank'>wholesale</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-shop.svg' style='width: 3rem; height: 3rem'> *Wig Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwigs' target='_blank'>wigs</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/temaki-window.svg' style='width: 3rem; height: 3rem'> *Window Blind Store* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwindow_blind' target='_blank'>window_blind</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/id_presets/maki-alcohol-shop.svg' style='width: 3rem; height: 3rem'> *Wine Shop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dwine' target='_blank'>wine</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/shops/shop-disused.svg' style='width: 3rem; height: 3rem'> *This shop is no longer used. It is vacant* is shown if with disused:shop=
+
+This tagrendering has labels 
+`description`
+
 ### brand
 
 The question is `What is the brand of this shop?`
@@ -233,7 +427,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
@@ -287,6 +481,88 @@ The question is `Does this shop rent out bikes?`
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsport' target='_blank'>sport</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dsports' target='_blank'>sports</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_repair' target='_blank'>bicycle_repair</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doutdoor' target='_blank'>outdoor</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Drental' target='_blank'>rental</a> | service:bicycle:rental~.+
 
+### bicycle-types
+
+The question is `What kind of bicycles and accessories are rented here?`
+*{rental} is rented here* is shown if `rental` is set
+
+ -  *Normal city bikes can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcity_bike' target='_blank'>city_bike</a>
+ -  *Electrical bikes can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Debike' target='_blank'>ebike</a>
+ -  *BMX bikes can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbmx' target='_blank'>bmx</a>
+ -  *Mountainbikes can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dmtb' target='_blank'>mtb</a>
+ -  *Bikes for children can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dkid_bike' target='_blank'>kid_bike</a>
+ -  *Tandem bicycles can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dtandem' target='_blank'>tandem</a>
+ -  *Race bicycles can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dracebike' target='_blank'>racebike</a>
+ -  *Bike helmets can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dbike_helmet' target='_blank'>bike_helmet</a>
+ -  *Cargo bikes can be rented here* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:rental' target='_blank'>rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:rental%3Dcargo_bike' target='_blank'>cargo_bike</a>
+
+This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-city_bike
+
+The question is `How many city bikes can be rented here?`
+*{capacity:city_bike} city bikes can be rented here* is shown if `capacity:city_bike` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*city_bike.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-ebike
+
+The question is `How many electrical bikes can be rented here?`
+*{capacity:ebike} electrical bikes can be rented here* is shown if `capacity:ebike` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*ebike.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-kid_bike
+
+The question is `How many bikes for children can be rented here?`
+*{capacity:kid_bike} bikes for children can be rented here* is shown if `capacity:kid_bike` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*kid_bike.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-bmx
+
+The question is `How many BMX bikes can be rented here?`
+*{capacity:bmx} BMX bikes can be rented here* is shown if `capacity:bmx` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*bmx.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-mtb
+
+The question is `How many mountainbikes can be rented here?`
+*{capacity:mtb} mountainbikes can be rented here* is shown if `capacity:mtb` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*mtb.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-bicycle_pannier
+
+The question is `How many bicycle panniers can be rented here?`
+*{capacity:bicycle_pannier} bicycle panniers can be rented here* is shown if `capacity:bicycle_pannier` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*bicycle_pannier.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
+### rental-capacity-tandem_bicycle
+
+The question is `How many tandem can be rented here?`
+*{capacity:tandem_bicycle} tandem can be rented here* is shown if `capacity:tandem_bicycle` is set
+
+This tagrendering is only visible in the popup if the following condition is met: (<a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:rental' target='_blank'>service:bicycle:rental</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:rental%3Dyes' target='_blank'>yes</a> | bicycle_rental~.+) & rental~^(.*tandem_bicycle.*)$
+This tagrendering has labels 
+`bicycle_rental`
+
 ### bike_pump_service
 
 The question is `Does this shop offer a bike pump for use by anyone?`
@@ -317,6 +593,16 @@ The question is `Are bicycles washed here?`
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle' target='_blank'>bicycle</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dbicycle_repair' target='_blank'>bicycle_repair</a> | ^(service:bicycle:.*)$~~^(yes|only)$ | service:bicycle:cleaning~.+
 
+### bike_cleaning-service_bicycle_cleaning_charge
+
+The question is `How much does it cost to use the cleaning service?`
+*Using the cleaning service costs {service:bicycle:cleaning:charge}* is shown if `service:bicycle:cleaning:charge` is set
+
+ -  *The cleaning service is free to use* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:fee' target='_blank'>service:bicycle:cleaning:fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning:fee%3Dno' target='_blank'>no</a>
+ -  *Free to use* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:service:bicycle:cleaning:fee' target='_blank'>service:bicycle:cleaning:fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:service:bicycle:cleaning:fee%3Dyes' target='_blank'>yes</a> & service:bicycle:cleaning:charge=. _This option cannot be chosen as answer_
+
+This tagrendering is only visible in the popup if the following condition is met: amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+
+
 ### internet
 
 The question is `Does this place offer internet access?`
diff --git a/Docs/Layers/campsite.md b/Docs/Layers/campsite.md
new file mode 100644
index 000000000..ae9c3bbba
--- /dev/null
+++ b/Docs/Layers/campsite.md
@@ -0,0 +1,155 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# campsite
+
+Campsites
+
+ - This layer is shown at zoomlevel **7** and higher
+
+## Table of contents
+
+1. [Themes using this layer](#themes-using-this-layer)
+2. [Presets](#presets)
+3. [Basic tags for this layer](#basic-tags-for-this-layer)
+4. [Supported attributes](#supported-attributes)
+  - [group_only](#group_only)
+  - [name](#name)
+  - [fee](#fee)
+  - [capacity_persons](#capacity_persons)
+  - [phone](#phone)
+  - [email](#email)
+  - [website](#website)
+  - [questions](#questions)
+  - [mastodon](#mastodon)
+  - [images](#images)
+  - [lod](#lod)
+5. [Filters](#filters)
+
+## Themes using this layer
+
+ - [personal](https://mapcomplete.org/personal)
+ - [scouting](https://mapcomplete.org/scouting)
+
+## Presets
+
+The following options to create new points are included:
+
+ - **campsite** which has the following tags:<a href='https://wiki.openstreetmap.org/wiki/Key:tourism' target='_blank'>tourism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:tourism%3Dcamp_site' target='_blank'>camp_site</a>
+ - **campsite for groups** which has the following tags:<a href='https://wiki.openstreetmap.org/wiki/Key:tourism' target='_blank'>tourism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:tourism%3Dcamp_site' target='_blank'>camp_site</a> & <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes' target='_blank'>yes</a>
+
+## Basic tags for this layer
+
+Elements must match the expression **<a href='https://wiki.openstreetmap.org/wiki/Key:tourism' target='_blank'>tourism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:tourism%3Dcamp_site' target='_blank'>camp_site</a>**
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
+
+## Supported attributes
+
+**Warning:**,this quick overview is incomplete,
+
+| attribute | type | values which are supported by this layer |
+-----|-----|----- |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/group_only#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/group_only/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [group_only](https://wiki.openstreetmap.org/wiki/Key:group_only) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/name#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/name/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/charge#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/charge/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:persons#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Apersons/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:persons](https://wiki.openstreetmap.org/wiki/Key:capacity:persons) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/contact:mastodon#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/contact%3Amastodon/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) |  |
+
+### group_only
+
+The question is `Is this campsite exclusively for groups?`
+
+ -  *This campsite is exclusively for groups* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes' target='_blank'>yes</a>
+ -  *This campsite is not exclusively for groups* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno' target='_blank'>no</a>
+
+### name
+
+The question is `What is the name of this campsite?`
+*The name of this campsite is {name}* is shown if `name` is set
+
+### fee
+
+The question is `Is a fee charged here?`
+*A fee of {charge} should be paid for here* is shown if `charge` is set
+
+ -  *The campsite is free of charge* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno' target='_blank'>no</a>
+ -  *A fee is charged here.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes' target='_blank'>yes</a> & charge=
+
+### capacity_persons
+
+The question is `How many people can stay here?`
+*{capacity:persons} people can stay here* is shown if `capacity:persons` is set
+
+### phone
+
+The question is `What is the phone number of {title()}?`
+*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/questions/phone.svg' style='width: 3rem; height: 3rem'> *{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### email
+
+The question is `What is the email address of {title()}?`
+*<a href='mailto:{email}' target='_blank' rel='noopener'>{email}</a>* is shown if `email` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/svg/envelope.svg' style='width: 3rem; height: 3rem'> *<a href='mailto:{contact:email}' target='_blank' rel='noopener'>{contact:email}</a>* is shown if with contact:email~.+. _This option cannot be chosen as answer_
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/svg/envelope.svg' style='width: 3rem; height: 3rem'> *<a href='mailto:{operator:email}' target='_blank' rel='noopener'>{operator:email}</a>* is shown if with operator:email~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### website
+
+The question is `What is the website of {title()}?`
+*<a href='{website}' rel='nofollow noopener noreferrer' target='_blank'>{website}</a>* is shown if `website` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/icons/website.svg' style='width: 3rem; height: 3rem'> *<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>* is shown if with contact:website~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### questions
+Show the questions block at this location
+_This tagrendering has no question and is thus read-only_
+*{questions()}*
+
+### mastodon
+Shows and asks for the mastodon handle
+The question is `What is the Mastodon-handle of {title()}?`
+*{fediverse_link(contact:mastodon)}* is shown if `contact:mastodon` is set
+
+### images
+This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
+_This tagrendering has no question and is thus read-only_
+*{image_carousel()}{image_upload()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels 
+`added_by_default`
+
+## Filters
+
+| id | question | osmTags |
+-----|-----|----- |
+| capacity_persons_filter.0 | *All capacities* (default) |  |
+| capacity_persons_filter.1 | Capacity between 1 and 20 persons | capacity:persons>=1 & capacity:persons<=20 |
+| capacity_persons_filter.2 | Capacity between 21 and 50 persons | capacity:persons>=21 & capacity:persons<=50 |
+| capacity_persons_filter.3 | Capacity between 51 and 100 persons | capacity:persons>=51 & capacity:persons<=100 |
+| capacity_persons_filter.4 | Capacity between 101 and 200 persons | capacity:persons>=101 & capacity:persons<=200 |
+| capacity_persons_filter.5 | Capacity between 201 and 500 persons | capacity:persons>=201 & capacity:persons<=500 |
+| capacity_persons_filter.6 | Capacity over 500 persons | capacity:persons>=501 |
+| capacity_persons_filter.7 | ? | capacity:persons= |
+
+
+
+This document is autogenerated from [assets/layers/campsite/campsite.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/campsite/campsite.json)
diff --git a/Docs/Layers/dentist.md b/Docs/Layers/dentist.md
index 4dcd7fe37..73feffedc 100644
--- a/Docs/Layers/dentist.md
+++ b/Docs/Layers/dentist.md
@@ -18,6 +18,11 @@ This layer shows dentist offices
   - [phone](#phone)
   - [email](#email)
   - [website](#website)
+  - [address_joined](#address_joined)
+  - [header](#header)
+  - [housenumber](#housenumber)
+  - [street](#street)
+  - [unit](#unit)
   - [name](#name)
   - [leftover-questions](#leftover-questions)
   - [move-button](#move-button)
@@ -52,6 +57,10 @@ Elements must match the expression **<a href='https://wiki.openstreetmap.org/wik
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/name#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/name/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |  |
 
 ### images
@@ -97,6 +106,56 @@ The question is `What is the website of {title()}?`
 This tagrendering has labels 
 `contact`
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### housenumber
+
+The question is `What is the number of this house?`
+*The house number is <b>{addr:housenumber}</b>* is shown if `addr:housenumber` is set
+
+ -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### street
+
+The question is `What street is this address located in?`
+*This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### name
 
 The question is `What is the name of this dentist?`
diff --git a/Docs/Layers/doctors.md b/Docs/Layers/doctors.md
index 13f87139d..98964dd80 100644
--- a/Docs/Layers/doctors.md
+++ b/Docs/Layers/doctors.md
@@ -19,6 +19,11 @@ This layer shows doctor offices
   - [phone](#phone)
   - [email](#email)
   - [website](#website)
+  - [address_joined](#address_joined)
+  - [header](#header)
+  - [housenumber](#housenumber)
+  - [street](#street)
+  - [unit](#unit)
   - [specialty](#specialty)
   - [leftover-questions](#leftover-questions)
   - [move-button](#move-button)
@@ -56,6 +61,10 @@ Elements must match the expression **<a href='https://wiki.openstreetmap.org/wik
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/healthcare:speciality#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/healthcare%3Aspeciality/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [healthcare:speciality](https://wiki.openstreetmap.org/wiki/Key:healthcare:speciality) | [string](../SpecialInputElements.md#string) | [general](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dgeneral) [gynaecology](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dgynaecology) [psychiatry](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dpsychiatry) [paediatrics](https://wiki.openstreetmap.org/wiki/Tag:healthcare:speciality%3Dpaediatrics) |
 
 ### images
@@ -108,6 +117,56 @@ The question is `What is the website of {title()}?`
 This tagrendering has labels 
 `contact`
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### housenumber
+
+The question is `What is the number of this house?`
+*The house number is <b>{addr:housenumber}</b>* is shown if `addr:housenumber` is set
+
+ -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### street
+
+The question is `What street is this address located in?`
+*This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### specialty
 
 The question is `What is this doctor specialized in?`
@@ -150,10 +209,10 @@ This tagrendering has labels
 | id | question | osmTags |
 -----|-----|----- |
 | specialty.0 | *What is this doctor specialized in?* (default) |  |
-| specialty.1 | This is a general practitioner | healthcare:speciality~^(.+;)?general(;.+)$ |
-| specialty.2 | This is a gynaecologist | healthcare:speciality~^(.+;)?gynaecology(;.+)$ |
-| specialty.3 | This is a psychiatrist | healthcare:speciality~^(.+;)?psychiatry(;.+)$ |
-| specialty.4 | This is a paediatrician | healthcare:speciality~^(.+;)?paediatrics(;.+)$ |
+| specialty.1 | This is a general practitioner | healthcare:speciality~^(^(.+;)?general(;.+)?$)$ |
+| specialty.2 | This is a gynaecologist | healthcare:speciality~^(^(.+;)?gynaecology(;.+)?$)$ |
+| specialty.3 | This is a psychiatrist | healthcare:speciality~^(^(.+;)?psychiatry(;.+)?$)$ |
+| specialty.4 | This is a paediatrician | healthcare:speciality~^(^(.+;)?paediatrics(;.+)?$)$ |
 
 
 
diff --git a/Docs/Layers/group_campsite.md b/Docs/Layers/group_campsite.md
new file mode 100644
index 000000000..d3ac3cbd6
--- /dev/null
+++ b/Docs/Layers/group_campsite.md
@@ -0,0 +1,151 @@
+[//]: # (WARNING: this file is automatically generated. Please find the sources at the bottom and edit those sources)
+
+# group_campsite
+
+This layer is based on [campsite](../Layers/campsite.md)
+
+Campsites
+
+ - This layer is shown at zoomlevel **7** and higher
+
+## Table of contents
+
+1. [Themes using this layer](#themes-using-this-layer)
+2. [Basic tags for this layer](#basic-tags-for-this-layer)
+3. [Supported attributes](#supported-attributes)
+  - [group_only](#group_only)
+  - [name](#name)
+  - [fee](#fee)
+  - [capacity_persons](#capacity_persons)
+  - [phone](#phone)
+  - [email](#email)
+  - [website](#website)
+  - [questions](#questions)
+  - [mastodon](#mastodon)
+  - [images](#images)
+  - [lod](#lod)
+4. [Filters](#filters)
+
+## Themes using this layer
+
+ - [scouting](https://mapcomplete.org/scouting)
+
+## Basic tags for this layer
+
+Elements must match **all** of the following expressions:
+
+0. <a href='https://wiki.openstreetmap.org/wiki/Key:tourism' target='_blank'>tourism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:tourism%3Dcamp_site' target='_blank'>camp_site</a>
+1. <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes' target='_blank'>yes</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:scout' target='_blank'>scout</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:scout%3Dyes' target='_blank'>yes</a>
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
+
+## Supported attributes
+
+**Warning:**,this quick overview is incomplete,
+
+| attribute | type | values which are supported by this layer |
+-----|-----|----- |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/group_only#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/group_only/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [group_only](https://wiki.openstreetmap.org/wiki/Key:group_only) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/name#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/name/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/charge#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/charge/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:persons#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Apersons/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:persons](https://wiki.openstreetmap.org/wiki/Key:capacity:persons) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/contact:mastodon#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/contact%3Amastodon/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) |  |
+
+### group_only
+
+The question is `Is this campsite exclusively for groups?`
+
+ -  *This campsite is exclusively for groups* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes' target='_blank'>yes</a>
+ -  *This campsite is not exclusively for groups* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno' target='_blank'>no</a>
+
+### name
+
+The question is `What is the name of this campsite?`
+*The name of this campsite is {name}* is shown if `name` is set
+
+### fee
+
+The question is `Is a fee charged here?`
+*A fee of {charge} should be paid for here* is shown if `charge` is set
+
+ -  *The campsite is free of charge* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno' target='_blank'>no</a>
+ -  *A fee is charged here.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes' target='_blank'>yes</a> & charge=
+
+### capacity_persons
+
+The question is `How many people can stay here?`
+*{capacity:persons} people can stay here* is shown if `capacity:persons` is set
+
+### phone
+
+The question is `What is the phone number of {title()}?`
+*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/questions/phone.svg' style='width: 3rem; height: 3rem'> *{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### email
+
+The question is `What is the email address of {title()}?`
+*<a href='mailto:{email}' target='_blank' rel='noopener'>{email}</a>* is shown if `email` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/svg/envelope.svg' style='width: 3rem; height: 3rem'> *<a href='mailto:{contact:email}' target='_blank' rel='noopener'>{contact:email}</a>* is shown if with contact:email~.+. _This option cannot be chosen as answer_
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/svg/envelope.svg' style='width: 3rem; height: 3rem'> *<a href='mailto:{operator:email}' target='_blank' rel='noopener'>{operator:email}</a>* is shown if with operator:email~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### website
+
+The question is `What is the website of {title()}?`
+*<a href='{website}' rel='nofollow noopener noreferrer' target='_blank'>{website}</a>* is shown if `website` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/icons/website.svg' style='width: 3rem; height: 3rem'> *<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>* is shown if with contact:website~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### questions
+Show the questions block at this location
+_This tagrendering has no question and is thus read-only_
+*{questions()}*
+
+### mastodon
+Shows and asks for the mastodon handle
+The question is `What is the Mastodon-handle of {title()}?`
+*{fediverse_link(contact:mastodon)}* is shown if `contact:mastodon` is set
+
+### images
+This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
+_This tagrendering has no question and is thus read-only_
+*{image_carousel()}{image_upload()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels 
+`added_by_default`
+
+## Filters
+
+| id | question | osmTags |
+-----|-----|----- |
+| capacity_persons_filter.0 | *All capacities* (default) |  |
+| capacity_persons_filter.1 | Capacity between 1 and 20 persons | capacity:persons>=1 & capacity:persons<=20 |
+| capacity_persons_filter.2 | Capacity between 21 and 50 persons | capacity:persons>=21 & capacity:persons<=50 |
+| capacity_persons_filter.3 | Capacity between 51 and 100 persons | capacity:persons>=51 & capacity:persons<=100 |
+| capacity_persons_filter.4 | Capacity between 101 and 200 persons | capacity:persons>=101 & capacity:persons<=200 |
+| capacity_persons_filter.5 | Capacity between 201 and 500 persons | capacity:persons>=201 & capacity:persons<=500 |
+| capacity_persons_filter.6 | Capacity over 500 persons | capacity:persons>=501 |
+| capacity_persons_filter.7 | ? | capacity:persons= |
+
+
+
+This document is autogenerated from [assets/themes/scouting/scouting.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/scouting/scouting.json)
diff --git a/Docs/Layers/hospital.md b/Docs/Layers/hospital.md
index 8ea93d440..fa31e7e7b 100644
--- a/Docs/Layers/hospital.md
+++ b/Docs/Layers/hospital.md
@@ -16,6 +16,11 @@ A layer showing hospital grounds
   - [phone](#phone)
   - [email](#email)
   - [website](#website)
+  - [address_joined](#address_joined)
+  - [header](#header)
+  - [housenumber](#housenumber)
+  - [street](#street)
+  - [unit](#unit)
   - [oh-visitor](#oh-visitor)
   - [Opening hours for visitors](#opening-hours-for-visitors)
   - [leftover-questions](#leftover-questions)
@@ -49,6 +54,10 @@ Elements must match **any** of the following expressions:
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/opening_hours:visitors#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/opening_hours%3Avisitors/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [opening_hours:visitors](https://wiki.openstreetmap.org/wiki/Key:opening_hours:visitors) | [opening_hours](../SpecialInputElements.md#opening_hours) |  |
 
 ### name
@@ -94,6 +103,56 @@ The question is `What is the website of {title()}?`
 This tagrendering has labels 
 `contact`
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### housenumber
+
+The question is `What is the number of this house?`
+*The house number is <b>{addr:housenumber}</b>* is shown if `addr:housenumber` is set
+
+ -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### street
+
+The question is `What street is this address located in?`
+*This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### oh-visitor
 
 The question is `When are visitors allowed to visit?`
diff --git a/Docs/Layers/medical_shops.md b/Docs/Layers/medical_shops.md
index acd11d412..edeac7e62 100644
--- a/Docs/Layers/medical_shops.md
+++ b/Docs/Layers/medical_shops.md
@@ -427,7 +427,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/memorial.md b/Docs/Layers/memorial.md
index 9b38a13a2..59606c9cd 100644
--- a/Docs/Layers/memorial.md
+++ b/Docs/Layers/memorial.md
@@ -136,8 +136,8 @@ The question is `When was this memorial installed?`
 The question is `Does this bench have a backrest?`
 
  - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/two_sided.svg' style='width: 3rem; height: 3rem'> *This bench is two-sided and shares the backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a> & <a href='https://wiki.openstreetmap.org/wiki/Key:two_sided' target='_blank'>two_sided</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:two_sided%3Dyes' target='_blank'>yes</a>
- -  *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
- -  *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/one_sided.svg' style='width: 3rem; height: 3rem'> *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/no_backrest.svg' style='width: 3rem; height: 3rem'> *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbench' target='_blank'>bench</a>
 This tagrendering has labels 
diff --git a/Docs/Layers/named_streets.md b/Docs/Layers/named_streets.md
index 2ceda7d43..6526280d8 100644
--- a/Docs/Layers/named_streets.md
+++ b/Docs/Layers/named_streets.md
@@ -10,7 +10,6 @@ Hidden layer with all streets which have a name. Useful to detect addresses
  - This layer is not visible by default and the visibility cannot be toggled, effectively resulting in a fully hidden layer. This can be useful, e.g. to calculate some metatags. If you want to render this layer (e.g. for debugging), enable it by setting the URL-parameter layer-<id>=true
  - Not visible in the layer selection by default. If you want to make this layer toggable, override `name`
  - Not rendered on the map by default. If you want to rendering this on the map, override `mapRenderings`
- - This layer is needed as dependency for layer [address](#address)
 
 ## Table of contents
 
@@ -20,7 +19,6 @@ Hidden layer with all streets which have a name. Useful to detect addresses
 
 ## Themes using this layer
 
- - [grb](https://mapcomplete.org/grb)
  - [uk_addresses](https://mapcomplete.org/uk_addresses)
 
 ## Basic tags for this layer
diff --git a/Docs/Layers/pharmacy.md b/Docs/Layers/pharmacy.md
index 1c303f2d2..9157bed2d 100644
--- a/Docs/Layers/pharmacy.md
+++ b/Docs/Layers/pharmacy.md
@@ -20,6 +20,11 @@ A layer showing pharmacies, which (probably) dispense prescription drugs
   - [phone](#phone)
   - [email](#email)
   - [website](#website)
+  - [address_joined](#address_joined)
+  - [header](#header)
+  - [housenumber](#housenumber)
+  - [street](#street)
+  - [unit](#unit)
   - [payment-options](#payment-options)
   - [wheelchair](#wheelchair)
   - [leftover-questions](#leftover-questions)
@@ -59,6 +64,10 @@ Elements must match the expression **<a href='https://wiki.openstreetmap.org/wik
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 
 ### images
 This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
@@ -113,6 +122,56 @@ The question is `What is the website of {title()}?`
 This tagrendering has labels 
 `contact`
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### housenumber
+
+The question is `What is the number of this house?`
+*The house number is <b>{addr:housenumber}</b>* is shown if `addr:housenumber` is set
+
+ -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### street
+
+The question is `What street is this address located in?`
+*This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### payment-options
 
 The question is `Which methods of payment are accepted here?`
diff --git a/Docs/Layers/physiotherapist.md b/Docs/Layers/physiotherapist.md
index b1446f296..3cf2d61a3 100644
--- a/Docs/Layers/physiotherapist.md
+++ b/Docs/Layers/physiotherapist.md
@@ -19,6 +19,11 @@ This layer shows physiotherapists
   - [phone](#phone)
   - [email](#email)
   - [website](#website)
+  - [address_joined](#address_joined)
+  - [header](#header)
+  - [housenumber](#housenumber)
+  - [street](#street)
+  - [unit](#unit)
   - [leftover-questions](#leftover-questions)
   - [move-button](#move-button)
   - [delete-button](#delete-button)
@@ -53,6 +58,10 @@ Elements must match the expression **<a href='https://wiki.openstreetmap.org/wik
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 
 ### images
 This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
@@ -104,6 +113,56 @@ The question is `What is the website of {title()}?`
 This tagrendering has labels 
 `contact`
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### housenumber
+
+The question is `What is the number of this house?`
+*The house number is <b>{addr:housenumber}</b>* is shown if `addr:housenumber` is set
+
+ -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### street
+
+The question is `What street is this address located in?`
+*This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### leftover-questions
 
 _This tagrendering has no question and is thus read-only_
diff --git a/Docs/Layers/school.md b/Docs/Layers/school.md
index 79e2be34a..ea5b3dfc8 100644
--- a/Docs/Layers/school.md
+++ b/Docs/Layers/school.md
@@ -19,13 +19,21 @@ Schools giving primary and secondary education and post-secondary, non-tertiary
   - [phone](#phone)
   - [email](#email)
   - [website](#website)
+  - [address_joined](#address_joined)
+  - [header](#header)
+  - [housenumber](#housenumber)
+  - [street](#street)
+  - [unit](#unit)
   - [capacity](#capacity)
   - [education-level-belgium](#education-level-belgium)
+  - [is_special_needs](#is_special_needs)
   - [orientation_belgium](#orientation_belgium)
+  - [orientation_belgium_special_needs](#orientation_belgium_special_needs)
   - [gender](#gender)
   - [pedagogy](#pedagogy)
-  - [target-audience](#target-audience)
+  - [special_needs_categories_be](#special_needs_categories_be)
   - [school-language](#school-language)
+  - [wikipedia](#wikipedia)
   - [leftover-questions](#leftover-questions)
   - [move-button](#move-button)
   - [lod](#lod)
@@ -62,12 +70,18 @@ Elements must match **any** of the following expressions:
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | Multiple choice | [](https://wiki.openstreetmap.org/wiki/Tag:addr:street%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:housenumber#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Ahousenumber/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:housenumber](https://wiki.openstreetmap.org/wiki/Key:addr:housenumber) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:street#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Astreet/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:street](https://wiki.openstreetmap.org/wiki/Key:addr:street) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/addr:unit#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/addr%3Aunit/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [addr:unit](https://wiki.openstreetmap.org/wiki/Key:addr:unit) | [string](../SpecialInputElements.md#string) | [](https://wiki.openstreetmap.org/wiki/Tag:addr:unit%3D) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity](https://wiki.openstreetmap.org/wiki/Key:capacity) | [pnat](../SpecialInputElements.md#pnat) |  |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/school#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/school/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [school](https://wiki.openstreetmap.org/wiki/Key:school) | Multiple choice | [kindergarten](https://wiki.openstreetmap.org/wiki/Tag:school%3Dkindergarten) [primary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dprimary) [secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dsecondary) [lower_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dlower_secondary) [middle_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dmiddle_secondary) [upper_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dupper_secondary) [post_secondary](https://wiki.openstreetmap.org/wiki/Tag:school%3Dpost_secondary) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/school:special_needs#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/school%3Aspecial_needs/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [school:special_needs](https://wiki.openstreetmap.org/wiki/Key:school:special_needs) | Multiple choice | [only](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Donly) [separated](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dseparated) [mixed](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dmixed) [limited](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dlimited) [no](https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dno) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/school:orientation#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/school%3Aorientation/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [school:orientation](https://wiki.openstreetmap.org/wiki/Key:school:orientation) | Multiple choice | [academic](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dacademic) [professional](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dprofessional) [vocational](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dvocational) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/school:orientation#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/school%3Aorientation/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [school:orientation](https://wiki.openstreetmap.org/wiki/Key:school:orientation) | Multiple choice | [care_institution](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dcare_institution) [sheltered_workshop](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dsheltered_workshop) [vocational](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dvocational) [professional](https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dprofessional) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/school:gender#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/school%3Agender/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [school:gender](https://wiki.openstreetmap.org/wiki/Key:school:gender) | Multiple choice | [mixed](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmixed) [separated](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dseparated) [male](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dmale) [female](https://wiki.openstreetmap.org/wiki/Tag:school:gender%3Dfemale) |
 | <a target="_blank" href='https://taginfo.openstreetmap.org/keys/pedagogy#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/pedagogy/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [pedagogy](https://wiki.openstreetmap.org/wiki/Key:pedagogy) | [string](../SpecialInputElements.md#string) | [mainstream](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dmainstream) [montessori](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dmontessori) [freinet](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dfreinet) [jenaplan](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Djenaplan) [waldorf](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dwaldorf) [dalton](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Ddalton) [outdoor](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Doutdoor) [reggio_emilia](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dreggio_emilia) [sudbury](https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dsudbury) |
-| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/school:for#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/school%3Afor/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [school:for](https://wiki.openstreetmap.org/wiki/Key:school:for) | [string](../SpecialInputElements.md#string) | [mainstream](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dmainstream) [learning_disabilities](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dlearning_disabilities) [blind](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dblind) [deaf](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Ddeaf) [disabilities](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Ddisabilities) [special_needs](https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dspecial_needs) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/wikidata#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/wikidata/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [wikidata](https://wiki.openstreetmap.org/wiki/Key:wikidata) | [wikidata](../SpecialInputElements.md#wikidata) |  |
 
 ### images
 This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
@@ -110,6 +124,56 @@ The question is `What is the website of {title()}?`
 This tagrendering has labels 
 `contact`
 
+### address_joined
+
+_This tagrendering has no question and is thus read-only_
+*{group(header,street;housenumber;unit)}*
+
+This tagrendering has labels 
+`address`
+
+### header
+
+_This tagrendering has no question and is thus read-only_
+*{addr:street} <b>{addr:housenumber}</b> {addr:unit}*
+
+ -  *No address is known* is shown if with addr:street= & addr:unit= & addr:housenumber=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### housenumber
+
+The question is `What is the number of this house?`
+*The house number is <b>{addr:housenumber}</b>* is shown if `addr:housenumber` is set
+
+ -  *This building has no house number* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:nohousenumber' target='_blank'>nohousenumber</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:nohousenumber%3Dyes' target='_blank'>yes</a>
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### street
+
+The question is `What street is this address located in?`
+*This address is in street <b>{addr:street}</b>* is shown if `addr:street` is set
+
+This tagrendering has labels 
+`address`
+`hidden`
+
+### unit
+
+The question is `What is the unit number or letter?`
+*The unit number is <b>{addr:unit}</b>* is shown if `addr:unit` is set
+
+ -  *No unit number* is shown if with addr:unit=
+
+This tagrendering has labels 
+`address`
+`hidden`
+
 ### capacity
 
 The question is `How much students can at most enroll in this school?`
@@ -129,6 +193,17 @@ The question is `What level of education is given on this school?`
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:_country' target='_blank'>_country</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:_country%3Dbe' target='_blank'>be</a>
 
+### is_special_needs
+
+The question is `Does this school target students with a special need?`
+
+ -  *This school is only for special need students; a certificate is needed to enroll* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Donly' target='_blank'>only</a>
+ -  *This school has a separate section for special need students.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dseparated' target='_blank'>separated</a>
+ -  *Students with special needs and non-special need students have classes together.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dmixed' target='_blank'>mixed</a>
+ -  *This school offers limited, ad hoc support but has no significant expertise and is not considered a special needs school.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dlimited' target='_blank'>limited</a>
+ -  *This school has no support for special need students.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dno' target='_blank'>no</a>
+ -  *This school is for special need students.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dyes' target='_blank'>yes</a>. _This option cannot be chosen as answer_
+
 ### orientation_belgium
 
 The question is `What does this school train pupils for?`
@@ -137,7 +212,18 @@ The question is `What does this school train pupils for?`
  -  *Prepares for a professional study at a college* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:orientation' target='_blank'>school:orientation</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dprofessional' target='_blank'>professional</a>
  -  *Prepares for a job* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:orientation' target='_blank'>school:orientation</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dvocational' target='_blank'>vocational</a>
 
-This tagrendering is only visible in the popup if the following condition is met: school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$
+This tagrendering is only visible in the popup if the following condition is met: (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (<a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dno' target='_blank'>no</a> | school:special_needs= | <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dlimited' target='_blank'>limited</a>)
+
+### orientation_belgium_special_needs
+
+The question is `What does this school train pupils for?`
+
+ -  *<b>Training type 1</b>: trains elementary life skills to live in an institution. There is no intention to do a (paid) job after training* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:orientation' target='_blank'>school:orientation</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dcare_institution' target='_blank'>care_institution</a>
+ -  *<b>Training type 2</b>: prepares to work in an environment with extra care and facilities such as a sheltered workshop* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:orientation' target='_blank'>school:orientation</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dsheltered_workshop' target='_blank'>sheltered_workshop</a>
+ -  *<b>Training type 3</b>: prepares for a job and a (more-or-less) independent life in society* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:orientation' target='_blank'>school:orientation</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dvocational' target='_blank'>vocational</a>
+ -  *<b>Training type 4</b>: prepares for a job or continued education* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:orientation' target='_blank'>school:orientation</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:orientation%3Dprofessional' target='_blank'>professional</a>
+
+This tagrendering is only visible in the popup if the following condition is met: (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (<a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Dyes' target='_blank'>yes</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:school:special_needs' target='_blank'>school:special_needs</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:special_needs%3Donly' target='_blank'>only</a>)
 
 ### gender
 
@@ -163,23 +249,34 @@ The question is `What educational theory is applied on this school?`
  -  *This school uses the Reggio Emilia approach* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:pedagogy' target='_blank'>pedagogy</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dreggio_emilia' target='_blank'>reggio_emilia</a>
  -  *This school uses the Sudbury system* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:pedagogy' target='_blank'>pedagogy</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:pedagogy%3Dsudbury' target='_blank'>sudbury</a>
 
-### target-audience
+### special_needs_categories_be
 
-The question is `Does this school target students with a special need? Which structural facilities does this school have?`
-*This school has facilities for students with {school:for}* is shown if `school:for` is set
+The question is `What type of special needs are given here?`
 
- -  *This is a school for students without special needs<div class='subtle'>This includes students who can follow the courses with small, ad hoc measurements</div>* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:for' target='_blank'>school:for</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dmainstream' target='_blank'>mainstream</a>
- -  *This is a school for students with learning disabilities* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:for' target='_blank'>school:for</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dlearning_disabilities' target='_blank'>learning_disabilities</a>
- -  *This is a school for blind students or students with sight impairments* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:for' target='_blank'>school:for</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dblind' target='_blank'>blind</a>
- -  *This is a school for deaf students or students with hearing impairments* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:for' target='_blank'>school:for</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:for%3Ddeaf' target='_blank'>deaf</a>
- -  *This is a school for students with disabilities* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:for' target='_blank'>school:for</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:for%3Ddisabilities' target='_blank'>disabilities</a>
- -  *This is a school for students with special needs* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:school:for' target='_blank'>school:for</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:school:for%3Dspecial_needs' target='_blank'>special_needs</a>
+ -  *For students with an intellectual disability (type 2)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:intellectual_disability' target='_blank'>special_needs:intellectual_disability</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:intellectual_disability%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:intellectual_disability' target='_blank'>special_needs:intellectual_disability</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:intellectual_disability%3Dno' target='_blank'>no</a>
+ -  *For students with an emotional and behavioural problem (type 3)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:emotional_behavioural_disorder' target='_blank'>special_needs:emotional_behavioural_disorder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:emotional_behavioural_disorder%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:emotional_behavioural_disorder' target='_blank'>special_needs:emotional_behavioural_disorder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:emotional_behavioural_disorder%3Dno' target='_blank'>no</a>
+ -  *For students with an physical disability (type 4)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:physical_disability' target='_blank'>special_needs:physical_disability</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:physical_disability%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:physical_disability' target='_blank'>special_needs:physical_disability</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:physical_disability%3Dno' target='_blank'>no</a>
+ -  *For blind and visually impaired students (type 6)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:blind' target='_blank'>special_needs:blind</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:blind%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:blind' target='_blank'>special_needs:blind</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:blind%3Dno' target='_blank'>no</a>
+ -  *For deaf students and students with hearing loss (type 7)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:deaf' target='_blank'>special_needs:deaf</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:deaf%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:deaf' target='_blank'>special_needs:deaf</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:deaf%3Dno' target='_blank'>no</a>
+ -  *For students with a Developemental Language Disorder (type 7 - DLD)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:language_disorder' target='_blank'>special_needs:language_disorder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:language_disorder%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:language_disorder' target='_blank'>special_needs:language_disorder</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:language_disorder%3Dno' target='_blank'>no</a>
+ -  *For students with an autism spectrum disorder (type 9)* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:autism' target='_blank'>special_needs:autism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:autism%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:autism' target='_blank'>special_needs:autism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:autism%3Dno' target='_blank'>no</a>
+ -  *For students with a learning disability (basic offering )* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:learning_disabilities' target='_blank'>special_needs:learning_disabilities</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:learning_disabilities%3Dyes' target='_blank'>yes</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:special_needs:learning_disabilities' target='_blank'>special_needs:learning_disabilities</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:special_needs:learning_disabilities%3Dno' target='_blank'>no</a>
+
+This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:_country' target='_blank'>_country</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:_country%3Dbe' target='_blank'>be</a> & school:special_needs!~^(no)$ & school:special_needs~.+
 
 ### school-language
 
 _This tagrendering has no question and is thus read-only_
 *{language_chooser(language,What is the main language of this school?<div class='subtle'>What language is spoken with the students in non-language related courses and with the administration?</div>,,&LBRACElanguage&LPARENS&RPARENS&RBRACE is the main language of this school,The following languages are used in this school:&LBRACElist&LPARENS&RPARENS&RBRACE,The main language of this school is unknown)}*
 
+### wikipedia
+Shows a wikipedia box with the corresponding wikipedia article; the wikidata-item link can be changed by a contributor
+The question is `What is the corresponding Wikidata entity?`
+*{wikipedia():max-height:25rem}* is shown if `wikidata` is set
+
+ -  *{wikipedia():max-height:25rem}* is shown if with wikipedia~.+. _This option cannot be chosen as answer_
+ -  *No Wikipedia page has been linked yet* is shown if with wikidata=. _This option cannot be chosen as answer_
+
 ### leftover-questions
 
 _This tagrendering has no question and is thus read-only_
@@ -225,6 +322,19 @@ This tagrendering has labels
 | level.7 | This school offers post-secondary education (e.g. a seventh or eight specialisation year) | school~^(.+;)?post_secondary(;.+)$ |
 | level.8 | Unknown school level | school= & amenity!=kindergarten |
 
+| id | question | osmTags |
+-----|-----|----- |
+| has_special_needs.0 | *Does this school have special need education?* (default) |  |
+| has_special_needs.1 | Has special education | school:special_needs~.+ & school:special_needs!=no |
+| has_special_needs.2 | No or limited special need education | school:special_needs= | school:special_needs=no | school:special_needs=limited |
+
+| id | question | osmTags |
+-----|-----|----- |
+| orientation_belgium.0 | *What does this school train pupils for?* (default) |  |
+| orientation_belgium.1 | Prepares for an academic study at university | school:orientation~^(^(.+;)?academic(;.+)?$)$ |
+| orientation_belgium.2 | Prepares for a professional study at a college | school:orientation~^(^(.+;)?professional(;.+)?$)$ |
+| orientation_belgium.3 | Prepares for a job | school:orientation~^(^(.+;)?vocational(;.+)?$)$ |
+
 
 
 This document is autogenerated from [assets/layers/school/school.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/layers/school/school.json)
diff --git a/Docs/Layers/shop_dog_friendly.md b/Docs/Layers/shop_dog_friendly.md
index 820dac11d..8208f3c85 100644
--- a/Docs/Layers/shop_dog_friendly.md
+++ b/Docs/Layers/shop_dog_friendly.md
@@ -419,7 +419,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/shops.md b/Docs/Layers/shops.md
index a339dbfdb..f6fc757ba 100644
--- a/Docs/Layers/shops.md
+++ b/Docs/Layers/shops.md
@@ -435,7 +435,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/shops_glutenfree.md b/Docs/Layers/shops_glutenfree.md
index bb60a3ce8..f16c92033 100644
--- a/Docs/Layers/shops_glutenfree.md
+++ b/Docs/Layers/shops_glutenfree.md
@@ -432,7 +432,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/shops_lactosefree.md b/Docs/Layers/shops_lactosefree.md
index 7a139e5bb..dfa236159 100644
--- a/Docs/Layers/shops_lactosefree.md
+++ b/Docs/Layers/shops_lactosefree.md
@@ -432,7 +432,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/shops_second_hand.md b/Docs/Layers/shops_second_hand.md
index 48da161bb..69091e22e 100644
--- a/Docs/Layers/shops_second_hand.md
+++ b/Docs/Layers/shops_second_hand.md
@@ -418,7 +418,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/shops_with_climbing_shoe_repair.md b/Docs/Layers/shops_with_climbing_shoe_repair.md
index 967b8b93e..f1d98e9e2 100644
--- a/Docs/Layers/shops_with_climbing_shoe_repair.md
+++ b/Docs/Layers/shops_with_climbing_shoe_repair.md
@@ -427,7 +427,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/sport_shops.md b/Docs/Layers/sport_shops.md
index 313abe26f..1e8eab396 100644
--- a/Docs/Layers/sport_shops.md
+++ b/Docs/Layers/sport_shops.md
@@ -422,7 +422,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Layers/tertiary_education.md b/Docs/Layers/tertiary_education.md
index a295ebb46..384da99b5 100644
--- a/Docs/Layers/tertiary_education.md
+++ b/Docs/Layers/tertiary_education.md
@@ -4,7 +4,7 @@
 
 Layer with all tertiary education institutes (ISCED:2011 levels 6,7 and 8)
 
- - This layer is shown at zoomlevel **0** and higher
+ - This layer is shown at zoomlevel **14** and higher
 
 ## Table of contents
 
diff --git a/Docs/SpecialRenderings.md b/Docs/SpecialRenderings.md
index f9adc82a3..ae25dfb0d 100644
--- a/Docs/SpecialRenderings.md
+++ b/Docs/SpecialRenderings.md
@@ -665,6 +665,14 @@ A module showing the pending changes, with the option to clear the pending chang
 
 `{pending_changes()}`
 
+### storage_all_tags
+
+Shows the current state of storage
+
+#### Example usage of storage_all_tags
+
+`{storage_all_tags()}`
+
 ## tagrendering_manipulation
 
 Special visualisations which reuse other tagRenderings to show data, but with a twist.
@@ -973,7 +981,7 @@ The language element allows to show and pick all known (modern) languages. The k
 
 | name | default | description |
 -----|-----|----- |
-| key | _undefined_ | What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `language:nl=yes` if nl is picked  |
+| key | _undefined_ | What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `<key>:nl=yes` if _nl_ is picked  |
 | question | _undefined_ | What to ask if no questions are known |
 | render_list_item | {language()} | How a single language will be shown in the list of languages. Use `{language}` to indicate the language (which it must contain). |
 | render_single_language | _undefined_ | What will be shown if the feature only supports a single language |
diff --git a/Docs/TagInfo/mapcomplete_cyclofix.json b/Docs/TagInfo/mapcomplete_cyclofix.json
index 7a8657f92..a9e3f6403 100644
--- a/Docs/TagInfo/mapcomplete_cyclofix.json
+++ b/Docs/TagInfo/mapcomplete_cyclofix.json
@@ -340,6 +340,835 @@
       "key": "name",
       "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')"
     },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'shop' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bicycle_rental with a fixed text, namely 'Bicycle rental shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bicycle_rental"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=agrarian with a fixed text, namely 'Farm Supply Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "agrarian"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=alcohol with a fixed text, namely 'Liquor Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "alcohol"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=anime with a fixed text, namely 'Anime / Manga Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "anime"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=antiques with a fixed text, namely 'Antique Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "antiques"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=appliance with a fixed text, namely 'Appliance Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "appliance"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=art with a fixed text, namely 'Art Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "art"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=baby_goods with a fixed text, namely 'Baby Goods Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "baby_goods"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bag with a fixed text, namely 'Bag/Luggage Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bag"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bakery with a fixed text, namely 'Bakery' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bakery"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bathroom_furnishing with a fixed text, namely 'Bathroom Furnishing Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bathroom_furnishing"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=beauty with a fixed text, namely 'Beauty Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "beauty"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bed with a fixed text, namely 'Bedding/Mattress Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bed"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=beverages with a fixed text, namely 'Beverage Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "beverages"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bicycle with a fixed text, namely 'Bicycle Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bicycle"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=boat with a fixed text, namely 'Boat Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "boat"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=bookmaker with a fixed text, namely 'Bookmaker' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "bookmaker"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=books with a fixed text, namely 'Bookstore' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "books"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=brewing_supplies with a fixed text, namely 'Brewing Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "brewing_supplies"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=butcher with a fixed text, namely 'Butcher' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "butcher"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=camera with a fixed text, namely 'Camera Equipment Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "camera"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=candles with a fixed text, namely 'Candle Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "candles"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=cannabis with a fixed text, namely 'Cannabis Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "cannabis"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=car with a fixed text, namely 'Car Dealership' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "car"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=car_parts with a fixed text, namely 'Car Parts Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "car_parts"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=car_repair with a fixed text, namely 'Car Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "car_repair"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=caravan with a fixed text, namely 'RV Dealership' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "caravan"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=carpet with a fixed text, namely 'Carpet Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "carpet"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=catalogue with a fixed text, namely 'Catalog Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "catalogue"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=charity with a fixed text, namely 'Charity Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "charity"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=cheese with a fixed text, namely 'Cheese Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "cheese"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=chemist with a fixed text, namely 'Drugstore' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "chemist"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=chocolate with a fixed text, namely 'Chocolate Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "chocolate"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=clothes with a fixed text, namely 'Clothing Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "clothes"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=coffee with a fixed text, namely 'Coffee Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "coffee"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=collector with a fixed text, namely 'Collectibles Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "collector"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=computer with a fixed text, namely 'Computer Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "computer"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=confectionery with a fixed text, namely 'Candy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "confectionery"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=convenience with a fixed text, namely 'Convenience Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "convenience"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=copyshop with a fixed text, namely 'Copy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "copyshop"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=cosmetics with a fixed text, namely 'Cosmetics Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "cosmetics"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=country_store with a fixed text, namely 'Rural Supplies Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "country_store"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=craft with a fixed text, namely 'Arts & Crafts Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "craft"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=curtain with a fixed text, namely 'Curtain Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "curtain"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=dairy with a fixed text, namely 'Dairy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "dairy"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=deli with a fixed text, namely 'Delicatessen' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "deli"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=department_store with a fixed text, namely 'Department Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "department_store"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=doityourself with a fixed text, namely 'DIY Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "doityourself"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=doors with a fixed text, namely 'Door Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "doors"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=dry_cleaning with a fixed text, namely 'Dry Cleaner' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "dry_cleaning"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=e-cigarette with a fixed text, namely 'E-Cigarette Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "e-cigarette"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=electrical with a fixed text, namely 'Electrical Equipment Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "electrical"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=electronics with a fixed text, namely 'Electronics Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "electronics"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=erotic with a fixed text, namely 'Erotic Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "erotic"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=fabric with a fixed text, namely 'Fabric Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "fabric"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=farm with a fixed text, namely 'Produce Stand' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "farm"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=fashion_accessories with a fixed text, namely 'Fashion Accessories Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "fashion_accessories"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=fireplace with a fixed text, namely 'Fireplace Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "fireplace"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=fishing with a fixed text, namely 'Fishing Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "fishing"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=flooring with a fixed text, namely 'Flooring Supply Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "flooring"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=florist with a fixed text, namely 'Florist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "florist"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=frame with a fixed text, namely 'Framing Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "frame"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=frozen_food with a fixed text, namely 'Frozen Food Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "frozen_food"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=fuel with a fixed text, namely 'Fuel Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "fuel"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=funeral_directors with a fixed text, namely 'Funeral Home' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "funeral_directors"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=furniture with a fixed text, namely 'Furniture Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "furniture"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=games with a fixed text, namely 'Tabletop Game Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "games"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=garden_centre with a fixed text, namely 'Garden Center' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "garden_centre"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=gas with a fixed text, namely 'Bottled Gas Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "gas"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=general with a fixed text, namely 'General Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "general"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=gift with a fixed text, namely 'Gift Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "gift"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=greengrocer with a fixed text, namely 'Greengrocer' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "greengrocer"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=hairdresser with a fixed text, namely 'Hairdresser' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "hairdresser"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=hairdresser_supply with a fixed text, namely 'Hairdresser Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "hairdresser_supply"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=hardware with a fixed text, namely 'Hardware Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "hardware"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=health_food with a fixed text, namely 'Health Food Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "health_food"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=hearing_aids with a fixed text, namely 'Hearing Aids Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "hearing_aids"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=herbalist with a fixed text, namely 'Herbalist' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "herbalist"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=hifi with a fixed text, namely 'Hifi Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "hifi"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=honey with a fixed text, namely 'Honey Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "honey"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=household_linen with a fixed text, namely 'Household Linen Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "household_linen"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=houseware with a fixed text, namely 'Houseware Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "houseware"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=hunting with a fixed text, namely 'Hunting Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "hunting"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=interior_decoration with a fixed text, namely 'Interior Decoration Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "interior_decoration"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=jewelry with a fixed text, namely 'Jewelry Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "jewelry"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=kiosk with a fixed text, namely 'Kiosk' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "kiosk"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=kitchen with a fixed text, namely 'Kitchen Design Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "kitchen"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=laundry with a fixed text, namely 'Laundry' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "laundry"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=leather with a fixed text, namely 'Leather Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "leather"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=lighting with a fixed text, namely 'Lighting Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "lighting"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=locksmith with a fixed text, namely 'Locksmith' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "locksmith"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=lottery with a fixed text, namely 'Lottery Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "lottery"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=mall with a fixed text, namely 'Mall' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "mall"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=massage with a fixed text, namely 'Massage Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "massage"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=medical_supply with a fixed text, namely 'Medical Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "medical_supply"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=military_surplus with a fixed text, namely 'Military Surplus Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "military_surplus"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=mobile_phone with a fixed text, namely 'Mobile Phone Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "mobile_phone"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=model with a fixed text, namely 'Model Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "model"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=money_lender with a fixed text, namely 'Money Lender' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "money_lender"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=motorcycle with a fixed text, namely 'Motorcycle Dealership' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "motorcycle"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=motorcycle_repair with a fixed text, namely 'Motorcycle Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "motorcycle_repair"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=music with a fixed text, namely 'Music Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "music"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=musical_instrument with a fixed text, namely 'Musical Instrument Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "musical_instrument"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=newsagent with a fixed text, namely 'Newsstand' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "newsagent"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=nutrition_supplements with a fixed text, namely 'Nutrition Supplements Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "nutrition_supplements"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=nuts with a fixed text, namely 'Nuts Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "nuts"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=optician with a fixed text, namely 'Optician' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "optician"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=outdoor with a fixed text, namely 'Outdoors Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "outdoor"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=outpost with a fixed text, namely 'Online Retailer Outpost' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "outpost"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=paint with a fixed text, namely 'Paint Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "paint"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=party with a fixed text, namely 'Party Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "party"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pasta with a fixed text, namely 'Pasta Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pasta"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pastry with a fixed text, namely 'Pastry Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pastry"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pawnbroker with a fixed text, namely 'Pawnshop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pawnbroker"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=perfumery with a fixed text, namely 'Perfume Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "perfumery"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pet with a fixed text, namely 'Pet Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pet"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pet_grooming with a fixed text, namely 'Pet Groomer' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pet_grooming"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=photo with a fixed text, namely 'Photography Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "photo"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pottery with a fixed text, namely 'Pottery Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pottery"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=printer_ink with a fixed text, namely 'Printer Ink Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "printer_ink"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=psychic with a fixed text, namely 'Psychic' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "psychic"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=pyrotechnics with a fixed text, namely 'Fireworks Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "pyrotechnics"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=radiotechnics with a fixed text, namely 'Radio/Electronic Component Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "radiotechnics"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=religion with a fixed text, namely 'Religious Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "religion"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=rental with a fixed text, namely 'Rental Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "rental"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=repair with a fixed text, namely 'Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "repair"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=rice with a fixed text, namely 'Rice Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "rice"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=scuba_diving with a fixed text, namely 'Scuba Diving Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "scuba_diving"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=seafood with a fixed text, namely 'Seafood Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "seafood"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=second_hand with a fixed text, namely 'Thrift Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "second_hand"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=sewing with a fixed text, namely 'Sewing Supply Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "sewing"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=shoe_repair with a fixed text, namely 'Shoe Repair Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "shoe_repair"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=shoes with a fixed text, namely 'Shoe Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "shoes"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=spices with a fixed text, namely 'Spice Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "spices"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=sports with a fixed text, namely 'Sporting Goods Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "sports"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=stationery with a fixed text, namely 'Stationery Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "stationery"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=storage_rental with a fixed text, namely 'Storage Rental' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "storage_rental"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=supermarket with a fixed text, namely 'Supermarket' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "supermarket"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=swimming_pool with a fixed text, namely 'Pool Supply Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "swimming_pool"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tailor with a fixed text, namely 'Tailor' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tailor"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tattoo with a fixed text, namely 'Tattoo Parlor' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tattoo"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tea with a fixed text, namely 'Tea Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tea"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=telecommunication with a fixed text, namely 'Telecom Retail Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "telecommunication"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=ticket with a fixed text, namely 'Ticket Seller' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "ticket"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tiles with a fixed text, namely 'Tile Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tiles"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tobacco with a fixed text, namely 'Tobacco Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tobacco"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tool_hire with a fixed text, namely 'Tool Rental' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tool_hire"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=toys with a fixed text, namely 'Toy Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "toys"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=trade with a fixed text, namely 'Trade Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "trade"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=travel_agency with a fixed text, namely 'Travel Agency' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "travel_agency"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=trophy with a fixed text, namely 'Trophy Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "trophy"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=tyres with a fixed text, namely 'Tire Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "tyres"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=vacuum_cleaner with a fixed text, namely 'Vacuum Cleaner Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "vacuum_cleaner"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=variety_store with a fixed text, namely 'Discount Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "variety_store"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=video with a fixed text, namely 'Video Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "video"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=video_games with a fixed text, namely 'Video Game Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "video_games"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=watches with a fixed text, namely 'Watches Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "watches"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=water with a fixed text, namely 'Drinking Water Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "water"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=water_sports with a fixed text, namely 'Watersport/Swim Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "water_sports"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=weapons with a fixed text, namely 'Weapon Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "weapons"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=wholesale with a fixed text, namely 'Wholesale Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "wholesale"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=wigs with a fixed text, namely 'Wig Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "wigs"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=window_blind with a fixed text, namely 'Window Blind Store' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "window_blind"
+    },
+    {
+      "key": "shop",
+      "description": "Layer 'Bike repair/shop' shows shop=wine with a fixed text, namely 'Wine Shop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if craft=)",
+      "value": "wine"
+    },
+    {
+      "key": "disused:shop",
+      "description": "Layer 'Bike repair/shop' shows disused:shop= with a fixed text, namely 'This shop is no longer used. It is vacant' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') Picking this answer will delete the key disused:shop. (This is only shown if craft=)",
+      "value": ""
+    },
     {
       "key": "brand",
       "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'brand' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')"
@@ -565,6 +1394,83 @@
       "description": "Layer 'Bike repair/shop' shows service:bicycle:rental=no with a fixed text, namely 'This shop doesn't rent out bikes' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if service:bicycle:rental~.+ | shop=bicycle | shop=sport | shop=sports | shop=bicycle_repair | shop=outdoor | shop=rental)",
       "value": "no"
     },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'rental' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=city_bike with a fixed text, namely 'Normal city bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "city_bike"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=ebike with a fixed text, namely 'Electrical bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "ebike"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=bmx with a fixed text, namely 'BMX bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "bmx"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=mtb with a fixed text, namely 'Mountainbikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "mtb"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=kid_bike with a fixed text, namely 'Bikes for children can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "kid_bike"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=tandem with a fixed text, namely 'Tandem bicycles can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "tandem"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=racebike with a fixed text, namely 'Race bicycles can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "racebike"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=bike_helmet with a fixed text, namely 'Bike helmets can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "bike_helmet"
+    },
+    {
+      "key": "rental",
+      "description": "Layer 'Bike repair/shop' shows rental=cargo_bike with a fixed text, namely 'Cargo bikes can be rented here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if (service:bicycle:rental=yes | bicycle_rental~.+))",
+      "value": "cargo_bike"
+    },
+    {
+      "key": "capacity:city_bike",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:city_bike' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*city_bike.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "capacity:ebike",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:ebike' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*ebike.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "capacity:kid_bike",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:kid_bike' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*kid_bike.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "capacity:bmx",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:bmx' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*bmx.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "capacity:mtb",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:mtb' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*mtb.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "capacity:bicycle_pannier",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:bicycle_pannier' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*bicycle_pannier.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
+    {
+      "key": "capacity:tandem_bicycle",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'capacity:tandem_bicycle' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if rental~^(.*tandem_bicycle.*)$ & (service:bicycle:rental=yes | bicycle_rental~.+))"
+    },
     {
       "key": "service:bicycle:pump",
       "description": "Layer 'Bike repair/shop' shows service:bicycle:pump=yes with a fixed text, namely 'This shop offers a bike pump for anyone' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if service:bicycle:pump~.+ | shop=bicycle | shop=bicycle_repair | service:bicycle:retail=yes | ^(service:bicycle:.+)$~~^(yes)$)",
@@ -610,6 +1516,25 @@
       "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning=no with a fixed text, namely 'This shop doesn't offer bicycle cleaning' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if service:bicycle:cleaning~.+ | shop=bicycle | shop=bicycle_repair | ^(service:bicycle:.*)$~~^(yes|only)$)",
       "value": "no"
     },
+    {
+      "key": "service:bicycle:cleaning:charge",
+      "description": "Layer 'Bike repair/shop' shows and asks freeform values for key 'service:bicycle:cleaning:charge' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)"
+    },
+    {
+      "key": "service:bicycle:cleaning:fee",
+      "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=no with a fixed text, namely 'The cleaning service is free to use' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)",
+      "value": "no"
+    },
+    {
+      "key": "service:bicycle:cleaning:fee",
+      "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= with a fixed text, namely 'Free to use' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)",
+      "value": "yes"
+    },
+    {
+      "key": "service:bicycle:cleaning:charge",
+      "description": "Layer 'Bike repair/shop' shows service:bicycle:cleaning:fee=yes & service:bicycle:cleaning:charge= with a fixed text, namely 'Free to use' (in the mapcomplete.org theme 'Cyclofix - a map for cyclists') Picking this answer will delete the key service:bicycle:cleaning:charge. (This is only shown if amenity!=bicycle_wash & service:bicycle:cleaning!=no & service:bicycle:cleaning~.+)",
+      "value": ""
+    },
     {
       "key": "internet_access",
       "description": "Layer 'Bike repair/shop' shows internet_access=wlan with a fixed text, namely 'This place offers wireless internet access' and allows to pick this as a default answer (in the mapcomplete.org theme 'Cyclofix - a map for cyclists')",
diff --git a/Docs/TagInfo/mapcomplete_disaster_response.json b/Docs/TagInfo/mapcomplete_disaster_response.json
index 3440dc983..ff736f390 100644
--- a/Docs/TagInfo/mapcomplete_disaster_response.json
+++ b/Docs/TagInfo/mapcomplete_disaster_response.json
@@ -66,6 +66,43 @@
       "key": "contact:website",
       "description": "Layer 'Hospitals' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Disaster response and emergency services')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Disaster response and emergency services')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Hospitals' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Disaster response and emergency services') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Disaster response and emergency services')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "opening_hours:visitors",
       "description": "Layer 'Hospitals' shows and asks freeform values for key 'opening_hours:visitors' (in the mapcomplete.org theme 'Disaster response and emergency services')"
@@ -752,6 +789,43 @@
       "key": "contact:website",
       "description": "Layer 'Doctors' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Disaster response and emergency services')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Disaster response and emergency services')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Doctors' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Disaster response and emergency services') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Disaster response and emergency services')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "healthcare:speciality",
       "description": "Layer 'Doctors' shows and asks freeform values for key 'healthcare:speciality' (in the mapcomplete.org theme 'Disaster response and emergency services')"
@@ -915,6 +989,43 @@
       "key": "contact:website",
       "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Disaster response and emergency services')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Disaster response and emergency services')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Disaster response and emergency services') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Disaster response and emergency services')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "payment:cash",
       "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Disaster response and emergency services')",
diff --git a/Docs/TagInfo/mapcomplete_education.json b/Docs/TagInfo/mapcomplete_education.json
index 09ac14cbe..3fd13c992 100644
--- a/Docs/TagInfo/mapcomplete_education.json
+++ b/Docs/TagInfo/mapcomplete_education.json
@@ -130,6 +130,43 @@
       "key": "contact:website",
       "description": "Layer 'Primary and secondary schools' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Education')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Primary and secondary schools' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Education')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Primary and secondary schools' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Education')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Primary and secondary schools' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Education')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Education')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Primary and secondary schools' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Education') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Education')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Primary and secondary schools' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "capacity",
       "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'capacity' (in the mapcomplete.org theme 'Education')"
@@ -169,21 +206,71 @@
       "description": "Layer 'Primary and secondary schools' shows school=post_secondary with a fixed text, namely 'This school offers post-secondary education (e.g. a seventh or eight specialisation year)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be)",
       "value": "post_secondary"
     },
+    {
+      "key": "school:special_needs",
+      "description": "Layer 'Primary and secondary schools' shows school:special_needs=only with a fixed text, namely 'This school is only for special need students; a certificate is needed to enroll' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
+      "value": "only"
+    },
+    {
+      "key": "school:special_needs",
+      "description": "Layer 'Primary and secondary schools' shows school:special_needs=separated with a fixed text, namely 'This school has a separate section for special need students.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
+      "value": "separated"
+    },
+    {
+      "key": "school:special_needs",
+      "description": "Layer 'Primary and secondary schools' shows school:special_needs=mixed with a fixed text, namely 'Students with special needs and non-special need students have classes together.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
+      "value": "mixed"
+    },
+    {
+      "key": "school:special_needs",
+      "description": "Layer 'Primary and secondary schools' shows school:special_needs=limited with a fixed text, namely 'This school offers limited, ad hoc support but has no significant expertise and is not considered a special needs school.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
+      "value": "limited"
+    },
+    {
+      "key": "school:special_needs",
+      "description": "Layer 'Primary and secondary schools' shows school:special_needs=no with a fixed text, namely 'This school has no support for special need students.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
+      "value": "no"
+    },
+    {
+      "key": "school:special_needs",
+      "description": "Layer 'Primary and secondary schools' shows school:special_needs=yes with a fixed text, namely 'This school is for special need students.' (in the mapcomplete.org theme 'Education')",
+      "value": "yes"
+    },
     {
       "key": "school:orientation",
-      "description": "Layer 'Primary and secondary schools' shows school:orientation=academic with a fixed text, namely 'Prepares for an academic study at university' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$)",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=academic with a fixed text, namely 'Prepares for an academic study at university' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited))",
       "value": "academic"
     },
     {
       "key": "school:orientation",
-      "description": "Layer 'Primary and secondary schools' shows school:orientation=professional with a fixed text, namely 'Prepares for a professional study at a college' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$)",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=professional with a fixed text, namely 'Prepares for a professional study at a college' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited))",
       "value": "professional"
     },
     {
       "key": "school:orientation",
-      "description": "Layer 'Primary and secondary schools' shows school:orientation=vocational with a fixed text, namely 'Prepares for a job' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$)",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=vocational with a fixed text, namely 'Prepares for a job' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=no | school:special_needs= | school:special_needs=limited))",
       "value": "vocational"
     },
+    {
+      "key": "school:orientation",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=care_institution with a fixed text, namely '<b>Training type 1</b>: trains elementary life skills to live in an institution. There is no intention to do a (paid) job after training' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))",
+      "value": "care_institution"
+    },
+    {
+      "key": "school:orientation",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=sheltered_workshop with a fixed text, namely '<b>Training type 2</b>: prepares to work in an environment with extra care and facilities such as a sheltered workshop' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))",
+      "value": "sheltered_workshop"
+    },
+    {
+      "key": "school:orientation",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=vocational with a fixed text, namely '<b>Training type 3</b>: prepares for a job and a (more-or-less) independent life in society' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))",
+      "value": "vocational"
+    },
+    {
+      "key": "school:orientation",
+      "description": "Layer 'Primary and secondary schools' shows school:orientation=professional with a fixed text, namely '<b>Training type 4</b>: prepares for a job or continued education' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if (school~^((.+;)?upper_secondary(;.+)?)$ | school~^((.+;)?secondary(;.+)?)$) & (school:special_needs=yes | school:special_needs=only))",
+      "value": "professional"
+    },
     {
       "key": "school:gender",
       "description": "Layer 'Primary and secondary schools' shows school:gender=mixed with a fixed text, namely 'Both boys and girls can enroll here and have classes together' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
@@ -254,38 +341,57 @@
       "value": "sudbury"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'school:for' (in the mapcomplete.org theme 'Education')"
+      "key": "special_needs:intellectual_disability",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:intellectual_disability=yes with a fixed text, namely 'For students with an intellectual disability (type 2)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows school:for=mainstream with a fixed text, namely 'This is a school for students without special needs<div class='subtle'>This includes students who can follow the courses with small, ad hoc measurements</div>' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
-      "value": "mainstream"
+      "key": "special_needs:emotional_behavioural_disorder",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:emotional_behavioural_disorder=yes with a fixed text, namely 'For students with an emotional and behavioural problem (type 3)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows school:for=learning_disabilities with a fixed text, namely 'This is a school for students with learning disabilities' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
-      "value": "learning_disabilities"
+      "key": "special_needs:physical_disability",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:physical_disability=yes with a fixed text, namely 'For students with an physical disability (type 4)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows school:for=blind with a fixed text, namely 'This is a school for blind students or students with sight impairments' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
-      "value": "blind"
+      "key": "special_needs:blind",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:blind=yes with a fixed text, namely 'For blind and visually impaired students (type 6)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows school:for=deaf with a fixed text, namely 'This is a school for deaf students or students with hearing impairments' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
-      "value": "deaf"
+      "key": "special_needs:deaf",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:deaf=yes with a fixed text, namely 'For deaf students and students with hearing loss (type 7)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows school:for=disabilities with a fixed text, namely 'This is a school for students with disabilities' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
-      "value": "disabilities"
+      "key": "special_needs:language_disorder",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:language_disorder=yes with a fixed text, namely 'For students with a Developemental Language Disorder (type 7 - DLD)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
     },
     {
-      "key": "school:for",
-      "description": "Layer 'Primary and secondary schools' shows school:for=special_needs with a fixed text, namely 'This is a school for students with special needs' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education')",
-      "value": "special_needs"
+      "key": "special_needs:autism",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:autism=yes with a fixed text, namely 'For students with an autism spectrum disorder (type 9)' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
+    },
+    {
+      "key": "special_needs:learning_disabilities",
+      "description": "Layer 'Primary and secondary schools' shows special_needs:learning_disabilities=yes with a fixed text, namely 'For students with a learning disability (basic offering )' and allows to pick this as a default answer (in the mapcomplete.org theme 'Education') (This is only shown if _country=be & school:special_needs!~^(no)$ & school:special_needs~.+)",
+      "value": "yes"
+    },
+    {
+      "key": "wikidata",
+      "description": "Layer 'Primary and secondary schools' shows and asks freeform values for key 'wikidata' (in the mapcomplete.org theme 'Education')"
+    },
+    {
+      "key": "wikipedia",
+      "description": "Layer 'Primary and secondary schools' shows wikipedia~.+ with a fixed text, namely '{wikipedia():max-height:25rem}' (in the mapcomplete.org theme 'Education')"
+    },
+    {
+      "key": "wikidata",
+      "description": "Layer 'Primary and secondary schools' shows wikidata= with a fixed text, namely 'No Wikipedia page has been linked yet' (in the mapcomplete.org theme 'Education') Picking this answer will delete the key wikidata.",
+      "value": ""
     },
     {
       "key": "amenity",
diff --git a/Docs/TagInfo/mapcomplete_healthcare.json b/Docs/TagInfo/mapcomplete_healthcare.json
index d8fa281d9..dea196116 100644
--- a/Docs/TagInfo/mapcomplete_healthcare.json
+++ b/Docs/TagInfo/mapcomplete_healthcare.json
@@ -89,6 +89,43 @@
       "key": "contact:website",
       "description": "Layer 'Doctors' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Healthcare')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Doctors' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "healthcare:speciality",
       "description": "Layer 'Doctors' shows and asks freeform values for key 'healthcare:speciality' (in the mapcomplete.org theme 'Healthcare')"
@@ -192,6 +229,43 @@
       "key": "contact:website",
       "description": "Layer 'Physiotherapist' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Healthcare')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Physiotherapist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Physiotherapist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Physiotherapist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Physiotherapist' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Physiotherapist' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Physiotherapist' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Physiotherapist' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Physiotherapist' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "amenity",
       "description": "The MapComplete theme Healthcare has a layer Dentist showing features with this tag",
@@ -258,6 +332,43 @@
       "key": "contact:website",
       "description": "Layer 'Dentist' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Healthcare')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Dentist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Dentist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Dentist' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Dentist' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Dentist' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Dentist' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Dentist' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Dentist' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "name",
       "description": "Layer 'Dentist' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Healthcare')"
@@ -318,6 +429,43 @@
       "key": "contact:website",
       "description": "Layer 'Hospitals' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Healthcare')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Hospitals' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "opening_hours:visitors",
       "description": "Layer 'Hospitals' shows and asks freeform values for key 'opening_hours:visitors' (in the mapcomplete.org theme 'Healthcare')"
@@ -392,6 +540,43 @@
       "key": "contact:website",
       "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Healthcare')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Healthcare')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Healthcare') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Healthcare')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "payment:cash",
       "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Healthcare')",
diff --git a/Docs/TagInfo/mapcomplete_onwheels.json b/Docs/TagInfo/mapcomplete_onwheels.json
index 437843cde..90055a7b5 100644
--- a/Docs/TagInfo/mapcomplete_onwheels.json
+++ b/Docs/TagInfo/mapcomplete_onwheels.json
@@ -3265,6 +3265,43 @@
       "key": "contact:website",
       "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'OnWheels')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'OnWheels')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'OnWheels') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'OnWheels')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "payment:cash",
       "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
@@ -3359,6 +3396,43 @@
       "key": "contact:website",
       "description": "Layer 'Doctors' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'OnWheels')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Doctors' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'OnWheels')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Doctors' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'OnWheels') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'OnWheels')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Doctors' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "healthcare:speciality",
       "description": "Layer 'Doctors' shows and asks freeform values for key 'healthcare:speciality' (in the mapcomplete.org theme 'OnWheels')"
@@ -3439,6 +3513,43 @@
       "key": "contact:website",
       "description": "Layer 'Hospitals' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'OnWheels')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Hospitals' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'OnWheels')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'OnWheels')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Hospitals' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'OnWheels') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'OnWheels')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Hospitals' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'OnWheels') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "opening_hours:visitors",
       "description": "Layer 'Hospitals' shows and asks freeform values for key 'opening_hours:visitors' (in the mapcomplete.org theme 'OnWheels')"
diff --git a/Docs/TagInfo/mapcomplete_scouting.json b/Docs/TagInfo/mapcomplete_scouting.json
index 6c6349c4d..8fd8d4d1a 100644
--- a/Docs/TagInfo/mapcomplete_scouting.json
+++ b/Docs/TagInfo/mapcomplete_scouting.json
@@ -58,6 +58,114 @@
     {
       "key": "contact:mastodon",
       "description": "Layer 'Scouting groups' shows and asks freeform values for key 'contact:mastodon' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "tourism",
+      "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag",
+      "value": "camp_site"
+    },
+    {
+      "key": "scout",
+      "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag",
+      "value": "yes"
+    },
+    {
+      "key": "group_only",
+      "description": "The MapComplete theme Scouting groups has a layer Group Campsites showing features with this tag",
+      "value": "yes"
+    },
+    {
+      "key": "id",
+      "description": "Layer 'Group Campsites' shows id~.+ with a fixed text, namely 'You just created this element! Thanks for sharing this info with the world and helping people worldwide.' (in the mapcomplete.org theme 'Scouting groups') (This is only shown if _backend~.+ & _last_edit:passed_time<300 & (_version_number= | _version_number=1))"
+    },
+    {
+      "key": "group_only",
+      "description": "Layer 'Group Campsites' shows group_only=yes with a fixed text, namely 'This campsite is exclusively for groups' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')",
+      "value": "yes"
+    },
+    {
+      "key": "group_only",
+      "description": "Layer 'Group Campsites' shows group_only=no with a fixed text, namely 'This campsite is not exclusively for groups' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')",
+      "value": "no"
+    },
+    {
+      "key": "name",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'name' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "charge",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'charge' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "fee",
+      "description": "Layer 'Group Campsites' shows fee=no with a fixed text, namely 'The campsite is free of charge' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')",
+      "value": "no"
+    },
+    {
+      "key": "fee",
+      "description": "Layer 'Group Campsites' shows fee=yes & charge= with a fixed text, namely 'A fee is charged here.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups')",
+      "value": "yes"
+    },
+    {
+      "key": "charge",
+      "description": "Layer 'Group Campsites' shows fee=yes & charge= with a fixed text, namely 'A fee is charged here.' and allows to pick this as a default answer (in the mapcomplete.org theme 'Scouting groups') Picking this answer will delete the key charge.",
+      "value": ""
+    },
+    {
+      "key": "capacity:persons",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'capacity:persons' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "phone",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'phone' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "contact:phone",
+      "description": "Layer 'Group Campsites' shows contact:phone~.+ with a fixed text, namely '{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "email",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'email' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "contact:email",
+      "description": "Layer 'Group Campsites' shows contact:email~.+ with a fixed text, namely '<a href='mailto:{contact:email}' target='_blank' rel='noopener'>{contact:email}</a>' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "operator:email",
+      "description": "Layer 'Group Campsites' shows operator:email~.+ with a fixed text, namely '<a href='mailto:{operator:email}' target='_blank' rel='noopener'>{operator:email}</a>' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "website",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'website' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "contact:website",
+      "description": "Layer 'Group Campsites' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "contact:mastodon",
+      "description": "Layer 'Group Campsites' shows and asks freeform values for key 'contact:mastodon' (in the mapcomplete.org theme 'Scouting groups')"
+    },
+    {
+      "key": "image",
+      "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary"
+    },
+    {
+      "key": "panoramax",
+      "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary"
+    },
+    {
+      "key": "mapillary",
+      "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary"
+    },
+    {
+      "key": "wikidata",
+      "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary"
+    },
+    {
+      "key": "wikipedia",
+      "description": "The layer 'Group Campsites allows to upload images and adds them under the 'panoramax'-tag (and panoramax:0, panoramax:1, ... for multiple images). Furthermore, this layer shows images based on the keys panoramax, image, wikidata, wikipedia, wikimedia_commons and mapillary"
     }
   ]
 }
\ No newline at end of file
diff --git a/Docs/TagInfo/mapcomplete_shops.json b/Docs/TagInfo/mapcomplete_shops.json
index bbbbfa562..5d64fa1ec 100644
--- a/Docs/TagInfo/mapcomplete_shops.json
+++ b/Docs/TagInfo/mapcomplete_shops.json
@@ -1475,6 +1475,43 @@
       "key": "contact:website",
       "description": "Layer 'Pharmacies' shows contact:website~.+ with a fixed text, namely '<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>' (in the mapcomplete.org theme 'Shops')"
     },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Shops')",
+      "value": ""
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Shops')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows addr:street= & addr:unit= & addr:housenumber= with a fixed text, namely 'No address is known' (in the mapcomplete.org theme 'Shops')",
+      "value": ""
+    },
+    {
+      "key": "addr:housenumber",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:housenumber' (in the mapcomplete.org theme 'Shops')"
+    },
+    {
+      "key": "nohousenumber",
+      "description": "Layer 'Pharmacies' shows nohousenumber=yes with a fixed text, namely 'This building has no house number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Shops')",
+      "value": "yes"
+    },
+    {
+      "key": "addr:street",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:street' (in the mapcomplete.org theme 'Shops') (This is only shown if nohousenumber!~^(yes)$)"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows and asks freeform values for key 'addr:unit' (in the mapcomplete.org theme 'Shops')"
+    },
+    {
+      "key": "addr:unit",
+      "description": "Layer 'Pharmacies' shows addr:unit= with a fixed text, namely 'No unit number' and allows to pick this as a default answer (in the mapcomplete.org theme 'Shops') Picking this answer will delete the key addr:unit.",
+      "value": ""
+    },
     {
       "key": "payment:cash",
       "description": "Layer 'Pharmacies' shows payment:cash=yes with a fixed text, namely 'Cash is accepted here' and allows to pick this as a default answer (in the mapcomplete.org theme 'Shops')",
diff --git a/Docs/Themes/circular_economy.md b/Docs/Themes/circular_economy.md
index 4d616b38f..45f8b761a 100644
--- a/Docs/Themes/circular_economy.md
+++ b/Docs/Themes/circular_economy.md
@@ -451,7 +451,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Themes/climbing.md b/Docs/Themes/climbing.md
index ea54cf59b..cf3726529 100644
--- a/Docs/Themes/climbing.md
+++ b/Docs/Themes/climbing.md
@@ -468,7 +468,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Themes/ghostsigns.md b/Docs/Themes/ghostsigns.md
index 09835c88b..43c38cbca 100644
--- a/Docs/Themes/ghostsigns.md
+++ b/Docs/Themes/ghostsigns.md
@@ -391,8 +391,8 @@ The question is `Does this artwork serve as a bench?`
 The question is `Does this bench have a backrest?`
 
  - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/two_sided.svg' style='width: 3rem; height: 3rem'> *This bench is two-sided and shares the backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a> & <a href='https://wiki.openstreetmap.org/wiki/Key:two_sided' target='_blank'>two_sided</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:two_sided%3Dyes' target='_blank'>yes</a>
- -  *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
- -  *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/one_sided.svg' style='width: 3rem; height: 3rem'> *This bench does have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dyes' target='_blank'>yes</a>
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/bench/no_backrest.svg' style='width: 3rem; height: 3rem'> *This bench does <b>not</b> have a backrest* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:backrest' target='_blank'>backrest</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:backrest%3Dno' target='_blank'>no</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:amenity' target='_blank'>amenity</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dbench' target='_blank'>bench</a>
 This tagrendering has labels 
diff --git a/Docs/Themes/glutenfree.md b/Docs/Themes/glutenfree.md
index da255eb97..476c431f3 100644
--- a/Docs/Themes/glutenfree.md
+++ b/Docs/Themes/glutenfree.md
@@ -1287,7 +1287,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Themes/grb.md b/Docs/Themes/grb.md
index c3dd1b8f9..22af4114a 100644
--- a/Docs/Themes/grb.md
+++ b/Docs/Themes/grb.md
@@ -15,7 +15,6 @@ This theme contains the following layers:
  - [address](../Layers/address.md)
  - [crab_address](../Layers/crab_address.md)
  - [current_view](../Layers/current_view.md)
- - [named_streets](../Layers/named_streets.md)
 
 Available languages:
 
diff --git a/Docs/Themes/healthcare.md b/Docs/Themes/healthcare.md
index 7884876d8..1d7c7778f 100644
--- a/Docs/Themes/healthcare.md
+++ b/Docs/Themes/healthcare.md
@@ -466,7 +466,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Themes/lactosefree.md b/Docs/Themes/lactosefree.md
index bc215542e..a9fac5db4 100644
--- a/Docs/Themes/lactosefree.md
+++ b/Docs/Themes/lactosefree.md
@@ -1284,7 +1284,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Themes/openlovemap.md b/Docs/Themes/openlovemap.md
index f6befef53..18f03a98b 100644
--- a/Docs/Themes/openlovemap.md
+++ b/Docs/Themes/openlovemap.md
@@ -502,7 +502,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
@@ -828,11 +828,11 @@ This tagrendering has labels
 | id | question | osmTags |
 -----|-----|----- |
 | fetish.0 | *Does this shop offer fetish gear?* (default) |  |
-| fetish.1 | This shop offers <b>soft BDSM-gear</b>, such as fluffy handcuffs, a 'fifty-shade-of-grey'-starterset, ... | fetish:bdsm:soft~^(.+;)?yes(;.+)$ |
-| fetish.2 | This shop offers <b>specialized BDSM-gear</b>, such as spreader bars, supplies for needle play, medical bondage supplies, impact tools, shackles, metal colors, cuffs, nipple clamps, shibari accessories, ... | fetish:bdsm:specialized~^(.+;)?yes(;.+)$ |
-| fetish.3 | This shop offers <b>pet play</b> accessories, such as puppy masks, animal masks, pony play, tails, hoof shoes, ... | fetish:pet_play~^(.+;)?yes(;.+)$ |
-| fetish.4 | This shop offers <b>leather gear</b>, including pants and shirts usable in daily life up till leather harnesses | fetish:leather~^(.+;)?yes(;.+)$ |
-| fetish.5 | This shop offers <b>uniforms</b> for roleplay, such nurse uniforms, military uniforms, police, school girl, french maid, ... | fetish:uniform~^(.+;)?yes(;.+)$ |
+| fetish.1 | This shop offers <b>soft BDSM-gear</b>, such as fluffy handcuffs, a 'fifty-shade-of-grey'-starterset, ... | fetish:bdsm:soft~^(^(.+;)?yes(;.+)?$)$ |
+| fetish.2 | This shop offers <b>specialized BDSM-gear</b>, such as spreader bars, supplies for needle play, medical bondage supplies, impact tools, shackles, metal colors, cuffs, nipple clamps, shibari accessories, ... | fetish:bdsm:specialized~^(^(.+;)?yes(;.+)?$)$ |
+| fetish.3 | This shop offers <b>pet play</b> accessories, such as puppy masks, animal masks, pony play, tails, hoof shoes, ... | fetish:pet_play~^(^(.+;)?yes(;.+)?$)$ |
+| fetish.4 | This shop offers <b>leather gear</b>, including pants and shirts usable in daily life up till leather harnesses | fetish:leather~^(^(.+;)?yes(;.+)?$)$ |
+| fetish.5 | This shop offers <b>uniforms</b> for roleplay, such nurse uniforms, military uniforms, police, school girl, french maid, ... | fetish:uniform~^(^(.+;)?yes(;.+)?$)$ |
 
 | id | question | osmTags |
 -----|-----|----- |
diff --git a/Docs/Themes/personal.md b/Docs/Themes/personal.md
index 144849415..f4b8699ae 100644
--- a/Docs/Themes/personal.md
+++ b/Docs/Themes/personal.md
@@ -34,6 +34,7 @@ This theme contains the following layers:
  - [binocular](../Layers/binocular.md)
  - [birdhide](../Layers/birdhide.md)
  - [cafe_pub](../Layers/cafe_pub.md)
+ - [campsite](../Layers/campsite.md)
  - [caravansites](../Layers/caravansites.md)
  - [charge_point](../Layers/charge_point.md)
  - [charging_station](../Layers/charging_station.md)
diff --git a/Docs/Themes/pets.md b/Docs/Themes/pets.md
index f6e88ed7c..bf58e3fec 100644
--- a/Docs/Themes/pets.md
+++ b/Docs/Themes/pets.md
@@ -1070,7 +1070,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/Themes/scouting.md b/Docs/Themes/scouting.md
index 41e64cecd..d4113cd44 100644
--- a/Docs/Themes/scouting.md
+++ b/Docs/Themes/scouting.md
@@ -9,14 +9,163 @@ The theme introduction reads:
 This theme contains the following layers:
 
  - [scouting_group](../Layers/scouting_group.md)
+ - [group_campsite (defined in this theme)](#group_campsite)
+ - [campsite](../Layers/campsite.md)
 
 Available languages:
 
  - en
  - de
+ - uk
+
+# Table of contents
+
+  - [Scouting groups ( scouting )](#scouting-groups-(-scouting-))
+1. [Layers defined in this theme configuration file](#layers-defined-in-this-theme-configuration-file)
+2. [group_campsite](#group_campsite)
+  - [Basic tags for this layer](#basic-tags-for-this-layer)
+  - [Supported attributes](#supported-attributes)
+    + [group_only](#group_only)
+    + [name](#name)
+    + [fee](#fee)
+    + [capacity_persons](#capacity_persons)
+    + [phone](#phone)
+    + [email](#email)
+    + [website](#website)
+    + [questions](#questions)
+    + [mastodon](#mastodon)
+    + [images](#images)
+    + [lod](#lod)
+  - [Filters](#filters)
 
 # Layers defined in this theme configuration file
 These layers can not be reused in different themes.
+# group_campsite
+
+This layer is based on [campsite](../Layers/campsite.md)
+
+Campsites
+
+ - This layer is shown at zoomlevel **7** and higher
+
+No themes use this layer
+
+## Basic tags for this layer
+
+Elements must match **all** of the following expressions:
+
+0. <a href='https://wiki.openstreetmap.org/wiki/Key:tourism' target='_blank'>tourism</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:tourism%3Dcamp_site' target='_blank'>camp_site</a>
+1. <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes' target='_blank'>yes</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:scout' target='_blank'>scout</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:scout%3Dyes' target='_blank'>yes</a>
+
+[Execute on overpass](http://overpass-turbo.eu/?Q=%5Bout%3Ajson%5D%5Btimeout%3A90%5D%3B%28%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22group_only%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%20%20%20%20nwr%5B%22tourism%22%3D%22camp_site%22%5D%5B%22scout%22%3D%22yes%22%5D%28%7B%7Bbbox%7D%7D%29%3B%0A%29%3Bout%20body%3B%3E%3Bout%20skel%20qt%3B)
+
+## Supported attributes
+
+**Warning:**,this quick overview is incomplete,
+
+| attribute | type | values which are supported by this layer |
+-----|-----|----- |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/group_only#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/group_only/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [group_only](https://wiki.openstreetmap.org/wiki/Key:group_only) | Multiple choice | [yes](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes) [no](https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/name#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/name/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [name](https://wiki.openstreetmap.org/wiki/Key:name) | [string](../SpecialInputElements.md#string) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/charge#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/charge/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [charge](https://wiki.openstreetmap.org/wiki/Key:charge) | [currency](../SpecialInputElements.md#currency) | [](https://wiki.openstreetmap.org/wiki/Tag:charge%3D) |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/capacity:persons#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/capacity%3Apersons/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [capacity:persons](https://wiki.openstreetmap.org/wiki/Key:capacity:persons) | [pnat](../SpecialInputElements.md#pnat) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/phone#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/phone/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [phone](https://wiki.openstreetmap.org/wiki/Key:phone) | [phone](../SpecialInputElements.md#phone) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/email#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/email/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [email](https://wiki.openstreetmap.org/wiki/Key:email) | [email](../SpecialInputElements.md#email) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/website#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/website/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [website](https://wiki.openstreetmap.org/wiki/Key:website) | [url](../SpecialInputElements.md#url) |  |
+| <a target="_blank" href='https://taginfo.openstreetmap.org/keys/contact:mastodon#values'><img src='https://mapcomplete.org/assets/svg/search.svg' height='18px'></a> <a target="_blank" href='https://taghistory.raifer.tech/?#***/contact%3Amastodon/'><img src='https://mapcomplete.org/assets/svg/statistics.svg' height='18px'></a> [contact:mastodon](https://wiki.openstreetmap.org/wiki/Key:contact:mastodon) | [fediverse](../SpecialInputElements.md#fediverse) |  |
+
+### group_only
+
+The question is `Is this campsite exclusively for groups?`
+
+ -  *This campsite is exclusively for groups* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dyes' target='_blank'>yes</a>
+ -  *This campsite is not exclusively for groups* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:group_only' target='_blank'>group_only</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:group_only%3Dno' target='_blank'>no</a>
+
+### name
+
+The question is `What is the name of this campsite?`
+*The name of this campsite is {name}* is shown if `name` is set
+
+### fee
+
+The question is `Is a fee charged here?`
+*A fee of {charge} should be paid for here* is shown if `charge` is set
+
+ -  *The campsite is free of charge* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dno' target='_blank'>no</a>
+ -  *A fee is charged here.* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:fee' target='_blank'>fee</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:fee%3Dyes' target='_blank'>yes</a> & charge=
+
+### capacity_persons
+
+The question is `How many people can stay here?`
+*{capacity:persons} people can stay here* is shown if `capacity:persons` is set
+
+### phone
+
+The question is `What is the phone number of {title()}?`
+*{link(&LBRACEphone&RBRACE,tel:&LBRACEphone&RBRACE,,,,)}* is shown if `phone` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/questions/phone.svg' style='width: 3rem; height: 3rem'> *{link(&LBRACEcontact:phone&RBRACE,tel:&LBRACEcontact:phone&RBRACE,,,,)}* is shown if with contact:phone~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### email
+
+The question is `What is the email address of {title()}?`
+*<a href='mailto:{email}' target='_blank' rel='noopener'>{email}</a>* is shown if `email` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/svg/envelope.svg' style='width: 3rem; height: 3rem'> *<a href='mailto:{contact:email}' target='_blank' rel='noopener'>{contact:email}</a>* is shown if with contact:email~.+. _This option cannot be chosen as answer_
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/svg/envelope.svg' style='width: 3rem; height: 3rem'> *<a href='mailto:{operator:email}' target='_blank' rel='noopener'>{operator:email}</a>* is shown if with operator:email~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### website
+
+The question is `What is the website of {title()}?`
+*<a href='{website}' rel='nofollow noopener noreferrer' target='_blank'>{website}</a>* is shown if `website` is set
+
+ - <img src='https://raw.githubusercontent.com/pietervdvn/MapComplete/develop/./assets/layers/icons/website.svg' style='width: 3rem; height: 3rem'> *<a href='{contact:website}' rel='nofollow noopener noreferrer' target='_blank'>{contact:website}</a>* is shown if with contact:website~.+. _This option cannot be chosen as answer_
+
+This tagrendering has labels 
+`contact`
+
+### questions
+Show the questions block at this location
+_This tagrendering has no question and is thus read-only_
+*{questions()}*
+
+### mastodon
+Shows and asks for the mastodon handle
+The question is `What is the Mastodon-handle of {title()}?`
+*{fediverse_link(contact:mastodon)}* is shown if `contact:mastodon` is set
+
+### images
+This block shows the known images which are linked with the `image`-keys, but also via `mapillary` and `wikidata` and shows the button to upload new images
+_This tagrendering has no question and is thus read-only_
+*{image_carousel()}{image_upload()}*
+
+### lod
+
+_This tagrendering has no question and is thus read-only_
+*{linked_data_from_website()}*
+
+This tagrendering has labels 
+`added_by_default`
+
+## Filters
+
+| id | question | osmTags |
+-----|-----|----- |
+| capacity_persons_filter.0 | *All capacities* (default) |  |
+| capacity_persons_filter.1 | Capacity between 1 and 20 persons | capacity:persons>=1 & capacity:persons<=20 |
+| capacity_persons_filter.2 | Capacity between 21 and 50 persons | capacity:persons>=21 & capacity:persons<=50 |
+| capacity_persons_filter.3 | Capacity between 51 and 100 persons | capacity:persons>=51 & capacity:persons<=100 |
+| capacity_persons_filter.4 | Capacity between 101 and 200 persons | capacity:persons>=101 & capacity:persons<=200 |
+| capacity_persons_filter.5 | Capacity between 201 and 500 persons | capacity:persons>=201 & capacity:persons<=500 |
+| capacity_persons_filter.6 | Capacity over 500 persons | capacity:persons>=501 |
+| capacity_persons_filter.7 | ? | capacity:persons= |
+
 
 
 This document is autogenerated from [assets/themes/scouting/scouting.json](https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/assets/themes/scouting/scouting.json)
diff --git a/Docs/Themes/sports.md b/Docs/Themes/sports.md
index 7ed4cbc6e..b4fbef001 100644
--- a/Docs/Themes/sports.md
+++ b/Docs/Themes/sports.md
@@ -457,7 +457,7 @@ This tagrendering is only visible in the popup if the following condition is met
 
 The question is `Are medical services available here?`
 
- -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healtcare' target='_blank'>not:healtcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healtcare%3Doptometrist' target='_blank'>optometrist</a>
+ -  *This shop offers eye exams by certified optometrists* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Doptometrist' target='_blank'>optometrist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Doptometrist' target='_blank'>optometrist</a>
  -  *This shop offers hearing tests by a certified audiologist* is shown if with <a href='https://wiki.openstreetmap.org/wiki/Key:healthcare' target='_blank'>healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:healthcare%3Daudiologist' target='_blank'>audiologist</a>. Unselecting this answer will add <a href='https://wiki.openstreetmap.org/wiki/Key:not:healthcare' target='_blank'>not:healthcare</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:not:healthcare%3Daudiologist' target='_blank'>audiologist</a>
 
 This tagrendering is only visible in the popup if the following condition is met: <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Doptician' target='_blank'>optician</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dhearing_aid' target='_blank'>hearing_aid</a> | <a href='https://wiki.openstreetmap.org/wiki/Key:shop' target='_blank'>shop</a>=<a href='https://wiki.openstreetmap.org/wiki/Tag:shop%3Dmedical_supply' target='_blank'>medical_supply</a>
diff --git a/Docs/URL_Parameters.md b/Docs/URL_Parameters.md
index 0873d5455..bcd81da3e 100644
--- a/Docs/URL_Parameters.md
+++ b/Docs/URL_Parameters.md
@@ -224,7 +224,7 @@ The default value is _true_
 
 If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L192)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L190)
 
 The default value is _false_
 
@@ -232,7 +232,7 @@ The default value is _false_
 
 If true, shows some extra debugging help such as all the available tags on every object
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L198)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L196)
 
 The default value is _false_
 
@@ -240,7 +240,7 @@ The default value is _false_
 
 If true, the location distance indication will not be written to the changeset and other privacy enhancing measures might be taken.
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L204)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L202)
 
 The default value is _false_
 
@@ -248,7 +248,7 @@ The default value is _false_
 
 Point mapcomplete to a different overpass-instance. Example: https://overpass-api.de/api/interpreter
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L210)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L208)
 
 The default value is _https://overpass-api.de/api/interpreter,https://overpass.private.coffee/api/interpreter,https://overpass.osm.jp/api/interpreter_
 
@@ -256,7 +256,7 @@ The default value is _https://overpass-api.de/api/interpreter,https://overpass.p
 
 Set a different timeout (in seconds) for queries in overpass
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L221)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L219)
 
 The default value is _30_
 
@@ -264,7 +264,7 @@ The default value is _30_
 
  point to switch between OSM-api and overpass
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L229)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L227)
 
 The default value is _16_
 
@@ -272,7 +272,7 @@ The default value is _16_
 
 Tilesize when the OSM-API is used to fetch data within a BBOX
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L237)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L235)
 
 The default value is _17_
 
@@ -330,7 +330,7 @@ One can use the [ID of an ELI-layer](./ELI-overview.md) or use one of the global
  - HDM_HOT
  - osmfr-occitan
 
-This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L244)
+This documentation is defined in the source code at [FeatureSwitchState.ts](/src/Logic/State/FeatureSwitchState.ts#L242)
 
 No default value set
 
@@ -410,7 +410,7 @@ The default value is _0_
 
 The mode the application starts in, e.g. 'map', 'dashboard' or 'statistics'
 
-This documentation is defined in the source code at [generateDocs.ts](ervdvn/git2/MapComplete/scripts/generateDocs.ts#L442)
+This documentation is defined in the source code at [generateDocs.ts](ervdvn/git2/MapComplete/scripts/generateDocs.ts#L444)
 
 The default value is _map_
 
diff --git a/Docs/wikiIndex.txt b/Docs/wikiIndex.txt
index 5066da530..0af3d4ec9 100644
--- a/Docs/wikiIndex.txt
+++ b/Docs/wikiIndex.txt
@@ -582,7 +582,7 @@ The position of a signpost can be used by a hiker/biker/rider/s…
 {{service_item
 |name= [https://mapcomplete.org/scouting scouting]
 |region= Worldwide
-|lang= {{#language:en|en}}, {{#language:de|en}}
+|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:uk|en}}
 |descr= A MapComplete theme: A scouting group is a social youth movement with a heavy emphasis on the outdoors
 |material= {{yes|[https://mapcomplete.org/ Yes]}}
 |image= MapComplete_Screenshot.png
@@ -618,7 +618,7 @@ The position of a signpost can be used by a hiker/biker/rider/s…
 {{service_item
 |name= [https://mapcomplete.org/transit transit]
 |region= Worldwide
-|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:nl|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:es|en}}, {{#language:cs|en}}, {{#language:zh_Hant|en}}, {{#language:pl|en}}, {{#language:ko|en}}
+|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}, {{#language:da|en}}, {{#language:nl|en}}, {{#language:nb_NO|en}}, {{#language:ca|en}}, {{#language:es|en}}, {{#language:cs|en}}, {{#language:zh_Hant|en}}, {{#language:pl|en}}, {{#language:ko|en}}, {{#language:uk|en}}
 |descr= A MapComplete theme: Plan your trip with the help of the public transport system
 |material= {{yes|[https://mapcomplete.org/ Yes]}}
 |image= MapComplete_Screenshot.png
diff --git a/app/AppIndex.svelte b/app/AppIndex.svelte
index 81a2620db..0accefe8f 100644
--- a/app/AppIndex.svelte
+++ b/app/AppIndex.svelte
@@ -1,19 +1,19 @@
 <script lang="ts">
-
-import { DownloadIcon } from "@rgossiaux/svelte-heroicons/solid"
+  import { DownloadIcon } from "@rgossiaux/svelte-heroicons/solid"
 </script>
 
 <div class="m-8 flex flex-col">
+  <h1>MapComplete Android App</h1>
 
-<h1>MapComplete Android App</h1>
+  MapComplete is available as Android App as direct download. We are working on publishing this in
+  the play store and on FDroid too.
 
-MapComplete is available as Android App as direct download.
-
-We are working on publishing this in the play store and on FDroid too.
-
-<a class="button primary flex justify-center" href="https://app.mapcomplete.org/mapcomplete-latest.apk">
-  <DownloadIcon class="w-8 h-8"/>
-  Download the latest version
-</a>
-<a class="button" href="https://mapcomplete.org">Go back to mapcomplete</a>
+  <a
+    class="button primary flex justify-center"
+    href="https://app.mapcomplete.org/mapcomplete-latest.apk"
+  >
+    <DownloadIcon class="h-8 w-8" />
+    Download the latest version
+  </a>
+  <a class="button" href="https://mapcomplete.org">Go back to mapcomplete</a>
 </div>
diff --git a/app/land.ts b/app/land.ts
index 57120b507..18025e500 100644
--- a/app/land.ts
+++ b/app/land.ts
@@ -13,9 +13,11 @@ const tokenSrc = new UIEventSource("")
 const debug = new UIEventSource<string[]>([])
 
 new Combine([
-    new VariableUiElement(debug.map(debug => "<ul><li>"+debug.join("</li><li>")+"</li></ul>")),
-    new VariableUiElement(tokenSrc)]).AttachTo("token")
-
+    new VariableUiElement(
+        debug.map((debug) => "<ul><li>" + debug.join("</li><li>") + "</li></ul>")
+    ),
+    new VariableUiElement(tokenSrc),
+]).AttachTo("token")
 
 const connection = new OsmConnection()
 connection.finishLogin(async () => {
@@ -24,16 +26,16 @@ connection.finishLogin(async () => {
     do {
         await Utils.waitFor(500)
         token = connection.getToken()
-        tokenSrc.set("Trying to get token ("+attempt+")")
+        tokenSrc.set("Trying to get token (" + attempt + ")")
         attempt++
 
         const dbg = []
-        Object.keys(localStorage).forEach(key => {
-            dbg.push(`${key} - ${localStorage.getItem(key)}`);
+        Object.keys(localStorage).forEach((key) => {
+            dbg.push(`${key} - ${localStorage.getItem(key)}`)
         })
         debug.set(dbg)
 
-        if(attempt > 10){
+        if (attempt > 10) {
             window.location.reload()
         }
     } while (!token)
diff --git a/assets/layers/campsite/campsite.json b/assets/layers/campsite/campsite.json
index 44dbcaae9..ccd551749 100644
--- a/assets/layers/campsite/campsite.json
+++ b/assets/layers/campsite/campsite.json
@@ -197,7 +197,6 @@
           "question": {
             "en": "Capacity between 21 and 50 persons"
           },
-
           "osmTags": {
             "and": [
               "capacity:persons>=21",
diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
index da52bbaa4..462a4e7f3 100644
--- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json
+++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
@@ -182,6 +182,26 @@
             }
           ]
         },
+        {
+          "id": "platform",
+          "question": {
+            "en": "With what platform was the change made?"
+          },
+          "mappings": [
+            {
+              "if": "android=",
+              "then": {
+                "en": "Made on the web"
+              }
+            },
+            {
+              "if": "android=yes",
+              "then": {
+                "en": "Made with the android app"
+              }
+            }
+          ]
+        },
         {
           "id": "version",
           "question": {
@@ -769,18 +789,45 @@
             }
           ]
         },
+        {
+          "id": "platform",
+          "options": [
+            {
+              "question": {
+                "en": "Changeset added at least one image",
+                "cs": "Sada změn přidala alespoň jeden obrázek",
+                "de": "Changeset hat mindestens ein Bild hinzugefügt",
+                "es": "El conjunto de cambios agregó al menos una imagen",
+                "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다",
+                "nl": "Changeset voegde minstens één afbeelding toe"
+              }
+            },
+            {
+              "question": {
+                "en": "Made with Android"
+              },
+              "osmTags": "android=yes"
+            },
+            {
+              "question": {
+                "en": "Made on the web"
+              },
+              "osmTags": "android="
+            }
+          ]
+        },
         {
           "id": "added-image",
           "options": [
             {
               "osmTags": "add-image>0",
               "question": {
-                "en": "Changeset added at least one image",
-                "de": "Changeset hat mindestens ein Bild hinzugefügt",
-                "cs": "Sada změn přidala alespoň jeden obrázek",
-                "es": "El conjunto de cambios agregó al menos una imagen",
-                "nl": "Changeset voegde minstens één afbeelding toe",
-                "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다"
+                "en": "Exclude GRB theme",
+                "de": "GRB-Thema ausschließen",
+                "cs": "Vyloučit motiv GRB",
+                "es": "Excluir el tema GRB",
+                "nl": "GRB-thema uitsluiten",
+                "ko": "GRB 테마 제외"
               }
             }
           ]
@@ -791,12 +838,12 @@
             {
               "osmTags": "theme!=grb",
               "question": {
-                "en": "Exclude GRB theme",
-                "de": "GRB-Thema ausschließen",
-                "cs": "Vyloučit motiv GRB",
-                "es": "Excluir el tema GRB",
-                "nl": "GRB-thema uitsluiten",
-                "ko": "GRB 테마 제외"
+                "en": "Exclude etymology theme",
+                "de": "Etymologie-Thema ausschließen",
+                "cs": "Vyloučit etymologii tématu",
+                "es": "Excluir el tema de etimología",
+                "nl": "Thema etymologie uitsluiten",
+                "ko": "어원 테마 제외"
               }
             }
           ]
diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json
index d50ff1be8..49682a16b 100644
--- a/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json
+++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.proto.json
@@ -428,7 +428,12 @@
           "options": [
             {
               "question": {
-                "en": "All platforms"
+                "en": "Changeset added at least one image",
+                "cs": "Sada změn přidala alespoň jeden obrázek",
+                "de": "Changeset hat mindestens ein Bild hinzugefügt",
+                "es": "El conjunto de cambios agregó al menos una imagen",
+                "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다",
+                "nl": "Changeset voegde minstens één afbeelding toe"
               }
             },
             {
@@ -451,12 +456,12 @@
             {
               "osmTags": "add-image>0",
               "question": {
-                "en": "Changeset added at least one image",
-                "de": "Changeset hat mindestens ein Bild hinzugefügt",
-                "cs": "Sada změn přidala alespoň jeden obrázek",
-                "es": "El conjunto de cambios agregó al menos una imagen",
-                "nl": "Changeset voegde minstens één afbeelding toe",
-                "ko": "주요 변경사항에 최소 하나의 이미지가 추가 되었습니다"
+                "en": "Exclude GRB theme",
+                "de": "GRB-Thema ausschließen",
+                "cs": "Vyloučit motiv GRB",
+                "es": "Excluir el tema GRB",
+                "nl": "GRB-thema uitsluiten",
+                "ko": "GRB 테마 제외"
               }
             }
           ]
@@ -467,12 +472,12 @@
             {
               "osmTags": "theme!=grb",
               "question": {
-                "en": "Exclude GRB theme",
-                "de": "GRB-Thema ausschließen",
-                "cs": "Vyloučit motiv GRB",
-                "es": "Excluir el tema GRB",
-                "nl": "GRB-thema uitsluiten",
-                "ko": "GRB 테마 제외"
+                "en": "Exclude etymology theme",
+                "de": "Etymologie-Thema ausschließen",
+                "cs": "Vyloučit etymologii tématu",
+                "es": "Excluir el tema de etimología",
+                "nl": "Thema etymologie uitsluiten",
+                "ko": "어원 테마 제외"
               }
             }
           ]
diff --git a/capacitor.config.ts b/capacitor.config.ts
index ea3350695..f70edc7d9 100644
--- a/capacitor.config.ts
+++ b/capacitor.config.ts
@@ -1,11 +1,9 @@
-
-import type { CapacitorConfig } from "@capacitor/cli";
+import type { CapacitorConfig } from "@capacitor/cli"
 
 const config: CapacitorConfig = {
-  appId: "org.mapcomplete",
-  appName: "MapComplete",
-  webDir: "dist-full"
-};
-
-export default config;
+    appId: "org.mapcomplete",
+    appName: "MapComplete",
+    webDir: "dist-full",
+}
 
+export default config
diff --git a/langs/themes/cs.json b/langs/themes/cs.json
index 8095d514f..7070449c6 100644
--- a/langs/themes/cs.json
+++ b/langs/themes/cs.json
@@ -785,6 +785,13 @@
                             }
                         }
                     },
+                    "11": {
+                        "options": {
+                            "0": {
+                                "question": "Vyloučit etymologii tématu"
+                            }
+                        }
+                    },
                     "2": {
                         "options": {
                             "0": {
diff --git a/langs/themes/de.json b/langs/themes/de.json
index a99b1b018..75c649715 100644
--- a/langs/themes/de.json
+++ b/langs/themes/de.json
@@ -785,6 +785,13 @@
                             }
                         }
                     },
+                    "11": {
+                        "options": {
+                            "0": {
+                                "question": "Etymologie-Thema ausschließen"
+                            }
+                        }
+                    },
                     "2": {
                         "options": {
                             "0": {
diff --git a/langs/themes/en.json b/langs/themes/en.json
index 3cac383a3..0afc8aa49 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -785,6 +785,13 @@
                             }
                         }
                     },
+                    "11": {
+                        "options": {
+                            "0": {
+                                "question": "Exclude etymology theme"
+                            }
+                        }
+                    },
                     "2": {
                         "options": {
                             "0": {
@@ -831,6 +838,12 @@
                         "options": {
                             "0": {
                                 "question": "Changeset added at least one image"
+                            },
+                            "1": {
+                                "question": "Made with Android"
+                            },
+                            "2": {
+                                "question": "Made on the web"
                             }
                         }
                     },
@@ -856,6 +869,17 @@
                         "question": "What locale (language) was this change made in?",
                         "render": "User locale is {locale}"
                     },
+                    "platform": {
+                        "mappings": {
+                            "0": {
+                                "then": "Made on the web"
+                            },
+                            "1": {
+                                "then": "Made with the android app"
+                            }
+                        },
+                        "question": "With what platform was the change made?"
+                    },
                     "show_changeset_id": {
                         "render": "Changeset <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
                     },
diff --git a/langs/themes/es.json b/langs/themes/es.json
index 446d633b5..bfba91603 100644
--- a/langs/themes/es.json
+++ b/langs/themes/es.json
@@ -776,6 +776,13 @@
                             }
                         }
                     },
+                    "11": {
+                        "options": {
+                            "0": {
+                                "question": "Excluir el tema de etimología"
+                            }
+                        }
+                    },
                     "2": {
                         "options": {
                             "0": {
diff --git a/langs/themes/ko.json b/langs/themes/ko.json
index 077ba2d08..e291edde8 100644
--- a/langs/themes/ko.json
+++ b/langs/themes/ko.json
@@ -785,6 +785,13 @@
                             }
                         }
                     },
+                    "11": {
+                        "options": {
+                            "0": {
+                                "question": "어원 테마 제외"
+                            }
+                        }
+                    },
                     "2": {
                         "options": {
                             "0": {
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index aafd86378..2557fabac 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -836,6 +836,13 @@
                             }
                         }
                     },
+                    "11": {
+                        "options": {
+                            "0": {
+                                "question": "Thema etymologie uitsluiten"
+                            }
+                        }
+                    },
                     "2": {
                         "options": {
                             "0": {
diff --git a/package-lock.json b/package-lock.json
index 3275a3f33..ae6f4a88f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12780,9 +12780,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001692",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
-      "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==",
+      "version": "1.0.30001699",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz",
+      "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==",
       "dev": true,
       "funding": [
         {
@@ -12797,7 +12797,8 @@
           "type": "github",
           "url": "https://github.com/sponsors/ai"
         }
-      ]
+      ],
+      "license": "CC-BY-4.0"
     },
     "node_modules/canonicalize": {
       "version": "1.0.8",
@@ -39820,9 +39821,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001692",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
-      "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==",
+      "version": "1.0.30001699",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001699.tgz",
+      "integrity": "sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==",
       "dev": true
     },
     "canonicalize": {
diff --git a/scripts/downloadCommunityIndex.ts b/scripts/downloadCommunityIndex.ts
index 2fce588b7..a95329b61 100644
--- a/scripts/downloadCommunityIndex.ts
+++ b/scripts/downloadCommunityIndex.ts
@@ -8,7 +8,6 @@ import { Tiles } from "../src/Models/TileRange"
 import ScriptUtils from "./ScriptUtils"
 
 class DownloadCommunityIndex extends Script {
-
     constructor() {
         super("Updates the community index")
     }
@@ -18,7 +17,8 @@ class DownloadCommunityIndex extends Script {
     }
 
     private static targetZoomlevel: number = 6
-    private static upstreamUrl: string = "https://raw.githubusercontent.com/osmlab/osm-community-index/main/dist/"
+    private static upstreamUrl: string =
+        "https://raw.githubusercontent.com/osmlab/osm-community-index/main/dist/"
 
     /**
      * Prunes away unnecessary fields from a CommunityResource
@@ -33,12 +33,14 @@ class DownloadCommunityIndex extends Script {
             resolved: {
                 name: r.resolved.name,
                 description: r.resolved.description,
-                url: r.resolved.url
-            }
+                url: r.resolved.url,
+            },
         }
     }
 
-    private static stripResourcesObj(resources: Readonly<Record<string, Readonly<CommunityResource>>>) {
+    private static stripResourcesObj(
+        resources: Readonly<Record<string, Readonly<CommunityResource>>>
+    ) {
         const stripped: Record<string, CommunityResource> = {}
         for (const k in resources) {
             const type = resources[k].type
@@ -52,20 +54,24 @@ class DownloadCommunityIndex extends Script {
     }
 
     public static async update(targetDirectory: string) {
-        const data = await Utils.downloadJson<FeatureCollection<Polygon | MultiPolygon, {
-            resources: Record<string, CommunityResource>,
-            nameEn: string,
-            id: string
-        }>>(DownloadCommunityIndex.upstreamUrl + "completeFeatureCollection.json"
-        )
+        const data = await Utils.downloadJson<
+            FeatureCollection<
+                Polygon | MultiPolygon,
+                {
+                    resources: Record<string, CommunityResource>
+                    nameEn: string
+                    id: string
+                }
+            >
+        >(DownloadCommunityIndex.upstreamUrl + "completeFeatureCollection.json")
         if (!existsSync(targetDirectory)) {
             mkdirSync(targetDirectory)
         }
         const features = data.features
-        const global = features.find(
-            f => f.id === "Q2"
+        const global = features.find((f) => f.id === "Q2")
+        const globalProperties = DownloadCommunityIndex.stripResourcesObj(
+            global.properties.resources
         )
-        const globalProperties = DownloadCommunityIndex.stripResourcesObj(global.properties.resources)
         writeFileSync(targetDirectory + "/global.json", JSON.stringify(globalProperties), "utf8")
         console.log("Written global properties")
 
@@ -80,12 +86,15 @@ class DownloadCommunityIndex extends Script {
             const url = `${DownloadCommunityIndex.upstreamUrl}img/${type}.svg`
             await ScriptUtils.DownloadFileTo(url, `${targetDirectory}/${type}.svg`)
         }
-        const local = features.filter(f => f.id !== "Q2")
+        const local = features.filter((f) => f.id !== "Q2")
         const spread = GeoOperations.spreadIntoBboxes(local, DownloadCommunityIndex.targetZoomlevel)
         let written = 0
         let skipped = 0
         const writtenTilesOverview: Record<number, number[]> = {}
-        writeFileSync(targetDirectory + "local.geojson", JSON.stringify({ type: "FeatureCollection", features: local }))
+        writeFileSync(
+            targetDirectory + "local.geojson",
+            JSON.stringify({ type: "FeatureCollection", features: local })
+        )
         for (const tileIndex of spread.keys()) {
             const features = spread.get(tileIndex)
             const clipped = GeoOperations.clipAllInBox(features, tileIndex)
@@ -94,7 +103,9 @@ class DownloadCommunityIndex extends Script {
                 continue
             }
             for (const f of clipped) {
-                f.properties.resources = DownloadCommunityIndex.stripResourcesObj(f.properties.resources)
+                f.properties.resources = DownloadCommunityIndex.stripResourcesObj(
+                    f.properties.resources
+                )
             }
 
             const [z, x, y] = Tiles.tile_from_index(tileIndex)
@@ -102,7 +113,11 @@ class DownloadCommunityIndex extends Script {
             clipped.forEach((f) => {
                 delete f.bbox
             })
-            writeFileSync(path, JSON.stringify({ type: "FeatureCollection", features: clipped }), "utf8")
+            writeFileSync(
+                path,
+                JSON.stringify({ type: "FeatureCollection", features: clipped }),
+                "utf8"
+            )
             written++
             let yList = writtenTilesOverview[x]
             if (!yList) {
@@ -113,11 +128,14 @@ class DownloadCommunityIndex extends Script {
             console.log(`Written tile ${path}`)
         }
         console.log(`Created ${written} tiles, skipped ${skipped}`)
-        writeFileSync(targetDirectory + "/tile_6_overview.json", JSON.stringify(writtenTilesOverview), "utf8")
+        writeFileSync(
+            targetDirectory + "/tile_6_overview.json",
+            JSON.stringify(writtenTilesOverview),
+            "utf8"
+        )
         console.log("Created overview file")
     }
 
-
     async main(args: string[]): Promise<void> {
         const path = args[0]
         if (!path) {
@@ -126,7 +144,6 @@ class DownloadCommunityIndex extends Script {
         }
 
         await DownloadCommunityIndex.update(path)
-
     }
 }
 
diff --git a/scripts/generateDocs.ts b/scripts/generateDocs.ts
index 0dd694eea..46292a31d 100644
--- a/scripts/generateDocs.ts
+++ b/scripts/generateDocs.ts
@@ -138,7 +138,7 @@ export class GenerateDocs extends Script {
         ScriptUtils.fixUtils()
 
         this.WriteMarkdownFile("./Docs/SpecialRenderings.md", SpecialVisualizations.HelpMessage(), [
-            "src/UI/SpecialVisualizations.ts"
+            "src/UI/SpecialVisualizations.ts",
         ])
 
         if (!existsSync("./Docs/Themes")) {
@@ -171,7 +171,6 @@ export class GenerateDocs extends Script {
             ScriptUtils.erasableLog("Written docs for theme", theme.id)
         })
 
-
         this.WriteMarkdownFile(
             "./Docs/CalculatedTags.md",
             ["# Metatags", SimpleMetaTaggers.HelpText(), ExtraFunctions.HelpText()].join("\n"),
diff --git a/scripts/generateLayerOverview.ts b/scripts/generateLayerOverview.ts
index f5d259dee..fb727f7d0 100644
--- a/scripts/generateLayerOverview.ts
+++ b/scripts/generateLayerOverview.ts
@@ -9,12 +9,16 @@ import {
     DoesImageExist,
     PrevalidateTheme,
     ValidateLayer,
-    ValidateThemeEnsemble
+    ValidateThemeEnsemble,
 } from "../src/Models/ThemeConfig/Conversion/Validation"
 import { Translation } from "../src/UI/i18n/Translation"
 import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer"
 import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme"
-import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion"
+import {
+    Conversion,
+    DesugaringContext,
+    DesugaringStep,
+} from "../src/Models/ThemeConfig/Conversion/Conversion"
 import { Utils } from "../src/Utils"
 import Script from "./Script"
 import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
@@ -620,10 +624,7 @@ class LayerOverviewUtils extends Script {
         for (const sharedLayerPath of ScriptUtils.getLayerPaths()) {
             if (whitelist.size > 0) {
                 const idByPath = sharedLayerPath.split("/").at(-1).split(".")[0]
-                if (
-                    !Constants.isPriviliged(idByPath) &&
-                    !whitelist.has(idByPath)
-                ) {
+                if (!Constants.isPriviliged(idByPath) && !whitelist.has(idByPath)) {
                     continue
                 }
             }
diff --git a/scripts/generateLayouts.ts b/scripts/generateLayouts.ts
index dc4fa9eed..02033237b 100644
--- a/scripts/generateLayouts.ts
+++ b/scripts/generateLayouts.ts
@@ -338,7 +338,7 @@ class GenerateLayouts extends Script {
             "https://api.panoramax.xyz",
             "https://panoramax.mapcomplete.org",
             "https://data.velopark.be",
-            "https://data.mapcomplete.org"
+            "https://data.mapcomplete.org",
         ].concat(...(await this.eliUrls()))
 
         SpecialVisualizations.specialVisualizations.forEach((sv) => {
diff --git a/src/Logic/Actors/GeoLocationHandler.ts b/src/Logic/Actors/GeoLocationHandler.ts
index 49c1adf7a..ec04f1063 100644
--- a/src/Logic/Actors/GeoLocationHandler.ts
+++ b/src/Logic/Actors/GeoLocationHandler.ts
@@ -13,7 +13,6 @@ import StaticFeatureSource, {
 } from "../FeatureSource/Sources/StaticFeatureSource"
 import { MapProperties } from "../../Models/MapProperties"
 import { Orientation } from "../../Sensors/Orientation"
-
 ;("use strict")
 /**
  * The geolocation-handler takes a map-location and a geolocation state.
diff --git a/src/Logic/BBox.ts b/src/Logic/BBox.ts
index a9734ee29..7faebcdff 100644
--- a/src/Logic/BBox.ts
+++ b/src/Logic/BBox.ts
@@ -6,7 +6,7 @@ import { bbox } from "@turf/bbox"
 export class BBox {
     static global: BBox = new BBox([
         [-180, -90],
-        [180, 90]
+        [180, 90],
     ])
     readonly maxLat: number
     readonly maxLon: number
@@ -62,7 +62,7 @@ export class BBox {
     static fromLeafletBounds(bounds) {
         return new BBox([
             [bounds.getWest(), bounds.getNorth()],
-            [bounds.getEast(), bounds.getSouth()]
+            [bounds.getEast(), bounds.getSouth()],
         ])
     }
 
@@ -101,7 +101,7 @@ export class BBox {
         }
         return new BBox([
             [maxLon, maxLat],
-            [minLon, minLat]
+            [minLon, minLat],
         ])
     }
 
@@ -128,7 +128,7 @@ export class BBox {
     public unionWith(other: BBox) {
         return new BBox([
             [Math.max(this.maxLon, other.maxLon), Math.max(this.maxLat, other.maxLat)],
-            [Math.min(this.minLon, other.minLon), Math.min(this.minLat, other.minLat)]
+            [Math.min(this.minLon, other.minLon), Math.min(this.minLat, other.minLat)],
         ])
     }
 
@@ -181,7 +181,7 @@ export class BBox {
 
         return new BBox([
             [lon - s / 2, lat - s / 2],
-            [lon + s / 2, lat + s / 2]
+            [lon + s / 2, lat + s / 2],
         ])
     }
 
@@ -238,21 +238,21 @@ export class BBox {
         const lonDiff = Math.min(maxIncrease / 2, Math.abs(this.maxLon - this.minLon) * factor)
         return new BBox([
             [this.minLon - lonDiff, this.minLat - latDiff],
-            [this.maxLon + lonDiff, this.maxLat + latDiff]
+            [this.maxLon + lonDiff, this.maxLat + latDiff],
         ])
     }
 
     padAbsolute(degrees: number): BBox {
         return new BBox([
             [this.minLon - degrees, this.minLat - degrees],
-            [this.maxLon + degrees, this.maxLat + degrees]
+            [this.maxLon + degrees, this.maxLat + degrees],
         ])
     }
 
     toLngLat(): [[number, number], [number, number]] {
         return [
             [this.minLon, this.minLat],
-            [this.maxLon, this.maxLat]
+            [this.maxLon, this.maxLat],
         ]
     }
 
@@ -271,7 +271,7 @@ export class BBox {
         return {
             type: "Feature",
             properties: properties,
-            geometry: this.asGeometry()
+            geometry: this.asGeometry(),
         }
     }
 
@@ -284,9 +284,9 @@ export class BBox {
                     [this.maxLon, this.minLat],
                     [this.maxLon, this.maxLat],
                     [this.minLon, this.maxLat],
-                    [this.minLon, this.minLat]
-                ]
-            ]
+                    [this.minLon, this.minLat],
+                ],
+            ],
         }
     }
 
@@ -316,7 +316,7 @@ export class BBox {
             minLon,
             maxLon,
             minLat,
-            maxLat
+            maxLat,
         }
     }
 
diff --git a/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts b/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts
index 502d27407..d9505822b 100644
--- a/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts
+++ b/src/Logic/FeatureSource/Actors/SaveFeatureSourceToLocalStorage.ts
@@ -77,21 +77,34 @@ export default class SaveFeatureSourceToLocalStorage {
         this.storage = storage
         const singleTileSavers: Map<number, SingleTileSaver> = new Map<number, SingleTileSaver>()
         features.features.addCallbackAndRunD((features) => {
-            if (features.some(f => {
-                let totalPoints = 0
-                if (f.geometry.type === "MultiPolygon") {
-                    totalPoints = f.geometry.coordinates.map(rings => rings.map(ring => ring.length).reduce((a, b) => a + b)).reduce((a, b) => a + b)
-                } else if (f.geometry.type === "Polygon" || f.geometry.type === "MultiLineString") {
-                    totalPoints = f.geometry.coordinates.map(ring => ring.length).reduce((a, b) => a + b)
-                } else if (f.geometry.type === "LineString") {
-                    totalPoints = f.geometry.coordinates.length
-                }
-                if (totalPoints > 1000) {
-                    console.warn(`Not caching tiles, detected a big object (${totalPoints} points for ${f.properties.id})`)
-                    return true
-                }
-                return false
-            })) {
+            if (
+                features.some((f) => {
+                    let totalPoints = 0
+                    if (f.geometry.type === "MultiPolygon") {
+                        totalPoints = f.geometry.coordinates
+                            .map((rings) =>
+                                rings.map((ring) => ring.length).reduce((a, b) => a + b)
+                            )
+                            .reduce((a, b) => a + b)
+                    } else if (
+                        f.geometry.type === "Polygon" ||
+                        f.geometry.type === "MultiLineString"
+                    ) {
+                        totalPoints = f.geometry.coordinates
+                            .map((ring) => ring.length)
+                            .reduce((a, b) => a + b)
+                    } else if (f.geometry.type === "LineString") {
+                        totalPoints = f.geometry.coordinates.length
+                    }
+                    if (totalPoints > 1000) {
+                        console.warn(
+                            `Not caching tiles, detected a big object (${totalPoints} points for ${f.properties.id})`
+                        )
+                        return true
+                    }
+                    return false
+                })
+            ) {
                 // Has big objects
                 return
             }
diff --git a/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts b/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts
index 848d8734b..71a2edbcb 100644
--- a/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts
+++ b/src/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts
@@ -37,8 +37,11 @@ export default class DynamicGeoJsonTileSource extends UpdatableDynamicTileSource
             if (DynamicGeoJsonTileSource.whitelistCache.has(whitelistUrl)) {
                 whitelist = DynamicGeoJsonTileSource.whitelistCache.get(whitelistUrl)
             } else {
-                Utils.downloadJsonCached<Record<string | number, number[]>>(whitelistUrl, 1000 * 60 * 60)
-                    .then(json => {
+                Utils.downloadJsonCached<Record<string | number, number[]>>(
+                    whitelistUrl,
+                    1000 * 60 * 60
+                )
+                    .then((json) => {
                         const data = new Map<number, Set<number>>()
                         for (const x in json) {
                             if (x === "zoom") {
diff --git a/src/Logic/GeoOperations.ts b/src/Logic/GeoOperations.ts
index b049399ea..d520e0faf 100644
--- a/src/Logic/GeoOperations.ts
+++ b/src/Logic/GeoOperations.ts
@@ -10,12 +10,12 @@ import {
     MultiPolygon,
     Point,
     Polygon,
-    Position
+    Position,
 } from "geojson"
 import { Tiles } from "../Models/TileRange"
 import { Utils } from "../Utils"
 
-("use strict")
+;("use strict")
 
 export class GeoOperations {
     private static readonly _earthRadius = 6378137
@@ -29,7 +29,7 @@ export class GeoOperations {
         "behind",
         "sharp_left",
         "left",
-        "slight_left"
+        "slight_left",
     ] as const
     private static reverseBearing = {
         N: 0,
@@ -47,7 +47,7 @@ export class GeoOperations {
         W: 270,
         WNW: 292.5,
         NW: 315,
-        NNW: 337.5
+        NNW: 337.5,
     }
 
     /**
@@ -309,7 +309,7 @@ export class GeoOperations {
         bufferSizeInMeter: number
     ): Feature<Polygon | MultiPolygon> | FeatureCollection<Polygon | MultiPolygon> {
         return turf.buffer(feature, bufferSizeInMeter / 1000, {
-            units: "kilometers"
+            units: "kilometers",
         })
     }
 
@@ -325,9 +325,9 @@ export class GeoOperations {
                     [lon0, lat],
                     [lon0, lat0],
                     [lon, lat0],
-                    [lon, lat]
-                ]
-            }
+                    [lon, lat],
+                ],
+            },
         }
     }
 
@@ -345,7 +345,10 @@ export class GeoOperations {
     public static nearestPoint(
         way: Feature<LineString>,
         point: [number, number]
-    ): Feature<Point, { dist: number; index: number; multiFeatureIndex: number; location: number }> {
+    ): Feature<
+        Point,
+        { dist: number; index: number; multiFeatureIndex: number; location: number }
+    > {
         return turf.nearestPointOnLine(<Feature<LineString>>way, point, { units: "kilometers" })
     }
 
@@ -368,9 +371,9 @@ export class GeoOperations {
                 type: "Feature",
                 geometry: {
                     type: "LineString",
-                    coordinates: way.geometry.coordinates[0]
+                    coordinates: way.geometry.coordinates[0],
                 },
-                properties: way.properties
+                properties: way.properties,
             }
         }
         if (way.geometry.type === "MultiPolygon") {
@@ -378,9 +381,9 @@ export class GeoOperations {
                 type: "Feature",
                 geometry: {
                     type: "MultiLineString",
-                    coordinates: way.geometry.coordinates[0]
+                    coordinates: way.geometry.coordinates[0],
                 },
-                properties: way.properties
+                properties: way.properties,
             }
         }
         if (way.geometry.type === "LineString") {
@@ -542,7 +545,10 @@ export class GeoOperations {
      * Note: IDs are rewritten
      * Also @see spreadIntoBBoxes
      */
-    public static clipAllInBox(features: ReadonlyArray<Readonly<Feature>>, tileIndex: number): Feature[] {
+    public static clipAllInBox(
+        features: ReadonlyArray<Readonly<Feature>>,
+        tileIndex: number
+    ): Feature[] {
         const bbox = Tiles.asGeojson(tileIndex)
         const newFeatures: Feature[] = []
         for (const f of features) {
@@ -555,7 +561,7 @@ export class GeoOperations {
                 }
                 const properties = {
                     ...f.properties,
-                    id
+                    id,
                 }
                 intersectionPart.properties = properties
                 newFeatures.push(intersectionPart)
@@ -587,8 +593,8 @@ export class GeoOperations {
                         properties: {},
                         geometry: {
                             type: "Point",
-                            coordinates: p
-                        }
+                            coordinates: p,
+                        },
                     }
             )
         }
@@ -604,7 +610,7 @@ export class GeoOperations {
             trackPoints.push(trkpt)
         }
         const header =
-            "<gpx version=\"1.1\" creator=\"mapcomplete.org\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">"
+            '<gpx version="1.1" creator="mapcomplete.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">'
         return (
             header +
             "\n<name>" +
@@ -643,7 +649,7 @@ export class GeoOperations {
             trackPoints.push(trkpt)
         }
         const header =
-            "<gpx version=\"1.1\" creator=\"mapcomplete.org\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">"
+            '<gpx version="1.1" creator="mapcomplete.org" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">'
         return (
             header +
             "\n<name>" +
@@ -669,7 +675,7 @@ export class GeoOperations {
 
         const copy = {
             ...feature,
-            geometry: { ...feature.geometry }
+            geometry: { ...feature.geometry },
         }
         let coordinates: [number, number][]
         if (feature.geometry.type === "LineString") {
@@ -727,8 +733,8 @@ export class GeoOperations {
                 type: "Feature",
                 geometry: {
                     type: "LineString",
-                    coordinates: [a, b]
-                }
+                    coordinates: [a, b],
+                },
             },
             distanceMeter,
             { units: "meters" }
@@ -769,13 +775,17 @@ export class GeoOperations {
         possiblyEnclosingFeature: Readonly<Feature<Polygon | MultiPolygon>>
     ): boolean {
         if (feature.geometry.type === "MultiPolygon") {
-            const polygons = feature.geometry.coordinates.map(coordinates =>
-                <Feature<Polygon>>{
-                    type: "Feature", geometry: {
-                        type: "Polygon", coordinates
+            const polygons = feature.geometry.coordinates.map(
+                (coordinates) =>
+                    <Feature<Polygon>>{
+                        type: "Feature",
+                        geometry: {
+                            type: "Polygon",
+                            coordinates,
+                        },
                     }
-                })
-            return !polygons.some(polygon => !booleanWithin(polygon, possiblyEnclosingFeature))
+            )
+            return !polygons.some((polygon) => !booleanWithin(polygon, possiblyEnclosingFeature))
         }
         return booleanWithin(feature, possiblyEnclosingFeature)
     }
@@ -784,7 +794,10 @@ export class GeoOperations {
      * Create an intersection between two features.
      * One or multiple new feature are returned based on 'toSplit', which'll have a geometry that is completely withing boundary
      */
-    public static clipWith(toSplit: Readonly<Feature>, boundary: Readonly<Feature<Polygon>>): Feature[] {
+    public static clipWith(
+        toSplit: Readonly<Feature>,
+        boundary: Readonly<Feature<Polygon>>
+    ): Feature[] {
         if (toSplit.geometry.type === "Point") {
             const p = <Feature<Point>>toSplit
             if (GeoOperations.inside(<[number, number]>p.geometry.coordinates, boundary)) {
@@ -795,7 +808,10 @@ export class GeoOperations {
         }
 
         if (toSplit.geometry.type === "LineString") {
-            const splitup: Feature<LineString>[] = turf.lineSplit(<Feature<LineString>>toSplit, boundary).features
+            const splitup: Feature<LineString>[] = turf.lineSplit(
+                <Feature<LineString>>toSplit,
+                boundary
+            ).features
             const kept: Feature[] = []
             for (const f of splitup) {
                 if (!GeoOperations.inside(GeoOperations.centerpointCoordinates(f), boundary)) {
@@ -825,21 +841,29 @@ export class GeoOperations {
             return kept
         }
         if (toSplit.geometry.type === "Polygon" || toSplit.geometry.type == "MultiPolygon") {
-
-            const splitup = turf.intersect(turf.featureCollection([<Feature<Polygon | MultiPolygon>>toSplit, boundary]))
+            const splitup = turf.intersect(
+                turf.featureCollection([<Feature<Polygon | MultiPolygon>>toSplit, boundary])
+            )
             if (splitup === null) {
                 // No intersection found.
                 // Either: the boundary is contained fully in 'toSplit', 'toSplit' is contained fully in 'boundary' or they are unrelated at all
                 if (GeoOperations.completelyWithin(toSplit, boundary)) {
                     return [toSplit]
                 }
-                if (GeoOperations.completelyWithin(boundary, <Feature<Polygon | MultiPolygon>>toSplit)) {
-                    return [{
-                        type: "Feature",
-                        properties: { ...toSplit.properties },
-                        geometry: boundary.geometry,
-                        bbox: boundary.bbox
-                    }]
+                if (
+                    GeoOperations.completelyWithin(
+                        boundary,
+                        <Feature<Polygon | MultiPolygon>>toSplit
+                    )
+                ) {
+                    return [
+                        {
+                            type: "Feature",
+                            properties: { ...toSplit.properties },
+                            geometry: boundary.geometry,
+                            bbox: boundary.bbox,
+                        },
+                    ]
                 }
                 return []
             }
@@ -911,7 +935,9 @@ export class GeoOperations {
                 return undefined
             case "end":
                 if (feature.geometry.type === "LineString") {
-                    return <[number, number]>(<Feature<LineString>>feature).geometry.coordinates.at(-1)
+                    return <[number, number]>(
+                        (<Feature<LineString>>feature).geometry.coordinates.at(-1)
+                    )
                 }
                 return undefined
             default:
@@ -934,8 +960,8 @@ export class GeoOperations {
             properties: p.properties,
             geometry: {
                 type: "LineString",
-                coordinates: p.geometry.coordinates[0]
-            }
+                coordinates: p.geometry.coordinates[0],
+            },
         }
     }
 
@@ -963,7 +989,7 @@ export class GeoOperations {
                             console.debug("Splitting way", feature.properties.id)
                             result.push(<Feature>{
                                 ...feature,
-                                geometry: { ...feature.geometry, coordinates: coors.slice(i + 1) }
+                                geometry: { ...feature.geometry, coordinates: coors.slice(i + 1) },
                             })
                             coors = coors.slice(0, i + 1)
                             break
@@ -972,7 +998,7 @@ export class GeoOperations {
                 }
                 result.push(<Feature>{
                     ...feature,
-                    geometry: { ...feature.geometry, coordinates: coors }
+                    geometry: { ...feature.geometry, coordinates: coors },
                 })
             }
         }
@@ -1146,8 +1172,8 @@ export class GeoOperations {
                 properties: multiLineStringFeature.properties,
                 geometry: {
                     type: "LineString",
-                    coordinates: coors[0]
-                }
+                    coordinates: coors[0],
+                },
             }
         }
         return {
@@ -1155,8 +1181,8 @@ export class GeoOperations {
             properties: multiLineStringFeature.properties,
             geometry: {
                 type: "MultiLineString",
-                coordinates: coors
-            }
+                coordinates: coors,
+            },
         }
     }
 
@@ -1306,9 +1332,10 @@ export class GeoOperations {
                 }
                 if (e.message.indexOf("SweepLine tree") >= 0) {
                     console.log("Applying fallback intersection...")
-                    const intersection = turf.intersect(turf.featureCollection([
+                    const intersection = turf.intersect(
+                        turf.featureCollection([
                             turf.truncate(feature),
-                            turf.truncate(otherFeature)
+                            turf.truncate(otherFeature),
                         ])
                     )
                     if (intersection == null) {
diff --git a/src/Logic/ImageProviders/AllImageProviders.ts b/src/Logic/ImageProviders/AllImageProviders.ts
index 457e37d5d..311d0be43 100644
--- a/src/Logic/ImageProviders/AllImageProviders.ts
+++ b/src/Logic/ImageProviders/AllImageProviders.ts
@@ -83,11 +83,15 @@ export default class AllImageProviders {
     ): number {
         let count = 0
 
-        const sources = [Imgur.singleton,
+        const sources = [
+            Imgur.singleton,
             Mapillary.singleton,
             Panoramax.singleton,
-            AllImageProviders.genericImageProvider]
-        const allPrefixes = Utils.Dedup(prefixes ?? [].concat(...sources.map(s => s.defaultKeyPrefixes)))
+            AllImageProviders.genericImageProvider,
+        ]
+        const allPrefixes = Utils.Dedup(
+            prefixes ?? [].concat(...sources.map((s) => s.defaultKeyPrefixes))
+        )
         for (const prefix of allPrefixes) {
             for (const k in tags) {
                 if (!tags[k]) {
diff --git a/src/Logic/ImageProviders/Panoramax.ts b/src/Logic/ImageProviders/Panoramax.ts
index 7bf208c18..710c871c8 100644
--- a/src/Logic/ImageProviders/Panoramax.ts
+++ b/src/Logic/ImageProviders/Panoramax.ts
@@ -32,7 +32,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
             lat: number
         }
     ): BaseUIElement {
-        const host = ("https://" + new URL(img.url).host)
+        const host = "https://" + new URL(img.url).host
         const p = new Panoramax(host)
         return new Link(
             new SvelteUIElement(Panoramax_bw),
diff --git a/src/Logic/Osm/ChangesetHandler.ts b/src/Logic/Osm/ChangesetHandler.ts
index 88d9ea5e2..5f364c5ce 100644
--- a/src/Logic/Osm/ChangesetHandler.ts
+++ b/src/Logic/Osm/ChangesetHandler.ts
@@ -53,7 +53,7 @@ export class ChangesetHandler {
             | { addAlias: (id0: string, id1: string) => void }
             | undefined,
         changes: Changes,
-        reportError: (e: string | Error, extramessage: string) => void,
+        reportError: (e: string | Error, extramessage: string) => void
     ) {
         this.osmConnection = osmConnection
         this._reportError = reportError
@@ -114,7 +114,7 @@ export class ChangesetHandler {
     private async UploadWithNew(
         generateChangeXML: (csid: number, remappings: Map<string, string>) => string,
         openChangeset: UIEventSource<number>,
-        extraMetaTags: ChangesetTag[],
+        extraMetaTags: ChangesetTag[]
     ) {
         const csId = await this.OpenChangeset(extraMetaTags)
         openChangeset.setData(csId)
@@ -122,7 +122,7 @@ export class ChangesetHandler {
         console.log(
             "Opened a new changeset (openChangeset.data is undefined):",
             changeset,
-            extraMetaTags,
+            extraMetaTags
         )
         const changes = await this.UploadChange(csId, changeset)
         const hasSpecialMotivationChanges = ChangesetHandler.rewriteMetaTags(extraMetaTags, changes)
@@ -145,7 +145,7 @@ export class ChangesetHandler {
     public async UploadChangeset(
         generateChangeXML: (csid: number, remappings: Map<string, string>) => string,
         extraMetaTags: ChangesetTag[],
-        openChangeset: UIEventSource<number>,
+        openChangeset: UIEventSource<number>
     ): Promise<void> {
         if (
             !extraMetaTags.some((tag) => tag.key === "comment") ||
@@ -180,13 +180,13 @@ export class ChangesetHandler {
                     try {
                         const rewritings = await this.UploadChange(
                             csId,
-                            generateChangeXML(csId, this._remappings),
+                            generateChangeXML(csId, this._remappings)
                         )
 
                         const rewrittenTags = this.RewriteTagsOf(
                             extraMetaTags,
                             rewritings,
-                            oldChangesetMeta,
+                            oldChangesetMeta
                         )
                         await this.UpdateTags(csId, rewrittenTags)
                         return // We are done!
@@ -197,7 +197,7 @@ export class ChangesetHandler {
             } catch (e) {
                 this._reportError(
                     e,
-                    "While getting metadata from a changeset " + openChangeset.data,
+                    "While getting metadata from a changeset " + openChangeset.data
                 )
             }
         }
@@ -225,7 +225,7 @@ export class ChangesetHandler {
             console.warn(
                 "Could not open/upload changeset due to ",
                 e,
-                "trying again with a another fresh changeset ",
+                "trying again with a another fresh changeset "
             )
             openChangeset.setData(undefined)
 
@@ -251,7 +251,7 @@ export class ChangesetHandler {
             uid: number // User ID
             changes_count: number
             tags: any
-        },
+        }
     ): ChangesetTag[] {
         // Note: extraMetaTags is where all the tags are collected into
 
@@ -388,7 +388,7 @@ export class ChangesetHandler {
                 tag.key !== undefined &&
                 tag.value !== undefined &&
                 tag.key !== "" &&
-                tag.value !== "",
+                tag.value !== ""
         )
         const metadata = tags.map((kv) => `<tag k="${kv.key}" v="${escapeHtml(kv.value)}"/>`)
         const content = [`<osm><changeset>`, metadata, `</changeset></osm>`].join("")
@@ -434,7 +434,7 @@ export class ChangesetHandler {
         const csId = await this.osmConnection.put(
             "changeset/create",
             [`<osm><changeset>`, metadata, `</changeset></osm>`].join(""),
-            { "Content-Type": "text/xml" },
+            { "Content-Type": "text/xml" }
         )
         return Number(csId)
     }
@@ -444,12 +444,12 @@ export class ChangesetHandler {
      */
     private async UploadChange(
         changesetId: number,
-        changesetXML: string,
+        changesetXML: string
     ): Promise<Map<string, string>> {
         const response = await this.osmConnection.post<XMLDocument>(
             "changeset/" + changesetId + "/upload",
             changesetXML,
-            { "Content-Type": "text/xml" },
+            { "Content-Type": "text/xml" }
         )
         const changes = this.parseUploadChangesetResponse(response)
         console.log("Uploaded changeset ", changesetId)
diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts
index 72180d527..69a8de5be 100644
--- a/src/Logic/Osm/OsmConnection.ts
+++ b/src/Logic/Osm/OsmConnection.ts
@@ -10,44 +10,43 @@ import { AndroidPolyfill } from "../Web/AndroidPolyfill"
 import { QueryParameters } from "../Web/QueryParameters"
 
 interface OsmUserInfo {
-
-    "id": number,
-    "display_name": string,
-    "account_created": string,
-    "description": string,
-    "contributor_terms": {
-        "agreed": boolean,
-        "pd": boolean
+    id: number
+    display_name: string
+    account_created: string
+    description: string
+    contributor_terms: {
+        agreed: boolean
+        pd: boolean
     }
-    "img"?: {
-        "href": string,
+    img?: {
+        href: string
     }
-    "roles": string[]
-    "changesets": {
-        "count": number
+    roles: string[]
+    changesets: {
+        count: number
     }
     traces: {
         count: number
     }
-    "blocks": {
-        "received": {
-            "count": number,
-            "active": number
+    blocks: {
+        received: {
+            count: number
+            active: number
         }
     }
     home?: {
-        lat: number,
-        lon: number,
+        lat: number
+        lon: number
         zoom: number
     }
-    "languages": string[]
-    "messages": {
-        "received": {
-            "count": number,
-            "unread": number
-        },
-        "sent": {
-            "count": number
+    languages: string[]
+    messages: {
+        received: {
+            count: number
+            unread: number
+        }
+        sent: {
+            count: number
         }
 
         id: number
@@ -60,12 +59,10 @@ interface OsmUserInfo {
         traces: { count: number }
         blocks: { received: { count: number; active: number } }
         img?: { href: string }
-        home: { lat: number, lon: number }
+        home: { lat: number; lon: number }
         languages?: string[]
-        messages: { received: { count: number, unread: number }, sent: { count: number } }
-
-}
-
+        messages: { received: { count: number; unread: number }; sent: { count: number } }
+    }
 }
 
 export default interface UserDetails {
@@ -81,7 +78,6 @@ export default interface UserDetails {
     tracesCount: number
     description?: string
     languages: string[]
-
 }
 export type OsmServiceState = "online" | "readonly" | "offline" | "unknown" | "unreachable"
 
@@ -126,14 +122,14 @@ export class OsmConnection {
     public userDetails: UIEventSource<UserDetails | undefined>
     public isLoggedIn: Store<boolean>
     public gpxServiceIsOnline: UIEventSource<OsmServiceState> = new UIEventSource<OsmServiceState>(
-        "unknown",
+        "unknown"
     )
     public apiIsOnline: UIEventSource<OsmServiceState> = new UIEventSource<OsmServiceState>(
-        "unknown",
+        "unknown"
     )
 
     public loadingStatus = new UIEventSource<"not-attempted" | "loading" | "error" | "logged-in">(
-        "not-attempted",
+        "not-attempted"
     )
     public preferencesHandler: OsmPreferences
     public readonly _oauth_config: AuthConfig
@@ -193,7 +189,7 @@ export class OsmConnection {
             (user) =>
                 !!user &&
                 (this.apiIsOnline.data === "unknown" || this.apiIsOnline.data === "online"),
-            [this.apiIsOnline],
+            [this.apiIsOnline]
         )
 
         this._dryRun = options.dryRun ?? new UIEventSource<boolean>(false)
@@ -232,7 +228,7 @@ export class OsmConnection {
         defaultValue: string = undefined,
         options?: {
             prefix?: string
-        },
+        }
     ): UIEventSource<T | undefined> {
         const prefix = options?.prefix ?? "mapcomplete-"
         return <UIEventSource<T>>this.preferencesHandler.getPreference(key, defaultValue, prefix)
@@ -241,7 +237,7 @@ export class OsmConnection {
     public getPreference<T extends string = string>(
         key: string,
         defaultValue: string = undefined,
-        prefix: string = "mapcomplete-",
+        prefix: string = "mapcomplete-"
     ): UIEventSource<T | undefined> {
         return <UIEventSource<T>>this.preferencesHandler.getPreference(key, defaultValue, prefix)
     }
@@ -275,7 +271,7 @@ export class OsmConnection {
         }
         this.updateAuthObject(true)
         LocalStorageSource.get("location_before_login").setData(
-            Utils.runningFromConsole ? undefined : window.location.href,
+            Utils.runningFromConsole ? undefined : window.location.href
         )
 
         this.auth.authenticate((err) => {
@@ -292,11 +288,13 @@ export class OsmConnection {
                 this.loadingStatus.setData("error")
                 return
             }
-            const data = <{
-                "version": "0.6",
-                "license": "http://opendatacommons.org/licenses/odbl/1-0/",
-                "user": OsmUserInfo
-            }>JSON.parse(result)
+            const data = <
+                {
+                    version: "0.6"
+                    license: "http://opendatacommons.org/licenses/odbl/1-0/"
+                    user: OsmUserInfo
+                }
+            >JSON.parse(result)
             const user = data.user
             const userdetails: UserDetails = {
                 uid: user.id,
@@ -343,7 +341,7 @@ export class OsmConnection {
         method: "GET" | "POST" | "PUT" | "DELETE" = "GET",
         header?: Record<string, string>,
         content?: string,
-        allowAnonymous: boolean = false,
+        allowAnonymous: boolean = false
     ): Promise<string> {
         const connection: osmAuth = this.auth
         if (allowAnonymous && !this.auth.authenticated()) {
@@ -351,7 +349,7 @@ export class OsmConnection {
                 `${this.Backend()}/api/0.6/${path}`,
                 header,
                 method,
-                content,
+                content
             )
             if (possibleResult["content"]) {
                 return possibleResult["content"]
@@ -371,15 +369,15 @@ export class OsmConnection {
                     method,
                     headers: header,
                     content,
-                    path: `/api/0.6/${path}`
+                    path: `/api/0.6/${path}`,
                 },
-                function(err, response) {
+                function (err, response) {
                     if (err !== null) {
                         error(err)
                     } else {
                         ok(response)
                     }
-                },
+                }
             )
         })
     }
@@ -388,7 +386,7 @@ export class OsmConnection {
         path: string,
         content?: string,
         header?: Record<string, string>,
-        allowAnonymous: boolean = false,
+        allowAnonymous: boolean = false
     ): Promise<T> {
         return <T>await this.interact(path, "POST", header, content, allowAnonymous)
     }
@@ -396,7 +394,7 @@ export class OsmConnection {
     public async put<T extends string>(
         path: string,
         content?: string,
-        header?: Record<string, string>,
+        header?: Record<string, string>
     ): Promise<T> {
         return <T>await this.interact(path, "PUT", header, content)
     }
@@ -404,7 +402,7 @@ export class OsmConnection {
     public async get(
         path: string,
         header?: Record<string, string>,
-        allowAnonymous: boolean = false,
+        allowAnonymous: boolean = false
     ): Promise<string> {
         return await this.interact(path, "GET", header, undefined, allowAnonymous)
     }
@@ -443,7 +441,7 @@ export class OsmConnection {
             return new Promise<{ id: number }>((ok) => {
                 window.setTimeout(
                     () => ok({ id: Math.floor(Math.random() * 1000) }),
-                    Math.random() * 5000,
+                    Math.random() * 5000
                 )
             })
         }
@@ -453,9 +451,9 @@ export class OsmConnection {
             "notes.json",
             content,
             {
-                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
+                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
             },
-            true,
+            true
         )
         const parsed = JSON.parse(response)
         console.log("Got result:", parsed)
@@ -482,14 +480,14 @@ export class OsmConnection {
              * Note: these are called 'tags' on the wiki, but I opted to name them 'labels' instead as they aren't "key=value" tags, but just words.
              */
             labels: string[]
-        },
+        }
     ): Promise<{ id: number }> {
         if (this._dryRun.data) {
             console.warn("Dryrun enabled - not actually uploading GPX ", gpx)
             return new Promise<{ id: number }>((ok) => {
                 window.setTimeout(
                     () => ok({ id: Math.floor(Math.random() * 1000) }),
-                    Math.random() * 5000,
+                    Math.random() * 5000
                 )
             })
         }
@@ -498,7 +496,7 @@ export class OsmConnection {
             file: gpx,
             description: options.description,
             tags: options.labels?.join(",") ?? "",
-            visibility: options.visibility
+            visibility: options.visibility,
         }
 
         if (!contents.description) {
@@ -506,9 +504,9 @@ export class OsmConnection {
         }
         const extras = {
             file:
-                "; filename=\"" +
+                '; filename="' +
                 (options.filename ?? "gpx_track_mapcomplete_" + new Date().toISOString()) +
-                "\"\r\nContent-Type: application/gpx+xml"
+                '"\r\nContent-Type: application/gpx+xml',
         }
 
         const boundary = "987654"
@@ -516,7 +514,7 @@ export class OsmConnection {
         let body = ""
         for (const key in contents) {
             body += "--" + boundary + "\r\n"
-            body += "Content-Disposition: form-data; name=\"" + key + "\""
+            body += 'Content-Disposition: form-data; name="' + key + '"'
             if (extras[key] !== undefined) {
                 body += extras[key]
             }
@@ -527,7 +525,7 @@ export class OsmConnection {
 
         const response = await this.post("gpx/create", body, {
             "Content-Type": "multipart/form-data; boundary=" + boundary,
-            "Content-Length": "" + body.length
+            "Content-Length": "" + body.length,
         })
         const parsed = JSON.parse(response)
         console.log("Uploaded GPX track", parsed)
@@ -548,15 +546,15 @@ export class OsmConnection {
                 {
                     method: "POST",
 
-                    path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}`
+                    path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}`,
                 },
-                function(err) {
+                function (err) {
                     if (err !== null) {
                         error(err)
                     } else {
                         ok()
                     }
-                },
+                }
             )
         })
     }
@@ -576,15 +574,18 @@ export class OsmConnection {
     public getToken(): string {
         // https://www.openstreetmap.orgoauth2_access_token
         let prefix = this.Backend()
-        while(prefix.endsWith("/")){
-            prefix = prefix.substring(0, prefix.length-2)
+        while (prefix.endsWith("/")) {
+            prefix = prefix.substring(0, prefix.length - 2)
         }
-        return QueryParameters.GetQueryParameter(prefix+ "oauth_token", undefined).data ?? window.localStorage.getItem(this._oauth_config.url + "oauth2_access_token")
+        return (
+            QueryParameters.GetQueryParameter(prefix + "oauth_token", undefined).data ??
+            window.localStorage.getItem(this._oauth_config.url + "oauth2_access_token")
+        )
     }
 
     private async loginAndroidPolyfill() {
         const key = "https://www.openstreetmap.orgoauth2_access_token"
-        if(localStorage.getItem(key)){
+        if (localStorage.getItem(key)) {
             // We are probably already logged in
             return
         }
@@ -595,7 +596,6 @@ export class OsmConnection {
             console.log("Logged in!")
         }
         await this.loadUserInfo()
-
     }
     private updateAuthObject(autoLogin: boolean) {
         let redirect_uri = Utils.runningFromConsole
@@ -614,7 +614,7 @@ export class OsmConnection {
              */
             singlepage: !this._iframeMode && !AndroidPolyfill.inAndroid.data,
             auto: autoLogin,
-            apiUrl: this._oauth_config.api_url ?? this._oauth_config.url
+            apiUrl: this._oauth_config.api_url ?? this._oauth_config.url,
         })
         if (AndroidPolyfill.inAndroid.data) {
             this.loginAndroidPolyfill() // NO AWAIT!
@@ -658,7 +658,8 @@ export class OsmConnection {
         if (this.fakeUser) {
             return
         }
-        this.fetchCapabilities().then(({ api, gpx }) => {
+        this.fetchCapabilities()
+            .then(({ api, gpx }) => {
                 this.apiIsOnline.setData(api)
                 this.gpxServiceIsOnline.setData(gpx)
             })
@@ -695,7 +696,7 @@ export class OsmConnection {
         }
         try {
             const result = await Utils.downloadJson<CapabilityResult>(
-                this.Backend() + "/api/0.6/capabilities.json",
+                this.Backend() + "/api/0.6/capabilities.json"
             )
             if (result?.api?.status === undefined) {
                 console.log("Something went wrong:", result)
diff --git a/src/Logic/Search/CombinedSearcher.ts b/src/Logic/Search/CombinedSearcher.ts
index 64fb0d816..07affc4c1 100644
--- a/src/Logic/Search/CombinedSearcher.ts
+++ b/src/Logic/Search/CombinedSearcher.ts
@@ -1,4 +1,8 @@
-import GeocodingProvider, { GeocodeResult, GeocodingOptions, SearchResult } from "./GeocodingProvider"
+import GeocodingProvider, {
+    GeocodeResult,
+    GeocodingOptions,
+    SearchResult,
+} from "./GeocodingProvider"
 import { Utils } from "../../Utils"
 import { Store, Stores } from "../UIEventSource"
 
diff --git a/src/Logic/Search/PhotonSearch.ts b/src/Logic/Search/PhotonSearch.ts
index 153f74665..da93b4eb1 100644
--- a/src/Logic/Search/PhotonSearch.ts
+++ b/src/Logic/Search/PhotonSearch.ts
@@ -5,7 +5,7 @@ import GeocodingProvider, {
     GeocodingOptions,
     GeocodingUtils,
     ReverseGeocodingProvider,
-    ReverseGeocodingResult
+    ReverseGeocodingResult,
 } from "./GeocodingProvider"
 import { Utils } from "../../Utils"
 import { Feature, FeatureCollection } from "geojson"
diff --git a/src/Logic/Search/ThemeSearch.ts b/src/Logic/Search/ThemeSearch.ts
index 231fb3dd1..13f8d3e51 100644
--- a/src/Logic/Search/ThemeSearch.ts
+++ b/src/Logic/Search/ThemeSearch.ts
@@ -83,7 +83,10 @@ export default class ThemeSearch {
         }
 
         let linkPrefix = `${path}/${layout.id.toLowerCase()}.html?`
-        if ((location.hostname === "localhost" && !AndroidPolyfill.inAndroid.data) || location.hostname === "127.0.0.1") {
+        if (
+            (location.hostname === "localhost" && !AndroidPolyfill.inAndroid.data) ||
+            location.hostname === "127.0.0.1"
+        ) {
             linkPrefix = `${path}/theme.html?layout=${layout.id}&`
         }
 
diff --git a/src/Logic/SimpleMetaTagger.ts b/src/Logic/SimpleMetaTagger.ts
index f47a9fb4a..708b29bfa 100644
--- a/src/Logic/SimpleMetaTagger.ts
+++ b/src/Logic/SimpleMetaTagger.ts
@@ -80,7 +80,7 @@ export class ReferencingWaysMetaTagger extends SimpleMetaTagger {
         super({
             keys: ["_referencing_ways"],
             isLazy: true,
-            doc: "_referencing_ways contains - for a node - which ways use this node as point in their geometry. "
+            doc: "_referencing_ways contains - for a node - which ways use this node as point in their geometry. ",
         })
     }
 
@@ -116,7 +116,7 @@ class CountryTagger extends SimpleMetaTagger {
         super({
             keys: ["_country"],
             doc: "The country codes of the of the country/countries that the feature is located in (with latlon2country). Might contain _multiple_ countries, separated by a `;`",
-            includesDates: false
+            includesDates: false,
         })
     }
 
@@ -213,9 +213,9 @@ class RewriteMetaInfoTags extends SimpleMetaTagger {
                 "_last_edit:changeset",
                 "_last_edit:timestamp",
                 "_version_number",
-                "_backend"
+                "_backend",
             ],
-            doc: "Information about the last edit of this object. This object will actually _rewrite_ some tags for features coming from overpass"
+            doc: "Information about the last edit of this object. This object will actually _rewrite_ some tags for features coming from overpass",
         })
     }
 
@@ -246,16 +246,20 @@ class RewriteMetaInfoTags extends SimpleMetaTagger {
 
 class NormalizePanoramax extends SimpleMetaTagger {
     constructor() {
-        super(
-            {
-                keys: ["panoramax"],
-                doc: "Converts a `panoramax=hash1;hash2;hash3;...` into `panoramax=hash1`,`panoramax:0=hash1`...",
-                isLazy: false,
-                cleanupRetagger: true
-            })
+        super({
+            keys: ["panoramax"],
+            doc: "Converts a `panoramax=hash1;hash2;hash3;...` into `panoramax=hash1`,`panoramax:0=hash1`...",
+            isLazy: false,
+            cleanupRetagger: true,
+        })
     }
 
-    private addValue(comesFromKey: string, tags: Record<string, string>, hashesToAdd: string[], postfix?: string) {
+    private addValue(
+        comesFromKey: string,
+        tags: Record<string, string>,
+        hashesToAdd: string[],
+        postfix?: string
+    ) {
         let basekey = "panoramax"
         if (postfix) {
             basekey = "panoramax:" + postfix
@@ -279,7 +283,11 @@ class NormalizePanoramax extends SimpleMetaTagger {
      * new NormalizePanoramax().applyMetaTagsOnFeature(_, _, tags, _)
      * tags.data // => {"panoramax": "abc", "panoramax:0" : "def", "panoramax:1": "ghi", "panoramax:2":"xyz", "panoramax:3":"uvw", "panoramax:streetsign":"a", "panoramax:streetsign:0":"b","panoramax:streetsign:1": "c"}
      */
-    applyMetaTagsOnFeature(feature: Feature, layer: LayerConfig, tags: UIEventSource<Record<string, string>>): boolean {
+    applyMetaTagsOnFeature(
+        feature: Feature,
+        layer: LayerConfig,
+        tags: UIEventSource<Record<string, string>>
+    ): boolean {
         const tgs = tags.data
         let somethingChanged = false
         for (const key in tgs) {
@@ -295,7 +303,6 @@ class NormalizePanoramax extends SimpleMetaTagger {
                 this.addValue(key, tgs, parts)
                 somethingChanged = true
             } else {
-
                 const postfix = key.match(/panoramax:([^:]+)(:[0-9]+)?/)?.[1]
                 if (postfix) {
                     this.addValue(key, tgs, parts, postfix)
@@ -316,7 +323,7 @@ export default class SimpleMetaTaggers {
     public static geometryType = new InlineMetaTagger(
         {
             keys: ["_geometry:type"],
-            doc: "Adds the geometry type as property. This is identical to the GoeJson geometry type and is one of `Point`,`LineString`, `Polygon` and exceptionally `MultiPolygon` or `MultiLineString`"
+            doc: "Adds the geometry type as property. This is identical to the GoeJson geometry type and is one of `Point`,`LineString`, `Polygon` and exceptionally `MultiPolygon` or `MultiLineString`",
         },
         (feature) => {
             const changed = feature.properties["_geometry:type"] === feature.geometry.type
@@ -342,12 +349,12 @@ export default class SimpleMetaTaggers {
         W: 270,
         WNW: 292.5,
         NW: 315,
-        NNW: 337.5
+        NNW: 337.5,
     }
     private static latlon = new InlineMetaTagger(
         {
             keys: ["_lat", "_lon"],
-            doc: "The latitude and longitude of the point (or centerpoint in the case of a way/area)"
+            doc: "The latitude and longitude of the point (or centerpoint in the case of a way/area)",
         },
         (feature) => {
             const centerPoint = GeoOperations.centerpoint(feature)
@@ -362,7 +369,7 @@ export default class SimpleMetaTaggers {
         {
             doc: "The layer-id to which this feature belongs. Note that this might be return any applicable if `passAllFeatures` is defined.",
             keys: ["_layer"],
-            includesDates: false
+            includesDates: false,
         },
         (feature, layer) => {
             if (feature.properties._layer === layer.id) {
@@ -378,11 +385,11 @@ export default class SimpleMetaTaggers {
                 "sidewalk:left",
                 "sidewalk:right",
                 "generic_key:left:property",
-                "generic_key:right:property"
+                "generic_key:right:property",
             ],
             doc: "Rewrites tags from 'generic_key:both:property' as 'generic_key:left:property' and 'generic_key:right:property' (and similar for sidewalk tagging). Note that this rewritten tags _will be reuploaded on a change_. To prevent to much unrelated retagging, this is only enabled if the layer has at least some lineRenderings with offset defined",
             includesDates: false,
-            cleanupRetagger: true
+            cleanupRetagger: true,
         },
         (feature, layer) => {
             if (!layer.lineRendering.some((lr) => lr.leftRightSensitive)) {
@@ -396,7 +403,7 @@ export default class SimpleMetaTaggers {
         {
             keys: ["_surface"],
             doc: "The surface area of the feature in square meters. Not set on points and ways",
-            isLazy: true
+            isLazy: true,
         },
         (feature) => {
             if (feature.geometry.type !== "Polygon" && feature.geometry.type !== "MultiPolygon") {
@@ -414,7 +421,7 @@ export default class SimpleMetaTaggers {
         {
             keys: ["_surface:ha"],
             doc: "The surface area of the feature in hectare. Not set on points and ways",
-            isLazy: true
+            isLazy: true,
         },
         (feature) => {
             if (feature.geometry.type !== "Polygon" && feature.geometry.type !== "MultiPolygon") {
@@ -432,7 +439,7 @@ export default class SimpleMetaTaggers {
     private static levels = new InlineMetaTagger(
         {
             doc: "Extract the 'level'-tag into a normalized, ';'-separated value called '_level' (which also includes 'repeat_on'). The `level` tag (without underscore) will be normalized with only the value of `level`.",
-            keys: ["_level"]
+            keys: ["_level"],
         },
         (feature) => {
             let somethingChanged = false
@@ -467,7 +474,7 @@ export default class SimpleMetaTaggers {
     private static canonicalize = new InlineMetaTagger(
         {
             doc: "If 'units' is defined in the layoutConfig, then this metatagger will rewrite the specified keys to have the canonical form (e.g. `1meter` will be rewritten to `1m`; `1` will be rewritten to `1m` as well)",
-            keys: ["Theme-defined keys"]
+            keys: ["Theme-defined keys"],
         },
         (feature, _, __, state) => {
             const units = Utils.NoNull(
@@ -524,7 +531,7 @@ export default class SimpleMetaTaggers {
     private static lngth = new InlineMetaTagger(
         {
             keys: ["_length", "_length:km"],
-            doc: "The total length of a feature in meters (and in kilometers, rounded to one decimal for '_length:km'). For a surface, the length of the perimeter"
+            doc: "The total length of a feature in meters (and in kilometers, rounded to one decimal for '_length:km'). For a surface, the length of the perimeter",
         },
         (feature) => {
             const l = GeoOperations.lengthInMeters(feature)
@@ -540,7 +547,7 @@ export default class SimpleMetaTaggers {
             keys: ["_isOpen"],
             doc: "If 'opening_hours' is present, it will add the current state of the feature (being 'yes' or 'no')",
             includesDates: true,
-            isLazy: true
+            isLazy: true,
         },
         (feature) => {
             if (Utils.runningFromConsole) {
@@ -579,8 +586,8 @@ export default class SimpleMetaTaggers {
                                 lon: lon,
                                 address: {
                                     country_code: tags._country.toLowerCase(),
-                                    state: undefined
-                                }
+                                    state: undefined,
+                                },
                             },
                             <any>{ tag_key: "opening_hours" }
                         )
@@ -592,14 +599,14 @@ export default class SimpleMetaTaggers {
                         delete tags._isOpen
                         tags["_isOpen"] = "parse_error"
                     }
-                }
+                },
             })
         }
     )
     private static directionSimplified = new InlineMetaTagger(
         {
             keys: ["_direction:numerical", "_direction:leftright"],
-            doc: "_direction:numerical is a normalized, numerical direction based on 'camera:direction' or on 'direction'; it is only present if a valid direction is found (e.g. 38.5 or NE). _direction:leftright is either 'left' or 'right', which is left-looking on the map or 'right-looking' on the map"
+            doc: "_direction:numerical is a normalized, numerical direction based on 'camera:direction' or on 'direction'; it is only present if a valid direction is found (e.g. 38.5 or NE). _direction:leftright is either 'left' or 'right', which is left-looking on the map or 'right-looking' on the map",
         },
         (feature) => {
             const tags = feature.properties
@@ -624,7 +631,7 @@ export default class SimpleMetaTaggers {
         {
             keys: ["_direction:centerpoint"],
             isLazy: true,
-            doc: "_direction:centerpoint is the direction of the linestring (in degrees) if one were standing at the projected centerpoint."
+            doc: "_direction:centerpoint is the direction of the linestring (in degrees) if one were standing at the projected centerpoint.",
         },
         (feature: Feature) => {
             if (feature.geometry.type !== "LineString") {
@@ -647,7 +654,7 @@ export default class SimpleMetaTaggers {
                     delete feature.properties["_direction:centerpoint"]
                     feature.properties["_direction:centerpoint"] = bearing
                     return bearing
-                }
+                },
             })
 
             return true
@@ -657,7 +664,7 @@ export default class SimpleMetaTaggers {
         {
             keys: ["_now:date", "_now:datetime"],
             doc: "Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:mm, aka 'sortable' aka ISO-8601-but-not-entirely",
-            includesDates: true
+            includesDates: true,
         },
         (feature) => {
             const now = new Date()
@@ -681,7 +688,7 @@ export default class SimpleMetaTaggers {
             keys: ["_last_edit:passed_time"],
             doc: "Gives the number of seconds since the last edit. Note that this will _not_ update, but rather be the number of seconds elapsed at the moment this tag is read first",
             isLazy: true,
-            includesDates: true
+            includesDates: true,
         },
         (feature) => {
             Utils.AddLazyProperty(feature.properties, "_last_edit:passed_time", () => {
@@ -700,7 +707,7 @@ export default class SimpleMetaTaggers {
         {
             keys: ["_currency"],
             doc: "Adds the currency valid for the object, based on country or explicit tagging. Can be a single currency or a semicolon-separated list of currencies. Empty if no currency is found.",
-            isLazy: true
+            isLazy: true,
         },
         (feature: Feature, layer: LayerConfig, tagsStore: UIEventSource<OsmTags>) => {
             if (tagsStore === undefined) {
@@ -742,7 +749,6 @@ export default class SimpleMetaTaggers {
         }
     )
 
-
     public static metatags: SimpleMetaTagger[] = [
         SimpleMetaTaggers.latlon,
         SimpleMetaTaggers.layerInfo,
@@ -762,7 +768,7 @@ export default class SimpleMetaTaggers {
         SimpleMetaTaggers.referencingWays,
         SimpleMetaTaggers.timeSinceLastEdit,
         SimpleMetaTaggers.currency,
-        SimpleMetaTaggers.normalizePanoramax
+        SimpleMetaTaggers.normalizePanoramax,
     ]
 
     /**
@@ -844,8 +850,8 @@ export default class SimpleMetaTaggers {
             [
                 "Metatags are extra tags available, in order to display more data or to give better questions.",
                 "They are calculated automatically on every feature when the data arrives in the webbrowser. This document gives an overview of the available metatags.",
-                "**Hint:** when using metatags, add the [query parameter](URL_Parameters.md) `debug=true` to the URL. This will include a box in the popup for features which shows all the properties of the object"
-            ].join("\n")
+                "**Hint:** when using metatags, add the [query parameter](URL_Parameters.md) `debug=true` to the URL. This will include a box in the popup for features which shows all the properties of the object",
+            ].join("\n"),
         ]
 
         subElements.push("## Metatags calculated by MapComplete")
diff --git a/src/Logic/State/FeatureSwitchState.ts b/src/Logic/State/FeatureSwitchState.ts
index 1fbbaf9e7..ee8a3b98b 100644
--- a/src/Logic/State/FeatureSwitchState.ts
+++ b/src/Logic/State/FeatureSwitchState.ts
@@ -182,7 +182,9 @@ export default class FeatureSwitchState extends OsmConnectionFeatureSwitches {
 
         let testingDefaultValue = false
         if (
-            !Constants.osmAuthConfig.url.startsWith("https://master.apis.dev.openstreetmap.org") &&  !Utils.runningFromConsole && location.hostname === "127.0.0.1"
+            !Constants.osmAuthConfig.url.startsWith("https://master.apis.dev.openstreetmap.org") &&
+            !Utils.runningFromConsole &&
+            location.hostname === "127.0.0.1"
         ) {
             testingDefaultValue = true
         }
diff --git a/src/Logic/State/GeoLocationState.ts b/src/Logic/State/GeoLocationState.ts
index 34618905c..21fa3aaca 100644
--- a/src/Logic/State/GeoLocationState.ts
+++ b/src/Logic/State/GeoLocationState.ts
@@ -25,7 +25,7 @@ export class GeoLocationState {
      * 'denied' means that we don't have access
      */
     public readonly permission: UIEventSource<GeolocationPermissionState> = new UIEventSource(
-        "prompt",
+        "prompt"
     )
 
     /**
@@ -130,7 +130,7 @@ export class GeoLocationState {
                 }
                 return Translations.t.general.waitingForLocation
             },
-            [this.allowMoving, this.permission, this.currentGPSLocation],
+            [this.allowMoving, this.permission, this.currentGPSLocation]
         )
     }
 
@@ -165,15 +165,15 @@ export class GeoLocationState {
             return
         }
 
-        if(AndroidPolyfill.inAndroid.data){
+        if (AndroidPolyfill.inAndroid.data) {
             this.permission.setData("requested")
-            this.permission.addCallbackAndRunD(p => {
-                if(p === "granted"){
+            this.permission.addCallbackAndRunD((p) => {
+                if (p === "granted") {
                     this.startWatching()
                     return true
                 }
             })
-            AndroidPolyfill.requestGeoPermission().then(state => {
+            AndroidPolyfill.requestGeoPermission().then((state) => {
                 const granted = state.value === "true"
                 this.permission.set(granted ? "granted" : "denied")
             })
@@ -218,15 +218,14 @@ export class GeoLocationState {
      * @private
      */
     private async startWatching() {
-
-        if(AndroidPolyfill.inAndroid.data){
-            AndroidPolyfill.watchLocation( this.currentGPSLocation, location => {
+        if (AndroidPolyfill.inAndroid.data) {
+            AndroidPolyfill.watchLocation(this.currentGPSLocation, (location) => {
                 console.log(JSON.stringify(location))
             })
         }
 
         navigator.geolocation.watchPosition(
-             (position: GeolocationPosition) => {
+            (position: GeolocationPosition) => {
                 this._gpsAvailable.set(true)
                 this.currentGPSLocation.setData(position.coords)
                 this._previousLocationGrant.setData(true)
@@ -249,5 +248,4 @@ export class GeoLocationState {
             }
         )
     }
-
 }
diff --git a/src/Logic/State/UserRelatedState.ts b/src/Logic/State/UserRelatedState.ts
index 8ca36200a..8c9996efc 100644
--- a/src/Logic/State/UserRelatedState.ts
+++ b/src/Logic/State/UserRelatedState.ts
@@ -350,7 +350,9 @@ export default class UserRelatedState {
      * List of all hidden themes that have been seen before
      * @param osmConnection
      */
-    public static initDiscoveredHiddenThemes(osmConnection: OsmConnection): Store<undefined | string[]> {
+    public static initDiscoveredHiddenThemes(
+        osmConnection: OsmConnection
+    ): Store<undefined | string[]> {
         const prefix = "mapcomplete-hidden-theme-"
         const userPreferences = osmConnection.preferencesHandler.allPreferences
         return userPreferences.mapD((preferences) =>
diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts
index 33a5ae85b..6e568c5c3 100644
--- a/src/Logic/State/UserSettingsMetaTagging.ts
+++ b/src/Logic/State/UserSettingsMetaTagging.ts
@@ -1,14 +1,42 @@
 import { Utils } from "../../Utils"
 /** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */
 export class ThemeMetaTagging {
-   public static readonly themeName = "usersettings"
+    public static readonly themeName = "usersettings"
 
-   public metaTaggging_for_usersettings(feat: {properties: Record<string, string>}) {
-      Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) ) 
-      Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/&lt;/g,'<')?.replace(/&gt;/g,'>') ?? '' ) 
-      Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href   }) (feat)  ) 
-      Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat)  ) 
-      Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a ) 
-      feat.properties['__current_backgroun'] = 'initial_value'
-   }
-}
\ No newline at end of file
+    public metaTaggging_for_usersettings(feat: { properties: Record<string, string> }) {
+        Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () =>
+            feat.properties._description
+                .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)
+                ?.at(1)
+        )
+        Utils.AddLazyProperty(
+            feat.properties,
+            "_d",
+            () => feat.properties._description?.replace(/&lt;/g, "<")?.replace(/&gt;/g, ">") ?? ""
+        )
+        Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () =>
+            ((feat) => {
+                const e = document.createElement("div")
+                e.innerHTML = feat.properties._d
+                return Array.from(e.getElementsByTagName("a")).filter(
+                    (a) => a.href.match(/mastodon|en.osm.town/) !== null
+                )[0]?.href
+            })(feat)
+        )
+        Utils.AddLazyProperty(feat.properties, "_mastodon_link", () =>
+            ((feat) => {
+                const e = document.createElement("div")
+                e.innerHTML = feat.properties._d
+                return Array.from(e.getElementsByTagName("a")).filter(
+                    (a) => a.getAttribute("rel")?.indexOf("me") >= 0
+                )[0]?.href
+            })(feat)
+        )
+        Utils.AddLazyProperty(
+            feat.properties,
+            "_mastodon_candidate",
+            () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a
+        )
+        feat.properties["__current_backgroun"] = "initial_value"
+    }
+}
diff --git a/src/Logic/Web/AndroidPolyfill.ts b/src/Logic/Web/AndroidPolyfill.ts
index f3193eeae..275b27226 100644
--- a/src/Logic/Web/AndroidPolyfill.ts
+++ b/src/Logic/Web/AndroidPolyfill.ts
@@ -7,7 +7,9 @@ import { Store, UIEventSource } from "../UIEventSource"
 import { OsmConnection } from "../Osm/OsmConnection"
 
 export interface DatabridgePlugin {
-    request<T extends (string | object) = string | object>(options: { key: string }): Promise<{ value: T }>;
+    request<T extends string | object = string | object>(options: {
+        key: string
+    }): Promise<{ value: T }>
 }
 
 const DatabridgePluginSingleton = registerPlugin<DatabridgePlugin>("Databridge", {
@@ -28,17 +30,25 @@ export class AndroidPolyfill {
     private static readonly databridgePlugin: DatabridgePlugin = DatabridgePluginSingleton
     private static readonly _inAndroid: UIEventSource<boolean> = new UIEventSource<boolean>(false)
     public static readonly inAndroid: Store<boolean> = AndroidPolyfill._inAndroid
-    private static readonly _geolocationPermission: UIEventSource<"granted" | "denied" | "prompt"> = new UIEventSource("prompt")
-    public static readonly geolocationPermission: Store<"granted" | "denied" | "prompt"> = this._geolocationPermission
+    private static readonly _geolocationPermission: UIEventSource<"granted" | "denied" | "prompt"> =
+        new UIEventSource("prompt")
+    public static readonly geolocationPermission: Store<"granted" | "denied" | "prompt"> =
+        this._geolocationPermission
 
     /**
      * Registers 'navigator.'
      * @private
      */
     private static backfillGeolocation(databridgePlugin: DatabridgePlugin) {
-        const src = UIEventSource.FromPromise(databridgePlugin.request({ key: "location:has-permission" }))
-        src.addCallbackAndRunD(permission => {
-            console.log("> Checking geopermission gave: ", JSON.stringify(permission), permission.value)
+        const src = UIEventSource.FromPromise(
+            databridgePlugin.request({ key: "location:has-permission" })
+        )
+        src.addCallbackAndRunD((permission) => {
+            console.log(
+                "> Checking geopermission gave: ",
+                JSON.stringify(permission),
+                permission.value
+            )
             const granted = permission.value === "true"
             AndroidPolyfill._geolocationPermission.set(granted ? "granted" : "denied")
         })
@@ -61,17 +71,25 @@ export class AndroidPolyfill {
     }
 
     public static async requestLoginCodes() {
-        const result = await DatabridgePluginSingleton.request<{ oauth_token: string }>({ key: "request:login" })
+        const result = await DatabridgePluginSingleton.request<{ oauth_token: string }>({
+            key: "request:login",
+        })
         const token: string = result.value.oauth_token
-        console.log("AndroidPolyfill: received oauth_token; trying to pass them to the oauth lib", token)
+        console.log(
+            "AndroidPolyfill: received oauth_token; trying to pass them to the oauth lib",
+            token
+        )
         return token
     }
 
-    public static onBackButton(callback: () => boolean, options: {
-        returnToIndex: Store<boolean>
-    }) {
+    public static onBackButton(
+        callback: () => boolean,
+        options: {
+            returnToIndex: Store<boolean>
+        }
+    ) {
         console.log("Registering back button callback", callback)
-        DatabridgePluginSingleton.request({ key: "backbutton" }).then(ev => {
+        DatabridgePluginSingleton.request({ key: "backbutton" }).then((ev) => {
             console.log("AndroidPolyfill: received backbutton: ", ev)
             if (ev === null) {
                 // Probably in web environment
@@ -88,28 +106,38 @@ export class AndroidPolyfill {
                 window.location.href = "/"
             }
         })
-
     }
 
-    public static watchLocation(writeInto: UIEventSource<GeolocationCoordinates>, callback: (location) => void) {
+    public static watchLocation(
+        writeInto: UIEventSource<GeolocationCoordinates>,
+        callback: (location) => void
+    ) {
         DatabridgePluginSingleton.request({
             key: "location:watch",
-        }).then((l: {
-            value: { latitude: number, longitude: number, accuraccy: number, altidude: number, heading: number, speed:number }
-        }) => {
-            // example l: {"value":{"latitude":51.0618627,"longitude":3.730468566666667,"accuracy":2.0393495559692383,"altitude":46.408,"heading":168.2969970703125}}
-            console.log("Received location from Android:", JSON.stringify(l))
-            const loc = l.value
-            writeInto.set({
-                latitude: loc.latitude,
-                longitude: loc.longitude,
-                heading: loc.heading,
-                accuracy: loc.accuraccy,
-                altitude: loc.altidude,
-                altitudeAccuracy: undefined,
-                speed: loc.speed,
-            })
-        })
+        }).then(
+            (l: {
+                value: {
+                    latitude: number
+                    longitude: number
+                    accuraccy: number
+                    altidude: number
+                    heading: number
+                    speed: number
+                }
+            }) => {
+                // example l: {"value":{"latitude":51.0618627,"longitude":3.730468566666667,"accuracy":2.0393495559692383,"altitude":46.408,"heading":168.2969970703125}}
+                console.log("Received location from Android:", JSON.stringify(l))
+                const loc = l.value
+                writeInto.set({
+                    latitude: loc.latitude,
+                    longitude: loc.longitude,
+                    heading: loc.heading,
+                    accuracy: loc.accuraccy,
+                    altitude: loc.altidude,
+                    altitudeAccuracy: undefined,
+                    speed: loc.speed,
+                })
+            }
+        )
     }
 }
-
diff --git a/src/Logic/Web/CommunityIndex.ts b/src/Logic/Web/CommunityIndex.ts
index bb0dc1476..c1d30e956 100644
--- a/src/Logic/Web/CommunityIndex.ts
+++ b/src/Logic/Web/CommunityIndex.ts
@@ -2,22 +2,21 @@
  * Various tools and types to work with the community index (https://openstreetmap.community/; https://github.com/osmlab/osm-community-index)
  */
 
-
 export interface CommunityResource {
     /**
      * A unique identifier for the resource
      * "pattern": "^[-_.A-Za-z0-9]+$"
      */
-    id: string,
+    id: string
     /**
      * Type of community resource (thus: platform)
      */
-    type: string,
+    type: string
     /**
      * included and excluded locations for this item
      * See location-conflation documentation for compatible values: https://github.com/rapideditor/location-conflation#readme
      */
-    locationSet?,
+    locationSet?
 
     /** Array of ISO-639-1 (2 letter) or ISO-639-3 (3 letter) codes in lowercase
      * */
@@ -27,7 +26,5 @@ export interface CommunityResource {
      */
     account?: string
 
-    resolved?: { url: string, name: string, description: string } & Record<string, string>
-
+    resolved?: { url: string; name: string; description: string } & Record<string, string>
 }
-
diff --git a/src/Logic/Web/ThemeViewStateHashActor.ts b/src/Logic/Web/ThemeViewStateHashActor.ts
index 18aff49ea..ff63a21b1 100644
--- a/src/Logic/Web/ThemeViewStateHashActor.ts
+++ b/src/Logic/Web/ThemeViewStateHashActor.ts
@@ -36,14 +36,14 @@ export default class ThemeViewStateHashActor {
      *
      */
     constructor(state: {
-        featureSwitches: {featureSwitchBackToThemeOverview: Store<boolean>}
-        indexedFeatures: IndexedFeatureSource,
-        selectedElement: UIEventSource<Feature>,
-        guistate: MenuState,
+        featureSwitches: { featureSwitchBackToThemeOverview: Store<boolean> }
+        indexedFeatures: IndexedFeatureSource
+        selectedElement: UIEventSource<Feature>
+        guistate: MenuState
     }) {
         this._state = state
         AndroidPolyfill.onBackButton(() => this.back(), {
-            returnToIndex: state.featureSwitches.featureSwitchBackToThemeOverview
+            returnToIndex: state.featureSwitches.featureSwitchBackToThemeOverview,
         })
 
         const hashOnLoad = Hash.hash.data
@@ -81,7 +81,6 @@ export default class ThemeViewStateHashActor {
 
         // When all is done, set the hash. This must happen last to give the code above correct info
         this.setHash()
-
     }
 
     /**
diff --git a/src/Models/ThemeConfig/TagRenderingConfig.ts b/src/Models/ThemeConfig/TagRenderingConfig.ts
index 5843cd2f1..c524f4ed6 100644
--- a/src/Models/ThemeConfig/TagRenderingConfig.ts
+++ b/src/Models/ThemeConfig/TagRenderingConfig.ts
@@ -129,8 +129,8 @@ export default class TagRenderingConfig {
                 this.id
             )
         }
-        if(json.labels && !Array.isArray( json.labels)){
-            throw (`Invalid labels at ${context}: labels should be a list of strings, but got a ${typeof json.labels}`)
+        if (json.labels && !Array.isArray(json.labels)) {
+            throw `Invalid labels at ${context}: labels should be a list of strings, but got a ${typeof json.labels}`
         }
 
         this.labels = json.labels ?? []
diff --git a/src/Models/ThemeViewState/WithSpecialLayers.ts b/src/Models/ThemeViewState/WithSpecialLayers.ts
index 97ddb070e..ea0af40f1 100644
--- a/src/Models/ThemeViewState/WithSpecialLayers.ts
+++ b/src/Models/ThemeViewState/WithSpecialLayers.ts
@@ -18,7 +18,7 @@ import { Store, UIEventSource } from "../../Logic/UIEventSource"
 import NearbyFeatureSource from "../../Logic/FeatureSource/Sources/NearbyFeatureSource"
 import {
     SummaryTileSource,
-    SummaryTileSourceRewriter
+    SummaryTileSourceRewriter,
 } from "../../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource"
 import { ShowDataLayerOptions } from "../../UI/Map/ShowDataLayerOptions"
 
@@ -94,10 +94,7 @@ export class WithSpecialLayers extends WithChangesState {
         const maxzoom = Math.min(...normalLayers.map((l) => l.minzoom))
 
         const layers = this.theme.layers.filter(
-            (l) =>
-                !Constants.isPriviliged(l) &&
-                l.source.geojsonSource === undefined &&
-                l.doCount
+            (l) => !Constants.isPriviliged(l) && l.source.geojsonSource === undefined && l.doCount
         )
         if (!Constants.SummaryServer || layers.length === 0) {
             return undefined
diff --git a/src/Models/TileRange.ts b/src/Models/TileRange.ts
index 31890210d..90c805997 100644
--- a/src/Models/TileRange.ts
+++ b/src/Models/TileRange.ts
@@ -81,12 +81,12 @@ export class Tiles {
         return [z, x, index % factor]
     }
 
-    static asGeojson(index: number): Feature<Polygon>;
-    static asGeojson(x: number, y: number, z: number): Feature<Polygon>;
+    static asGeojson(index: number): Feature<Polygon>
+    static asGeojson(x: number, y: number, z: number): Feature<Polygon>
     static asGeojson(zIndex: number, x?: number, y?: number): Feature<Polygon> {
         let z = zIndex
         if (x === undefined) {
-            [z, x, y] = Tiles.tile_from_index(zIndex)
+            ;[z, x, y] = Tiles.tile_from_index(zIndex)
         }
         const bounds = Tiles.tile_bounds_lon_lat(z, x, y)
         return new BBox(bounds).asGeoJson()
diff --git a/src/UI/AllThemesGui.svelte b/src/UI/AllThemesGui.svelte
index 9c0701163..ca745216b 100644
--- a/src/UI/AllThemesGui.svelte
+++ b/src/UI/AllThemesGui.svelte
@@ -107,13 +107,16 @@
     }
   })
 
-  AndroidPolyfill.onBackButton((() => {
-    if(searchIsFocussed.data){
-      searchIsFocussed.set(false)
-      return true
-    }
-    return false
-  }), {returnToIndex: new ImmutableStore(false)})
+  AndroidPolyfill.onBackButton(
+    () => {
+      if (searchIsFocussed.data) {
+        searchIsFocussed.set(false)
+        return true
+      }
+      return false
+    },
+    { returnToIndex: new ImmutableStore(false) }
+  )
 
   /**
    * Opens the first search candidate
@@ -228,11 +231,19 @@
     <Tr cls="link-underline" t={Translations.t.general.aboutMapComplete.intro} />
 
     <span class="link-underline flex flex-col gap-y-1">
-      <a class="flex" href="https://source.mapcomplete.org/MapComplete/MapComplete/" target="_blank">
+      <a
+        class="flex"
+        href="https://source.mapcomplete.org/MapComplete/MapComplete/"
+        target="_blank"
+      >
         <Forgejo class="mr-2 h-6 w-6" />
         <Tr t={Translations.t.general.attribution.gotoSourceCode} />
       </a>
-      <a class="flex" href="https://source.mapcomplete.org/MapComplete/MapComplete/issues" target="_blank">
+      <a
+        class="flex"
+        href="https://source.mapcomplete.org/MapComplete/MapComplete/issues"
+        target="_blank"
+      >
         <Bug class="mr-2 h-6 w-6" />
         <Tr t={Translations.t.general.attribution.openIssueTracker} />
       </a>
diff --git a/src/UI/Base/DirectionIndicator.svelte b/src/UI/Base/DirectionIndicator.svelte
index 895898421..9eb2c52d4 100644
--- a/src/UI/Base/DirectionIndicator.svelte
+++ b/src/UI/Base/DirectionIndicator.svelte
@@ -149,7 +149,7 @@
   >
     <div
       class={twMerge(
-        "absolute top-0 left-0 flex cursor-pointer items-center justify-center break-words text-xs",
+        "absolute left-0 top-0 flex cursor-pointer items-center justify-center break-words text-xs",
         size
       )}
     >
@@ -161,7 +161,7 @@
       </div>
     </div>
     {#if $bearingFromGps !== undefined}
-      <div class={twMerge("absolute top-0 left-0 rounded-full", size)}>
+      <div class={twMerge("absolute left-0 top-0 rounded-full", size)}>
         <Compass_arrow
           class={size}
           style={`transform: rotate( calc( 45deg + ${$bearingFromGps - ($compass ?? 0)}deg) );`}
diff --git a/src/UI/Base/FloatOver.svelte b/src/UI/Base/FloatOver.svelte
index 7d5d9e122..b75bfcb33 100644
--- a/src/UI/Base/FloatOver.svelte
+++ b/src/UI/Base/FloatOver.svelte
@@ -13,7 +13,7 @@
 
 <!-- Draw the background over the total screen -->
 <div
-  class="absolute top-0 left-0 h-screen w-screen"
+  class="absolute left-0 top-0 h-screen w-screen"
   on:click={() => {
     console.log("OnClose")
     dispatch("close")
@@ -38,8 +38,8 @@
     </div>
     <slot name="close-button">
       <!-- The close button is placed _after_ the default slot in order to always paint it on top -->
-      <div class="absolute top-0 right-0">
-        <CloseButton class="normal-background mt-2 mr-2" on:click={() => dispatch("close")} />
+      <div class="absolute right-0 top-0">
+        <CloseButton class="normal-background mr-2 mt-2" on:click={() => dispatch("close")} />
       </div>
     </slot>
   </div>
diff --git a/src/UI/Base/Loading.svelte b/src/UI/Base/Loading.svelte
index 7c0c14b99..5a787642c 100644
--- a/src/UI/Base/Loading.svelte
+++ b/src/UI/Base/Loading.svelte
@@ -6,7 +6,7 @@
 </script>
 
 <div class={cls}>
-  <div class="min-w-6 h-6 w-6 shrink-0 animate-spin self-center">
+  <div class="h-6 w-6 min-w-6 shrink-0 animate-spin self-center">
     <Loading />
   </div>
   <div class="ml-2">
diff --git a/src/UI/Base/LoginToggle.svelte b/src/UI/Base/LoginToggle.svelte
index c2d6119b7..661e8403c 100644
--- a/src/UI/Base/LoginToggle.svelte
+++ b/src/UI/Base/LoginToggle.svelte
@@ -47,7 +47,7 @@
     {#if !hiddenFail}
       <slot name="error">
         <div class="alert flex flex-col items-center">
-          <div class="max-w-64 flex items-center">
+          <div class="flex max-w-64 items-center">
             <Invalid class="m-2 h-8 w-8 shrink-0" />
             <Tr t={offlineModes[$apiState] ?? t.loginFailedUnreachableMode} />
           </div>
diff --git a/src/UI/Base/ModalRight.svelte b/src/UI/Base/ModalRight.svelte
index 3d8eceb41..88bf3f1a4 100644
--- a/src/UI/Base/ModalRight.svelte
+++ b/src/UI/Base/ModalRight.svelte
@@ -11,7 +11,7 @@
 <div
   aria-modal="true"
   autofocus
-  class="normal-background absolute top-0 right-0 flex h-screen w-full flex-col overflow-y-auto drop-shadow-2xl md:w-6/12 lg:w-5/12 xl:w-4/12"
+  class="normal-background absolute right-0 top-0 flex h-screen w-full flex-col overflow-y-auto drop-shadow-2xl md:w-6/12 lg:w-5/12 xl:w-4/12"
   role="dialog"
   style="max-width: 100vw; max-height: 100vh; z-index: 11"
   tabindex="-1"
diff --git a/src/UI/Base/Searchbar.svelte b/src/UI/Base/Searchbar.svelte
index ad04a1a84..b1c0a2c42 100644
--- a/src/UI/Base/Searchbar.svelte
+++ b/src/UI/Base/Searchbar.svelte
@@ -31,7 +31,7 @@
           inputElement?.select()
         }
       })
-    }else if(document.activeElement === inputElement){
+    } else if (document.activeElement === inputElement) {
       inputElement?.blur()
     }
   })
diff --git a/src/UI/Base/TitledPanel.svelte b/src/UI/Base/TitledPanel.svelte
index 2309f48e0..c877b9d56 100644
--- a/src/UI/Base/TitledPanel.svelte
+++ b/src/UI/Base/TitledPanel.svelte
@@ -1,7 +1,6 @@
 <div class="flex h-full flex-col">
   <div class="low-interaction flex items-center justify-between p-4 drop-shadow-md">
-
-    <div class="flex gap-x-2 items-center">
+    <div class="flex items-center gap-x-2">
       <slot name="title-start" />
       <h2 class="m-0">
         <slot name="title" />
diff --git a/src/UI/BigComponents/CommunityIndexView.svelte b/src/UI/BigComponents/CommunityIndexView.svelte
index a76450e6b..22659dd50 100644
--- a/src/UI/BigComponents/CommunityIndexView.svelte
+++ b/src/UI/BigComponents/CommunityIndexView.svelte
@@ -23,10 +23,15 @@
   >([])
 
   tileToFetch.addCallbackAndRun(async (url) => {
-    const data = await Utils.downloadJsonCached<FeatureCollection<Polygon, {
-      nameEn: string,
-      resources: Record<string, CommunityResource>
-    }>>(url, 24 * 60 * 60)
+    const data = await Utils.downloadJsonCached<
+      FeatureCollection<
+        Polygon,
+        {
+          nameEn: string
+          resources: Record<string, CommunityResource>
+        }
+      >
+    >(url, 24 * 60 * 60)
     if (data === undefined) {
       return
     }
@@ -39,9 +44,13 @@
     [location]
   )
 
-  const globalResources: UIEventSource<Record<string, CommunityResource>> = UIEventSource.FromPromise(Utils.downloadJsonCached<Record<string, CommunityResource>>(
-    Constants.communityIndexHost + "/global.json", 24 * 60 * 60 * 1000
-  ))
+  const globalResources: UIEventSource<Record<string, CommunityResource>> =
+    UIEventSource.FromPromise(
+      Utils.downloadJsonCached<Record<string, CommunityResource>>(
+        Constants.communityIndexHost + "/global.json",
+        24 * 60 * 60 * 1000
+      )
+    )
 </script>
 
 <div>
diff --git a/src/UI/BigComponents/ContactLink.svelte b/src/UI/BigComponents/ContactLink.svelte
index f1c8de96a..d8a176f3a 100644
--- a/src/UI/BigComponents/ContactLink.svelte
+++ b/src/UI/BigComponents/ContactLink.svelte
@@ -26,10 +26,7 @@
   {/if}
   {#each resources as resource}
     <div class="link-underline my-4 flex items-center">
-      <img
-        class="m-2 h-8 w-8"
-        src={`${Constants.communityIndexHost}${resource.type}.svg`}
-      />
+      <img class="m-2 h-8 w-8" src={`${Constants.communityIndexHost}${resource.type}.svg`} />
       <div class="flex flex-col">
         <a
           href={resource.resolved?.url}
diff --git a/src/UI/BigComponents/CopyrightSingleIcon.svelte b/src/UI/BigComponents/CopyrightSingleIcon.svelte
index 356627d4c..347211b6b 100644
--- a/src/UI/BigComponents/CopyrightSingleIcon.svelte
+++ b/src/UI/BigComponents/CopyrightSingleIcon.svelte
@@ -26,7 +26,7 @@
   <div class="border-box m-2 flex flex-wrap border-b border-gray-300">
     <img
       class={twJoin(
-        "min-h-12 mr-2 mb-2 w-12",
+        "mb-2 mr-2 min-h-12 w-12",
         license["mostly_white"] && "h-12 rounded-full bg-slate-400"
       )}
       src={iconPath}
diff --git a/src/UI/BigComponents/MenuDrawer.svelte b/src/UI/BigComponents/MenuDrawer.svelte
index e8b490b7e..a1a19c597 100644
--- a/src/UI/BigComponents/MenuDrawer.svelte
+++ b/src/UI/BigComponents/MenuDrawer.svelte
@@ -208,7 +208,7 @@
     {#if theme.official}
       <a
         class="flex"
-        href={"https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Themes" +
+        href={"https://source.mapcomplete.org/MapComplete/MapComplete/src/branch/develop/Docs/Themes/" +
           theme.id +
           ".md"}
         target="_blank"
diff --git a/src/UI/BigComponents/ThemeButton.svelte b/src/UI/BigComponents/ThemeButton.svelte
index 6d4148e02..37b99c0e4 100644
--- a/src/UI/BigComponents/ThemeButton.svelte
+++ b/src/UI/BigComponents/ThemeButton.svelte
@@ -45,10 +45,10 @@
 
     let linkPrefix = `${path}/${layout.id.toLowerCase()}.html?`
     if (
-      !isAndroid && (
-      location.hostname === "localhost" ||
-      location.hostname === "127.0.0.1" ||
-      location.port === "1234")
+      !isAndroid &&
+      (location.hostname === "localhost" ||
+        location.hostname === "127.0.0.1" ||
+        location.port === "1234")
     ) {
       // Redirect to 'theme.html?layout=* instead of 'layout.html'. This is probably a debug run, where the routing does not work
       linkPrefix = `${path}/theme.html?layout=${layout.id}&`
@@ -66,7 +66,9 @@
     return `${linkPrefix}${hash}`
   }
 
-  let href = AndroidPolyfill.inAndroid.map(isAndroid => createUrlDirect(theme, isCustom, isAndroid, state))
+  let href = AndroidPolyfill.inAndroid.map((isAndroid) =>
+    createUrlDirect(theme, isCustom, isAndroid, state)
+  )
 </script>
 
 <a class="low-interaction my-1 flex w-full items-center text-ellipsis rounded p-1" href={$href}>
diff --git a/src/UI/Comparison/ComparisonAction.svelte b/src/UI/Comparison/ComparisonAction.svelte
index 7592c5fe4..b329294f7 100644
--- a/src/UI/Comparison/ComparisonAction.svelte
+++ b/src/UI/Comparison/ComparisonAction.svelte
@@ -66,7 +66,7 @@
 </script>
 
 <div>
-  <div class:interactive={!readonly} class="flex flex-col items-end py-1 px-2">
+  <div class:interactive={!readonly} class="flex flex-col items-end px-2 py-1">
     <div class="flex w-full flex-col">
       {#if renderingExternal}
         <TagRenderingAnswer
diff --git a/src/UI/Comparison/ComparisonTable.svelte b/src/UI/Comparison/ComparisonTable.svelte
index 5af99e65c..dc5c3b3f1 100644
--- a/src/UI/Comparison/ComparisonTable.svelte
+++ b/src/UI/Comparison/ComparisonTable.svelte
@@ -161,7 +161,7 @@
     {/if}
   {/if}
   {#if externalProperties["_last_edit_timestamp"] !== undefined}
-    <span class="subtle flex-end mt-2 mr-4 flex justify-end text-sm">
+    <span class="subtle flex-end mr-4 mt-2 flex justify-end text-sm">
       <Tr
         t={t.lastModified.Subs({
           date: new Date(externalProperties["_last_edit_timestamp"]).toLocaleString(),
diff --git a/src/UI/Image/AttributedImage.svelte b/src/UI/Image/AttributedImage.svelte
index 3ae6cc924..a4b4d2d8c 100644
--- a/src/UI/Image/AttributedImage.svelte
+++ b/src/UI/Image/AttributedImage.svelte
@@ -83,7 +83,7 @@
       <slot name="dot-menu-actions" slot="dot-menu-actions" />
     </ImageOperations>
   </div>
-  <div class="absolute top-4 right-4">
+  <div class="absolute right-4 top-4">
     <CloseButton
       class="normal-background"
       on:click={() => {
@@ -136,7 +136,7 @@
           class="bg-black-transparent absolute right-0 top-0 rounded-bl-full"
           on:click={() => previewedImage?.set(image)}
         >
-          <MagnifyingGlassPlusIcon class="h-8 w-8 cursor-zoom-in pl-3 pb-3" color="white" />
+          <MagnifyingGlassPlusIcon class="h-8 w-8 cursor-zoom-in pb-3 pl-3" color="white" />
         </div>
       {/if}
     </div>
diff --git a/src/UI/Image/DeletableImage.svelte b/src/UI/Image/DeletableImage.svelte
index 1a3ce3299..bd20108b4 100644
--- a/src/UI/Image/DeletableImage.svelte
+++ b/src/UI/Image/DeletableImage.svelte
@@ -54,7 +54,7 @@
       issue: reportReason.data,
       sequence_id: imageInfo.collection,
       reporter_comments: (reportFreeText.data ?? "") + "\n\n" + "Reported from " + url,
-      reporter_email
+      reporter_email,
     })
     reported.set(true)
   }
@@ -76,8 +76,9 @@
       await state?.changes?.applyAction(
         new ChangeTagAction(tgs.id, new Tag(key, ""), tgs, {
           changeType: "delete-image",
-          theme: state.theme.id
-        }))
+          theme: state.theme.id,
+        })
+      )
     }
   }
 
@@ -175,7 +176,7 @@
 </div>
 
 <style>
-    :global(.carousel-max-height) {
-        max-height: var(--image-carousel-height);
-    }
+  :global(.carousel-max-height) {
+    max-height: var(--image-carousel-height);
+  }
 </style>
diff --git a/src/UI/Image/ImageOperations.svelte b/src/UI/Image/ImageOperations.svelte
index df6084faf..884bca202 100644
--- a/src/UI/Image/ImageOperations.svelte
+++ b/src/UI/Image/ImageOperations.svelte
@@ -22,7 +22,7 @@
 </script>
 
 <div class={twMerge("relative h-full w-full", clss)}>
-  <div class="panzoom-container focusable absolute top-0 left-0 h-full w-full overflow-hidden">
+  <div class="panzoom-container focusable absolute left-0 top-0 h-full w-full overflow-hidden">
     {#if !$isLoaded}
       <div class="flex h-full w-full items-center justify-center">
         <Loading />
diff --git a/src/UI/InputElement/Helpers/DirectionInput.svelte b/src/UI/InputElement/Helpers/DirectionInput.svelte
index 8acbf8c40..860fc1ba3 100644
--- a/src/UI/InputElement/Helpers/DirectionInput.svelte
+++ b/src/UI/InputElement/Helpers/DirectionInput.svelte
@@ -67,11 +67,11 @@
   }}
   on:touchstart={(e) => onPosChange(e.touches[0].clientX, e.touches[0].clientY)}
 >
-  <div class="absolute top-0 left-0 h-full w-full cursor-pointer">
+  <div class="absolute left-0 top-0 h-full w-full cursor-pointer">
     <MaplibreMap mapProperties={mla} {map} />
   </div>
 
-  <div bind:this={directionElem} class="absolute top-0 left-0 h-full w-full">
+  <div bind:this={directionElem} class="absolute left-0 top-0 h-full w-full">
     <Direction_stroke />
   </div>
 </div>
diff --git a/src/UI/InputElement/Helpers/LocationInput.svelte b/src/UI/InputElement/Helpers/LocationInput.svelte
index 148fd8f12..8059cc633 100644
--- a/src/UI/InputElement/Helpers/LocationInput.svelte
+++ b/src/UI/InputElement/Helpers/LocationInput.svelte
@@ -88,8 +88,8 @@
   }
 </script>
 
-<div class="min-h-32 relative h-full cursor-pointer overflow-hidden">
-  <div class="absolute top-0 left-0 h-full w-full cursor-pointer">
+<div class="relative h-full min-h-32 cursor-pointer overflow-hidden">
+  <div class="absolute left-0 top-0 h-full w-full cursor-pointer">
     <MaplibreMap
       center={{ lng: initialCoordinate.lon, lat: initialCoordinate.lat }}
       {map}
@@ -98,7 +98,7 @@
   </div>
 
   <div
-    class="pointer-events-none absolute top-0 left-0 flex h-full w-full items-center p-8 opacity-50"
+    class="pointer-events-none absolute left-0 top-0 flex h-full w-full items-center p-8 opacity-50"
   >
     <slot name="image">
       <Move_arrows class="h-full max-h-24" />
diff --git a/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte b/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte
index c76a7310a..919119bd4 100644
--- a/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte
+++ b/src/UI/InputElement/Helpers/OpeningHours/OHTable.svelte
@@ -189,7 +189,7 @@
       <!-- Top-left cell -->
       <slot name="top-left">
         <button
-          class="absolute top-0 left-0 rounded-full p-1"
+          class="absolute left-0 top-0 rounded-full p-1"
           on:click={() => value.set([])}
           style="z-index: 10"
         >
diff --git a/src/UI/InputElement/Helpers/OpeningHoursInput.svelte b/src/UI/InputElement/Helpers/OpeningHoursInput.svelte
index 08ed4f3f5..cb164ec8d 100644
--- a/src/UI/InputElement/Helpers/OpeningHoursInput.svelte
+++ b/src/UI/InputElement/Helpers/OpeningHoursInput.svelte
@@ -35,7 +35,7 @@
   <OHTable value={state.normalOhs} />
   <button
     on:click={() => expanded.set(false)}
-    class="primary pointer-events-auto absolute left-0 bottom-0 h-8 w-10 rounded-full"
+    class="primary pointer-events-auto absolute bottom-0 left-0 h-8 w-10 rounded-full"
   >
     <Check class="m-0 h-6 w-6 shrink-0 p-0" color="white" />
   </button>
diff --git a/src/UI/Map/DynamicMarker.svelte b/src/UI/Map/DynamicMarker.svelte
index bc88a2291..55a51a47c 100644
--- a/src/UI/Map/DynamicMarker.svelte
+++ b/src/UI/Map/DynamicMarker.svelte
@@ -27,7 +27,7 @@
 {#if marker}
   <div class="relative h-full w-full" style={`transform: rotate(${$_rotation})`}>
     {#each marker as icon}
-      <div class="absolute top-0 left-0 h-full w-full">
+      <div class="absolute left-0 top-0 h-full w-full">
         <DynamicIcon {icon} {tags} {emojiHeight} />
       </div>
     {/each}
diff --git a/src/UI/Map/MapLibreAdaptor.ts b/src/UI/Map/MapLibreAdaptor.ts
index 94f755b18..b8ccdb7d3 100644
--- a/src/UI/Map/MapLibreAdaptor.ts
+++ b/src/UI/Map/MapLibreAdaptor.ts
@@ -1,5 +1,10 @@
 import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
-import maplibregl, { Map as MLMap, Map as MlMap, ScaleControl, SourceSpecification } from "maplibre-gl"
+import maplibregl, {
+    Map as MLMap,
+    Map as MlMap,
+    ScaleControl,
+    SourceSpecification,
+} from "maplibre-gl"
 import { RasterLayerPolygon } from "../../Models/RasterLayers"
 import { Utils } from "../../Utils"
 import { BBox } from "../../Logic/BBox"
@@ -25,13 +30,13 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
         "dragRotate",
         "dragPan",
         "keyboard",
-        "touchZoomRotate"
+        "touchZoomRotate",
     ]
     private static maplibre_zoom_handlers = [
         "scrollZoom",
         "boxZoom",
         "doubleClickZoom",
-        "touchZoomRotate"
+        "touchZoomRotate",
     ]
     readonly location: UIEventSource<{ lon: number; lat: number }>
     private readonly isFlying = new UIEventSource(false)
@@ -45,14 +50,14 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
     readonly lastClickLocation: Store<
         | undefined
         | {
-        lon: number
-        lat: number
-        mode: "left" | "right" | "middle"
-        /**
-         * The nearest feature from a MapComplete layer
-         */
-        nearestFeature?: Feature
-    }
+              lon: number
+              lat: number
+              mode: "left" | "right" | "middle"
+              /**
+               * The nearest feature from a MapComplete layer
+               */
+              nearestFeature?: Feature
+          }
     >
     readonly minzoom: UIEventSource<number>
     readonly maxzoom: UIEventSource<number>
@@ -143,7 +148,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
                 const features = map
                     .queryRenderedFeatures([
                         [point.x - buffer, point.y - buffer],
-                        [point.x + buffer, point.y + buffer]
+                        [point.x + buffer, point.y + buffer],
                     ])
                     .filter((f) => f.source.startsWith("mapcomplete_"))
                 if (features.length === 1) {
@@ -283,9 +288,9 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
         return {
             map: mlmap,
             ui: new SvelteUIElement(MaplibreMap, {
-                map: mlmap
+                map: mlmap,
             }),
-            mapproperties: new MapLibreAdaptor(mlmap)
+            mapproperties: new MapLibreAdaptor(mlmap),
         }
     }
 
@@ -353,7 +358,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
     ) {
         const event = {
             date: new Date(),
-            key: key
+            key: key,
         }
 
         for (let i = 0; i < this._onKeyNavigation.length; i++) {
@@ -542,7 +547,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
         const bounds = map.getBounds()
         const bbox = new BBox([
             [bounds.getEast(), bounds.getNorth()],
-            [bounds.getWest(), bounds.getSouth()]
+            [bounds.getWest(), bounds.getSouth()],
         ])
         if (this.bounds.data === undefined || !isSetup) {
             this.bounds.setData(bbox)
@@ -736,14 +741,14 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
                 type: "raster-dem",
                 url:
                     "https://api.maptiler.com/tiles/terrain-rgb/tiles.json?key=" +
-                    Constants.maptilerApiKey
+                    Constants.maptilerApiKey,
             })
             try {
                 while (!map?.isStyleLoaded()) {
                     await Utils.waitFor(250)
                 }
                 map.setTerrain({
-                    source: id
+                    source: id,
                 })
             } catch (e) {
                 console.error(e)
@@ -768,7 +773,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
         if (this.scaleControl === undefined) {
             this.scaleControl = new ScaleControl({
                 maxWidth: 100,
-                unit: "metric"
+                unit: "metric",
             })
         }
         if (!map.hasControl(this.scaleControl)) {
@@ -781,7 +786,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
         window.requestAnimationFrame(() => {
             this._maplibreMap.data?.flyTo({
                 zoom,
-                center: [lon, lat]
+                center: [lon, lat],
             })
         })
     }
diff --git a/src/UI/Map/MaplibreMap.svelte b/src/UI/Map/MaplibreMap.svelte
index 6db1fa648..8a2f07a57 100644
--- a/src/UI/Map/MaplibreMap.svelte
+++ b/src/UI/Map/MaplibreMap.svelte
@@ -112,4 +112,4 @@
   <link href="./maplibre-gl.css" rel="stylesheet" />
 </svelte:head>
 
-<div bind:this={container} class="map relative top-0 left-0 h-full w-full" id="map" />
+<div bind:this={container} class="map relative left-0 top-0 h-full w-full" id="map" />
diff --git a/src/UI/Map/Marker.svelte b/src/UI/Map/Marker.svelte
index c767392d0..093940115 100644
--- a/src/UI/Map/Marker.svelte
+++ b/src/UI/Map/Marker.svelte
@@ -41,7 +41,7 @@
 {#if iconsParsed !== undefined && iconsParsed.length > 0}
   <div class={twMerge("relative", size)}>
     {#each iconsParsed as icon}
-      <div class="absolute top-0 left-0 flex h-full w-full items-center">
+      <div class="absolute left-0 top-0 flex h-full w-full items-center">
         <Icon icon={icon.icon} color={icon.color} {clss} {emojiHeight} />
       </div>
     {/each}
diff --git a/src/UI/Map/ShowDataLayer.ts b/src/UI/Map/ShowDataLayer.ts
index 73084e0bc..15aa40d70 100644
--- a/src/UI/Map/ShowDataLayer.ts
+++ b/src/UI/Map/ShowDataLayer.ts
@@ -122,10 +122,7 @@ class PointRenderingLayer {
                     continue
                 }
 
-                const loc = GeoOperations.featureToCoordinateWithRenderingType(
-                    feature,
-                    location
-                )
+                const loc = GeoOperations.featureToCoordinateWithRenderingType(feature, location)
                 if (loc === undefined) {
                     continue
                 }
@@ -199,10 +196,14 @@ class PointRenderingLayer {
             .addTo(this._map)
         store
             .map((tags) => this._config.pitchAlignment.GetRenderValue(tags).Subs(tags).txt)
-            .addCallbackAndRun((pitchAligment) => marker.setPitchAlignment(<Alignment>pitchAligment))
+            .addCallbackAndRun((pitchAligment) =>
+                marker.setPitchAlignment(<Alignment>pitchAligment)
+            )
         store
             .map((tags) => this._config.rotationAlignment.GetRenderValue(tags).Subs(tags).txt)
-            .addCallbackAndRun((pitchAligment) => marker.setRotationAlignment(<Alignment>pitchAligment))
+            .addCallbackAndRun((pitchAligment) =>
+                marker.setRotationAlignment(<Alignment>pitchAligment)
+            )
 
         if (feature.geometry.type === "Point") {
             // When the tags get 'pinged', check that the location didn't change
@@ -507,7 +508,10 @@ class LineRenderingLayer {
 }
 
 export default class ShowDataLayer {
-    public static rangeLayer = new LayerConfig(<LayerConfigJson>range_layer, "ShowDataLayer.ts:range.json")
+    public static rangeLayer = new LayerConfig(
+        <LayerConfigJson>range_layer,
+        "ShowDataLayer.ts:range.json"
+    )
     private readonly _options: ShowDataLayerOptions & {
         layer: LayerConfig
         drawMarkers?: true | boolean
diff --git a/src/UI/PlantNet/PlantNet.svelte b/src/UI/PlantNet/PlantNet.svelte
index f1d199f89..818dcd7e4 100644
--- a/src/UI/PlantNet/PlantNet.svelte
+++ b/src/UI/PlantNet/PlantNet.svelte
@@ -71,7 +71,7 @@
     <!-- No urls are available, show the explanation instead-->
     <div class=" border-region relative mb-1 p-2">
       <XCircleIcon
-        class="absolute top-0 right-0 m-4 h-8 w-8 cursor-pointer"
+        class="absolute right-0 top-0 m-4 h-8 w-8 cursor-pointer"
         on:click={() => {
           collapsedMode = true
         }}
diff --git a/src/UI/PlantNet/PlantNetSpeciesList.svelte b/src/UI/PlantNet/PlantNetSpeciesList.svelte
index 16fdaa839..c5dccc9df 100644
--- a/src/UI/PlantNet/PlantNetSpeciesList.svelte
+++ b/src/UI/PlantNet/PlantNetSpeciesList.svelte
@@ -21,7 +21,7 @@
   </Loading>
 {:else}
   <div class="low-interaction border-interactive relative flex flex-col p-2">
-    <div class="absolute top-0 right-0">
+    <div class="absolute right-0 top-0">
       <slot name="upper-right" />
     </div>
     <h3>
diff --git a/src/UI/Popup/AddNewPoint/AddNewPoint.svelte b/src/UI/Popup/AddNewPoint/AddNewPoint.svelte
index 46c89bac5..7a97cad9a 100644
--- a/src/UI/Popup/AddNewPoint/AddNewPoint.svelte
+++ b/src/UI/Popup/AddNewPoint/AddNewPoint.svelte
@@ -331,7 +331,7 @@
       </SubtleButton>
     {:else if !creating}
       <div class="flex h-full flex-col">
-        <div class="min-h-20 relative h-full w-full p-1">
+        <div class="relative h-full min-h-20 w-full p-1">
           <div class="h-full w-full overflow-hidden rounded-xl">
             <NewPointLocationInput
               on:click={() => {
diff --git a/src/UI/Popup/AutoApplyButton.ts b/src/UI/Popup/AutoApplyButton.ts
index a2cdf12d0..851b7bc21 100644
--- a/src/UI/Popup/AutoApplyButton.ts
+++ b/src/UI/Popup/AutoApplyButton.ts
@@ -268,7 +268,9 @@ export default class AutoApplyButton implements SpecialVisualization {
         A button to run many actions for many features at once.
         To effectively use this button, you'll need some ingredients:
 
-        1. A target layer with features for which an action is defined in a tag rendering. The following special visualisations support an autoAction: ${supportedActions.join(", ")}
+        1. A target layer with features for which an action is defined in a tag rendering. The following special visualisations support an autoAction: ${supportedActions.join(
+            ", "
+        )}
         2. A host feature to place the auto-action on. This can be a big outline (such as a city). Another good option for this is the layer [current_view](./BuiltinLayers.md#current_view)
         3. Then, use a calculated tag on the host feature to determine the overlapping object ids
         4. At last, add this component`
diff --git a/src/UI/Popup/GroupedView.svelte b/src/UI/Popup/GroupedView.svelte
index 577dd2921..d77018af2 100644
--- a/src/UI/Popup/GroupedView.svelte
+++ b/src/UI/Popup/GroupedView.svelte
@@ -25,7 +25,7 @@
       if (seenIds.has(tr.id)) {
         continue
       }
-      if (label === tr.id || tr.labels.some(l => l === label)) {
+      if (label === tr.id || tr.labels.some((l) => l === label)) {
         trgs.push(tr)
         seenIds.add(tr.id)
       }
@@ -38,12 +38,6 @@
     <TagRenderingAnswer {tags} {layer} config={headerTr} {state} {selectedElement} />
   </div>
   {#each trgs as config (config.id)}
-    <TagRenderingEditableDynamic
-      {tags}
-      {config}
-      {state}
-      {selectedElement}
-      {layer}
-    />
+    <TagRenderingEditableDynamic {tags} {config} {state} {selectedElement} {layer} />
   {/each}
 </AccordionSingle>
diff --git a/src/UI/Popup/LanguageElement/LanguageElement.ts b/src/UI/Popup/LanguageElement/LanguageElement.ts
index 43e382f2a..a9a5df1d5 100644
--- a/src/UI/Popup/LanguageElement/LanguageElement.ts
+++ b/src/UI/Popup/LanguageElement/LanguageElement.ts
@@ -17,7 +17,7 @@ export class LanguageElement implements SpecialVisualization {
         {
             name: "key",
             required: true,
-            doc: "What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `<key>:nl=yes` if _nl_ is picked "
+            doc: "What key to use, e.g. `language`, `tactile_writing:braille:language`, ... If a language is supported, the language code will be appended to this key, resulting in `<key>:nl=yes` if _nl_ is picked ",
         },
         {
             name: "question",
diff --git a/src/UI/Popup/SplitRoadWizard.svelte b/src/UI/Popup/SplitRoadWizard.svelte
index 524625ae7..094572647 100644
--- a/src/UI/Popup/SplitRoadWizard.svelte
+++ b/src/UI/Popup/SplitRoadWizard.svelte
@@ -59,7 +59,7 @@
       id.data,
       splitPoints.data.map((ff) => <[number, number]>(<Point>ff.geometry).coordinates),
       {
-        theme: state?.theme?.id
+        theme: state?.theme?.id,
       },
       snapTolerance
     )
@@ -72,6 +72,7 @@
     step = "has_been_split"
   }
 </script>
+
 {#if $id.startsWith("way/")}
   <LoginToggle ignoreLoading={true} {state}>
     <Tr slot="not-logged-in" t={t.loginToSplit} />
@@ -100,9 +101,9 @@
           <BackButton
             clss="w-full"
             on:click={() => {
-            splitPoints.set([])
-            step = "initial"
-          }}
+              splitPoints.set([])
+              step = "initial"
+            }}
           >
             <Tr t={Translations.t.general.cancel} />
           </BackButton>
diff --git a/src/UI/Popup/TagHint.svelte b/src/UI/Popup/TagHint.svelte
index 583fb76d9..42e7ba733 100644
--- a/src/UI/Popup/TagHint.svelte
+++ b/src/UI/Popup/TagHint.svelte
@@ -20,12 +20,12 @@
   $: tagsExplanation = tags?.asHumanString(true, false, currentProperties)
 </script>
 
-  <div class="break-words" style="word-break: break-word">
-    {#if tags === undefined}
-      <slot name="no-tags"><Tr cls="subtle" t={Translations.t.general.noTagsSelected} /></slot>
-    {:else if embedIn === undefined}
-      <FromHtml src={tagsExplanation} />
-    {:else}
-      <Tr t={embedIn(tagsExplanation)} />
-    {/if}
-  </div>
+<div class="break-words" style="word-break: break-word">
+  {#if tags === undefined}
+    <slot name="no-tags"><Tr cls="subtle" t={Translations.t.general.noTagsSelected} /></slot>
+  {:else if embedIn === undefined}
+    <FromHtml src={tagsExplanation} />
+  {:else}
+    <Tr t={embedIn(tagsExplanation)} />
+  {/if}
+</div>
diff --git a/src/UI/Popup/TagRendering/Questionbox.svelte b/src/UI/Popup/TagRendering/Questionbox.svelte
index 405646f06..646c1167d 100644
--- a/src/UI/Popup/TagRendering/Questionbox.svelte
+++ b/src/UI/Popup/TagRendering/Questionbox.svelte
@@ -164,7 +164,7 @@
         </div>
       {/if}
 
-      <div class="mt-4 mb-8">
+      <div class="mb-8 mt-4">
         {#if skipped + answered > 0}
           <div class="flex justify-center">
             {#if answered === 0}
diff --git a/src/UI/Popup/TagRendering/SpecialTranslation.svelte b/src/UI/Popup/TagRendering/SpecialTranslation.svelte
index 361d2f7e9..417654a84 100644
--- a/src/UI/Popup/TagRendering/SpecialTranslation.svelte
+++ b/src/UI/Popup/TagRendering/SpecialTranslation.svelte
@@ -2,7 +2,10 @@
   import { Translation } from "../../i18n/Translation"
   import SpecialVisualizations from "../../SpecialVisualizations"
   import Locale from "../../i18n/Locale"
-  import type { RenderingSpecification, SpecialVisualizationState } from "../../SpecialVisualization"
+  import type {
+    RenderingSpecification,
+    SpecialVisualizationState,
+  } from "../../SpecialVisualization"
   import { Utils } from "../../../Utils.js"
   import type { Feature } from "geojson"
   import { UIEventSource } from "../../../Logic/UIEventSource.js"
diff --git a/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte b/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte
index 2d90210c8..4cebecb6f 100644
--- a/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte
+++ b/src/UI/Popup/TagRendering/TagRenderingQuestion.svelte
@@ -387,7 +387,7 @@
     >
       <fieldset>
         <legend>
-          <div class="sticky top-0 justify-between pt-4 pb-2 font-bold" style="z-index: 11">
+          <div class="sticky top-0 justify-between pb-2 pt-4 font-bold" style="z-index: 11">
             <SpecialTranslation t={question} {tags} {state} {layer} feature={selectedElement} />
           </div>
 
@@ -608,7 +608,7 @@
             {/if}
 
             <div
-              class="mt-4 mb-2 flex flex-grow flex-wrap-reverse items-stretch justify-end self-end sm:flex-nowrap"
+              class="mb-2 mt-4 flex flex-grow flex-wrap-reverse items-stretch justify-end self-end sm:flex-nowrap"
             >
               <!-- TagRenderingQuestion-buttons -->
               <slot name="cancel" />
diff --git a/src/UI/PrivacyGui.svelte b/src/UI/PrivacyGui.svelte
index 005aac607..0625082b5 100644
--- a/src/UI/PrivacyGui.svelte
+++ b/src/UI/PrivacyGui.svelte
@@ -16,22 +16,24 @@
   const osmConnection = new OsmConnection()
   let state: SpecialVisualizationState = {
     osmConnection,
-    userRelatedState: new UserRelatedState(osmConnection)
+    userRelatedState: new UserRelatedState(osmConnection),
   }
 </script>
 
 <main class="h-screen">
   <TitledPanel>
     <a slot="title-start" class="button p-0" style="padding:0" href="..">
-      <Back class="w-6 h-6 m-2" />
+      <Back class="m-2 h-6 w-6" />
     </a>
     <div slot="title" class="flex items-center">
       <EyeIcon class="w-6 pr-2" />
       <Tr t={Translations.t.privacy.title} />
     </div>
 
-    <LanguagePicker slot="title-end" availableLanguages={Translations.t.privacy.intro.SupportedLanguages()} />
+    <LanguagePicker
+      slot="title-end"
+      availableLanguages={Translations.t.privacy.intro.SupportedLanguages()}
+    />
     <PrivacyPolicy {state} />
   </TitledPanel>
-
 </main>
diff --git a/src/UI/Search/SearchResults.svelte b/src/UI/Search/SearchResults.svelte
index 34ec64895..aabce6362 100644
--- a/src/UI/Search/SearchResults.svelte
+++ b/src/UI/Search/SearchResults.svelte
@@ -15,15 +15,13 @@
   let activeFilters: Store<(ActiveFilter & FilterSearchResult)[]> =
     state.layerState.activeFilters.map((fs) =>
       fs
-        .filter(
-          (f) => f.filter.options[0].fields.length === 0 && !Constants.isPriviliged(f.layer)
-        )
+        .filter((f) => f.filter.options[0].fields.length === 0 && !Constants.isPriviliged(f.layer))
         .map((af) => {
           const index = <number>af.control.data
           const r: FilterSearchResult & ActiveFilter = {
             ...af,
             index,
-            option: af.filter.options[index]
+            option: af.filter.options[index],
           }
           return r
         })
diff --git a/src/UI/SingleThemeGui.svelte b/src/UI/SingleThemeGui.svelte
index 3c4d8b934..17fb0f0f5 100644
--- a/src/UI/SingleThemeGui.svelte
+++ b/src/UI/SingleThemeGui.svelte
@@ -12,7 +12,7 @@
   import { UIEventSource } from "../Logic/UIEventSource"
   import { WithSearchState } from "../Models/ThemeViewState/WithSearchState"
   import ThemeConfig from "../Models/ThemeConfig/ThemeConfig"
-import { AndroidPolyfill } from "../Logic/Web/AndroidPolyfill"
+  import { AndroidPolyfill } from "../Logic/Web/AndroidPolyfill"
 
   function webgl_support() {
     try {
@@ -46,7 +46,7 @@ import { AndroidPolyfill } from "../Logic/Web/AndroidPolyfill"
   }
 
   export let theme: ThemeConfig
-AndroidPolyfill.init()
+  AndroidPolyfill.init()
   let webgl_supported = webgl_support()
 
   let availableLayers = UIEventSource.FromPromise(getAvailableLayers())
diff --git a/src/UI/SpecialVisualisations/DataImportSpecialVisualisations.ts b/src/UI/SpecialVisualisations/DataImportSpecialVisualisations.ts
index 7b5da7c41..e05b739e2 100644
--- a/src/UI/SpecialVisualisations/DataImportSpecialVisualisations.ts
+++ b/src/UI/SpecialVisualisations/DataImportSpecialVisualisations.ts
@@ -19,273 +19,272 @@ import { Utils } from "../../Utils"
 
 export class DataImportSpecialVisualisations {
     public static initList(): (SpecialVisualization & { group })[] {
-    return [
-        new TagApplyButton(),
-        new PointImportButtonViz(),
-        new WayImportButtonViz(),
-        new ConflateImportButtonViz(),
-        new PlantNetDetectionViz(),
-        {
-        funcName: "maproulette_set_status",
-            group: "data_import",
-        docs: "Change the status of the given MapRoulette task",
-        needsUrls: [Maproulette.defaultEndpoint],
-        example:
-          " The following example sets the status to '2' (false positive)\n" +
-          "\n" +
-          "```json\n" +
-          "{\n" +
-          "   \"id\": \"mark_duplicate\",\n" +
-          "   \"render\": {\n" +
-          "      \"special\": {\n" +
-          "         \"type\": \"maproulette_set_status\",\n" +
-          "         \"message\": {\n" +
-          "            \"en\": \"Mark as not found or false positive\"\n" +
-          "         },\n" +
-          "         \"status\": \"2\",\n" +
-          "         \"image\": \"close\"\n" +
-          "      }\n" +
-          "   }\n" +
-          "}\n" +
-          "```",
-        args: [
-          {
-            name: "message",
-            doc: "A message to show to the user"
-          },
-          {
-            name: "image",
-            doc: "Image to show",
-            defaultValue: "confirm"
-          },
-          {
-            name: "message_confirm",
-            doc: "What to show when the task is closed, either by the user or was already closed."
-          },
-          {
-            name: "status",
-            doc: "A statuscode to apply when the button is clicked. 1 = `close`, 2 = `false_positive`, 3 = `skip`, 4 = `deleted`, 5 = `already fixed` (on the map, e.g. for duplicates), 6 = `too hard`",
-            defaultValue: "1"
-          },
-          {
-            name: "maproulette_id",
-            doc: "The property name containing the maproulette id",
-            defaultValue: "mr_taskId"
-          },
-          {
-            name: "ask_feedback",
-            doc: "If not an empty string, this will be used as question to ask some additional feedback. A text field will be added",
-            defaultValue: ""
-          }
-        ],
+        return [
+            new TagApplyButton(),
+            new PointImportButtonViz(),
+            new WayImportButtonViz(),
+            new ConflateImportButtonViz(),
+            new PlantNetDetectionViz(),
+            {
+                funcName: "maproulette_set_status",
+                group: "data_import",
+                docs: "Change the status of the given MapRoulette task",
+                needsUrls: [Maproulette.defaultEndpoint],
+                example:
+                    " The following example sets the status to '2' (false positive)\n" +
+                    "\n" +
+                    "```json\n" +
+                    "{\n" +
+                    '   "id": "mark_duplicate",\n' +
+                    '   "render": {\n' +
+                    '      "special": {\n' +
+                    '         "type": "maproulette_set_status",\n' +
+                    '         "message": {\n' +
+                    '            "en": "Mark as not found or false positive"\n' +
+                    "         },\n" +
+                    '         "status": "2",\n' +
+                    '         "image": "close"\n' +
+                    "      }\n" +
+                    "   }\n" +
+                    "}\n" +
+                    "```",
+                args: [
+                    {
+                        name: "message",
+                        doc: "A message to show to the user",
+                    },
+                    {
+                        name: "image",
+                        doc: "Image to show",
+                        defaultValue: "confirm",
+                    },
+                    {
+                        name: "message_confirm",
+                        doc: "What to show when the task is closed, either by the user or was already closed.",
+                    },
+                    {
+                        name: "status",
+                        doc: "A statuscode to apply when the button is clicked. 1 = `close`, 2 = `false_positive`, 3 = `skip`, 4 = `deleted`, 5 = `already fixed` (on the map, e.g. for duplicates), 6 = `too hard`",
+                        defaultValue: "1",
+                    },
+                    {
+                        name: "maproulette_id",
+                        doc: "The property name containing the maproulette id",
+                        defaultValue: "mr_taskId",
+                    },
+                    {
+                        name: "ask_feedback",
+                        doc: "If not an empty string, this will be used as question to ask some additional feedback. A text field will be added",
+                        defaultValue: "",
+                    },
+                ],
 
-        constr: (state, tagsSource, args) => {
-          let [
-            message,
-            image,
-            message_closed,
-            statusToSet,
-            maproulette_id_key,
-            askFeedback
-          ] = args
-          if (image === "") {
-            image = "confirm"
-          }
-          if (maproulette_id_key === "" || maproulette_id_key === undefined) {
-            maproulette_id_key = "mr_taskId"
-          }
-          statusToSet = statusToSet ?? "1"
-          return new SvelteUIElement(MaprouletteSetStatus, {
-            state,
-            tags: tagsSource,
-            message,
-            image,
-            message_closed,
-            statusToSet,
-            maproulette_id_key,
-            askFeedback
-          })
-        }
-        },
-        {
-            funcName: "linked_data_from_website",
-            group: "data_import",
-            docs: "Attempts to load (via a proxy) the specified website and parsed ld+json from there. Suitable data will be offered to import into OSM. Note: this element is added by default",
-            args: [
-                {
-                    name: "key",
-                    defaultValue: "website",
-                    doc: "Attempt to load ld+json from the specified URL. This can be in an embedded <script type='ld+json'>"
-                },
-                {
-                    name: "useProxy",
-                    defaultValue: "yes",
-                    doc: "If 'yes', uses the provided proxy server. This proxy server will scrape HTML and search for a script with `lang='ld+json'`. If `no`, the data will be downloaded and expects a linked-data-json directly"
-                },
-                {
-                    name: "host",
-                    doc: "If not using a proxy, define what host the website is allowed to connect to"
-                },
-                {
-                    name: "mode",
-                    doc: "If `display`, only show the data in tabular and readonly form, ignoring already existing tags. This is used to explicitly show all the tags. If unset or anything else, allow to apply/import on OSM"
-                },
-                {
-                    name: "collapsed",
-                    defaultValue: "yes",
-                    doc: "If the containing accordion should be closed"
-                }
-            ],
-            needsUrls: [Constants.linkedDataProxy, "http://www.schema.org"],
-            constr(
-                state: SpecialVisualizationState,
-                tags: UIEventSource<Record<string, string>>,
-                argument: string[],
-                feature: Feature,
-                layer: LayerConfig
-            ): BaseUIElement {
-                const key = argument[0] ?? "website"
-                const useProxy = argument[1] !== "no"
-                const readonly = argument[3] === "readonly"
-                const isClosed = (argument[4] ?? "yes") === "yes"
-
-                const countryStore: Store<string | undefined> = tags.mapD(
-                    (tags) => tags._country
-                )
-                const sourceUrl: Store<string | undefined> = tags.mapD((tags) => {
-                    if (!tags[key] || tags[key] === "undefined") {
-                        return null
+                constr: (state, tagsSource, args) => {
+                    let [
+                        message,
+                        image,
+                        message_closed,
+                        statusToSet,
+                        maproulette_id_key,
+                        askFeedback,
+                    ] = args
+                    if (image === "") {
+                        image = "confirm"
                     }
-                    return tags[key]
-                })
-                const externalData: Store<{ success: GeoJsonProperties } | { error }> =
-                    sourceUrl.bindD(
-                        (url) => {
-                            const country = countryStore.data
-                            if (url.startsWith("https://data.velopark.be/")) {
+                    if (maproulette_id_key === "" || maproulette_id_key === undefined) {
+                        maproulette_id_key = "mr_taskId"
+                    }
+                    statusToSet = statusToSet ?? "1"
+                    return new SvelteUIElement(MaprouletteSetStatus, {
+                        state,
+                        tags: tagsSource,
+                        message,
+                        image,
+                        message_closed,
+                        statusToSet,
+                        maproulette_id_key,
+                        askFeedback,
+                    })
+                },
+            },
+            {
+                funcName: "linked_data_from_website",
+                group: "data_import",
+                docs: "Attempts to load (via a proxy) the specified website and parsed ld+json from there. Suitable data will be offered to import into OSM. Note: this element is added by default",
+                args: [
+                    {
+                        name: "key",
+                        defaultValue: "website",
+                        doc: "Attempt to load ld+json from the specified URL. This can be in an embedded <script type='ld+json'>",
+                    },
+                    {
+                        name: "useProxy",
+                        defaultValue: "yes",
+                        doc: "If 'yes', uses the provided proxy server. This proxy server will scrape HTML and search for a script with `lang='ld+json'`. If `no`, the data will be downloaded and expects a linked-data-json directly",
+                    },
+                    {
+                        name: "host",
+                        doc: "If not using a proxy, define what host the website is allowed to connect to",
+                    },
+                    {
+                        name: "mode",
+                        doc: "If `display`, only show the data in tabular and readonly form, ignoring already existing tags. This is used to explicitly show all the tags. If unset or anything else, allow to apply/import on OSM",
+                    },
+                    {
+                        name: "collapsed",
+                        defaultValue: "yes",
+                        doc: "If the containing accordion should be closed",
+                    },
+                ],
+                needsUrls: [Constants.linkedDataProxy, "http://www.schema.org"],
+                constr(
+                    state: SpecialVisualizationState,
+                    tags: UIEventSource<Record<string, string>>,
+                    argument: string[],
+                    feature: Feature,
+                    layer: LayerConfig
+                ): BaseUIElement {
+                    const key = argument[0] ?? "website"
+                    const useProxy = argument[1] !== "no"
+                    const readonly = argument[3] === "readonly"
+                    const isClosed = (argument[4] ?? "yes") === "yes"
+
+                    const countryStore: Store<string | undefined> = tags.mapD(
+                        (tags) => tags._country
+                    )
+                    const sourceUrl: Store<string | undefined> = tags.mapD((tags) => {
+                        if (!tags[key] || tags[key] === "undefined") {
+                            return null
+                        }
+                        return tags[key]
+                    })
+                    const externalData: Store<{ success: GeoJsonProperties } | { error }> =
+                        sourceUrl.bindD(
+                            (url) => {
+                                const country = countryStore.data
+                                if (url.startsWith("https://data.velopark.be/")) {
+                                    return Stores.FromPromiseWithErr(
+                                        (async () => {
+                                            try {
+                                                const loadAll =
+                                                    layer.id.toLowerCase().indexOf("maproulette") >=
+                                                    0 // Dirty hack
+                                                const features =
+                                                    await LinkedDataLoader.fetchVeloparkEntry(
+                                                        url,
+                                                        loadAll
+                                                    )
+                                                const feature =
+                                                    features.find(
+                                                        (f) => f.properties["ref:velopark"] === url
+                                                    ) ?? features[0]
+                                                const properties = feature.properties
+                                                properties["ref:velopark"] = url
+                                                console.log(
+                                                    "Got properties from velopark:",
+                                                    properties
+                                                )
+                                                return properties
+                                            } catch (e) {
+                                                console.error(e)
+                                                throw e
+                                            }
+                                        })()
+                                    )
+                                }
+                                if (country === undefined) {
+                                    return undefined
+                                }
                                 return Stores.FromPromiseWithErr(
                                     (async () => {
                                         try {
-                                            const loadAll =
-                                                layer.id.toLowerCase().indexOf("maproulette") >=
-                                                0 // Dirty hack
-                                            const features =
-                                                await LinkedDataLoader.fetchVeloparkEntry(
-                                                    url,
-                                                    loadAll
-                                                )
-                                            const feature =
-                                                features.find(
-                                                    (f) => f.properties["ref:velopark"] === url
-                                                ) ?? features[0]
-                                            const properties = feature.properties
-                                            properties["ref:velopark"] = url
-                                            console.log(
-                                                "Got properties from velopark:",
-                                                properties
+                                            return await LinkedDataLoader.fetchJsonLd(
+                                                url,
+                                                { country },
+                                                useProxy ? "proxy" : "fetch-lod"
                                             )
-                                            return properties
                                         } catch (e) {
-                                            console.error(e)
-                                            throw e
+                                            console.log(
+                                                "Could not get with proxy/download LOD, attempting to download directly. Error for ",
+                                                url,
+                                                "is",
+                                                e
+                                            )
+                                            return await LinkedDataLoader.fetchJsonLd(
+                                                url,
+                                                { country },
+                                                "fetch-raw"
+                                            )
                                         }
                                     })()
                                 )
-                            }
-                            if (country === undefined) {
-                                return undefined
-                            }
-                            return Stores.FromPromiseWithErr(
-                                (async () => {
-                                    try {
-                                        return await LinkedDataLoader.fetchJsonLd(
-                                            url,
-                                            { country },
-                                            useProxy ? "proxy" : "fetch-lod"
-                                        )
-                                    } catch (e) {
-                                        console.log(
-                                            "Could not get with proxy/download LOD, attempting to download directly. Error for ",
-                                            url,
-                                            "is",
-                                            e
-                                        )
-                                        return await LinkedDataLoader.fetchJsonLd(
-                                            url,
-                                            { country },
-                                            "fetch-raw"
-                                        )
-                                    }
-                                })()
-                            )
-                        },
-                        [countryStore]
+                            },
+                            [countryStore]
+                        )
+
+                    externalData.addCallbackAndRunD((lod) =>
+                        console.log("linked_data_from_website received the following data:", lod)
                     )
 
-                externalData.addCallbackAndRunD((lod) =>
-                    console.log("linked_data_from_website received the following data:", lod)
-                )
-
-                return new Toggle(
-                    new SvelteUIElement(ComparisonTool, {
-                        feature,
+                    return new Toggle(
+                        new SvelteUIElement(ComparisonTool, {
+                            feature,
+                            state,
+                            tags,
+                            layer,
+                            externalData,
+                            sourceUrl,
+                            readonly,
+                            collapsed: isClosed,
+                        }),
+                        undefined,
+                        sourceUrl.map((url) => !!url)
+                    )
+                },
+            },
+            {
+                funcName: "compare_data",
+                group: "data_import",
+                needsUrls: (args) => args[1].split(";"),
+                args: [
+                    {
+                        name: "url",
+                        required: true,
+                        doc: "The attribute containing the url where to fetch more data",
+                    },
+                    {
+                        name: "host",
+                        required: true,
+                        doc: "The domain name(s) where data might be fetched from - this is needed to set the CSP. A domain must include 'https', e.g. 'https://example.com'. For multiple domains, separate them with ';'. If you don't know the possible domains, use '*'. ",
+                    },
+                    {
+                        name: "readonly",
+                        required: false,
+                        doc: "If 'yes', will not show 'apply'-buttons",
+                    },
+                ],
+                docs: "Gives an interactive element which shows a tag comparison between the OSM-object and the upstream object. This allows to copy some or all tags into OSM",
+                constr(
+                    state: SpecialVisualizationState,
+                    tagSource: UIEventSource<Record<string, string>>,
+                    args: string[],
+                    feature: Feature,
+                    layer: LayerConfig
+                ): BaseUIElement {
+                    const url = args[0]
+                    const readonly = args[3] === "yes"
+                    const externalData = Stores.FromPromiseWithErr(Utils.downloadJson(url))
+                    return new SvelteUIElement(ComparisonTool, {
+                        url,
                         state,
-                        tags,
+                        tags: tagSource,
                         layer,
-                        externalData,
-                        sourceUrl,
+                        feature,
                         readonly,
-                        collapsed: isClosed
-                    }),
-                    undefined,
-                    sourceUrl.map((url) => !!url)
-                )
-            }
-        },
-        {
-            funcName: "compare_data",
-            group: "data_import",
-            needsUrls: (args) => args[1].split(";"),
-            args: [
-                {
-                    name: "url",
-                    required: true,
-                    doc: "The attribute containing the url where to fetch more data"
+                        externalData,
+                    })
                 },
-                {
-                    name: "host",
-                    required: true,
-                    doc: "The domain name(s) where data might be fetched from - this is needed to set the CSP. A domain must include 'https', e.g. 'https://example.com'. For multiple domains, separate them with ';'. If you don't know the possible domains, use '*'. "
-                },
-                {
-                    name: "readonly",
-                    required: false,
-                    doc: "If 'yes', will not show 'apply'-buttons"
-                }
-            ],
-            docs: "Gives an interactive element which shows a tag comparison between the OSM-object and the upstream object. This allows to copy some or all tags into OSM",
-            constr(
-                state: SpecialVisualizationState,
-                tagSource: UIEventSource<Record<string, string>>,
-                args: string[],
-                feature: Feature,
-                layer: LayerConfig
-            ): BaseUIElement {
-                const url = args[0]
-                const readonly = args[3] === "yes"
-                const externalData = Stores.FromPromiseWithErr(Utils.downloadJson(url))
-                return new SvelteUIElement(ComparisonTool, {
-                    url,
-                    state,
-                    tags: tagSource,
-                    layer,
-                    feature,
-                    readonly,
-                    externalData
-                })
-            }
-        }
-
-    ]
-  }
+            },
+        ]
+    }
 }
diff --git a/src/UI/SpecialVisualisations/FavouriteVisualisations.ts b/src/UI/SpecialVisualisations/FavouriteVisualisations.ts
index 21ff2df87..e029789ab 100644
--- a/src/UI/SpecialVisualisations/FavouriteVisualisations.ts
+++ b/src/UI/SpecialVisualisations/FavouriteVisualisations.ts
@@ -8,27 +8,28 @@ import MarkAsFavouriteMini from "../Popup/MarkAsFavouriteMini.svelte"
 
 export class FavouriteVisualisations {
     public static initList(): SpecialVisualizationSvelte[] {
-        return [{
-            funcName: "favourite_status",
+        return [
+            {
+                funcName: "favourite_status",
 
-            docs: "A button that allows a (logged in) contributor to mark a location as a favourite location",
-            args: [],
-            group: "favourites",
-            constr(
-                state: SpecialVisualizationState,
-                tagSource: UIEventSource<Record<string, string>>,
-                argument: string[],
-                feature: Feature,
-                layer: LayerConfig
-            ): SvelteUIElement {
-                return new SvelteUIElement(MarkAsFavourite, {
-                    tags: tagSource,
-                    state,
-                    layer,
-                    feature
-                })
-            }
-        },
+                docs: "A button that allows a (logged in) contributor to mark a location as a favourite location",
+                args: [],
+                group: "favourites",
+                constr(
+                    state: SpecialVisualizationState,
+                    tagSource: UIEventSource<Record<string, string>>,
+                    argument: string[],
+                    feature: Feature,
+                    layer: LayerConfig
+                ): SvelteUIElement {
+                    return new SvelteUIElement(MarkAsFavourite, {
+                        tags: tagSource,
+                        state,
+                        layer,
+                        feature,
+                    })
+                },
+            },
             {
                 funcName: "favourite_icon",
                 group: "favourites",
@@ -45,9 +46,10 @@ export class FavouriteVisualisations {
                         tags: tagSource,
                         state,
                         layer,
-                        feature
+                        feature,
                     })
-                }
-            }]
+                },
+            },
+        ]
     }
 }
diff --git a/src/UI/SpecialVisualisations/ImageVisualisations.ts b/src/UI/SpecialVisualisations/ImageVisualisations.ts
index f75f5c5cd..3897331dd 100644
--- a/src/UI/SpecialVisualisations/ImageVisualisations.ts
+++ b/src/UI/SpecialVisualisations/ImageVisualisations.ts
@@ -18,13 +18,13 @@ class NearbyImageVis implements SpecialVisualizationSvelte {
         {
             name: "mode",
             defaultValue: "closed",
-            doc: "Either `open` or `closed`. If `open`, then the image carousel will always be shown"
+            doc: "Either `open` or `closed`. If `open`, then the image carousel will always be shown",
         },
         {
             name: "readonly",
             required: false,
-            doc: "If 'readonly' or 'yes', will not show the 'link'-button"
-        }
+            doc: "If 'readonly' or 'yes', will not show the 'link'-button",
+        },
     ]
     group: "images"
     docs =
@@ -49,13 +49,12 @@ class NearbyImageVis implements SpecialVisualizationSvelte {
             lat,
             feature,
             layer,
-            linkable: !readonly
+            linkable: !readonly,
         })
     }
 }
 
 export class ImageVisualisations {
-
     static initList(): SpecialVisualizationSvelte[] {
         return [
             new NearbyImageVis(),
@@ -67,8 +66,8 @@ export class ImageVisualisations {
                     {
                         name: "image_key",
                         defaultValue: AllImageProviders.defaultKeys.join(","),
-                        doc: "The keys given to the images, e.g. if <span class='literal-code'>image</span> is given, the first picture URL will be added as <span class='literal-code'>image</span>, the second as <span class='literal-code'>image:0</span>, the third as <span class='literal-code'>image:1</span>, etc... Multiple values are allowed if ';'-separated "
-                    }
+                        doc: "The keys given to the images, e.g. if <span class='literal-code'>image</span> is given, the first picture URL will be added as <span class='literal-code'>image</span>, the second as <span class='literal-code'>image:0</span>, the third as <span class='literal-code'>image:1</span>, etc... Multiple values are allowed if ';'-separated ",
+                    },
                 ],
                 needsUrls: AllImageProviders.apiUrls,
                 constr: (state, tags, args) => {
@@ -77,9 +76,11 @@ export class ImageVisualisations {
                         imagePrefixes = [].concat(...args.map((a) => a.split(",")))
                     }
                     const images = AllImageProviders.loadImagesFor(tags, imagePrefixes)
-                    const estimated = tags.mapD(tags => AllImageProviders.estimateNumberOfImages(tags, imagePrefixes))
+                    const estimated = tags.mapD((tags) =>
+                        AllImageProviders.estimateNumberOfImages(tags, imagePrefixes)
+                    )
                     return new SvelteUIElement(ImageCarousel, { state, tags, images, estimated })
-                }
+                },
             },
             {
                 funcName: "image_upload",
@@ -90,18 +91,18 @@ export class ImageVisualisations {
                     {
                         name: "image-key",
                         doc: "Image tag to add the URL to (or image-tag:0, image-tag:1 when multiple images are added)",
-                        required: false
+                        required: false,
                     },
                     {
                         name: "label",
                         doc: "The text to show on the button",
-                        required: false
+                        required: false,
                     },
                     {
                         name: "disable_blur",
                         doc: "If set to 'true' or 'yes', then face blurring will be disabled. To be used sparingly",
-                        required: false
-                    }
+                        required: false,
+                    },
                 ],
                 constr: (state, tags, args, feature) => {
                     const targetKey = args[0] === "" ? undefined : args[0]
@@ -113,10 +114,10 @@ export class ImageVisualisations {
                         feature,
                         labelText: args[1],
                         image: args[2],
-                        noBlur: noBlur === "true" || noBlur === "yes"
+                        noBlur: noBlur === "true" || noBlur === "yes",
                     })
-                }
-            }]
+                },
+            },
+        ]
     }
-
 }
diff --git a/src/UI/SpecialVisualisations/NoteVisualisations.ts b/src/UI/SpecialVisualisations/NoteVisualisations.ts
index 75fc58a1b..a4d889155 100644
--- a/src/UI/SpecialVisualisations/NoteVisualisations.ts
+++ b/src/UI/SpecialVisualisations/NoteVisualisations.ts
@@ -1,4 +1,8 @@
-import { SpecialVisualization, SpecialVisualizationState, SpecialVisualizationSvelte } from "../SpecialVisualization"
+import {
+    SpecialVisualization,
+    SpecialVisualizationState,
+    SpecialVisualizationSvelte,
+} from "../SpecialVisualization"
 import Constants from "../../Models/Constants"
 import { UIEventSource } from "../../Logic/UIEventSource"
 import { Feature } from "geojson"
@@ -24,30 +28,30 @@ class CloseNoteViz implements SpecialVisualizationSvelte {
         {
             name: "text",
             doc: "Text to show on this button",
-            required: true
+            required: true,
         },
         {
             name: "icon",
             doc: "Icon to show",
-            defaultValue: "checkmark.svg"
+            defaultValue: "checkmark.svg",
         },
         {
             name: "idkey",
             doc: "The property name where the ID of the note to close can be found",
-            defaultValue: "id"
+            defaultValue: "id",
         },
         {
             name: "comment",
-            doc: "Text to add onto the note when closing"
+            doc: "Text to add onto the note when closing",
         },
         {
             name: "minZoom",
-            doc: "If set, only show the closenote button if zoomed in enough"
+            doc: "If set, only show the closenote button if zoomed in enough",
         },
         {
             name: "zoomButton",
-            doc: "Text to show if not zoomed in enough"
-        }
+            doc: "Text to show if not zoomed in enough",
+        },
     ]
     public readonly group: "notes"
 
@@ -69,12 +73,11 @@ class CloseNoteViz implements SpecialVisualizationSvelte {
             message: comment,
             text: Translations.T(text),
             minzoom: minZoom,
-            zoomMoreMessage: zoomButton
+            zoomMoreMessage: zoomButton,
         })
     }
 }
 
-
 class AddNoteCommentViz implements SpecialVisualizationSvelte {
     funcName = "add_note_comment"
     needsUrls = [Constants.osmAuthConfig.url]
@@ -83,21 +86,23 @@ class AddNoteCommentViz implements SpecialVisualizationSvelte {
         {
             name: "Id-key",
             doc: "The property name where the ID of the note to close can be found",
-            defaultValue: "id"
-        }
+            defaultValue: "id",
+        },
     ]
     public readonly group: "notes"
 
-
-    public constr(state: SpecialVisualizationState, tags: UIEventSource<Record<string, string>>): SvelteUIElement {
+    public constr(
+        state: SpecialVisualizationState,
+        tags: UIEventSource<Record<string, string>>
+    ): SvelteUIElement {
         return new SvelteUIElement(AddNoteComment, { state, tags })
     }
 }
 
-
 export class NoteVisualisations {
     public static initList(): (SpecialVisualization & { group })[] {
-        return [new AddNoteCommentViz(),
+        return [
+            new AddNoteCommentViz(),
             new CloseNoteViz(),
             {
                 funcName: "open_note",
@@ -114,9 +119,9 @@ export class NoteVisualisations {
                     const [lon, lat] = GeoOperations.centerpointCoordinates(feature)
                     return new SvelteUIElement(CreateNewNote, {
                         state,
-                        coordinate: new UIEventSource({ lon, lat })
+                        coordinate: new UIEventSource({ lon, lat }),
                     })
-                }
+                },
             },
             {
                 funcName: "add_image_to_note",
@@ -125,8 +130,8 @@ export class NoteVisualisations {
                     {
                         name: "Id-key",
                         doc: "The property name where the ID of the note to close can be found",
-                        defaultValue: "id"
-                    }
+                        defaultValue: "id",
+                    },
                 ],
                 group: "notes",
                 needsUrls: [Imgur.apiUrl, ...Imgur.supportingUrls],
@@ -135,7 +140,7 @@ export class NoteVisualisations {
                     const id = tags.data[args[0] ?? "id"]
                     tags = state.featureProperties.getStore(id)
                     return new SvelteUIElement(UploadImage, { state, tags, layer, feature })
-                }
+                },
             },
             {
                 funcName: "visualize_note_comments",
@@ -145,13 +150,13 @@ export class NoteVisualisations {
                     {
                         name: "commentsKey",
                         doc: "The property name of the comments, which should be stringified json",
-                        defaultValue: "comments"
+                        defaultValue: "comments",
                     },
                     {
                         name: "start",
                         doc: "Drop the first 'start' comments",
-                        defaultValue: "0"
-                    }
+                        defaultValue: "0",
+                    },
                 ],
                 needsUrls: [Constants.osmAuthConfig.url],
                 constr: (state, tags, args) =>
@@ -171,13 +176,13 @@ export class NoteVisualisations {
                                             (comment) =>
                                                 new SvelteUIElement(NoteCommentElement, {
                                                     comment,
-                                                    state
+                                                    state,
                                                 })
                                         )
                                 ).SetClass("flex flex-col")
                             })
-                    )
-            }
+                    ),
+            },
         ]
     }
 }
diff --git a/src/UI/SpecialVisualisations/ReviewSpecialVisualisations.ts b/src/UI/SpecialVisualisations/ReviewSpecialVisualisations.ts
index 0259042e5..70f78a9a5 100644
--- a/src/UI/SpecialVisualisations/ReviewSpecialVisualisations.ts
+++ b/src/UI/SpecialVisualisations/ReviewSpecialVisualisations.ts
@@ -24,16 +24,16 @@ export class ReviewSpecialVisualisations {
                 {
                     name: "subjectKey",
                     defaultValue: "name",
-                    doc: "The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>"
+                    doc: "The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>",
                 },
                 {
                     name: "fallback",
-                    doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value"
+                    doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value",
                 },
                 {
                     name: "question",
-                    doc: "The question to ask during the review"
-                }
+                    doc: "The question to ask during the review",
+                },
             ],
             constr: (state, tags, args, feature, layer) => {
                 const nameKey = args[0] ?? "name"
@@ -45,7 +45,7 @@ export class ReviewSpecialVisualisations {
                     state.userRelatedState?.mangroveIdentity,
                     {
                         nameKey: nameKey,
-                        fallbackName
+                        fallbackName,
                     },
                     state.featureSwitchIsTesting
                 )
@@ -55,9 +55,9 @@ export class ReviewSpecialVisualisations {
                     tags,
                     feature,
                     layer,
-                    question
+                    question,
                 })
-            }
+            },
         }
         const listReviews: SpecialVisualization & { group } = {
             funcName: "list_reviews",
@@ -69,12 +69,12 @@ export class ReviewSpecialVisualisations {
                 {
                     name: "subjectKey",
                     defaultValue: "name",
-                    doc: "The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>"
+                    doc: "The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>",
                 },
                 {
                     name: "fallback",
-                    doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value"
-                }
+                    doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value",
+                },
             ],
             constr: (state, tags, args, feature, layer) => {
                 const nameKey = args[0] ?? "name"
@@ -85,12 +85,12 @@ export class ReviewSpecialVisualisations {
                     state.userRelatedState?.mangroveIdentity,
                     {
                         nameKey: nameKey,
-                        fallbackName
+                        fallbackName,
                     },
                     state.featureSwitchIsTesting
                 )
                 return new SvelteUIElement(AllReviews, { reviews, state, tags, feature, layer })
-            }
+            },
         }
         return [
             {
@@ -102,12 +102,12 @@ export class ReviewSpecialVisualisations {
                     {
                         name: "subjectKey",
                         defaultValue: "name",
-                        doc: "The key to use to determine the subject. If the value is specified, the subject will be <b>tags[subjectKey]</b> and will use this to filter the reviews."
+                        doc: "The key to use to determine the subject. If the value is specified, the subject will be <b>tags[subjectKey]</b> and will use this to filter the reviews.",
                     },
                     {
                         name: "fallback",
-                        doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value"
-                    }
+                        doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value",
+                    },
                 ],
                 constr: (state, tags, args, feature) => {
                     const nameKey = args[0] ?? "name"
@@ -118,14 +118,14 @@ export class ReviewSpecialVisualisations {
                         state.userRelatedState.mangroveIdentity,
                         {
                             nameKey: nameKey,
-                            fallbackName
+                            fallbackName,
                         },
                         state.featureSwitchIsTesting
                     )
                     return new SvelteUIElement(StarsBarIcon, {
-                        score: reviews.average
+                        score: reviews.average,
                     })
-                }
+                },
             },
             createReview,
             listReviews,
@@ -137,8 +137,8 @@ export class ReviewSpecialVisualisations {
                 args: [
                     {
                         name: "text",
-                        doc: "The text that is shown on the button"
-                    }
+                        doc: "The text that is shown on the button",
+                    },
                 ],
                 needsUrls: [],
                 constr(
@@ -148,7 +148,7 @@ export class ReviewSpecialVisualisations {
                 ): SvelteUIElement {
                     const [text] = argument
                     return new SvelteUIElement(ImportReviewIdentity, { state, text })
-                }
+                },
             },
             {
                 funcName: "reviews",
@@ -161,16 +161,16 @@ export class ReviewSpecialVisualisations {
                     {
                         name: "subjectKey",
                         defaultValue: "name",
-                        doc: "The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>"
+                        doc: "The key to use to determine the subject. If specified, the subject will be <b>tags[subjectKey]</b>",
                     },
                     {
                         name: "fallback",
-                        doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value"
+                        doc: "The identifier to use, if <i>tags[subjectKey]</i> as specified above is not available. This is effectively a fallback value",
                     },
                     {
                         name: "question",
-                        doc: "The question to ask in the review form. Optional"
-                    }
+                        doc: "The question to ask in the review form. Optional",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
@@ -182,10 +182,10 @@ export class ReviewSpecialVisualisations {
                     return new Combine([
                         createReview.constr(state, tagSource, args, feature, layer),
 
-                        listReviews.constr(state, tagSource, args, feature, layer)
+                        listReviews.constr(state, tagSource, args, feature, layer),
                     ])
-                }
-            }
+                },
+            },
         ]
     }
 }
diff --git a/src/UI/SpecialVisualisations/SettingsVisualisations.ts b/src/UI/SpecialVisualisations/SettingsVisualisations.ts
index ee1655b48..a8c898a69 100644
--- a/src/UI/SpecialVisualisations/SettingsVisualisations.ts
+++ b/src/UI/SpecialVisualisations/SettingsVisualisations.ts
@@ -24,17 +24,16 @@ export class SettingsVisualisations {
                 docs: "A component to set the language of the user interface",
                 constr(state: SpecialVisualizationState): SvelteUIElement {
                     const availableLanguages = Locale.showLinkToWeblate.map((showTranslations) =>
-                        showTranslations
-                            ? LanguageUtils.usedLanguagesSorted
-                            : state.theme.language)
+                        showTranslations ? LanguageUtils.usedLanguagesSorted : state.theme.language
+                    )
                     return new SvelteUIElement(LanguagePicker, {
                         assignTo: state.userRelatedState.language,
                         availableLanguages,
                         preferredLanguages: state.osmConnection.userDetails.map(
                             (ud) => ud?.languages ?? []
-                        )
+                        ),
                     })
-                }
+                },
             },
 
             {
@@ -45,7 +44,7 @@ export class SettingsVisualisations {
                 args: [],
                 constr(state) {
                     return new SvelteUIElement(DisabledQuestions, { state })
-                }
+                },
             },
             {
                 funcName: "gyroscope_all_tags",
@@ -54,16 +53,14 @@ export class SettingsVisualisations {
                 args: [],
                 constr(): SvelteUIElement {
                     return new SvelteUIElement(OrientationDebugPanel, {})
-                }
+                },
             },
             {
                 funcName: "gps_all_tags",
                 group: "settings",
                 docs: "Shows the current tags of the GPS-representing object, used for debugging",
                 args: [],
-                constr(
-                    state: SpecialVisualizationState
-                ): SvelteUIElement {
+                constr(state: SpecialVisualizationState): SvelteUIElement {
                     const tags = (<ThemeViewState>(
                         state
                     )).geolocation.currentUserLocation.features.map(
@@ -71,25 +68,23 @@ export class SettingsVisualisations {
                     )
                     return new SvelteUIElement(AllTagsPanel, {
                         state,
-                        tags
+                        tags,
                     })
-                }
+                },
             },
             {
                 funcName: "storage_all_tags",
                 group: "settings",
                 docs: "Shows the current state of storage",
                 args: [],
-                constr(
-                    state: SpecialVisualizationState
-                ): SvelteUIElement {
+                constr(state: SpecialVisualizationState): SvelteUIElement {
                     const data = {}
                     for (const key in localStorage) {
                         data[key] = localStorage[key]
                     }
                     const tags = new ImmutableStore(data)
                     return new SvelteUIElement(AllTagsPanel, { state, tags })
-                }
+                },
             },
             {
                 funcName: "clear_caches",
@@ -98,8 +93,8 @@ export class SettingsVisualisations {
                     {
                         name: "text",
                         required: true,
-                        doc: "The text to show on the button"
-                    }
+                        doc: "The text to show on the button",
+                    },
                 ],
                 group: "settings",
                 constr(
@@ -108,9 +103,9 @@ export class SettingsVisualisations {
                     argument: string[]
                 ): SvelteUIElement {
                     return new SvelteUIElement(ClearCaches, {
-                        msg: argument[0] ?? "Clear local caches"
+                        msg: argument[0] ?? "Clear local caches",
                     })
-                }
+                },
             },
             {
                 funcName: "login_button",
@@ -120,7 +115,7 @@ export class SettingsVisualisations {
                 group: "settings",
                 constr(state: SpecialVisualizationState): SvelteUIElement {
                     return new SvelteUIElement(LoginButton, { osmConnection: state.osmConnection })
-                }
+                },
             },
 
             {
@@ -131,7 +126,7 @@ export class SettingsVisualisations {
                 group: "settings",
                 constr(state: SpecialVisualizationState): SvelteUIElement {
                     return new SvelteUIElement(LogoutButton, { osmConnection: state.osmConnection })
-                }
+                },
             },
             {
                 funcName: "pending_changes",
@@ -140,8 +135,8 @@ export class SettingsVisualisations {
                 args: [],
                 constr(state: SpecialVisualizationState): SvelteUIElement {
                     return new SvelteUIElement(PendingChangesIndicator, { state, compact: false })
-                }
-            }
+                },
+            },
         ]
     }
 }
diff --git a/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts b/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts
index d230285b3..9700e6af6 100644
--- a/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts
+++ b/src/UI/SpecialVisualisations/TagrenderingManipulationSpecialVisualisations.ts
@@ -15,7 +15,6 @@ import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.sve
 import Combine from "../Base/Combine"
 
 class StealViz implements SpecialVisualization {
-
     funcName = "steal"
     group = "tagrendering_manipulation"
 
@@ -24,13 +23,13 @@ class StealViz implements SpecialVisualization {
         {
             name: "featureId",
             doc: "The key of the attribute which contains the id of the feature from which to use the tags",
-            required: true
+            required: true,
         },
         {
             name: "tagRenderingId",
             doc: "The layer-id and tagRenderingId to render. Can be multiple value if ';'-separated (in which case every value must also contain the layerId, e.g. `layerId.tagRendering0; layerId.tagRendering1`). Note: this can cause layer injection",
-            required: true
-        }
+            required: true,
+        },
     ]
     needsUrls = []
     svelteBased = true
@@ -64,7 +63,7 @@ class StealViz implements SpecialVisualization {
                                 tags: otherTags,
                                 selectedElement: otherFeature,
                                 state,
-                                layer
+                                layer,
                             })
                         )
                     }
@@ -89,7 +88,6 @@ class StealViz implements SpecialVisualization {
 }
 
 export default class TagrenderingManipulationSpecialVisualisations {
-
     public static initList(): (SpecialVisualization & { group })[] {
         return [
             new StealViz(),
@@ -106,10 +104,10 @@ export default class TagrenderingManipulationSpecialVisualisations {
                                     type: "multi",
                                     key: "_doors_from_building_properties",
                                     tagrendering: {
-                                        en: "The building containing this feature has a <a href='#{id}'>door</a> of width {entrance:width}"
-                                    }
-                                }
-                            }
+                                        en: "The building containing this feature has a <a href='#{id}'>door</a> of width {entrance:width}",
+                                    },
+                                },
+                            },
                         },
                         null,
                         "  "
@@ -119,17 +117,17 @@ export default class TagrenderingManipulationSpecialVisualisations {
                     {
                         name: "key",
                         doc: "The property to read and to interpret as a list of properties",
-                        required: true
+                        required: true,
                     },
                     {
                         name: "tagrendering",
                         doc: "An entire tagRenderingConfig",
-                        required: true
+                        required: true,
                     },
                     {
                         name: "classes",
-                        doc: "CSS-classes to apply on every individual item. Seperated by `space`"
-                    }
+                        doc: "CSS-classes to apply on every individual item. Seperated by `space`",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
@@ -147,7 +145,7 @@ export default class TagrenderingManipulationSpecialVisualisations {
                             if (typeof tags[key] === "string") {
                                 properties = JSON.parse(tags[key])
                             } else {
-                                properties = <object[]><unknown>tags[key]
+                                properties = <object[]>(<unknown>tags[key])
                             }
                             if (!properties) {
                                 console.debug(
@@ -165,7 +163,7 @@ export default class TagrenderingManipulationSpecialVisualisations {
                                     tags: new ImmutableStore(property),
                                     state,
                                     feature,
-                                    layer
+                                    layer,
                                     // clss: classes ?? "",
                                 }).SetClass(classes)
                                 elements.push(subsTr)
@@ -173,7 +171,7 @@ export default class TagrenderingManipulationSpecialVisualisations {
                             return elements
                         })
                     )
-                }
+                },
             },
             {
                 funcName: "group",
@@ -182,12 +180,12 @@ export default class TagrenderingManipulationSpecialVisualisations {
                 args: [
                     {
                         name: "header",
-                        doc: "The _identifier_ of a single tagRendering. This will be used as header"
+                        doc: "The _identifier_ of a single tagRendering. This will be used as header",
                     },
                     {
                         name: "labels",
-                        doc: "A `;`-separated list of either identifiers or label names. All tagRenderings matching this value will be shown in the accordion"
-                    }
+                        doc: "A `;`-separated list of either identifiers or label names. All tagRenderings matching this value will be shown in the accordion",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
@@ -204,9 +202,9 @@ export default class TagrenderingManipulationSpecialVisualisations {
                         selectedElement,
                         layer,
                         header,
-                        labels
+                        labels,
                     })
-                }
+                },
             },
             {
                 funcName: "open_in_iD",
@@ -216,9 +214,9 @@ export default class TagrenderingManipulationSpecialVisualisations {
                 constr: (state, feature): SvelteUIElement => {
                     return new SvelteUIElement(OpenIdEditor, {
                         mapProperties: state.mapProperties,
-                        objectId: feature.data.id
+                        objectId: feature.data.id,
                     })
-                }
+                },
             },
             {
                 funcName: "open_in_josm",
@@ -229,9 +227,8 @@ export default class TagrenderingManipulationSpecialVisualisations {
 
                 constr: (state): SvelteUIElement => {
                     return new SvelteUIElement(OpenJosm, { state })
-                }
-            }
+                },
+            },
         ]
     }
-
 }
diff --git a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts
index 079469e98..598ceac70 100644
--- a/src/UI/SpecialVisualisations/UISpecialVisualisations.ts
+++ b/src/UI/SpecialVisualisations/UISpecialVisualisations.ts
@@ -25,12 +25,12 @@ class QuestionViz implements SpecialVisualizationSvelte {
     args = [
         {
             name: "labels",
-            doc: "One or more ';'-separated labels. If these are given, only questions with these labels will be given. Use `unlabeled` for all questions that don't have an explicit label. If none given, all questions will be shown"
+            doc: "One or more ';'-separated labels. If these are given, only questions with these labels will be given. Use `unlabeled` for all questions that don't have an explicit label. If none given, all questions will be shown",
         },
         {
             name: "blacklisted-labels",
-            doc: "One or more ';'-separated labels of questions which should _not_ be included"
-        }
+            doc: "One or more ';'-separated labels of questions which should _not_ be included",
+        },
     ]
     svelteBased = true
     group: "default"
@@ -42,7 +42,6 @@ class QuestionViz implements SpecialVisualizationSvelte {
         feature: Feature,
         layer: LayerConfig
     ): SvelteUIElement {
-
         const labels = args[0]
             ?.split(";")
             ?.map((s) => s.trim())
@@ -57,14 +56,15 @@ class QuestionViz implements SpecialVisualizationSvelte {
             selectedElement: feature,
             state,
             onlyForLabels: labels,
-            notForLabels: blacklist
+            notForLabels: blacklist,
         })
     }
 }
 
 export class UISpecialVisualisations {
-    public static initList(): SpecialVisualizationSvelte [] {
-        return [new QuestionViz(),
+    public static initList(): SpecialVisualizationSvelte[] {
+        return [
+            new QuestionViz(),
             {
                 funcName: "minimap",
                 docs: "A small map showing the selected feature.",
@@ -75,13 +75,13 @@ export class UISpecialVisualisations {
                     {
                         doc: "The (maximum) zoomlevel: the target zoomlevel after fitting the entire feature. The minimap will fit the entire feature, then zoom out to this zoom level. The higher, the more zoomed in with 1 being the entire world and 19 being really close",
                         name: "zoomlevel",
-                        defaultValue: "18"
+                        defaultValue: "18",
                     },
                     {
                         doc: "(Matches all resting arguments) This argument should be the key of a property of the feature. The corresponding value is interpreted as either the id or the a list of ID's. The features with these ID's will be shown on this minimap. (Note: if the key is 'id', list interpration is disabled)",
                         name: "idKey",
-                        defaultValue: "id"
-                    }
+                        defaultValue: "id",
+                    },
                 ],
                 example:
                     "`{minimap()}`, `{minimap(17, id, _list_of_embedded_feature_ids_calculated_by_calculated_tag):height:10rem; border: 2px solid black}`",
@@ -93,7 +93,7 @@ export class UISpecialVisualisations {
                     feature: Feature
                 ): SvelteUIElement {
                     return new SvelteUIElement(MinimapViz, { state, args, feature, tagSource })
-                }
+                },
             },
             {
                 funcName: "split_button",
@@ -105,8 +105,11 @@ export class UISpecialVisualisations {
                     state: SpecialVisualizationState,
                     tagSource: UIEventSource<Record<string, string>>
                 ): SvelteUIElement {
-                    return new SvelteUIElement(SplitRoadWizard, { id: tagSource.map(pr => pr.id), state })
-                }
+                    return new SvelteUIElement(SplitRoadWizard, {
+                        id: tagSource.map((pr) => pr.id),
+                        state,
+                    })
+                },
             },
             {
                 funcName: "move_button",
@@ -127,9 +130,9 @@ export class UISpecialVisualisations {
                     return new SvelteUIElement(MoveWizard, {
                         state,
                         featureToMove: feature,
-                        layer
+                        layer,
                     })
-                }
+                },
             },
             {
                 funcName: "delete_button",
@@ -152,9 +155,9 @@ export class UISpecialVisualisations {
                         deleteConfig: layer.deletion,
                         state,
                         feature,
-                        layer
+                        layer,
                     })
-                }
+                },
             },
             {
                 funcName: "qr_code",
@@ -168,7 +171,7 @@ export class UISpecialVisualisations {
                     feature: Feature
                 ): SvelteUIElement {
                     return new SvelteUIElement(QrCode, { state, tags, feature })
-                }
+                },
             },
             {
                 funcName: "if_nothing_known",
@@ -176,9 +179,9 @@ export class UISpecialVisualisations {
                     {
                         name: "text",
                         doc: "Text to show",
-                        required: true
+                        required: true,
                     },
-                    { name: "cssClasses", doc: "Classes to apply onto the text" }
+                    { name: "cssClasses", doc: "Classes to apply onto the text" },
                 ],
                 group: "default",
                 docs: "Shows a 'nothing is currently known-message if there is at least one unanswered question and no known (answerable) question",
@@ -196,9 +199,9 @@ export class UISpecialVisualisations {
                         tags: tagSource,
                         layer,
                         text,
-                        cssClasses
+                        cssClasses,
                     })
-                }
+                },
             },
             new ShareLinkViz(),
             {
@@ -210,10 +213,10 @@ export class UISpecialVisualisations {
                     const [lon, lat] = GeoOperations.centerpointCoordinates(feature)
                     return new SvelteUIElement(AddNewPoint, {
                         state,
-                        coordinate: { lon, lat }
+                        coordinate: { lon, lat },
                     })
-                }
-            }
+                },
+            },
         ]
     }
 }
diff --git a/src/UI/SpecialVisualisations/WebAndCommunicationSpecialVisualisations.ts b/src/UI/SpecialVisualisations/WebAndCommunicationSpecialVisualisations.ts
index 1a675bef8..f3e48173f 100644
--- a/src/UI/SpecialVisualisations/WebAndCommunicationSpecialVisualisations.ts
+++ b/src/UI/SpecialVisualisations/WebAndCommunicationSpecialVisualisations.ts
@@ -14,9 +14,8 @@ import SendEmail from "../Popup/SendEmail.svelte"
 import DynLink from "../Base/DynLink.svelte"
 
 export class WebAndCommunicationSpecialVisualisations {
-    public static initList(): (SpecialVisualization & { group }) [] {
+    public static initList(): (SpecialVisualization & { group })[] {
         return [
-
             {
                 funcName: "fediverse_link",
                 group: "web_and_communication",
@@ -25,8 +24,8 @@ export class WebAndCommunicationSpecialVisualisations {
                     {
                         name: "key",
                         doc: "The attribute-name containing the link",
-                        required: true
-                    }
+                        required: true,
+                    },
                 ],
 
                 constr(
@@ -36,7 +35,7 @@ export class WebAndCommunicationSpecialVisualisations {
                 ): BaseUIElement {
                     const key = argument[0]
                     return new SvelteUIElement(FediverseLink, { key, tags, state })
-                }
+                },
             },
             {
                 funcName: "wikipedia",
@@ -46,8 +45,8 @@ export class WebAndCommunicationSpecialVisualisations {
                     {
                         name: "keyToShowWikipediaFor",
                         doc: "Use the wikidata entry from this key to show the wikipedia article for. Multiple keys can be given (separated by ';'), in which case the first matching value is used",
-                        defaultValue: "wikidata;wikipedia"
-                    }
+                        defaultValue: "wikidata;wikipedia",
+                    },
                 ],
                 needsUrls: [...Wikidata.neededUrls, ...Wikipedia.neededUrls],
 
@@ -60,9 +59,9 @@ export class WebAndCommunicationSpecialVisualisations {
                         return tags[key]?.split(";")?.map((id) => id.trim()) ?? []
                     })
                     return new SvelteUIElement(WikipediaPanel, {
-                        wikiIds
+                        wikiIds,
                     })
-                }
+                },
             },
             {
                 funcName: "wikidata_label",
@@ -73,8 +72,8 @@ export class WebAndCommunicationSpecialVisualisations {
                     {
                         name: "keyToShowWikidataFor",
                         doc: "Use the wikidata entry from this key to show the label",
-                        defaultValue: "wikidata"
-                    }
+                        defaultValue: "wikidata",
+                    },
                 ],
                 needsUrls: Wikidata.neededUrls,
                 example:
@@ -98,7 +97,7 @@ export class WebAndCommunicationSpecialVisualisations {
                                     })
                                 )
                             })
-                    )
+                    ),
             },
             new MapillaryLinkVis(),
             {
@@ -109,29 +108,29 @@ export class WebAndCommunicationSpecialVisualisations {
                     {
                         name: "to",
                         doc: "Who to send the email to?",
-                        required: true
+                        required: true,
                     },
                     {
                         name: "subject",
                         doc: "The subject of the email",
-                        required: true
+                        required: true,
                     },
                     {
                         name: "body",
                         doc: "The text in the email",
-                        required: true
+                        required: true,
                     },
 
                     {
                         name: "button_text",
                         doc: "The text shown on the button in the UI",
-                        required: true
-                    }
+                        required: true,
+                    },
                 ],
 
                 constr(__, tags, args) {
                     return new SvelteUIElement(SendEmail, { args, tags })
-                }
+                },
             },
             {
                 funcName: "link",
@@ -141,29 +140,29 @@ export class WebAndCommunicationSpecialVisualisations {
                     {
                         name: "text",
                         doc: "Text to be shown",
-                        required: true
+                        required: true,
                     },
                     {
                         name: "href",
                         doc: "The URL to link to. Note that this will be URI-encoded before ",
-                        required: true
+                        required: true,
                     },
                     {
                         name: "class",
-                        doc: "CSS-classes to add to the element"
+                        doc: "CSS-classes to add to the element",
                     },
                     {
                         name: "download",
-                        doc: "Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button."
+                        doc: "Expects a string which denotes the filename to download the contents of `href` into. If set, this link will act as a download-button.",
                     },
                     {
                         name: "arialabel",
-                        doc: "If set, this text will be used as aria-label"
+                        doc: "If set, this text will be used as aria-label",
                     },
                     {
                         name: "icon",
-                        doc: "If set, show this icon next to the link. You might want to combine this with `class: button`"
-                    }
+                        doc: "If set, show this icon next to the link. You might want to combine this with `class: button`",
+                    },
                 ],
 
                 constr(
@@ -185,10 +184,10 @@ export class WebAndCommunicationSpecialVisualisations {
                         download: tagSource.map((tags) => Utils.SubstituteKeys(download, tags)),
                         ariaLabel: tagSource.map((tags) => Utils.SubstituteKeys(ariaLabel, tags)),
                         newTab: new ImmutableStore(newTab),
-                        icon: tagSource.map((tags) => Utils.SubstituteKeys(icon, tags))
+                        icon: tagSource.map((tags) => Utils.SubstituteKeys(icon, tags)),
                     }).setSpan()
-                }
-            }
+                },
+            },
         ]
     }
 }
diff --git a/src/UI/SpecialVisualization.ts b/src/UI/SpecialVisualization.ts
index 4bd087f19..2e89f4e00 100644
--- a/src/UI/SpecialVisualization.ts
+++ b/src/UI/SpecialVisualization.ts
@@ -115,7 +115,6 @@ export interface SpecialVisualization {
     ): BaseUIElement
 }
 
-
 export interface SpecialVisualizationSvelte {
     readonly funcName: string
     readonly docs: string
diff --git a/src/UI/SpecialVisualizations.ts b/src/UI/SpecialVisualizations.ts
index f14344074..7958db03c 100644
--- a/src/UI/SpecialVisualizations.ts
+++ b/src/UI/SpecialVisualizations.ts
@@ -2,7 +2,11 @@ import Combine from "./Base/Combine"
 import { FixedUiElement } from "./Base/FixedUiElement"
 import BaseUIElement from "./BaseUIElement"
 import { default as FeatureTitle } from "./Popup/Title.svelte"
-import { RenderingSpecification, SpecialVisualization, SpecialVisualizationState } from "./SpecialVisualization"
+import {
+    RenderingSpecification,
+    SpecialVisualization,
+    SpecialVisualizationState,
+} from "./SpecialVisualization"
 import { HistogramViz } from "./Popup/HistogramViz"
 import { UploadToOsmViz } from "./Popup/UploadToOsmViz"
 import { MultiApplyViz } from "./Popup/MultiApplyViz"
@@ -41,12 +45,8 @@ import { UISpecialVisualisations } from "./SpecialVisualisations/UISpecialVisual
 import { SettingsVisualisations } from "./SpecialVisualisations/SettingsVisualisations"
 import { ReviewSpecialVisualisations } from "./SpecialVisualisations/ReviewSpecialVisualisations"
 import { DataImportSpecialVisualisations } from "./SpecialVisualisations/DataImportSpecialVisualisations"
-import TagrenderingManipulationSpecialVisualisations
-    from "./SpecialVisualisations/TagrenderingManipulationSpecialVisualisations"
-import {
-    WebAndCommunicationSpecialVisualisations
-} from "./SpecialVisualisations/WebAndCommunicationSpecialVisualisations"
-
+import TagrenderingManipulationSpecialVisualisations from "./SpecialVisualisations/TagrenderingManipulationSpecialVisualisations"
+import { WebAndCommunicationSpecialVisualisations } from "./SpecialVisualisations/WebAndCommunicationSpecialVisualisations"
 
 export default class SpecialVisualizations {
     public static specialVisualizations: SpecialVisualization[] = SpecialVisualizations.initList()
@@ -79,18 +79,18 @@ export default class SpecialVisualizations {
             viz.docs,
             viz.args.length > 0
                 ? MarkdownUtils.table(
-                    ["name", "default", "description"],
-                    viz.args.map((arg) => {
-                        let defaultArg = arg.defaultValue ?? "_undefined_"
-                        if (defaultArg == "") {
-                            defaultArg = "_empty string_"
-                        }
-                        return [arg.name, defaultArg, arg.doc]
-                    })
-                )
+                      ["name", "default", "description"],
+                      viz.args.map((arg) => {
+                          let defaultArg = arg.defaultValue ?? "_undefined_"
+                          if (defaultArg == "") {
+                              defaultArg = "_empty string_"
+                          }
+                          return [arg.name, defaultArg, arg.doc]
+                      })
+                  )
                 : undefined,
             "#### Example usage of " + viz.funcName,
-            example
+            example,
         ].join("\n\n")
     }
 
@@ -106,7 +106,6 @@ export default class SpecialVisualizations {
     }
 
     public static HelpMessage(): string {
-
         const vis = [...SpecialVisualizations.specialVisualizations]
         vis.sort((a, b) => {
             return a.funcName < b.funcName ? -1 : 1
@@ -119,15 +118,21 @@ export default class SpecialVisualizations {
         })
 
         const groupExplanations: Record<string, string> = {
-            "default": "These special visualisations are (mostly) interactive components that most elements get by default. You'll normally won't need them in custom layers. There are also a few miscellaneous elements supporting the map UI.",
-            "favourites": "Elements relating to marking an object as favourite (giving it a heart). Default element",
-            "settings": "Elements part of the usersettings-ui",
-            "images": "Elements related to adding or manipulating images. Normally also added by default, but in some cases a tweaked version is needed",
-            "notes": "Elements relating to OpenStreetMap-notes, e.g. the component to close and/or add a comment",
-            "reviews": "Elements relating to seeing and adding ratings and reviews with Mangrove.reviews",
-            "data_import": "Elements to help with importing data to OSM. For example: buttons to import a feature, apply tags on an element, apply multiple tags on an element or to work with maproulette",
-            "tagrendering_manipulation": "Special visualisations which reuse other tagRenderings to show data, but with a twist.",
-            "web_and_communication": "Tools to show data from external websites, which link to external websites or which link to external profiles"
+            default:
+                "These special visualisations are (mostly) interactive components that most elements get by default. You'll normally won't need them in custom layers. There are also a few miscellaneous elements supporting the map UI.",
+            favourites:
+                "Elements relating to marking an object as favourite (giving it a heart). Default element",
+            settings: "Elements part of the usersettings-ui",
+            images: "Elements related to adding or manipulating images. Normally also added by default, but in some cases a tweaked version is needed",
+            notes: "Elements relating to OpenStreetMap-notes, e.g. the component to close and/or add a comment",
+            reviews:
+                "Elements relating to seeing and adding ratings and reviews with Mangrove.reviews",
+            data_import:
+                "Elements to help with importing data to OSM. For example: buttons to import a feature, apply tags on an element, apply multiple tags on an element or to work with maproulette",
+            tagrendering_manipulation:
+                "Special visualisations which reuse other tagRenderings to show data, but with a twist.",
+            web_and_communication:
+                "Tools to show data from external websites, which link to external websites or which link to external profiles",
         }
 
         const helpTexts: string[] = []
@@ -138,10 +143,13 @@ export default class SpecialVisualizations {
                 if (viz.group === undefined) {
                     helpTexts.push("## Unclassified elements\n\nVarious elements")
                 } else {
-
                     helpTexts.push("## " + viz.group)
                     if (!groupExplanations[viz.group]) {
-                        throw "\n\n >>>> ERROR <<<<  Unknown visualisation group type: " + viz.group + "\n\n\n"
+                        throw (
+                            "\n\n >>>> ERROR <<<<  Unknown visualisation group type: " +
+                            viz.group +
+                            "\n\n\n"
+                        )
                     }
                     helpTexts.push(groupExplanations[viz.group])
                 }
@@ -157,18 +165,18 @@ export default class SpecialVisualizations {
                         argname: "some_arg",
                         message: {
                             en: "some other really long message",
-                            nl: "een boodschap in een andere taal"
+                            nl: "een boodschap in een andere taal",
                         },
-                        other_arg_name: "more args"
+                        other_arg_name: "more args",
                     },
                     before: {
                         en: "Some text to prefix before the special element (e.g. a title)",
-                        nl: "Een tekst om voor het element te zetten (bv. een titel)"
+                        nl: "Een tekst om voor het element te zetten (bv. een titel)",
                     },
                     after: {
-                        en: "Some text to put after the element, e.g. a footer"
-                    }
-                }
+                        en: "Some text to put after the element, e.g. a footer",
+                    },
+                },
             },
             null,
             "  "
@@ -181,8 +189,8 @@ export default class SpecialVisualizations {
             "# Using expanded syntax",
             `Instead of using \`{"render": {"en": "{some_special_visualisation(some_arg, some other really long message, more args)} , "nl": "{some_special_visualisation(some_arg, een boodschap in een andere taal, more args)}}\`, one can also write`,
             "```\n" + example + "\n```\n",
-            "In other words: use `{ \"before\": ..., \"after\": ..., \"special\": {\"type\": ..., \"argname\": ...argvalue...}`. The args are in the `special` block; an argvalue can be a string, a translation or another value. (Refer to class `RewriteSpecial` in case of problems)",
-            "# Overview of all special components"
+            'In other words: use `{ "before": ..., "after": ..., "special": {"type": ..., "argname": ...argvalue...}`. The args are in the `special` block; an argvalue can be a string, a translation or another value. (Refer to class `RewriteSpecial` in case of problems)',
+            "# Overview of all special components",
         ].join("\n\n")
         return firstPart + "\n\n" + helpTexts.join("\n\n")
     }
@@ -226,9 +234,9 @@ export default class SpecialVisualizations {
                         construct: (feature: Feature<LineString>, title: string) =>
                             GeoOperations.toGpx(feature, title),
                         helpertext: t.downloadGpxHelper,
-                        maintext: t.downloadFeatureAsGpx
+                        maintext: t.downloadFeatureAsGpx,
                     })
-                }
+                },
             },
             new UploadToOsmViz(),
             new MultiApplyViz(),
@@ -244,7 +252,7 @@ export default class SpecialVisualizations {
                     _,
                     __,
                     layer: LayerConfig
-                ) => new SvelteUIElement(AllTagsPanel, { tags, layer })
+                ) => new SvelteUIElement(AllTagsPanel, { tags, layer }),
             },
             {
                 funcName: "opening_hours_table",
@@ -253,18 +261,18 @@ export default class SpecialVisualizations {
                     {
                         name: "key",
                         defaultValue: "opening_hours",
-                        doc: "The tagkey from which the table is constructed."
+                        doc: "The tagkey from which the table is constructed.",
                     },
                     {
                         name: "prefix",
                         defaultValue: "",
-                        doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__"
+                        doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__",
                     },
                     {
                         name: "postfix",
                         defaultValue: "",
-                        doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__"
-                    }
+                        doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__",
+                    },
                 ],
                 needsUrls: [Constants.countryCoderEndpoint],
                 example:
@@ -272,7 +280,7 @@ export default class SpecialVisualizations {
                 constr: (state, tagSource: UIEventSource<any>, args) => {
                     const [key, prefix, postfix] = args
                     return new OpeningHoursVisualization(tagSource, key, prefix, postfix)
-                }
+                },
             },
             {
                 funcName: "opening_hours_state",
@@ -281,18 +289,18 @@ export default class SpecialVisualizations {
                     {
                         name: "key",
                         defaultValue: "opening_hours",
-                        doc: "The tagkey from which the opening hours are read."
+                        doc: "The tagkey from which the opening hours are read.",
                     },
                     {
                         name: "prefix",
                         defaultValue: "",
-                        doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__"
+                        doc: "Remove this string from the start of the value before parsing. __Note: use `&LPARENs` to indicate `(` if needed__",
                     },
                     {
                         name: "postfix",
                         defaultValue: "",
-                        doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__"
-                    }
+                        doc: "Remove this string from the end of the value before parsing. __Note: use `&RPARENs` to indicate `)` if needed__",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
@@ -307,9 +315,9 @@ export default class SpecialVisualizations {
                         keyToUse,
                         tags,
                         prefix,
-                        postfix
+                        postfix,
                     })
-                }
+                },
             },
             {
                 funcName: "canonical",
@@ -321,8 +329,8 @@ export default class SpecialVisualizations {
                     {
                         name: "key",
                         doc: "The key of the tag to give the canonical text for",
-                        required: true
-                    }
+                        required: true,
+                    },
                 ],
                 constr: (state, tagSource, args) => {
                     const key = args[0]
@@ -346,7 +354,7 @@ export default class SpecialVisualizations {
                                 return unit.asHumanLongValue(value, getCountry)
                             })
                     )
-                }
+                },
             },
             {
                 funcName: "export_as_geojson",
@@ -364,9 +372,9 @@ export default class SpecialVisualizations {
                         construct: (feature: Feature<LineString>) =>
                             JSON.stringify(feature, null, "  "),
                         maintext: t.downloadFeatureAsGeojson,
-                        helpertext: t.downloadGeoJsonHelper
+                        helpertext: t.downloadGeoJsonHelper,
                     })
-                }
+                },
             },
 
             {
@@ -382,7 +390,7 @@ export default class SpecialVisualizations {
                         state.historicalUserLocations.features.setData([])
                         state.selectedElement.setData(undefined)
                     })
-                }
+                },
             },
 
             {
@@ -400,7 +408,7 @@ export default class SpecialVisualizations {
                     layer: LayerConfig
                 ) => {
                     return new SvelteUIElement(FeatureTitle, { state, tags, feature, layer })
-                }
+                },
             },
             {
                 funcName: "statistics",
@@ -427,10 +435,9 @@ export default class SpecialVisualizations {
                                 [state.mapProperties.bounds]
                             )
                     )
-                }
+                },
             },
 
-
             {
                 funcName: "translated",
                 docs: "If the given key can be interpreted as a JSON, only show the key containing the current language (or 'en'). This specialRendering is meant to be used by MapComplete studio and is not useful in map themes",
@@ -439,13 +446,13 @@ export default class SpecialVisualizations {
                     {
                         name: "key",
                         doc: "The attribute to interpret as json",
-                        defaultValue: "value"
-                    }
+                        defaultValue: "value",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
                     tagSource: UIEventSource<Record<string, string>>,
-                    argument: string[],
+                    argument: string[]
                 ): BaseUIElement {
                     return new VariableUiElement(
                         tagSource.map((tags) => {
@@ -459,7 +466,7 @@ export default class SpecialVisualizations {
                             }
                         })
                     )
-                }
+                },
             },
             {
                 funcName: "braced",
@@ -469,8 +476,8 @@ export default class SpecialVisualizations {
                     {
                         name: "text",
                         required: true,
-                        doc: "The value to show"
-                    }
+                        doc: "The value to show",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
@@ -480,7 +487,7 @@ export default class SpecialVisualizations {
                     layer: LayerConfig
                 ): BaseUIElement {
                     return new FixedUiElement("{" + args[0] + "}")
-                }
+                },
             },
             {
                 funcName: "tags",
@@ -490,8 +497,8 @@ export default class SpecialVisualizations {
                     {
                         name: "key",
                         defaultValue: "value",
-                        doc: "The key to look for the tags"
-                    }
+                        doc: "The key to look for the tags",
+                    },
                 ],
                 constr(
                     state: SpecialVisualizationState,
@@ -516,14 +523,14 @@ export default class SpecialVisualizations {
                             } catch (e) {
                                 return new FixedUiElement(
                                     "Could not parse this tag: " +
-                                    JSON.stringify(value) +
-                                    " due to " +
-                                    e
+                                        JSON.stringify(value) +
+                                        " due to " +
+                                        e
                                 ).SetClass("alert")
                             }
                         })
                     )
-                }
+                },
             },
 
             {
@@ -539,7 +546,7 @@ export default class SpecialVisualizations {
                     layer: LayerConfig
                 ): BaseUIElement {
                     return new SvelteUIElement(DirectionIndicator, { state, feature })
-                }
+                },
             },
 
             {
@@ -549,8 +556,8 @@ export default class SpecialVisualizations {
                     {
                         name: "key",
                         doc: "The attribute containing the degrees",
-                        defaultValue: "_direction:centerpoint"
-                    }
+                        defaultValue: "_direction:centerpoint",
+                    },
                 ],
 
                 constr(
@@ -573,7 +580,7 @@ export default class SpecialVisualizations {
                                 return Translations.t.general.visualFeedback.directionsAbsolute[dir]
                             })
                     )
-                }
+                },
             },
 
             {
@@ -582,17 +589,16 @@ export default class SpecialVisualizations {
                 args: [],
                 constr(
                     state: SpecialVisualizationState,
-                    tagSource: UIEventSource<Record<string, string>>,
+                    tagSource: UIEventSource<Record<string, string>>
                 ): BaseUIElement {
                     const translation = tagSource.map((tags) => {
                         const layer = state.theme.getMatchingLayer(tags)
                         return layer?.getMostMatchingPreset(tags)?.description
                     })
                     return new VariableUiElement(translation)
-                }
+                },
             },
 
-
             {
                 funcName: "preset_type_select",
                 docs: "An editable tag rendering which allows to change the type",
@@ -613,9 +619,9 @@ export default class SpecialVisualizations {
                             icon: "auto",
                             then: (pr.description ? t.typeDescription : t.typeTitle).Subs({
                                 title: pr.title,
-                                description: pr.description
-                            }).translations
-                        }))
+                                description: pr.description,
+                            }).translations,
+                        })),
                     }
                     const config = new TagRenderingConfig(question)
                     return new SvelteUIElement(TagRenderingEditable, {
@@ -623,11 +629,10 @@ export default class SpecialVisualizations {
                         tags,
                         selectedElement,
                         state,
-                        layer
+                        layer,
                     })
-                }
-            }
-
+                },
+            },
         ]
 
         specialVisualizations.push(new AutoApplyButton(specialVisualizations))
@@ -642,7 +647,7 @@ export default class SpecialVisualizations {
                 "Invalid special visualisation found: funcName is undefined or doesn't match " +
                 regex +
                 invalid.map((sp) => sp.i).join(", ") +
-                ". Did you perhaps type \n  funcName: \"funcname\" // type declaration uses COLON\ninstead of:\n  funcName = \"funcName\" // value definition uses EQUAL"
+                '. Did you perhaps type \n  funcName: "funcname" // type declaration uses COLON\ninstead of:\n  funcName = "funcName" // value definition uses EQUAL'
             )
         }
 
diff --git a/src/UI/Statistics/AllStats.svelte b/src/UI/Statistics/AllStats.svelte
index 6c0955a8e..ec94e4021 100644
--- a/src/UI/Statistics/AllStats.svelte
+++ b/src/UI/Statistics/AllStats.svelte
@@ -34,13 +34,15 @@
       if (Array.isArray(r)) {
         results.push(...r)
       } else {
-        results.push(...r.features ?? [])
+        results.push(...(r.features ?? []))
       }
     }
     return results
   }
 
-  let allData = <UIEventSource<(ChangeSetData & OsmFeature)[]>>UIEventSource.FromPromise(downloadData())
+  let allData = <UIEventSource<(ChangeSetData & OsmFeature)[]>>(
+    UIEventSource.FromPromise(downloadData())
+  )
 
   let overview: Store<ChangesetsOverview | undefined> = allData.mapD(
     (data) =>
@@ -64,10 +66,10 @@
 
   function offerAsDownload() {
     const data = GeoOperations.toCSV($overview._meta, {
-      ignoreTags: /^((deletion:node)|(import:node)|(move:node)|(soft-delete:))/
+      ignoreTags: /^((deletion:node)|(import:node)|(move:node)|(soft-delete:))/,
     })
     Utils.offerContentsAsDownloadableFile(data, "statistics.csv", {
-      mimetype: "text/csv"
+      mimetype: "text/csv",
     })
   }
 </script>
@@ -88,9 +90,9 @@
     <Accordion>
       {#each trs as tr}
         <AccordionItem paddingDefault="p-0" inactiveClass="text-black">
-        <span slot="header" class={"w-full p-2 text-base"}>
-          {tr.question ?? tr.id}
-        </span>
+          <span slot="header" class={"w-full p-2 text-base"}>
+            {tr.question ?? tr.id}
+          </span>
           <SingleStat {tr} overview={$overview} diffInDays={$diffInDays} />
         </AccordionItem>
       {/each}
diff --git a/src/UI/Statistics/StatisticsGui.svelte b/src/UI/Statistics/StatisticsGui.svelte
index efcc2fc42..f22e906e9 100644
--- a/src/UI/Statistics/StatisticsGui.svelte
+++ b/src/UI/Statistics/StatisticsGui.svelte
@@ -5,18 +5,18 @@
   import AllStats from "./AllStats.svelte"
   import TitledPanel from "../Base/TitledPanel.svelte"
 
-  let homeUrl =
-    "https://data.mapcomplete.org/changeset-metadata/"
+  let homeUrl = "https://data.mapcomplete.org/changeset-metadata/"
   let stats_files = "file-overview.json"
 
   let indexFile = UIEventSource.FromPromise(Utils.downloadJson<string[]>(homeUrl + stats_files))
   let prefix = /^stats.202[45]/
-  let filteredIndex = indexFile.mapD(index => index.filter(path => path.match(prefix)))
-  filteredIndex.addCallbackAndRunD(filtered => console.log("Filtered items are", filtered, indexFile.data))
+  let filteredIndex = indexFile.mapD((index) => index.filter((path) => path.match(prefix)))
+  filteredIndex.addCallbackAndRunD((filtered) =>
+    console.log("Filtered items are", filtered, indexFile.data)
+  )
 </script>
 
 <main class="h-screen">
-
   <TitledPanel>
     <div slot="title" class="flex w-full justify-between">
       <span>Statistics of changes made with MapComplete</span>
@@ -26,9 +26,7 @@
     {#if $indexFile === undefined}
       <Loading>Loading index file...</Loading>
     {:else}
-      <AllStats
-        paths={$filteredIndex.map((p) => homeUrl + "/" + p)}
-      />
+      <AllStats paths={$filteredIndex.map((p) => homeUrl + "/" + p)} />
     {/if}
   </TitledPanel>
 </main>
diff --git a/src/UI/StatusGui.ts b/src/UI/StatusGui.ts
index b5d189604..de85197b8 100644
--- a/src/UI/StatusGui.ts
+++ b/src/UI/StatusGui.ts
@@ -1,5 +1,5 @@
 import StatusGUI from "./Status/StatusGUI.svelte"
 
 new StatusGUI({
-    target: document.getElementById("main")
+    target: document.getElementById("main"),
 })
diff --git a/src/UI/StudioGui.ts b/src/UI/StudioGui.ts
index f82bbb02a..115213d85 100644
--- a/src/UI/StudioGui.ts
+++ b/src/UI/StudioGui.ts
@@ -1,5 +1,5 @@
 import StudioGUI from "./StudioGUI.svelte"
 
 new StudioGUI({
-    target: document.getElementById("main")
+    target: document.getElementById("main"),
 })
diff --git a/src/UI/StylesheetTestGui.svelte b/src/UI/StylesheetTestGui.svelte
index 33ec62903..3284fc2c0 100644
--- a/src/UI/StylesheetTestGui.svelte
+++ b/src/UI/StylesheetTestGui.svelte
@@ -29,10 +29,8 @@
     <Dropdown cls="m-2" value={new UIEventSource(undefined)}>
       <option value="a">Option A</option>
       <option value="b">Option B</option>
-
     </Dropdown>
 
-
     <div class="low-interaction flex flex-col">
       <h2>Low interaction</h2>
       <p>
@@ -49,7 +47,6 @@
       <Dropdown cls="m-2" value={new UIEventSource(undefined)}>
         <option value="a">Option A</option>
         <option value="b">Option B</option>
-
       </Dropdown>
 
       <div class="flex">
diff --git a/src/UI/Test.svelte b/src/UI/Test.svelte
index 2aaa29e17..49e65bdd6 100644
--- a/src/UI/Test.svelte
+++ b/src/UI/Test.svelte
@@ -21,9 +21,12 @@
 </script>
 
 <button on:click={() => st.requestPermission()}>Get geolocation</button>
-Permission: <code>{$permission}</code>
-Available: <code>{$av}</code>
-Location: <code>{JSON.stringify($loc)}</code>
+Permission:
+<code>{$permission}</code>
+Available:
+<code>{$av}</code>
+Location:
+<code>{JSON.stringify($loc)}</code>
 <ol>
   {#each logs as log}
     <li>{log}</li>
diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte
index a6485fceb..0a18d3c08 100644
--- a/src/UI/ThemeViewGUI.svelte
+++ b/src/UI/ThemeViewGUI.svelte
@@ -176,9 +176,9 @@
 </script>
 
 <main>
-  <div class="absolute top-0 left-0 h-screen w-screen" style="background-color: #f0efdd"></div>
+  <div class="absolute left-0 top-0 h-screen w-screen" style="background-color: #f0efdd" />
   <!-- Main map -->
-  <div class="absolute top-0 left-0 h-screen w-screen overflow-hidden">
+  <div class="absolute left-0 top-0 h-screen w-screen overflow-hidden">
     <MaplibreMap map={maplibremap} mapProperties={mapproperties} autorecovery={true} />
   </div>
 
@@ -186,7 +186,7 @@
     {#if ($showCrosshair === "yes" && $currentZoom >= 17) || $showCrosshair === "always" || $visualFeedback}
       <!-- Don't use h-full: h-full does _not_ include the area under the URL-bar, which offsets the crosshair a bit -->
       <div
-        class="pointer-events-none absolute top-0 left-0 flex w-full items-center justify-center"
+        class="pointer-events-none absolute left-0 top-0 flex w-full items-center justify-center"
         style="height: 100vh"
       >
         <Cross class="h-4 w-4" />
@@ -198,7 +198,7 @@
 
   {#if $visualFeedback}
     <div
-      class="pointer-events-none absolute top-0 left-0 flex h-screen w-screen items-center justify-center overflow-hidden"
+      class="pointer-events-none absolute left-0 top-0 flex h-screen w-screen items-center justify-center overflow-hidden"
     >
       <div
         bind:this={$viewport}
@@ -302,7 +302,7 @@
               <!-- h-8 w-8 + p-0.5 sm:p-1 + 2px border => 9 sm: 10 in total-->
             </MapControlButton>
             {#if $compassLoaded}
-              <div class="absolute top-0 left-0 m-0.5 h-0 w-0 sm:m-1">
+              <div class="absolute left-0 top-0 m-0.5 h-0 w-0 sm:m-1">
                 <Compass_arrow
                   class="compass_arrow"
                   style={`rotate: calc(${-$compass}deg + 45deg); transform-origin: 50% 50%;`}
@@ -325,7 +325,7 @@
   </DrawerRight>
 
   <!-- Top components -->
-  <div class="z-4 pointer-events-none absolute top-0 left-0 w-full">
+  <div class="z-4 pointer-events-none absolute left-0 top-0 w-full">
     <div
       id="top-bar"
       class="bg-black-light-transparent pointer-events-auto flex flex-wrap items-center justify-between px-4 py-1"
diff --git a/src/assets/contributors.json b/src/assets/contributors.json
index 88c68c057..7963217e4 100644
--- a/src/assets/contributors.json
+++ b/src/assets/contributors.json
@@ -1,11 +1,11 @@
 {
   "contributors": [
     {
-      "commits": 8941,
+      "commits": 9176,
       "contributor": "Pieter Vander Vennet"
     },
     {
-      "commits": 514,
+      "commits": 515,
       "contributor": "Robin van der Linde"
     },
     {
@@ -13,7 +13,7 @@
       "contributor": "Tobias"
     },
     {
-      "commits": 42,
+      "commits": 45,
       "contributor": "dependabot[bot]"
     },
     {
@@ -44,6 +44,10 @@
       "commits": 29,
       "contributor": "riQQ"
     },
+    {
+      "commits": 26,
+      "contributor": "Midgard"
+    },
     {
       "commits": 26,
       "contributor": "Joost"
@@ -56,10 +60,6 @@
       "commits": 24,
       "contributor": "Ward"
     },
-    {
-      "commits": 23,
-      "contributor": "Midgard"
-    },
     {
       "commits": 21,
       "contributor": "wjtje"
@@ -112,6 +112,10 @@
       "commits": 12,
       "contributor": "Bavo Vanderghote"
     },
+    {
+      "commits": 11,
+      "contributor": "Osmwithspace"
+    },
     {
       "commits": 11,
       "contributor": "Flo Edelmann"
@@ -276,6 +280,10 @@
       "commits": 2,
       "contributor": "Stanislas Gueniffey"
     },
+    {
+      "commits": 1,
+      "contributor": "Malte"
+    },
     {
       "commits": 1,
       "contributor": "mike140"
diff --git a/src/assets/schemas/layerconfigmeta.json b/src/assets/schemas/layerconfigmeta.json
index aa9494ed8..2bf546996 100644
--- a/src/assets/schemas/layerconfigmeta.json
+++ b/src/assets/schemas/layerconfigmeta.json
@@ -10824,6 +10824,10 @@
           "if": "value=cafe_pub",
           "then": "cafe_pub - A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions"
         },
+        {
+          "if": "value=campsite",
+          "then": "campsite - Campsites"
+        },
         {
           "if": "value=car_rental",
           "then": "car_rental - Places where you can rent a car"
@@ -10840,6 +10844,10 @@
           "if": "value=charging_station",
           "then": "charging_station - A charging station"
         },
+        {
+          "if": "value=childcare",
+          "then": "childcare - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
+        },
         {
           "if": "value=cinema",
           "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US."
@@ -11076,10 +11084,6 @@
           "if": "value=kerbs",
           "then": "kerbs - A layer showing kerbs."
         },
-        {
-          "if": "value=kindergarten_childcare",
-          "then": "kindergarten_childcare - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
-        },
         {
           "if": "value=last_click",
           "then": "last_click - This 'layer' is not really a layer, but contains part of the code how the popup to 'add a new marker' is displayed"
diff --git a/src/assets/schemas/layoutconfigmeta.json b/src/assets/schemas/layoutconfigmeta.json
index 9427e6b37..554b51649 100644
--- a/src/assets/schemas/layoutconfigmeta.json
+++ b/src/assets/schemas/layoutconfigmeta.json
@@ -703,6 +703,10 @@
           "if": "value=cafe_pub",
           "then": "<b>cafe_pub</b> (builtin) - A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions"
         },
+        {
+          "if": "value=campsite",
+          "then": "<b>campsite</b> (builtin) - Campsites"
+        },
         {
           "if": "value=car_rental",
           "then": "<b>car_rental</b> (builtin) - Places where you can rent a car"
@@ -719,6 +723,10 @@
           "if": "value=charging_station",
           "then": "<b>charging_station</b> (builtin) - A charging station"
         },
+        {
+          "if": "value=childcare",
+          "then": "<b>childcare</b> (builtin) - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
+        },
         {
           "if": "value=cinema",
           "then": "<b>cinema</b> (builtin) - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US."
@@ -955,10 +963,6 @@
           "if": "value=kerbs",
           "then": "<b>kerbs</b> (builtin) - A layer showing kerbs."
         },
-        {
-          "if": "value=kindergarten_childcare",
-          "then": "<b>kindergarten_childcare</b> (builtin) - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
-        },
         {
           "if": "value=last_click",
           "then": "<b>last_click</b> (builtin) - This 'layer' is not really a layer, but contains part of the code how the popup to 'add a new marker' is displayed"
@@ -13439,6 +13443,10 @@
           "if": "value=cafe_pub",
           "then": "cafe_pub - A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions"
         },
+        {
+          "if": "value=campsite",
+          "then": "campsite - Campsites"
+        },
         {
           "if": "value=car_rental",
           "then": "car_rental - Places where you can rent a car"
@@ -13455,6 +13463,10 @@
           "if": "value=charging_station",
           "then": "charging_station - A charging station"
         },
+        {
+          "if": "value=childcare",
+          "then": "childcare - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
+        },
         {
           "if": "value=cinema",
           "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US."
@@ -13691,10 +13703,6 @@
           "if": "value=kerbs",
           "then": "kerbs - A layer showing kerbs."
         },
-        {
-          "if": "value=kindergarten_childcare",
-          "then": "kindergarten_childcare - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
-        },
         {
           "if": "value=last_click",
           "then": "last_click - This 'layer' is not really a layer, but contains part of the code how the popup to 'add a new marker' is displayed"
@@ -35211,6 +35219,10 @@
           "if": "value=cafe_pub",
           "then": "cafe_pub - A layer showing cafés and pubs where one can gather around a drink. The layer asks for some relevant questions"
         },
+        {
+          "if": "value=campsite",
+          "then": "campsite - Campsites"
+        },
         {
           "if": "value=car_rental",
           "then": "car_rental - Places where you can rent a car"
@@ -35227,6 +35239,10 @@
           "if": "value=charging_station",
           "then": "charging_station - A charging station"
         },
+        {
+          "if": "value=childcare",
+          "then": "childcare - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
+        },
         {
           "if": "value=cinema",
           "then": "cinema - A place showing movies (films), generally open to the public for a fee. Commonly referred to as a movie theater in the US."
@@ -35463,10 +35479,6 @@
           "if": "value=kerbs",
           "then": "kerbs - A layer showing kerbs."
         },
-        {
-          "if": "value=kindergarten_childcare",
-          "then": "kindergarten_childcare - Shows kindergartens and preschools. Both are grouped in one layer, as they are regularly confused with each other"
-        },
         {
           "if": "value=last_click",
           "then": "last_click - This 'layer' is not really a layer, but contains part of the code how the popup to 'add a new marker' is displayed"
diff --git a/src/assets/translators.json b/src/assets/translators.json
index 3b0cbb8e5..f528b9cf9 100644
--- a/src/assets/translators.json
+++ b/src/assets/translators.json
@@ -17,40 +17,40 @@
       "contributor": "Anonymous"
     },
     {
-      "commits": 119,
+      "commits": 122,
       "contributor": "mcliquid"
     },
     {
       "commits": 95,
       "contributor": "Allan Nordhøy"
     },
+    {
+      "commits": 89,
+      "contributor": "mike140"
+    },
     {
       "commits": 89,
       "contributor": "Robin van der Linde"
     },
     {
-      "commits": 82,
-      "contributor": "mike140"
+      "commits": 72,
+      "contributor": "Midgard"
     },
     {
       "commits": 70,
       "contributor": "danieldegroot2"
     },
     {
-      "commits": 59,
-      "contributor": "Midgard"
-    },
-    {
-      "commits": 56,
+      "commits": 58,
       "contributor": "Jiří Podhorecký"
     },
     {
       "commits": 53,
-      "contributor": "Harry Bond"
+      "contributor": "Supaplex"
     },
     {
-      "commits": 51,
-      "contributor": "Supaplex"
+      "commits": 53,
+      "contributor": "Harry Bond"
     },
     {
       "commits": 51,
@@ -92,6 +92,10 @@
       "commits": 22,
       "contributor": "Patchanka64"
     },
+    {
+      "commits": 20,
+      "contributor": "JiwonShin"
+    },
     {
       "commits": 18,
       "contributor": "Max Spicer"
@@ -156,10 +160,6 @@
       "commits": 11,
       "contributor": "Túllio Franca"
     },
-    {
-      "commits": 10,
-      "contributor": "JiwonShin"
-    },
     {
       "commits": 10,
       "contributor": "Jeff Huang"
@@ -188,6 +188,10 @@
       "commits": 10,
       "contributor": "Irina"
     },
+    {
+      "commits": 9,
+      "contributor": "Weblate Admin"
+    },
     {
       "commits": 9,
       "contributor": "Krzysztof Chorzempa"
@@ -216,10 +220,6 @@
       "commits": 9,
       "contributor": "Jacque Fresco"
     },
-    {
-      "commits": 8,
-      "contributor": "Weblate Admin"
-    },
     {
       "commits": 8,
       "contributor": "Joost Schouppe"
@@ -456,6 +456,10 @@
       "commits": 3,
       "contributor": "SiegbjornSitumeang"
     },
+    {
+      "commits": 2,
+      "contributor": "Moimoi Ty"
+    },
     {
       "commits": 2,
       "contributor": "Héctor Ochoa Ortiz"
@@ -600,10 +604,6 @@
       "commits": 1,
       "contributor": "Túllio Morais Franca"
     },
-    {
-      "commits": 1,
-      "contributor": "Moimoi Ty"
-    },
     {
       "commits": 1,
       "contributor": "Roger"
diff --git a/src/land.ts b/src/land.ts
index bbcfca8ee..57ca606bf 100644
--- a/src/land.ts
+++ b/src/land.ts
@@ -3,10 +3,9 @@ import Constants from "./Models/Constants"
 
 console.log("Authorizing...")
 const key = Constants.osmAuthConfig.url + "oauth2_state"
-const st =window.localStorage.getItem(key  )
-console.log("Prev state is",key, st)
+const st = window.localStorage.getItem(key)
+console.log("Prev state is", key, st)
 new OsmConnection().finishLogin((previousURL) => {
-
     const fallback = window.location.protocol + "//" + window.location.host + "/index.html"
     previousURL ??= fallback
     if (previousURL.indexOf("/land") > 0) {
diff --git a/src/test.ts b/src/test.ts
index 07ef84a11..2765e2ea1 100644
--- a/src/test.ts
+++ b/src/test.ts
@@ -1,4 +1,4 @@
 import Test from "./UI/Test.svelte"
 import { OsmConnection } from "./Logic/Osm/OsmConnection"
 
-new OsmConnection().interact("user/details.json").then(r => console.log(">>>", r))
+new OsmConnection().interact("user/details.json").then((r) => console.log(">>>", r))
diff --git a/test/Logic/Actors/Actors.spec.ts b/test/Logic/Actors/Actors.spec.ts
index fd3bdf1e8..d89dcab79 100644
--- a/test/Logic/Actors/Actors.spec.ts
+++ b/test/Logic/Actors/Actors.spec.ts
@@ -47,8 +47,10 @@ Utils.injectJsonDownloadForTests("https://www.openstreetmap.org/api/0.6/node/556
 Utils.injectJsonDownloadForTests("./assets/data/editor-layer-index.json", '{"features": [] }')
 
 it("should download the latest version", async () => {
-    const state = new ThemeViewState(new ThemeConfig(<any>bookcaseJson, true),
-        new ImmutableStore<Set<string>>(new Set()))
+    const state = new ThemeViewState(
+        new ThemeConfig(<any>bookcaseJson, true),
+        new ImmutableStore<Set<string>>(new Set())
+    )
     const feature: Feature<Geometry, OsmTags> = {
         type: "Feature",
         id: "node/5568693115",
diff --git a/test/Logic/GeoOperations.spec.ts b/test/Logic/GeoOperations.spec.ts
index 0af422d7d..3cce16fde 100644
--- a/test/Logic/GeoOperations.spec.ts
+++ b/test/Logic/GeoOperations.spec.ts
@@ -15,11 +15,11 @@ describe("GeoOperations", () => {
                             [3.218560377159008, 51.21499687768525],
                             [3.2207456783268356, 51.21499687768525],
                             [3.2207456783268356, 51.21600586532159],
-                            [3.218560377159008, 51.21600586532159]
-                        ]
+                            [3.218560377159008, 51.21600586532159],
+                        ],
                     ],
-                    type: "Polygon"
-                }
+                    type: "Polygon",
+                },
             }
             const line: Feature<LineString> = {
                 type: "Feature",
@@ -27,10 +27,10 @@ describe("GeoOperations", () => {
                 geometry: {
                     coordinates: [
                         [3.218405371672816, 51.21499091846559],
-                        [3.2208408127450525, 51.21560173433727]
+                        [3.2208408127450525, 51.21560173433727],
                     ],
-                    type: "LineString"
-                }
+                    type: "LineString",
+                },
             }
             const result = GeoOperations.clipWith(line, bbox)
             expect(result.length).to.equal(1)
@@ -38,83 +38,50 @@ describe("GeoOperations", () => {
             const clippedLine = (<Feature<LineString>>result[0]).geometry.coordinates
             const expCoordinates = [
                 [3.2185604, 51.215029800031594],
-                [3.2207457, 51.21557787977764]
+                [3.2207457, 51.21557787977764],
             ]
 
             expect(clippedLine).to.deep.equal(expCoordinates)
         })
         it("clipWith should contain the full feature if it is fully contained", () => {
-                const bbox: Feature<Polygon> = {
-                    type: "Feature",
-                    properties: {},
-                    geometry: {
-                        coordinates: [
-                            [
-                                [
-                                    2.1541744759711037,
-                                    51.73994420687188
-                                ],
-                                [
-                                    2.1541744759711037,
-                                    50.31129074222787
-                                ],
-                                [
-                                    4.53247037641421,
-                                    50.31129074222787
-                                ],
-                                [
-                                    4.53247037641421,
-                                    51.73994420687188
-                                ],
-                                [
-                                    2.1541744759711037,
-                                    51.73994420687188
-                                ]
-                            ]
+            const bbox: Feature<Polygon> = {
+                type: "Feature",
+                properties: {},
+                geometry: {
+                    coordinates: [
+                        [
+                            [2.1541744759711037, 51.73994420687188],
+                            [2.1541744759711037, 50.31129074222787],
+                            [4.53247037641421, 50.31129074222787],
+                            [4.53247037641421, 51.73994420687188],
+                            [2.1541744759711037, 51.73994420687188],
                         ],
-                        type: "Polygon"
-                    }
-                }
-                const content: Feature<Polygon> = {
-                    "type": "Feature",
-                    "properties": {},
-                    "geometry": {
-                        "coordinates": [
-                            [
-                                [
-                                    2.8900597545854225,
-                                    50.9035099487991
-                                ],
-                                [
-                                    3.4872999807053873,
-                                    50.74856284865993
-                                ],
-                                [
-                                    3.9512276563531543,
-                                    50.947206170675486
-                                ],
-                                [
-                                    3.897902636163167,
-                                    51.25526892606362
-                                ],
-                                [
-                                    3.188679867646016,
-                                    51.24525576870511
-                                ], [
-                                2.8900597545854225,
-                                50.9035099487991
-                            ]
-                            ]
-                        ],
-                        "type": "Polygon"
-                    }
-                }
-                const clipped = GeoOperations.clipWith(content, bbox)
-                expect(clipped.length).to.equal(1)
-
-                const clippedReverse = GeoOperations.clipWith(bbox, content)
-                expect(clippedReverse.length).to.equal(1)
+                    ],
+                    type: "Polygon",
+                },
             }
-        )
+            const content: Feature<Polygon> = {
+                type: "Feature",
+                properties: {},
+                geometry: {
+                    coordinates: [
+                        [
+                            [2.8900597545854225, 50.9035099487991],
+                            [3.4872999807053873, 50.74856284865993],
+                            [3.9512276563531543, 50.947206170675486],
+                            [3.897902636163167, 51.25526892606362],
+                            [3.188679867646016, 51.24525576870511],
+                            [2.8900597545854225, 50.9035099487991],
+                        ],
+                    ],
+                    type: "Polygon",
+                },
+            }
+            const clipped = GeoOperations.clipWith(content, bbox)
+            expect(clipped.length).to.equal(1)
+
+            const clippedReverse = GeoOperations.clipWith(bbox, content)
+            expect(clippedReverse.length).to.equal(1)
+        })
     })
 })