From 9bdbfad9b68ea328281bfffdf4e4e2f9945860f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 4 Sep 2024 21:20:56 +0200
Subject: [PATCH] Convert many categories to YAML format

---
 car_amenities.json     |  60 ------
 car_amenities.yaml     |  53 ++++++
 children.json          | 138 --------------
 children.yaml          | 114 ++++++++++++
 communication.json     | 161 -----------------
 communication.yaml     | 133 ++++++++++++++
 craft.json             |  98 ----------
 craft.yaml             |  89 +++++++++
 culture-media.yaml     |   2 +-
 culture.json           | 147 ---------------
 culture.yaml           | 134 ++++++++++++++
 cycle_amenities.json   | 156 ----------------
 cycle_amenities.yaml   | 125 +++++++++++++
 education.json         | 149 ---------------
 education.yaml         | 124 +++++++++++++
 emergency.json         | 150 ---------------
 emergency.yaml         | 122 +++++++++++++
 financial.json         | 120 ------------
 financial.yaml         |  99 ++++++++++
 health.json            | 254 --------------------------
 health.yaml            | 163 +++++++++++++++++
 heritage.json          |  40 ----
 heritage.yaml          |  34 ++++
 law.json               |  85 ---------
 law.yaml               |  71 ++++++++
 pt_amenities.json      |  72 --------
 pt_amenities.yaml      |  61 +++++++
 public.json            | 108 -----------
 public.yaml            |  94 ++++++++++
 religion.json          | 178 ------------------
 religion.yaml          | 153 ++++++++++++++++
 shop.json              | 402 -----------------------------------------
 shop.yaml              | 306 +++++++++++++++++++++++++++++++
 swimming_bathing.json  | 165 -----------------
 swimming_bathing.yaml  | 141 +++++++++++++++
 walk_amenities.yaml    |   4 +-
 walk_amenities_qa.yaml |   4 +-
 waste.json             | 146 ---------------
 waste.yaml             | 127 +++++++++++++
 39 files changed, 2148 insertions(+), 2634 deletions(-)
 delete mode 100644 car_amenities.json
 create mode 100644 car_amenities.yaml
 delete mode 100644 children.json
 create mode 100644 children.yaml
 delete mode 100644 communication.json
 create mode 100644 communication.yaml
 delete mode 100644 craft.json
 create mode 100644 craft.yaml
 delete mode 100644 culture.json
 create mode 100644 culture.yaml
 delete mode 100644 cycle_amenities.json
 create mode 100644 cycle_amenities.yaml
 delete mode 100644 education.json
 create mode 100644 education.yaml
 delete mode 100644 emergency.json
 create mode 100644 emergency.yaml
 delete mode 100644 financial.json
 create mode 100644 financial.yaml
 delete mode 100644 health.json
 create mode 100644 health.yaml
 delete mode 100644 heritage.json
 create mode 100644 heritage.yaml
 delete mode 100644 law.json
 create mode 100644 law.yaml
 delete mode 100644 pt_amenities.json
 create mode 100644 pt_amenities.yaml
 delete mode 100644 public.json
 create mode 100644 public.yaml
 delete mode 100644 religion.json
 create mode 100644 religion.yaml
 delete mode 100644 shop.json
 create mode 100644 shop.yaml
 delete mode 100644 swimming_bathing.json
 create mode 100644 swimming_bathing.yaml
 delete mode 100644 waste.json
 create mode 100644 waste.yaml

diff --git a/car_amenities.json b/car_amenities.json
deleted file mode 100644
index 6ba7596..0000000
--- a/car_amenities.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Infraestructures",
-        "ca": "Serveis",
-        "cs": "Občasnká vybavenost",
-        "de": "Einrichtungen",
-        "en": "Amenities",
-        "es": "Instalaciones",
-        "fr": "Équipements auto",
-        "gl": "Instalacións",
-        "hu": "Létesítmények",
-        "it": "Infrastrutture",
-        "ja": "生活環境",
-        "nb": "Fasiliteter",
-        "nl": "Voorzieningen",
-        "oc": "Equipaments auto",
-        "pl": "Użyteczne w transporcie drogowym",
-        "pt": "Equipamentos",
-        "pt-br": "Equipamentos",
-        "ro": "Dotări",
-        "ru": "Обслуживание транспорта",
-        "sr": "Додаци",
-        "tr": "Tesisler",
-        "uk": "Amenities"
-    },
-    "query": {
-        "13": [
-            "(",
-            "nwr[amenity~\"^(car_rental|car_sharing|fuel)$\"];",
-            "nwr[amenity~\"^(charging_station)$\"][motorcar][motorcar!=\"no\"];",
-            "nwr[amenity~\"^(charging_station)$\"][motorcycle][motorcycle!=\"no\"];",
-            ")"
-        ],
-        "16": [
-            "(",
-            "nwr[amenity~\"^(car_rental|car_sharing|car_wash|fuel|motorcycle_parking|parking)$\"];",
-            "nwr[amenity~\"^(charging_station)$\"][motorcar][motorcar!=\"no\"];",
-            "nwr[amenity~\"^(charging_station)$\"][motorcycle][motorcycle!=\"no\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% set key = 'amenity' %}",
-            "{% set value = tags.amenity %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}",
-        "markerSign": "{{ const[value] }}"
-    },
-    "const": {
-        "car_rental": "R",
-        "car_sharing": "S",
-        "car_wash": "🚿",
-        "charging_station": "🔌",
-        "fuel": "⛽",
-        "parking": "🅿",
-        "motorcycle_parking": "🅿"
-    }
-}
diff --git a/car_amenities.yaml b/car_amenities.yaml
new file mode 100644
index 0000000..fdab8c3
--- /dev/null
+++ b/car_amenities.yaml
@@ -0,0 +1,53 @@
+type: overpass
+name:
+  ast: Infraestructures
+  ca: Serveis
+  cs: Občasnká vybavenost
+  de: Einrichtungen
+  en: Amenities
+  es: Instalaciones
+  fr: Équipements auto
+  gl: Instalacións
+  hu: Létesítmények
+  it: Infrastrutture
+  ja: 生活環境
+  nb: Fasiliteter
+  nl: Voorzieningen
+  oc: Equipaments auto
+  pl: Użyteczne w transporcie drogowym
+  pt: Equipamentos
+  pt-br: Equipamentos
+  ro: Dotări
+  ru: Обслуживание транспорта
+  sr: Додаци
+  tr: Tesisler
+  uk: Amenities
+query:
+  13: |-
+    (
+    nwr[amenity~"^(car_rental|car_sharing|fuel)$"];
+    nwr[amenity~"^(charging_station)$"][motorcar][motorcar!="no"];
+    nwr[amenity~"^(charging_station)$"][motorcycle][motorcycle!="no"];
+    )
+  16: |-
+    (
+    nwr[amenity~"^(car_rental|car_sharing|car_wash|fuel|motorcycle_parking|parking)$"];
+    nwr[amenity~"^(charging_station)$"][motorcar][motorcar!="no"];
+    nwr[amenity~"^(charging_station)$"][motorcycle][motorcycle!="no"];
+    )
+feature:
+  pre: |-
+    {% set key = 'amenity' %}
+    {% set value = tags.amenity %}
+  description: |-
+    {{ tagTrans(key, value) }}
+  markerSign: |-
+    {{ const[value] }}
+const:
+  car_rental: R
+  car_sharing: S
+  car_wash: 🚿
+  charging_station: 🔌
+  fuel: ⛽
+  parking: 🅿
+  motorcycle_parking: 🅿
diff --git a/children.json b/children.json
deleted file mode 100644
index 6044061..0000000
--- a/children.json
+++ /dev/null
@@ -1,138 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ca": "Serveis per a infants",
-        "cs": "Vybavení pro děti",
-        "de": "Einrichtungen für Kinder",
-        "en": "Children amenities",
-        "es": "Instalaciones para niños",
-        "fr": "Équipements pour enfants",
-        "gl": "Instalacións infantís",
-        "hu": "Gyermekek",
-        "it": "Luoghi per bambini",
-        "ja": "子ども用施設",
-        "nb": "Barnefasiliteter",
-        "nl": "Voorzieningen voor kinderen",
-        "oc": "Luòcs per leis enfants",
-        "pl": "Użyteczne dzieciom",
-        "pt": "Equipamentos infantis",
-        "pt-br": "Equipamentos infantis",
-        "ro": "Facilități copii",
-        "sr": "Додаци за децу",
-        "tr": "Çocuk Malzemeleri"
-    },
-    "query": {
-        "15": [
-            "(",
-            "node[leisure~'^(playground|summer_camp|indoor_play)$'];",
-            "way[leisure~'^(playground|summer_camp|indoor_play)$'];",
-            "relation[leisure~'^(playground|summer_camp|indoor_play)$'];",
-            "node[shop~'^(baby_goods|toys)$'];",
-            "way[shop~'^(baby_goods|toys)$'];",
-            "relation[shop~'^(baby_goods|toys)$'];",
-            "nwr[changing_table][changing_table!=no];",
-            "nwr[diaper][diaper!=no];",
-            "node[kids_area];",
-            "way[kids_area];",
-            "relation[kids_area];",
-            ");"
-        ]
-    },
-    "feature": {
-        "description": [
-            "{% if tags.leisure=='playground' %}",
-            "{{ tagTrans('leisure', 'playground') }}",
-            "{% elseif tags.leisure=='summer_camp'%}",
-            "{{ tagTrans('leisure', 'summer_camp') }}",
-            "{% elseif tags.leisure=='indoor_play' %}",
-            "{{ tagTrans('leisure', 'indoor_play') }}",
-            "{% elseif tags.kids_area %}",
-            "{{ keyTrans('kids_area') }}",
-            "{% elseif tags.shop=='baby_goods' or tags.shop=='toys' %}",
-            "{{ keyTrans('shop') }}: {{ tagTrans('shop', tags.shop) }}",
-            "{% elseif tags.amenity == 'toilets' and ( (tags.changing_table and tags.changing_table != 'no') or (tags.diaper and tags.diaper != 'no') ) %}",
-            "{{ tagTrans('amenity', 'toilets changing_table=yes') }}",
-            "{% elseif (tags.changing_table and tags.changing_table != 'no') or (tags.diaper and tags.diaper != 'no') %}",
-            "{{ keyTrans('changing_table') }}",
-            "{% endif %}"
-        ],
-        "markerSign": [
-            "{% if tags.leisure=='playground' %}",
-            "⛹",
-            "{% elseif tags.leisure=='summer_camp'%}",
-            "🏕",
-            "{% elseif tags.leisure=='indoor_play' or tags.kids_area %}",
-            "🏠",
-            "{% elseif tags.shop=='baby_goods' or tags.shop=='toys' %}",
-            "<i class=\"fa fa-shopping-cart\"></i>",
-            "{% elseif tags.amenity=='toilets' and tags.changing_table and tags.changing_table!='no' %}",
-            "🚽🚼",
-            "{% endif %}"
-        ]
-    },
-    "info": [
-        "<table>",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>⛹</div></td>",
-        "    <td>{{ tagTrans('leisure', 'playground') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>🏠</div></td>",
-        "    <td>{{ tagTrans('leisure', 'indoor_play') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>🏕</div></td>",
-        "    <td>{{ tagTrans('leisure', 'summer_camp') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>🏠</div></td>",
-        "    <td>{{ keyTrans('kids_area') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'><i class=\"fa fa-shopping-cart\"></i></div></td>",
-        "    <td>{{ keyTrans('shop') }}: {{ tagTransList('shop', 'baby_goods;toys') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>🚽🚼</div></td>",
-        "    <td>{{ tagTrans('amenity', 'toilets changing_table=yes') }}</td>",
-        "  </tr>",
-        "</table>"
-    ],
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "type": "select",
-            "show_default": "true",
-            "values": {
-                "playground": {
-                    "name": "{{ tagTrans('leisure', 'playground') }}",
-                    "query": "nwr[leisure=playground]"
-                },
-                "indoor_play": {
-                    "name": "{{ tagTrans('leisure', 'indoor_play') }}",
-                    "query": "nwr[leisure=indoor_play]"
-                },
-                "summer_camp": {
-                    "name": "{{ tagTrans('leisure', 'summer_camp') }}",
-                    "query": "nwr[leisure=summer_camp]"
-                },
-                "kids_area": {
-                    "name": "{{ keyTrans('kids_area') }}",
-                    "query": "nwr[kids_area]"
-                },
-                "shop_baby_goods": {
-                    "name": "{{ tagTrans('shop', 'baby_goods') }}",
-                    "query": "nwr[shop=baby_goods]"
-                },
-                "shop_toys": {
-                    "name": "{{ tagTrans('shop', 'toys') }}",
-                    "query": "nwr[shop=toys]"
-                },
-                "toilets": {
-                    "name": "{{ tagTrans('amenity', 'toilets changing_table=yes') }}",
-                    "query": "nwr[amenity=toilets][changing_table][changing_table!=no]"
-                }
-            }
-        }
-    }
-}
diff --git a/children.yaml b/children.yaml
new file mode 100644
index 0000000..0f80f70
--- /dev/null
+++ b/children.yaml
@@ -0,0 +1,114 @@
+type: overpass
+name:
+  ca: Serveis per a infants
+  cs: Vybavení pro děti
+  de: Einrichtungen für Kinder
+  en: Children amenities
+  es: Instalaciones para niños
+  fr: Équipements pour enfants
+  gl: Instalacións infantís
+  hu: Gyermekek
+  it: Luoghi per bambini
+  ja: 子ども用施設
+  nb: Barnefasiliteter
+  nl: Voorzieningen voor kinderen
+  oc: Luòcs per leis enfants
+  pl: Użyteczne dzieciom
+  pt: Equipamentos infantis
+  pt-br: Equipamentos infantis
+  ro: Facilități copii
+  sr: Додаци за децу
+  tr: Çocuk Malzemeleri
+query:
+  15: |-
+    (
+    nwr[leisure~'^(playground|summer_camp|indoor_play)$'];
+    nwr[shop~'^(baby_goods|toys)$'];
+    nwr[changing_table][changing_table!=no];
+    nwr[diaper][diaper!=no];
+    nwr[kids_area];
+    );
+feature:
+  description: |-
+    {% if tags.leisure=='playground' %}
+    {{ tagTrans('leisure', 'playground') }}
+    {% elseif tags.leisure=='summer_camp'%}
+    {{ tagTrans('leisure', 'summer_camp') }}
+    {% elseif tags.leisure=='indoor_play' %}
+    {{ tagTrans('leisure', 'indoor_play') }}
+    {% elseif tags.kids_area %}
+    {{ keyTrans('kids_area') }}
+    {% elseif tags.shop=='baby_goods' or tags.shop=='toys' %}
+    {{ keyTrans('shop') }}: {{ tagTrans('shop', tags.shop) }}
+    {% elseif tags.amenity == 'toilets' and ( (tags.changing_table and tags.changing_table != 'no') or (tags.diaper and tags.diaper != 'no') ) %}
+    {{ tagTrans('amenity', 'toilets changing_table=yes') }}
+    {% elseif (tags.changing_table and tags.changing_table != 'no') or (tags.diaper and tags.diaper != 'no') %}
+    {{ keyTrans('changing_table') }}
+    {% endif %}
+  markerSign: |-
+    {% if tags.leisure=='playground' %}
+    ⛹
+    {% elseif tags.leisure=='summer_camp'%}
+    🏕
+    {% elseif tags.leisure=='indoor_play' or tags.kids_area %}
+    🏠
+    {% elseif tags.shop=='baby_goods' or tags.shop=='toys' %}
+    <i class="fa fa-shopping-cart"></i>
+    {% elseif tags.amenity=='toilets' and tags.changing_table and tags.changing_table!='no' %}
+    🚽🚼
+    {% endif %}
+info: |-
+  <table>
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>⛹</div></td>
+      <td>{{ tagTrans('leisure', 'playground') }}</td>
+    </tr>
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>🏠</div></td>
+      <td>{{ tagTrans('leisure', 'indoor_play') }}</td>
+    </tr>
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>🏕</div></td>
+      <td>{{ tagTrans('leisure', 'summer_camp') }}</td>
+    </tr>
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>🏠</div></td>
+      <td>{{ keyTrans('kids_area') }}</td>
+    </tr>
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'><i class="fa fa-shopping-cart"></i></div></td>
+      <td>{{ keyTrans('shop') }}: {{ tagTransList('shop', 'baby_goods;toys') }}</td>
+    </tr>
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>🚽🚼</div></td>
+      <td>{{ tagTrans('amenity', 'toilets changing_table=yes') }}</td>
+    </tr>
+  </table>
+filter:
+  type:
+    name: |-
+      {{ trans('filter:type') }}
+    type: select
+    show_default: true
+    values:
+      playground:
+        name: '{{ tagTrans("leisure", "playground") }}'
+        query: nwr[leisure=playground]
+      indoor_play:
+        name: '{{ tagTrans("leisure", "indoor_play") }}'
+        query: nwr[leisure=indoor_play]
+      summer_camp:
+        name: '{{ tagTrans("leisure", "summer_camp") }}'
+        query: nwr[leisure=summer_camp]
+      kids_area:
+        name: '{{ keyTrans("kids_area") }}'
+        query: nwr[kids_area]
+      shop_baby_goods:
+        name: '{{ tagTrans("shop", "baby_goods") }}'
+        query: nwr[shop=baby_goods]
+      shop_toys:
+        name: '{{ tagTrans("shop", "toys") }}'
+        query: nwr[shop=toys]
+      toilets:
+        name: '{{ tagTrans("amenity", "toilets changing_table=yes") }}'
+        query: nwr[amenity=toilets][changing_table][changing_table!=no]
diff --git a/communication.json b/communication.json
deleted file mode 100644
index c3b275d..0000000
--- a/communication.json
+++ /dev/null
@@ -1,161 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Comunicaciones",
-        "ca": "Comunicacions",
-        "cs": "Komunikace",
-        "de": "Kommunikation",
-        "el": "Επικοινωνίες",
-        "en": "Communication",
-        "es": "Comunicación",
-        "et": "Kommunikatsioon",
-        "fr": "Communication",
-        "gl": "Comunicacións",
-        "hu": "Kommunikácó",
-        "it": "Comunicazione",
-        "ja": "情報通信",
-        "nb": "Kommunikasjon",
-        "nl": "Communicatie",
-        "oc": "Communicacion",
-        "pl": "Komunikacja",
-        "pt": "Comunicação",
-        "pt-br": "Comunicação",
-        "ro": "Comunicatii",
-        "ru": "Услуги связи",
-        "sr": "Комуникација",
-        "tr": "İletişim",
-        "uk": "Телекомунікації"
-    },
-    "query": {
-        "13": [
-            "(",
-            "nwr[amenity~'^(post_office|internet_cafe)$'];",
-            "nwr[office~\"^(telecommunication|it|newspaper|publisher|advertising_agency)$\"];",
-            ");"
-        ],
-        "15": [
-            "(",
-            "nwr[amenity~'^(post_office|internet_cafe|post_box|parcel_locker|telephone)$'];",
-            "nwr[office~\"^(telecommunication|it|newspaper|publisher|advertising_agency)$\"];",
-            "nwr[vending~\"^(|.*;)parcel_pickup(;.*|)$\"];",
-            "nwr[vending~\"^(|.*;)parcel_mail_in(;.*|)$\"];",
-            ");"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.vending %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = 'parcel_locker' %}",
-            "  {% set deprecated = ['vending=' ~ tags.vending, 'https://wiki.openstreetmap.org/wiki/Proposed_features/amenity%3Dparcel_locker'] %}",
-            "{% elseif tags.amenity %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% else %}",
-            "  {% set key = 'office' %}",
-            "  {% set value = tags.office %}",
-            "{% endif %}"
-        ],
-        "description": [
-            "{% if key == 'office' %}",
-            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
-            "{% else %}",
-            "  {{ tagTransList(key, value) }}",
-            "{% endif %}"
-        ],
-        "body": [
-            "{% if deprecated %}<div class='warning'>{{ repoTrans('deprecated', deprecated[0], deprecated[1])|raw }}</div>{% endif %}",
-            "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br/>{% endif %}"
-        ],
-        "markerSign": [
-            "{% set data = const[key ~ '=' ~ value] %}",
-            "{% if data %}",
-            "{{ data.sign|raw }}",
-            "{% endif %}"
-        ],
-        "markerSymbol": "{{ markerPointer({\"fillColor\": (deprecated ? 'red' : '#f2756a') })|raw }}",
-        "listMarkerSymbol": "{{ markerCircle({\"fillColor\": (deprecated ? 'red' : '#f2756a')})|raw }}"
-    },
-    "info": [
-        "<table>",
-        "{% for kv, data in const %}",
-        "{% if data.zoom <= map.zoom and not data.info_hide %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>",
-        "      {% if kv|split('=')[0] == 'office' %}",
-        "        {{ keyTrans('office') }}",
-        "        ({{ tagTrans('office', kv|split('=')[1]) }})",
-        "      {% else %}",
-        "        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
-        "      {% endif %}",
-        "    </td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "amenity=post_office": {
-            "sign": "<img src='maki:post?size=15'>",
-            "zoom": 13
-        },
-        "amenity=post_box": {
-            "sign": "<img src='maki:post?size=11'>",
-            "zoom": 16
-        },
-        "amenity=internet_cafe": {
-            "sign": "<i class='fa fa-laptop' aria-hidden='true'></i>",
-            "zoom": 13
-        },
-        "amenity=parcel_locker": {
-            "sign": "<i class='fas fa-box'></i>",
-            "query": "(nwr[vending~\"^(|.*;)parcel_pickup(;.*|)$\"];nwr[vending~\"^(|.*;)parcel_mail_in(;.*|)$\"];nwr[amenity=parcel_locker];)",
-            "zoom": 16
-        },
-        "office=telecommunication": {
-            "sign": "<i class='fas fa-mobile-alt'></i>",
-            "zoom": 13
-        },
-        "office=it": {
-            "sign": "<i class='fas fa-desktop'></i>",
-            "zoom": 13
-        },
-        "office=newspaper": {
-            "sign": "<i class='fas fa-newspaper'></i>",
-            "zoom": 13
-        },
-        "office=publisher": {
-            "sign": "<i class='fas fa-book'></i>",
-            "zoom": 13
-        },
-        "office=advertising_agency": {
-            "sign": "<i class='fas fa-sign'></i>",
-            "zoom": 13
-        },
-        "office=public_relations": {
-            "sign": "<i class='fas fa-sign'></i>",
-            "zoom": 13
-        },
-        "office=audiovisual_production": {
-            "sign": "<i class='fas fa-film'></i>",
-            "zoom": 13
-        },
-        "office=film_production": {
-            "sign": "<i class='fas fa-film'></i>",
-            "zoom": 13
-        },
-        "amenity=telephone": {
-            "sign": "<img src='maki:telephone'>",
-            "zoom": 16
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"{% if v.query %}{{ v.query }}{% else %}nwr[{{ k }}]{% endif %}\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/communication.yaml b/communication.yaml
new file mode 100644
index 0000000..76f0dd3
--- /dev/null
+++ b/communication.yaml
@@ -0,0 +1,133 @@
+type: overpass
+name:
+  ast: Comunicaciones
+  ca: Comunicacions
+  cs: Komunikace
+  de: Kommunikation
+  el: Επικοινωνίες
+  en: Communication
+  es: Comunicación
+  et: Kommunikatsioon
+  fr: Communication
+  gl: Comunicacións
+  hu: Kommunikácó
+  it: Comunicazione
+  ja: 情報通信
+  nb: Kommunikasjon
+  nl: Communicatie
+  oc: Communicacion
+  pl: Komunikacja
+  pt: Comunicação
+  pt-br: Comunicação
+  ro: Comunicatii
+  ru: Услуги связи
+  sr: Комуникација
+  tr: İletişim
+  uk: Телекомунікації
+query:
+  13: |-
+    (
+    nwr[amenity~'^(post_office|internet_cafe)$'];
+    nwr[office~"^(telecommunication|it|newspaper|publisher|advertising_agency)$"];
+    );
+  15: |-
+    (
+    nwr[amenity~'^(post_office|internet_cafe|post_box|parcel_locker|telephone)$'];
+    nwr[office~"^(telecommunication|it|newspaper|publisher|advertising_agency)$"];
+    nwr[vending~"^(|.*;)parcel_pickup(;.*|)$"];
+    nwr[vending~"^(|.*;)parcel_mail_in(;.*|)$"];
+    );
+feature:
+  pre: |-
+    {% if tags.vending %}
+      {% set key = 'amenity' %}
+      {% set value = 'parcel_locker' %}
+      {% set deprecated = ['vending=' ~ tags.vending, 'https://wiki.openstreetmap.org/wiki/Proposed_features/amenity%3Dparcel_locker'] %}
+    {% elseif tags.amenity %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% else %}
+      {% set key = 'office' %}
+      {% set value = tags.office %}
+    {% endif %}
+  description: |-
+    {% if key == 'office' %}
+      {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})
+    {% else %}
+      {{ tagTransList(key, value) }}
+    {% endif %}
+  body: |-
+    {% if deprecated %}<div class='warning'>{{ repoTrans('deprecated', deprecated[0], deprecated[1])|raw }}</div>{% endif %}
+    {% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br/>{% endif %}
+  markerSign: |-
+    {% set data = const[key ~ '=' ~ value] %}
+    {% if data %}
+    {{ data.sign|raw }}
+    {% endif %}
+  markerSymbol: '{{ markerPointer({"fillColor": (deprecated ? "red" : "#f2756a") })|raw }}'
+  listMarkerSymbol: '{{ markerCircle({"fillColor": (deprecated ? "red" : "#f2756a")})|raw }}'
+info: |-
+  <table>
+  {% for kv, data in const %}
+  {% if data.zoom <= map.zoom and not data.info_hide %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>
+        {% if kv|split('=')[0] == 'office' %}
+          {{ keyTrans('office') }}
+          ({{ tagTrans('office', kv|split('=')[1]) }})
+        {% else %}
+          {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}
+        {% endif %}
+      </td>
+    </tr>
+  {% endif %}
+  {% endfor %}
+  </table>
+const:
+  amenity=post_office:
+    sign: <img src='maki:post?size=15'>
+    zoom: 13
+  amenity=post_box:
+    sign: <img src='maki:post?size=11'>
+    zoom: 16
+  amenity=internet_cafe:
+    sign: <i class='fa fa-laptop' aria-hidden='true'></i>
+    zoom: 13
+  amenity=parcel_locker:
+    sign: <i class='fas fa-box'></i>
+    query: (nwr[vending~"^(|.*;)parcel_pickup(;.*|)$"];nwr[vending~"^(|.*;)parcel_mail_in(;.*|)$"];nwr[amenity=parcel_locker];)
+    zoom: 16
+  office=telecommunication:
+    sign: <i class='fas fa-mobile-alt'></i>
+    zoom: 13
+  office=it:
+    sign: <i class='fas fa-desktop'></i>
+    zoom: 13
+  office=newspaper:
+    sign: <i class='fas fa-newspaper'></i>
+    zoom: 13
+  office=publisher:
+    sign: <i class='fas fa-book'></i>
+    zoom: 13
+  office=advertising_agency:
+    sign: <i class='fas fa-sign'></i>
+    zoom: 13
+  office=public_relations:
+    sign: <i class='fas fa-sign'></i>
+    zoom: 13
+  office=audiovisual_production:
+    sign: <i class='fas fa-film'></i>
+    zoom: 13
+  office=film_production:
+    sign: <i class='fas fa-film'></i>
+    zoom: 13
+  amenity=telephone:
+    sign: <img src='maki:telephone'>
+    zoom: 16
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}" query="{% if v.query %}{{ v.query }}{% else %}nwr[{{ k }}]{% endif %}" minzoom="{{ v.zoom }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/craft.json b/craft.json
deleted file mode 100644
index f52b09a..0000000
--- a/craft.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ca": "Artesania",
-        "cs": "Řemeslo",
-        "de": "Handwerk",
-        "en": "Craft",
-        "es": "Artesano",
-        "fr": "Artisanat",
-        "gl": "Artesán",
-        "hu": "Műhelyek",
-        "it": "Artigianato",
-        "ja": "職人",
-        "nb": "Håndverk",
-        "nl": "Handwerk",
-        "oc": "Artisanat",
-        "pl": "Rzemiosło",
-        "pt": "Artesanato",
-        "pt-br": "Ofícios",
-        "ru": "Мастерские",
-        "sr": "Занат",
-        "tr": "El Sanatları"
-    },
-    "query": {
-        "15": "(node[craft];way[craft];relation[craft];);"
-    },
-    "feature": {
-        "description": "{{ tagTransList('craft', tags.craft) }}",
-        "markerSign": "{% set craft0 = tags.craft|split(';')[0] %}{% if const.crafts[craft0] %}{% set v = const.crafts[craft0] %}{% else %}{% set v = const.default %}{% endif %}{% if v|slice(0, 3) == 'fa-' %}<i class=\"fa {{ v }}\"></i>{% else %}{{ v|raw }}{% endif %}"
-    },
-    "const": {
-        "default": "",
-        "crafts": {
-            "bakery": "fa-birthday-cake",
-            "beekeeper": "🐝",
-            "blacksmith": "🔨",
-            "boatbuilder": "⛵",
-            "bookbinder": "📕",
-            "brewery": "fa-beer",
-            "builder": "🚧",
-            "carpenter": "fa-hammer",
-            "carpet_layer": "",
-            "caterer": "fa-birthday-cake",
-            "chimney_sweeper": "",
-            "clockmaker": "⌚",
-            "confectionery": "",
-            "distillery": "🍷",
-            "dressmaker": "&#128090;",
-            "electrician": "🔌",
-            "floorer": "",
-            "gardener": "⚘",
-            "glaziery": "",
-            "handicraft": "fa-hammer",
-            "hvac": "",
-            "insulation": "",
-            "jeweller": "💍",
-            "key_cutter": "🔑",
-            "locksmith": "🔑",
-            "metal_construction": "",
-            "optician": "👓",
-            "painter": "🖌",
-            "parquet_layer": "",
-            "photographer": "📷",
-            "photographic_laboratory": "📷",
-            "piano_tuner": "",
-            "plasterer": "",
-            "plumber": "fa-wrench",
-            "pottery": "",
-            "rigger": "",
-            "roofer": "",
-            "saddler": "🐎",
-            "sailmaker": "⛵",
-            "sawmill": "",
-            "scaffolder": "",
-            "sculptor": "",
-            "shoemaker": "👞",
-            "stand_builder": "",
-            "stonemason": "",
-            "sun_protection": "fa-sun",
-            "tailor": "&#128090;",
-            "tiler": "",
-            "tinsmith": "",
-            "turner": "",
-            "upholsterer": "",
-            "watchmaker": "⌚",
-            "window_construction": "",
-            "winery": "🍷"
-        }
-    },
-    "filter": {
-        "craft": {
-            "name": "{{ trans('filter:type') }}",
-            "type": "select",
-            "show_default": "true",
-            "values": "{% set list = [] %}{% for t, v in const.crafts %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('craft', t) }}</option>{% endfor %}<option value='other' query='nwr[craft][craft!~\"^({{ list|join('|') }})$\"]'>{{ trans('other') }}</option>"
-        }
-    }
-}
diff --git a/craft.yaml b/craft.yaml
new file mode 100644
index 0000000..849a675
--- /dev/null
+++ b/craft.yaml
@@ -0,0 +1,89 @@
+type: overpass
+name:
+  ca: Artesania
+  cs: Řemeslo
+  de: Handwerk
+  en: Craft
+  es: Artesano
+  fr: Artisanat
+  gl: Artesán
+  hu: Műhelyek
+  it: Artigianato
+  ja: 職人
+  nb: Håndverk
+  nl: Handwerk
+  oc: Artisanat
+  pl: Rzemiosło
+  pt: Artesanato
+  pt-br: Ofícios
+  ru: Мастерские
+  sr: Занат
+  tr: El Sanatları
+query:
+  15: (node[craft];way[craft];relation[craft];);
+feature:
+  description: '{{ tagTransList("craft", tags.craft) }}'
+  markerSign: '{% set craft0 = tags.craft|split(";")[0] %}{% if const.crafts[craft0] %}{% set v = const.crafts[craft0] %}{% else %}{% set v = const.default %}{% endif %}{% if v|slice(0, 3) == "fa-" %}<i class="fa {{ v }}"></i>{% else %}{{ v|raw }}{% endif %}'
+const:
+  default: ''
+  crafts:
+    bakery: fa-birthday-cake
+    beekeeper: 🐝
+    blacksmith: 🔨
+    boatbuilder: ⛵
+    bookbinder: 📕
+    brewery: fa-beer
+    builder: 🚧
+    carpenter: fa-hammer
+    carpet_layer: ''
+    caterer: fa-birthday-cake
+    chimney_sweeper: ''
+    clockmaker: ⌚
+    confectionery: ''
+    distillery: 🍷
+    dressmaker: '&#128090;'
+    electrician: 🔌
+    floorer: ''
+    gardener: ⚘
+    glaziery: ''
+    handicraft: fa-hammer
+    hvac: ''
+    insulation: ''
+    jeweller: 💍
+    key_cutter: 🔑
+    locksmith: 🔑
+    metal_construction: ''
+    optician: 👓
+    painter: 🖌
+    parquet_layer: ''
+    photographer: 📷
+    photographic_laboratory: 📷
+    piano_tuner: ''
+    plasterer: ''
+    plumber: fa-wrench
+    pottery: ''
+    rigger: ''
+    roofer: ''
+    saddler: 🐎
+    sailmaker: ⛵
+    sawmill: ''
+    scaffolder: ''
+    sculptor: ''
+    shoemaker: 👞
+    stand_builder: ''
+    stonemason: ''
+    sun_protection: fa-sun
+    tailor: '&#128090;'
+    tiler: ''
+    tinsmith: ''
+    turner: ''
+    upholsterer: ''
+    watchmaker: ⌚
+    window_construction: ''
+    winery: 🍷
+filter:
+  craft:
+    name: '{{ trans("filter:type") }}'
+    type: select
+    show_default: 'true'
+    values: '{% set list = [] %}{% for t, v in const.crafts %}<option value="{{ t }}">{% set list = list|merge([ t ]) %}{{ tagTrans("craft", t) }}</option>{% endfor %}<option value="other" query="nwr[craft][craft!~"^({{ list|join("|") }})$"]">{{ trans("other") }}</option>'
diff --git a/culture-media.yaml b/culture-media.yaml
index 46bf959..4033dd7 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -1,3 +1,4 @@
+type: "overpass"
 name:
   ca: Cultura - Mitjans/Wikidata
   en: Culture - Media/Wikidata
@@ -8,7 +9,6 @@ name:
   pt-br: Cultura - Imagem e Wikidata
   pt: Cultura - Media/Wikidata
   tr: Kültür - Medya/Wikidata
-type: "overpass"
 query: 
   15: |
     (
diff --git a/culture.json b/culture.json
deleted file mode 100644
index 1034039..0000000
--- a/culture.json
+++ /dev/null
@@ -1,147 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Cultura",
-        "ca": "Cultura",
-        "cs": "Kultura",
-        "de": "Kultur",
-        "el": "Πολιτισμός",
-        "en": "Culture",
-        "es": "Cultura",
-        "et": "Kultuur",
-        "fr": "Culture",
-        "gl": "Cultura",
-        "hu": "Kultúra",
-        "it": "Cultura",
-        "ja": "文化",
-        "nb": "Kultur",
-        "nl": "Cultuur",
-        "oc": "Cultura",
-        "pl": "Kultura",
-        "pt": "Cultura",
-        "pt-br": "Cultura",
-        "ro": "Cultura",
-        "ru": "Культура",
-        "sr": "Култура",
-        "tr": "Kültür",
-        "uk": "Культура "
-    },
-    "query": {
-        "13": [
-            "(",
-            "node[amenity~\"^(arts_centre|cinema|community_centre|fountain|studio|theatre)$\"];",
-            "way[amenity~\"^(arts_centre|cinema|community_centre|fountain|studio|theatre)$\"];",
-            "relation[amenity~\"^(arts_centre|cinema|community_centre|fountain|studio|theatre)$\"];",
-            "node[tourism~\"^(artwork|gallery|museum|theme_park)$\"];",
-            "way[tourism~\"^(artwork|gallery|museum|theme_park)$\"];",
-            "relation[tourism~\"^(artwork|gallery|museum|theme_park)$\"];",
-            "nwr[amenity=clock][display~\"^(sundial|unorthodox)$\"];",
-            "nwr[amenity=clock][\"display:sundial\"];",
-            "nwr[amenity=clock][\"display:unorthodox\"];",
-            "nwr[shop~\"^(art)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity in [ 'arts_centre', 'cinema', 'community_centre', 'fountain', 'studio', 'theatre', 'clock' ] %}",
-            "{% set key = 'amenity' %}",
-            "{% set value = tags.amenity %}",
-            "{% elseif tags.tourism %}",
-            "{% set key = 'tourism' %}",
-            "{% set value = tags.tourism %}",
-            "{% elseif tags.shop %}",
-            "{% set key = 'shop' %}",
-            "{% set value = tags.shop %}",
-            "{% endif %}"
-        ],
-        "description": [
-            "{% if key == 'shop' %}",
-            "  {{ keyTrans(key) }} ({{ tagTrans(key, value) }})",
-            "{% elseif tags.amenity == 'clock' %}",
-            "  {% if tags.display == 'sundial' or attribute(tags, 'display:sundial') %}{{ tagTrans('amenity', 'clock display=sundial') }}{% endif %}",
-            "  {% if tags.display == 'unorthodox' or attribute(tags, 'display:unorthodox') %}{{ tagTrans('amenity', 'clock display=unorthodox') }}{% endif %}",
-            "{% else %}",
-            "  {{ tagTrans(key, value) }}",
-            "{% endif %}",
-            "",
-            "{% if tags.tourism == 'museum' and tags.museum %}",
-            "({{ tagTrans('museum', tags.museum) }})",
-            "{% endif %}",
-            "{% if tags.amenity == 'theatre' and attribute(tags, 'theatre:genre') %}",
-            "({{ tagTrans('theatre:genre', attribute(tags, 'theatre:genre')) }})",
-            "{% endif %}",
-            "{% if tags.amenity == 'community_centre' and tags.community_centre %}",
-            "({{ tagTrans('community_centre', tags.community_centre) }})",
-            "{% endif %}"
-        ],
-        "body": [
-            "<ul>",
-            "{% if tags.inscription %}",
-            "  <li class='hasSymbol'>",
-            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
-            "   <span class='key'>{{ keyTrans('inscription') }}:</span>",
-            "   <span class='value'>{{ localizedTag(tags, 'inscription')|nl2br }}</span>",
-            "  </li>",
-            "{% elseif attribute(tags, 'inscription:url') %}",
-            "  <li class='hasSymbol'>",
-            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
-            "   <span class='key'><a href=\"{{ attribute(tags, 'inscription:url') }}\">{{ keyTrans('inscription') }}</a></span>",
-            "  </li>",
-            "{% endif %}",
-            "",
-            "{% if tags.artist_name %}",
-            "  <li class='hasSymbol'>",
-            "   <i class=\"fa fa-palette\" aria-hidden=\"true\"></i>",
-            "   <span class='key'>{{ keyTrans('artist_name') }}:</span>",
-            "   <span class='value'>{{ enumerate(tags.artist_name) }}</span>",
-            "  </li>",
-            "{% endif %}",
-            "",
-            "{% if tags.material %}",
-            "  <li class='hasSymbol'>",
-            "   <img data-src=\"maki:warehouse\">",
-            "   <span class='key'>{{ keyTrans('material') }}:</span>",
-            "   <span class='value'>{{ tagTransList('material', tags.material) }}</span>",
-            "  </li>",
-            "{% endif %}",
-            "",
-            "</ul>"
-        ],
-        "markerSign": "{{ attribute(const, key ~ '=' ~ value)|raw }}"
-    },
-    "const": {
-        "amenity=arts_centre": "🎨",
-        "amenity=cinema": "🎦",
-        "amenity=clock": "<i class=\"fas fa-clock\"></i>",
-        "amenity=community_centre": "<i class=\"fas fa-users\" aria-hidden=\"true\"></i>",
-        "amenity=fountain": "⛲",
-        "amenity=studio": "<i class=\"fas fa-microphone\"></i>",
-        "amenity=theatre": "🎭",
-        "tourism=artwork": "🎨 ",
-        "tourism=gallery": "🖼",
-        "tourism=museum": "🏛 ",
-        "tourism=theme_park": "<img data-src='maki:amusement-park'>",
-        "shop=art": "<i class=\"fa fa-shopping-cart\"></i>"
-    },
-    "info": [
-        "<table>",
-        "{% for value, sign in const %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ sign|raw }}</div></td>",
-        "    <td>{{ tagTrans(value|split('=')[0], value|split('=')[1]) }}</td>",
-        "  </tr>",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "query": "nwr[{{ value }}]",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\">{{ trans('tag:' ~ k) }}</option>{% endfor %}<option value=\"other\" query=\"nwr[amenity=fountain]\">{{ trans('other') }}</option>",
-            "valueName": "{{ trans('tag:' ~ value) }}"
-        }
-    }
-}
diff --git a/culture.yaml b/culture.yaml
new file mode 100644
index 0000000..5f70039
--- /dev/null
+++ b/culture.yaml
@@ -0,0 +1,134 @@
+type: overpass
+name:
+  ast: Cultura
+  ca: Cultura
+  cs: Kultura
+  de: Kultur
+  el: Πολιτισμός
+  en: Culture
+  es: Cultura
+  et: Kultuur
+  fr: Culture
+  gl: Cultura
+  hu: Kultúra
+  it: Cultura
+  ja: 文化
+  nb: Kultur
+  nl: Cultuur
+  oc: Cultura
+  pl: Kultura
+  pt: Cultura
+  pt-br: Cultura
+  ro: Cultura
+  ru: Культура
+  sr: Култура
+  tr: Kültür
+  uk: 'Культура '
+query:
+  13: |-
+    (
+    node[amenity~"^(arts_centre|cinema|community_centre|fountain|studio|theatre)$"];
+    way[amenity~"^(arts_centre|cinema|community_centre|fountain|studio|theatre)$"];
+    relation[amenity~"^(arts_centre|cinema|community_centre|fountain|studio|theatre)$"];
+    node[tourism~"^(artwork|gallery|museum|theme_park)$"];
+    way[tourism~"^(artwork|gallery|museum|theme_park)$"];
+    relation[tourism~"^(artwork|gallery|museum|theme_park)$"];
+    nwr[amenity=clock][display~"^(sundial|unorthodox)$"];
+    nwr[amenity=clock]["display:sundial"];
+    nwr[amenity=clock]["display:unorthodox"];
+    nwr[shop~"^(art)$"];
+    )
+feature:
+  pre: |-
+    {% if tags.amenity in [ 'arts_centre', 'cinema', 'community_centre', 'fountain', 'studio', 'theatre', 'clock' ] %}
+    {% set key = 'amenity' %}
+    {% set value = tags.amenity %}
+    {% elseif tags.tourism %}
+    {% set key = 'tourism' %}
+    {% set value = tags.tourism %}
+    {% elseif tags.shop %}
+    {% set key = 'shop' %}
+    {% set value = tags.shop %}
+    {% endif %}
+  description: |-
+    {% if key == 'shop' %}
+      {{ keyTrans(key) }} ({{ tagTrans(key, value) }})
+    {% elseif tags.amenity == 'clock' %}
+      {% if tags.display == 'sundial' or attribute(tags, 'display:sundial') %}{{ tagTrans('amenity', 'clock display=sundial') }}{% endif %}
+      {% if tags.display == 'unorthodox' or attribute(tags, 'display:unorthodox') %}{{ tagTrans('amenity', 'clock display=unorthodox') }}{% endif %}
+    {% else %}
+      {{ tagTrans(key, value) }}
+    {% endif %}
+
+    {% if tags.tourism == 'museum' and tags.museum %}
+    ({{ tagTrans('museum', tags.museum) }})
+    {% endif %}
+    {% if tags.amenity == 'theatre' and attribute(tags, 'theatre:genre') %}
+    ({{ tagTrans('theatre:genre', attribute(tags, 'theatre:genre')) }})
+    {% endif %}
+    {% if tags.amenity == 'community_centre' and tags.community_centre %}
+    ({{ tagTrans('community_centre', tags.community_centre) }})
+    {% endif %}
+  body: |-
+    <ul>
+    {% if tags.inscription %}
+      <li class='hasSymbol'>
+       <i class="fa fa-pencil-alt" aria-hidden="true"></i>
+       <span class='key'>{{ keyTrans('inscription') }}:</span>
+       <span class='value'>{{ localizedTag(tags, 'inscription')|nl2br }}</span>
+      </li>
+    {% elseif attribute(tags, 'inscription:url') %}
+      <li class='hasSymbol'>
+       <i class="fa fa-pencil-alt" aria-hidden="true"></i>
+       <span class='key'><a href="{{ attribute(tags, 'inscription:url') }}">{{ keyTrans('inscription') }}</a></span>
+      </li>
+    {% endif %}
+
+    {% if tags.artist_name %}
+      <li class='hasSymbol'>
+       <i class="fa fa-palette" aria-hidden="true"></i>
+       <span class='key'>{{ keyTrans('artist_name') }}:</span>
+       <span class='value'>{{ enumerate(tags.artist_name) }}</span>
+      </li>
+    {% endif %}
+
+    {% if tags.material %}
+      <li class='hasSymbol'>
+       <img data-src="maki:warehouse">
+       <span class='key'>{{ keyTrans('material') }}:</span>
+       <span class='value'>{{ tagTransList('material', tags.material) }}</span>
+      </li>
+    {% endif %}
+
+    </ul>
+  markerSign: '{{ attribute(const, key ~ "=" ~ value)|raw }}'
+const:
+  amenity=arts_centre: 🎨
+  amenity=cinema: 🎦
+  amenity=clock: <i class="fas fa-clock"></i>
+  amenity=community_centre: <i class="fas fa-users" aria-hidden="true"></i>
+  amenity=fountain: ⛲
+  amenity=studio: <i class="fas fa-microphone"></i>
+  amenity=theatre: 🎭
+  tourism=artwork: '🎨 '
+  tourism=gallery: 🖼
+  tourism=museum: '🏛 '
+  tourism=theme_park: <img data-src='maki:amusement-park'>
+  shop=art: <i class="fa fa-shopping-cart"></i>
+info: |-
+  <table>
+  {% for value, sign in const %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ sign|raw }}</div></td>
+      <td>{{ tagTrans(value|split('=')[0], value|split('=')[1]) }}</td>
+    </tr>
+  {% endfor %}
+  </table>
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    query: nwr[{{ value }}]
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}">{{ trans("tag:" ~ k) }}</option>{% endfor %}<option value="other" query="nwr[amenity=fountain]">{{ trans("other") }}</option>'
+    valueName: '{{ trans("tag:" ~ value) }}'
diff --git a/cycle_amenities.json b/cycle_amenities.json
deleted file mode 100644
index 93de193..0000000
--- a/cycle_amenities.json
+++ /dev/null
@@ -1,156 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ca": "Serveis",
-        "cs": "veřejná zařízení",
-        "de": "Einrichtungen",
-        "en": "Amenities",
-        "es": "Instalaciones",
-        "fr": "Équipements vélo",
-        "gl": "Instalacións",
-        "hu": "Kerékpáros létesítmények",
-        "it": "Infrastrutture",
-        "ja": "アメニティ",
-        "nb": "Fasiliteter",
-        "nl": "Voorzieningen",
-        "oc": "Equipaments per lei cicistas",
-        "pl": "Użyteczne w jeździe rowerem",
-        "pt": "Equipamentos",
-        "pt-br": "Equipamentos",
-        "ro": "Facilități",
-        "sr": "Додаци",
-        "tr": "Tesisler"
-    },
-    "query": {
-        "13": [
-            "(",
-            "nwr[amenity~\"^(bicycle_rental)$\"];",
-            "node[amenity~\"^(charging_station)$\"][bicycle][bicycle!=\"no\"];",
-            "nwr[shop~\"^(bicycle)$\"];",
-            "nwr[rental~\"^(.*;|)bicycle(|;.*)$\"];",
-            ")"
-        ],
-        "16": [
-            "(",
-            "nwr[amenity~\"^(bicycle_.*|compressed_air)$\"];",
-            "node[amenity~\"^(charging_station)$\"][bicycle][bicycle!=\"no\"];",
-            "nwr[shop~\"^(bicycle)$\"];",
-            "nwr[\"monitoring:bicycle\"];",
-            "nwr[vending~\"^(bicycle_tube)$\"];",
-            "nwr[rental~\"^(.*;|)bicycle(|;.*)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.shop in [ 'bicycle' ] %}",
-            "  {% set key = 'shop' %}",
-            "  {% set value = tags.shop %}",
-            "{% elseif attribute(tags, \"monitoring:bicycle\") %}",
-            "  {% set key = 'man_made' %}",
-            "  {% set value = 'monitoring_station' %}",
-            "{% elseif tags.vending in [ 'bicycle_tube' ] %}",
-            "  {% set key = 'vending' %}",
-            "  {% set value = tags.vending %}",
-            "{% elseif 'bicycle' in tags.rental|split(';') %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = 'bicycle_rental' %}",
-            "{% else %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% endif %}",
-            "",
-            "{% set constIndex = (key ~ \"=\" ~ value) %}"
-        ],
-        "title": [
-            "{{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) | default(localizedTag(tags, 'ref')) }}",
-            "",
-            "{% if tags.capacity %}({{ tags.capacity }}){% endif %}"
-        ],
-        "description": [
-            "{% if tags.amenity == 'vending_machine' %}",
-            "{{ tagTransList('amenity=vending_machine vending', value) }}",
-            "{% else %}",
-            "{{ tagTrans(key, value) }}",
-            "{% endif %}"
-        ],
-        "body": [
-            "{% if tags.capacity %}",
-            "  {{ keyTrans('capacity') }}: {{ tags.capacity }}",
-            "{% endif %}"
-        ],
-        "markerSign": "{{ const[constIndex]['sign'] }}",
-        "priority": [
-            "{% if const[constIndex] and const[constIndex]['priority']['capacity'] %}",
-            "  {% set max=const[constIndex]['priority']['default'] %}",
-            "  {% for v in const[constIndex]['priority']['capacity'] %}",
-            "    {% if tags.capacity >= v[0] %}{% set max=v[1] %}{% endif %}",
-            "  {% endfor %}",
-            "  {{ max }}",
-            "{% elseif const[constIndex] is defined %}",
-            "{{ const[constIndex]['priority'] }}",
-            "{% else %}",
-            "10",
-            "{% endif %}"
-        ]
-    },
-    "const": {
-        "shop=bicycle": {
-            "sign": "🚲",
-            "priority": 0
-        },
-        "amenity=bicycle_repair_station": {
-            "sign": "🔧",
-            "priority": 2
-        },
-        "amenity=bicycle_parking": {
-            "sign": "🅿",
-            "priority": {
-                "capacity": [
-                    [
-                        0,
-                        3
-                    ],
-                    [
-                        20,
-                        2
-                    ],
-                    [
-                        100,
-                        0
-                    ]
-                ],
-                "default": 3
-            }
-        },
-        "amenity=bicycle_rental": {
-            "sign": "R",
-            "filter_query": "(nwr[amenity=bicycle_rental];nwr[rental~\"^(.*;|)bicycle(|;.*)$\"];nwr['service:bicycle:rental']['service:bicycle:rental'!='no'];)",
-            "priority": 1
-        },
-        "man_made=monitoring_station": {
-            "sign": "#",
-            "priority": 4
-        },
-        "vending=bicycle_tube": {
-            "sign": "T",
-            "priority": 2
-        },
-        "amenity=compressed_air": {
-            "sign": "A",
-            "priority": 2
-        },
-        "amenity=charging_station": {
-            "sign": "🔌",
-            "priority": 2
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"{{ v.filter_query|default('nwr[' ~ k ~ ']') }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/cycle_amenities.yaml b/cycle_amenities.yaml
new file mode 100644
index 0000000..64b3e4c
--- /dev/null
+++ b/cycle_amenities.yaml
@@ -0,0 +1,125 @@
+type: overpass
+name:
+  ca: Serveis
+  cs: veřejná zařízení
+  de: Einrichtungen
+  en: Amenities
+  es: Instalaciones
+  fr: Équipements vélo
+  gl: Instalacións
+  hu: Kerékpáros létesítmények
+  it: Infrastrutture
+  ja: アメニティ
+  nb: Fasiliteter
+  nl: Voorzieningen
+  oc: Equipaments per lei cicistas
+  pl: Użyteczne w jeździe rowerem
+  pt: Equipamentos
+  pt-br: Equipamentos
+  ro: Facilități
+  sr: Додаци
+  tr: Tesisler
+query:
+  13: |-
+    (
+    nwr[amenity~"^(bicycle_rental)$"];
+    node[amenity~"^(charging_station)$"][bicycle][bicycle!="no"];
+    nwr[shop~"^(bicycle)$"];
+    nwr[rental~"^(.*;|)bicycle(|;.*)$"];
+    )
+  16: |-
+    (
+    nwr[amenity~"^(bicycle_.*|compressed_air)$"];
+    node[amenity~"^(charging_station)$"][bicycle][bicycle!="no"];
+    nwr[shop~"^(bicycle)$"];
+    nwr["monitoring:bicycle"];
+    nwr[vending~"^(bicycle_tube)$"];
+    nwr[rental~"^(.*;|)bicycle(|;.*)$"];
+    )
+feature:
+  pre: |-
+    {% if tags.shop in [ 'bicycle' ] %}
+      {% set key = 'shop' %}
+      {% set value = tags.shop %}
+    {% elseif attribute(tags, "monitoring:bicycle") %}
+      {% set key = 'man_made' %}
+      {% set value = 'monitoring_station' %}
+    {% elseif tags.vending in [ 'bicycle_tube' ] %}
+      {% set key = 'vending' %}
+      {% set value = tags.vending %}
+    {% elseif 'bicycle' in tags.rental|split(';') %}
+      {% set key = 'amenity' %}
+      {% set value = 'bicycle_rental' %}
+    {% else %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% endif %}
+
+    {% set constIndex = (key ~ "=" ~ value) %}
+  title: |-
+    {{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) | default(localizedTag(tags, 'ref')) }}
+
+    {% if tags.capacity %}({{ tags.capacity }}){% endif %}
+  description: |-
+    {% if tags.amenity == 'vending_machine' %}
+    {{ tagTransList('amenity=vending_machine vending', value) }}
+    {% else %}
+    {{ tagTrans(key, value) }}
+    {% endif %}
+  body: |-
+    {% if tags.capacity %}
+      {{ keyTrans('capacity') }}: {{ tags.capacity }}
+    {% endif %}
+  markerSign: '{{ const[constIndex]["sign"] }}'
+  priority: |-
+    {% if const[constIndex] and const[constIndex]['priority']['capacity'] %}
+      {% set max=const[constIndex]['priority']['default'] %}
+      {% for v in const[constIndex]['priority']['capacity'] %}
+        {% if tags.capacity >= v[0] %}{% set max=v[1] %}{% endif %}
+      {% endfor %}
+      {{ max }}
+    {% elseif const[constIndex] is defined %}
+    {{ const[constIndex]['priority'] }}
+    {% else %}
+    10
+    {% endif %}
+const:
+  shop=bicycle:
+    sign: 🚲
+    priority: 0
+  amenity=bicycle_repair_station:
+    sign: 🔧
+    priority: 2
+  amenity=bicycle_parking:
+    sign: 🅿
+    priority:
+      capacity:
+        - - 0
+          - 3
+        - - 20
+          - 2
+        - - 100
+          - 0
+      default: 3
+  amenity=bicycle_rental:
+    sign: R
+    filter_query: (nwr[amenity=bicycle_rental];nwr[rental~"^(.*;|)bicycle(|;.*)$"];nwr['service:bicycle:rental']['service:bicycle:rental'!='no'];)
+    priority: 1
+  man_made=monitoring_station:
+    sign: '#'
+    priority: 4
+  vending=bicycle_tube:
+    sign: T
+    priority: 2
+  amenity=compressed_air:
+    sign: A
+    priority: 2
+  amenity=charging_station:
+    sign: 🔌
+    priority: 2
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}" query="{{ v.filter_query|default("nwr[" ~ k ~ "]") }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/education.json b/education.json
deleted file mode 100644
index 450d1f5..0000000
--- a/education.json
+++ /dev/null
@@ -1,149 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Servicios educativos",
-        "ca": "Serveis Educatius",
-        "cs": "Vzdělávací služby",
-        "de": "Bildungseinrichtungen",
-        "el": "Υπηρεσίες Εκπαίδευσης",
-        "en": "Educational Services",
-        "es": "Servicios educativos",
-        "et": "Haridusteenused",
-        "fr": "Éducation",
-        "gl": "Servizos educativos",
-        "hu": "Oktatás",
-        "it": "Servizi d'istruzione",
-        "ja": "教育サービス",
-        "nb": "Utdanningstjenester",
-        "nl": "Onderwijs",
-        "oc": "Education",
-        "pl": "Usługi edukacyjne",
-        "pt": "Educação",
-        "pt-br": "Educação",
-        "ro": "Servicii educatie",
-        "ru": "Образование",
-        "sr": "Образовне услуге",
-        "tr": "Eğitim Servisleri",
-        "uk": "Освіта"
-    },
-    "query": {
-        "11": [
-            "(",
-            "node[amenity~'^(college|university|library)$'];",
-            "way[amenity~'^(college|university|library)$'];",
-            "relation[amenity~'^(college|university|library)$'];",
-            ")"
-        ],
-        "14": [
-            "(",
-            "nwr[amenity~'^(college|university|library|school|kindergarten|language_school|childcare)$'];",
-            "nwr[office~\"^(educational_institution|research)$\"];",
-            ")"
-        ],
-        "16": [
-            "(",
-            "nwr[amenity~'^(college|university|library|school|kindergarten|language_school|public_bookcase|childcare)$'];",
-            "nwr[office~\"^(educational_institution|research)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.office == 'educational_institution' or tags.office == 'research' %}",
-            "  {% set key = 'office' %}",
-            "  {% set value = tags.office %}",
-            "{% else %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% endif %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}",
-        "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
-        "markerSign": [
-            "{% set data = const[key ~ '=' ~ value] %}",
-            "{% if data %}",
-            "{{ data.sign|raw }}",
-            "{% endif %}"
-        ],
-        "priority": [
-            "{% set data = const[key ~ '=' ~ value] %}",
-            "{% if data %}",
-            "{{ data.priority }}",
-            "{% endif %}"
-        ]
-    },
-    "info": [
-        "<table>",
-        "{% for kv, data in const %}",
-        "{% if data.zoom <= map.zoom %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>",
-        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
-        "    </td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "amenity=university": {
-            "priority": 0,
-            "sign": "🎓",
-            "zoom": 11
-        },
-        "amenity=college": {
-            "priority": 1,
-            "sign": "🎓",
-            "zoom": 11
-        },
-        "amenity=library": {
-            "priority": 2,
-            "sign": "🕮",
-            "zoom": 11
-        },
-        "amenity=school": {
-            "priority": 3,
-            "sign": "🏫",
-            "zoom": 14
-        },
-        "amenity=language_school": {
-            "priority": 3,
-            "sign": "🏫",
-            "zoom": 14
-        },
-        "amenity=kindergarten": {
-            "priority": 4,
-            "sign": "⛹",
-            "zoom": 14
-        },
-        "amenity=childcare": {
-            "priority": 4,
-            "sign": "⛹",
-            "zoom": 14
-        },
-        "amenity=public_bookcase": {
-            "priority": 5,
-            "sign": "📚",
-            "zoom": 16
-        },
-        "office=educational_institution": {
-            "priority": 3,
-            "sign": "🏢",
-            "zoom": 14
-        },
-        "office=research": {
-            "priority": 3,
-            "sign": "<i class='fas fa-vials'></i>",
-            "zoom": 14
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/education.yaml b/education.yaml
new file mode 100644
index 0000000..16d9aad
--- /dev/null
+++ b/education.yaml
@@ -0,0 +1,124 @@
+type: overpass
+name:
+  ast: Servicios educativos
+  ca: Serveis Educatius
+  cs: Vzdělávací služby
+  de: Bildungseinrichtungen
+  el: Υπηρεσίες Εκπαίδευσης
+  en: Educational Services
+  es: Servicios educativos
+  et: Haridusteenused
+  fr: Éducation
+  gl: Servizos educativos
+  hu: Oktatás
+  it: Servizi d'istruzione
+  ja: 教育サービス
+  nb: Utdanningstjenester
+  nl: Onderwijs
+  oc: Education
+  pl: Usługi edukacyjne
+  pt: Educação
+  pt-br: Educação
+  ro: Servicii educatie
+  ru: Образование
+  sr: Образовне услуге
+  tr: Eğitim Servisleri
+  uk: Освіта
+query:
+  11: |-
+    (
+    node[amenity~'^(college|university|library)$'];
+    way[amenity~'^(college|university|library)$'];
+    relation[amenity~'^(college|university|library)$'];
+    )
+  14: |-
+    (
+    nwr[amenity~'^(college|university|library|school|kindergarten|language_school|childcare)$'];
+    nwr[office~"^(educational_institution|research)$"];
+    )
+  16: |-
+    (
+    nwr[amenity~'^(college|university|library|school|kindergarten|language_school|public_bookcase|childcare)$'];
+    nwr[office~"^(educational_institution|research)$"];
+    )
+feature:
+  pre: |-
+    {% if tags.office == 'educational_institution' or tags.office == 'research' %}
+      {% set key = 'office' %}
+      {% set value = tags.office %}
+    {% else %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% endif %}
+  description: '{{ tagTrans(key, value) }}'
+  body: '{% if tags.operator %}{{ keyTrans("operator") }}: {{ tags.operator }}<br/>{% endif %}'
+  markerSign: |-
+    {% set data = const[key ~ '=' ~ value] %}
+    {% if data %}
+    {{ data.sign|raw }}
+    {% endif %}
+  priority: |-
+    {% set data = const[key ~ '=' ~ value] %}
+    {% if data %}
+    {{ data.priority }}
+    {% endif %}
+info: |-
+  <table>
+  {% for kv, data in const %}
+  {% if data.zoom <= map.zoom %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>
+        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}
+      </td>
+    </tr>
+  {% endif %}
+  {% endfor %}
+  </table>
+const:
+  amenity=university:
+    priority: 0
+    sign: 🎓
+    zoom: 11
+  amenity=college:
+    priority: 1
+    sign: 🎓
+    zoom: 11
+  amenity=library:
+    priority: 2
+    sign: 🕮
+    zoom: 11
+  amenity=school:
+    priority: 3
+    sign: 🏫
+    zoom: 14
+  amenity=language_school:
+    priority: 3
+    sign: 🏫
+    zoom: 14
+  amenity=kindergarten:
+    priority: 4
+    sign: ⛹
+    zoom: 14
+  amenity=childcare:
+    priority: 4
+    sign: ⛹
+    zoom: 14
+  amenity=public_bookcase:
+    priority: 5
+    sign: 📚
+    zoom: 16
+  office=educational_institution:
+    priority: 3
+    sign: 🏢
+    zoom: 14
+  office=research:
+    priority: 3
+    sign: <i class='fas fa-vials'></i>
+    zoom: 14
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}" query="nwr[{{ k }}]" minzoom="{{ v.zoom }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/emergency.json b/emergency.json
deleted file mode 100644
index 87fc87d..0000000
--- a/emergency.json
+++ /dev/null
@@ -1,150 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Servicios d'emerxencia",
-        "ca": "Serveis d'emergència",
-        "cs": "Pohotovostní služby",
-        "de": "Notfalldienste",
-        "el": "Υπηρεσίες Έκτακτης Ανάγκης",
-        "en": "Emergency Services",
-        "es": "Servicios de emergencia",
-        "et": "Hädaabi teenused",
-        "fr": "Services d'urgence",
-        "gl": "Servizos de emerxencia",
-        "hu": "Vészhelyzet",
-        "it": "Servizi d'emergenza",
-        "ja": "緊急サービス",
-        "nb": "Nødtjenester",
-        "nl": "Hulpdiensten",
-        "oc": "Servicis d'urgéncia",
-        "pl": "Służby ratunkowe",
-        "pt": "Emergência",
-        "pt-br": "Emergência",
-        "ro": "Servicii urgenta",
-        "ru": "Экстренные службы",
-        "sr": "Хитне службе",
-        "tr": "Acil Servisler",
-        "uk": "Швидка допомога"
-    },
-    "query": {
-        "11": [
-            "(",
-            "nwr[amenity~\"^(fire_station|hospital)$\"];",
-            "nwr[emergency~\"^(lifeguard)$\"];",
-            ")"
-        ],
-        "13": [
-            "(",
-            "nwr[amenity~\"^(fire_station|hospital|police)$\"];",
-            "nwr[emergency~\"^(lifeguard)$\"];",
-            "node[emergency~\"^(phone|defibrillator|access_point)$\"];",
-            "node[highway=emergency_access_point];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity in [ 'fire_station', 'hospital', 'police' ] %}",
-            "{% set key = 'amenity' %}",
-            "{% set value = tags.amenity %}",
-            "{% elseif tags.emergency %}",
-            "{% set key = 'emergency' %}",
-            "{% set value = tags.emergency %}",
-            "{% elseif tags.highway == 'emergency_access_point' %}",
-            "{% set key = 'highway' %}",
-            "{% set value = tags.highway %}",
-            "{% endif %}",
-            "{% set kv = key ~ \"=\" ~ value %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}",
-        "markerSign": [
-            "{% set data = const[kv] %}",
-            "{% if data %}",
-            "{{ data.sign|raw }}",
-            "{% endif %}"
-        ],
-        "markerSymbol": "{{ markerPointer({ fillColor: data.background|default('#f27f6a') })|raw }}",
-        "listMarkerSymbol": "{{ markerCircle({ fillColor: data.background|default('#f27f6a') })|raw }}"
-    },
-    "info": [
-        "<table>",
-        "{% for value, data in const %}",
-        "{% if data.zoom <= map.zoom %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({ fillColor: data.background|default('#f27f6a') })|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans(value|split('=')[0], value|split('=')[1]) }}</td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "amenity=fire_station": {
-            "zoom": "11",
-            "sign": "🔥"
-        },
-        "amenity=hospital": {
-            "zoom": "11",
-            "sign": "🏥"
-        },
-        "amenity=police": {
-            "zoom": "13",
-            "sign": "👮"
-        },
-        "emergency=lifeguard": {
-            "zoom": "11",
-            "sign": "<i class='far fa-life-ring'></i>"
-        },
-        "emergency=phone": {
-            "zoom": "13",
-            "sign": "📞"
-        },
-        "emergency=defibrillator": {
-            "zoom": "13",
-            "sign": "<img data-src='maki:defibrillator?fill=white'>",
-            "background": "#009262"
-        },
-        "highway=emergency_access_point": {
-            "zoom": "13",
-            "sign": "<img data-src='maki:hospital?fill=white'>",
-            "background": "#009262"
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "type": "select",
-            "show_default": "true",
-            "values": {
-                "fire_station": {
-                    "name": "{{ tagTrans('amenity', 'fire_station') }}",
-                    "query": "nwr[amenity=fire_station]"
-                },
-                "hospital": {
-                    "name": "{{ tagTrans('amenity', 'hospital') }}",
-                    "query": "nwr[amenity=hospital]"
-                },
-                "police": {
-                    "name": "{{ tagTrans('amenity', 'police') }}",
-                    "query": "nwr[amenity=police]"
-                },
-                "lifeguard": {
-                    "name": "{{ tagTrans('emergency', 'lifeguard') }}",
-                    "query": "nwr[emergency=lifeguard]"
-                },
-                "emergency_phone": {
-                    "name": "{{ tagTrans('emergency', 'phone') }}",
-                    "query": "node[emergency=phone]"
-                },
-                "defibrillator": {
-                    "name": "{{ tagTrans('emergency', 'defibrillator') }}",
-                    "query": "node[emergency=defibrillator]"
-                },
-                "emergency_access_point": {
-                    "name": "{{ tagTrans('highway', 'emergency_access_point') }}",
-                    "query": "(node[highway=emergency_access_point];node[emergency=access_point];)"
-                }
-            }
-        }
-    }
-}
diff --git a/emergency.yaml b/emergency.yaml
new file mode 100644
index 0000000..4624fb3
--- /dev/null
+++ b/emergency.yaml
@@ -0,0 +1,122 @@
+type: overpass
+name:
+  ast: Servicios d'emerxencia
+  ca: Serveis d'emergència
+  cs: Pohotovostní služby
+  de: Notfalldienste
+  el: Υπηρεσίες Έκτακτης Ανάγκης
+  en: Emergency Services
+  es: Servicios de emergencia
+  et: Hädaabi teenused
+  fr: Services d'urgence
+  gl: Servizos de emerxencia
+  hu: Vészhelyzet
+  it: Servizi d'emergenza
+  ja: 緊急サービス
+  nb: Nødtjenester
+  nl: Hulpdiensten
+  oc: Servicis d'urgéncia
+  pl: Służby ratunkowe
+  pt: Emergência
+  pt-br: Emergência
+  ro: Servicii urgenta
+  ru: Экстренные службы
+  sr: Хитне службе
+  tr: Acil Servisler
+  uk: Швидка допомога
+query:
+  11: |-
+    (
+    nwr[amenity~"^(fire_station|hospital)$"];
+    nwr[emergency~"^(lifeguard)$"];
+    )
+  13: |-
+    (
+    nwr[amenity~"^(fire_station|hospital|police)$"];
+    nwr[emergency~"^(lifeguard)$"];
+    node[emergency~"^(phone|defibrillator|access_point)$"];
+    node[highway=emergency_access_point];
+    )
+feature:
+  pre: |-
+    {% if tags.amenity in [ 'fire_station', 'hospital', 'police' ] %}
+    {% set key = 'amenity' %}
+    {% set value = tags.amenity %}
+    {% elseif tags.emergency %}
+    {% set key = 'emergency' %}
+    {% set value = tags.emergency %}
+    {% elseif tags.highway == 'emergency_access_point' %}
+    {% set key = 'highway' %}
+    {% set value = tags.highway %}
+    {% endif %}
+    {% set kv = key ~ "=" ~ value %}
+  description: '{{ tagTrans(key, value) }}'
+  markerSign: |-
+    {% set data = const[kv] %}
+    {% if data %}
+    {{ data.sign|raw }}
+    {% endif %}
+  markerSymbol: '{{ markerPointer({ fillColor: data.background|default("#f27f6a") })|raw }}'
+  listMarkerSymbol: '{{ markerCircle({ fillColor: data.background|default("#f27f6a") })|raw }}'
+info: |-
+  <table>
+  {% for value, data in const %}
+  {% if data.zoom <= map.zoom %}
+    <tr>
+      <td>{{ markerCircle({ fillColor: data.background|default('#f27f6a') })|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>{{ tagTrans(value|split('=')[0], value|split('=')[1]) }}</td>
+    </tr>
+  {% endif %}
+  {% endfor %}
+  </table>
+const:
+  amenity=fire_station:
+    zoom: '11'
+    sign: 🔥
+  amenity=hospital:
+    zoom: '11'
+    sign: 🏥
+  amenity=police:
+    zoom: '13'
+    sign: 👮
+  emergency=lifeguard:
+    zoom: '11'
+    sign: <i class='far fa-life-ring'></i>
+  emergency=phone:
+    zoom: '13'
+    sign: 📞
+  emergency=defibrillator:
+    zoom: '13'
+    sign: <img data-src='maki:defibrillator?fill=white'>
+    background: '#009262'
+  highway=emergency_access_point:
+    zoom: '13'
+    sign: <img data-src='maki:hospital?fill=white'>
+    background: '#009262'
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    type: select
+    show_default: 'true'
+    values:
+      fire_station:
+        name: '{{ tagTrans("amenity", "fire_station") }}'
+        query: nwr[amenity=fire_station]
+      hospital:
+        name: '{{ tagTrans("amenity", "hospital") }}'
+        query: nwr[amenity=hospital]
+      police:
+        name: '{{ tagTrans("amenity", "police") }}'
+        query: nwr[amenity=police]
+      lifeguard:
+        name: '{{ tagTrans("emergency", "lifeguard") }}'
+        query: nwr[emergency=lifeguard]
+      emergency_phone:
+        name: '{{ tagTrans("emergency", "phone") }}'
+        query: node[emergency=phone]
+      defibrillator:
+        name: '{{ tagTrans("emergency", "defibrillator") }}'
+        query: node[emergency=defibrillator]
+      emergency_access_point:
+        name: '{{ tagTrans("highway", "emergency_access_point") }}'
+        query: (node[highway=emergency_access_point];node[emergency=access_point];)
diff --git a/financial.json b/financial.json
deleted file mode 100644
index a53bcfb..0000000
--- a/financial.json
+++ /dev/null
@@ -1,120 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Dineru",
-        "ca": "Financer",
-        "cs": "Finanční služby",
-        "de": "Finanzen",
-        "el": "Χρήμα",
-        "en": "Financial",
-        "es": "Financiera",
-        "fr": "Finance",
-        "gl": "Finanzas",
-        "hu": "Pénzügyek",
-        "it": "Finanziario",
-        "ja": "金融",
-        "nb": "Finansiell",
-        "nl": "Financieel",
-        "oc": "Finança",
-        "pl": "Finansowe",
-        "pt": "Finanças",
-        "pt-br": "Finanças e seguros",
-        "ro": "Financiar",
-        "ru": "Финансы",
-        "sr": "Финансије",
-        "tr": "Finansal",
-        "uk": "Фінанси"
-    },
-    "query": {
-        "14": [
-            "(",
-            "node[amenity~\"^(bank)$\"];",
-            "way[amenity~\"^(bank)$\"];",
-            "relation[amenity~\"^(bank)$\"];",
-            ")"
-        ],
-        "15": [
-            "(",
-            "node[amenity~\"^(bank|bureau_de_change|atm)$\"];",
-            "way[amenity~\"^(bank|bureau_de_change|atm)$\"];",
-            "relation[amenity~\"^(bank|bureau_de_change|atm)$\"];",
-            "node[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
-            "way[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
-            "relation[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% else %}",
-            "  {% set key = 'office' %}",
-            "  {% set value = tags.office %}",
-            "{% endif %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}",
-        "markerSign": "{{ const[key ~ '=' ~ value].sign|raw }}"
-    },
-    "info": [
-        "<table>",
-        "{% for kv, data in const %}",
-        "{% if data.zoom <= map.zoom %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>",
-        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
-        "    </td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "amenity=atm": {
-            "sign": "<img data-src='maki:bank?size=11'>",
-            "zoom": 15
-        },
-        "amenity=bank": {
-            "sign": "<img data-src='maki:building'>",
-            "zoom": 14
-        },
-        "amenity=bureau_de_change": {
-            "sign": "⇄",
-            "zoom": 15
-        },
-        "office=financial": {
-            "sign": "<i class=\"fas fa-coins\"></i>",
-            "zoom": 15
-        },
-        "office=accountant": {
-            "sign": "<i class=\"fas fa-book\"></i>",
-            "zoom": 15
-        },
-        "office=insurance": {
-            "sign": "<i class=\"fas fa-file-signature\"></i>",
-            "zoom": 15
-        },
-        "office=tax": {
-            "sign": "%",
-            "zoom": 15
-        },
-        "office=tax_advisor": {
-            "sign": "<span style='color: green'>%</span>",
-            "zoom": 15
-        },
-        "office=cooperative": {
-            "sign": "<i class=\"fas fa-piggy-bank\"></i>",
-            "zoom": 15
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/financial.yaml b/financial.yaml
new file mode 100644
index 0000000..57a354c
--- /dev/null
+++ b/financial.yaml
@@ -0,0 +1,99 @@
+type: overpass
+name:
+  ast: Dineru
+  ca: Financer
+  cs: Finanční služby
+  de: Finanzen
+  el: Χρήμα
+  en: Financial
+  es: Financiera
+  fr: Finance
+  gl: Finanzas
+  hu: Pénzügyek
+  it: Finanziario
+  ja: 金融
+  nb: Finansiell
+  nl: Financieel
+  oc: Finança
+  pl: Finansowe
+  pt: Finanças
+  pt-br: Finanças e seguros
+  ro: Financiar
+  ru: Финансы
+  sr: Финансије
+  tr: Finansal
+  uk: Фінанси
+query:
+  14: |-
+    (
+    node[amenity~"^(bank)$"];
+    way[amenity~"^(bank)$"];
+    relation[amenity~"^(bank)$"];
+    )
+  15: |-
+    (
+    node[amenity~"^(bank|bureau_de_change|atm)$"];
+    way[amenity~"^(bank|bureau_de_change|atm)$"];
+    relation[amenity~"^(bank|bureau_de_change|atm)$"];
+    node[office~"^(financial|accountant|insurance|tax|tax_advisor)$"];
+    way[office~"^(financial|accountant|insurance|tax|tax_advisor)$"];
+    relation[office~"^(financial|accountant|insurance|tax|tax_advisor)$"];
+    )
+feature:
+  pre: |-
+    {% if tags.amenity %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% else %}
+      {% set key = 'office' %}
+      {% set value = tags.office %}
+    {% endif %}
+  description: '{{ tagTrans(key, value) }}'
+  markerSign: '{{ const[key ~ "=" ~ value].sign|raw }}'
+info: |-
+  <table>
+  {% for kv, data in const %}
+  {% if data.zoom <= map.zoom %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>
+        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}
+      </td>
+    </tr>
+  {% endif %}
+  {% endfor %}
+  </table>
+const:
+  amenity=atm:
+    sign: <img data-src='maki:bank?size=11'>
+    zoom: 15
+  amenity=bank:
+    sign: <img data-src='maki:building'>
+    zoom: 14
+  amenity=bureau_de_change:
+    sign: ⇄
+    zoom: 15
+  office=financial:
+    sign: <i class="fas fa-coins"></i>
+    zoom: 15
+  office=accountant:
+    sign: <i class="fas fa-book"></i>
+    zoom: 15
+  office=insurance:
+    sign: <i class="fas fa-file-signature"></i>
+    zoom: 15
+  office=tax:
+    sign: '%'
+    zoom: 15
+  office=tax_advisor:
+    sign: '<span style="color: green">%</span>'
+    zoom: 15
+  office=cooperative:
+    sign: <i class="fas fa-piggy-bank"></i>
+    zoom: 15
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}" query="nwr[{{ k }}]" minzoom="{{ v.zoom }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/health.json b/health.json
deleted file mode 100644
index 8f2f6fd..0000000
--- a/health.json
+++ /dev/null
@@ -1,254 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Salú",
-        "ca": "Sanitat",
-        "cs": "Zdravotnictví",
-        "de": "Gesundheitsdienste",
-        "el": "Υγεία",
-        "en": "Health",
-        "es": "Salud",
-        "fr": "Santé",
-        "gl": "Saúde",
-        "hu": "Egészségügy",
-        "it": "Salute",
-        "ja": "健康",
-        "nb": "Helse",
-        "nl": "Gezondheid",
-        "oc": "Santat",
-        "pl": "Zdrowie",
-        "pt": "Saúde",
-        "pt-br": "Saúde e assistência",
-        "ro": "Sanatate",
-        "ru": "Медицина",
-        "sr": "Здравље",
-        "tr": "Sağlık",
-        "uk": "Здоров'я"
-    },
-    "query": {
-        "11": [
-            "(",
-            "node[amenity~\"^(hospital)$\"];",
-            "way[amenity~\"^(hospital)$\"];",
-            "relation[amenity~\"^(hospital)$\"];",
-            "node[healthcare~\"^(hospital|clinic)$\"];",
-            "way[healthcare~\"^(hospital|clinic)$\"];",
-            "relation[healthcare~\"^(hospital|clinic)$\"];",
-            ")"
-        ],
-        "14": [
-            "(",
-            "node[amenity~\"^(baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary)$\"];",
-            "way[amenity~\"^(baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary)$\"];",
-            "relation[amenity~\"^(baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary)$\"];",
-            "node[healthcare];",
-            "way[healthcare];",
-            "relation[healthcare];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.healthcare %}",
-            "  {% set key = 'healthcare' %}",
-            "  {% set value = tags.healthcare|split(';')[0] %}",
-            "{% else %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% endif %}",
-            "{% set kv = key ~ '=' ~ value %}",
-            "{% set found = { sign: '' } %}",
-            "{% for data in const %}",
-            "  {% if kv in data.types %}{% set found = data %}{% endif %}",
-            "{% endfor %}"
-        ],
-        "description": [
-            "{{ tagTransList(key, attribute(tags, key)) }}",
-            "{% if attribute(tags, 'healthcare:speciality') %}",
-            "-",
-            "{{ tagTransList('healthcare:speciality', attribute(tags, 'healthcare:speciality')) }}",
-            "{% endif %}"
-        ],
-        "markerSign": "{{ found.sign|raw }}"
-    },
-    "info": [
-        "<table>",
-        "{% for data in const %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans(data.types[0]|split('=')[0], data.types[0]|split('=')[1]) }}</td>",
-        "  </tr>",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": [
-        {
-            "types": [
-                "amenity=hospital",
-                "healthcare=hospital"
-            ],
-            "sign": "<i class=\"fas fa-hospital-alt\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=clinic"
-            ],
-            "sign": "<i class=\"fas fa-hospital\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=centre"
-            ],
-            "sign": "<i class=\"far fa-hospital\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=doctor",
-                "amenity=doctors"
-            ],
-            "sign": "<img data-src='maki:doctor'>"
-        },
-        {
-            "types": [
-                "amenity=pharmacy",
-                "healthcare=pharmacy"
-            ],
-            "sign": "<img data-src='maki:pharmacy'>"
-        },
-        {
-            "types": [
-                "healthcare=dentist",
-                "amenity=dentist"
-            ],
-            "sign": "<img data-src='maki:dentist'>"
-        },
-        {
-            "types": [
-                "amenity=baby_hatch"
-            ],
-            "sign": "🚼"
-        },
-        {
-            "types": [
-                "healthcare=blood_bank"
-            ],
-            "sign": "<img data-src='maki:blood-bank'>"
-        },
-        {
-            "types": [
-                "healthcare=blood_donation"
-            ],
-            "sign": "<img data-src='maki:blood-bank'>"
-        },
-        {
-            "types": [
-                "amenity=nursing_home"
-            ]
-        },
-        {
-            "types": [
-                "amenity=social_facility"
-            ],
-            "sign": "<i class=\"fas fa-users\"></i>"
-        },
-        {
-            "types": [
-                "amenity=veterinary"
-            ],
-            "sign": "<img data-src='maki:veterinary'>"
-        },
-        {
-            "types": [
-                "healthcare=physiotherapist"
-            ],
-            "sign": "<i class=\"fas fa-user-injured\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=psychotherapist"
-            ],
-            "sign": "<i class=\"fas fa-couch\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=alternative"
-            ],
-            "sign": ""
-        },
-        {
-            "types": [
-                "healthcare=audiologist"
-            ],
-            "sign": "<i class=\"fas fa-headphones-alt\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=birthing_centre",
-                "healthcare=birthing_center"
-            ],
-            "sign": "<i class=\"fas fa-baby\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=dialysis"
-            ],
-            "sign": ""
-        },
-        {
-            "types": [
-                "healthcare=laboratory"
-            ],
-            "sign": "<i class=\"fas fa-vials\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=midwife"
-            ],
-            "sign": ""
-        },
-        {
-            "types": [
-                "healthcare=nutrition_counseling"
-            ],
-            "sign": "<i class=\"fas fa-carrot\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=occupational_therapist"
-            ],
-            "sign": ""
-        },
-        {
-            "types": [
-                "healthcare=optometrist"
-            ],
-            "sign": "<i class=\"fas fa-eye\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=podiatrist"
-            ],
-            "sign": ""
-        },
-        {
-            "types": [
-                "healthcare=rehabilitation"
-            ],
-            "sign": "<i class=\"fas fa-crutch\"></i>"
-        },
-        {
-            "types": [
-                "healthcare=speech_therapist"
-            ],
-            "sign": ""
-        }
-    ],
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for data in const %}<option value=\"{{ data.types[0] }}\" query=\"({% for t in data.types %}nwr[{{ t }}];{% endfor %})\" minzoom=\"{{ data.zoom }}\">{{ tagTrans(data.types[0]) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/health.yaml b/health.yaml
new file mode 100644
index 0000000..3cdeebc
--- /dev/null
+++ b/health.yaml
@@ -0,0 +1,163 @@
+type: overpass
+name:
+  ast: Salú
+  ca: Sanitat
+  cs: Zdravotnictví
+  de: Gesundheitsdienste
+  el: Υγεία
+  en: Health
+  es: Salud
+  fr: Santé
+  gl: Saúde
+  hu: Egészségügy
+  it: Salute
+  ja: 健康
+  nb: Helse
+  nl: Gezondheid
+  oc: Santat
+  pl: Zdrowie
+  pt: Saúde
+  pt-br: Saúde e assistência
+  ro: Sanatate
+  ru: Медицина
+  sr: Здравље
+  tr: Sağlık
+  uk: Здоров'я
+query:
+  11: |-
+    (
+    node[amenity~"^(hospital)$"];
+    way[amenity~"^(hospital)$"];
+    relation[amenity~"^(hospital)$"];
+    node[healthcare~"^(hospital|clinic)$"];
+    way[healthcare~"^(hospital|clinic)$"];
+    relation[healthcare~"^(hospital|clinic)$"];
+    )
+  14: |-
+    (
+    node[amenity~"^(baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary)$"];
+    way[amenity~"^(baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary)$"];
+    relation[amenity~"^(baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary)$"];
+    node[healthcare];
+    way[healthcare];
+    relation[healthcare];
+    )
+feature:
+  pre: |-
+    {% if tags.healthcare %}
+      {% set key = 'healthcare' %}
+      {% set value = tags.healthcare|split(';')[0] %}
+    {% else %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% endif %}
+    {% set kv = key ~ '=' ~ value %}
+    {% set found = { sign: '' } %}
+    {% for data in const %}
+      {% if kv in data.types %}{% set found = data %}{% endif %}
+    {% endfor %}
+  description: |-
+    {{ tagTransList(key, attribute(tags, key)) }}
+    {% if attribute(tags, 'healthcare:speciality') %}
+    -
+    {{ tagTransList('healthcare:speciality', attribute(tags, 'healthcare:speciality')) }}
+    {% endif %}
+  markerSign: '{{ found.sign|raw }}'
+info: |-
+  <table>
+  {% for data in const %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>{{ tagTrans(data.types[0]|split('=')[0], data.types[0]|split('=')[1]) }}</td>
+    </tr>
+  {% endfor %}
+  </table>
+const:
+  - types:
+      - amenity=hospital
+      - healthcare=hospital
+    sign: <i class="fas fa-hospital-alt"></i>
+  - types:
+      - healthcare=clinic
+    sign: <i class="fas fa-hospital"></i>
+  - types:
+      - healthcare=centre
+    sign: <i class="far fa-hospital"></i>
+  - types:
+      - healthcare=doctor
+      - amenity=doctors
+    sign: <img data-src='maki:doctor'>
+  - types:
+      - amenity=pharmacy
+      - healthcare=pharmacy
+    sign: <img data-src='maki:pharmacy'>
+  - types:
+      - healthcare=dentist
+      - amenity=dentist
+    sign: <img data-src='maki:dentist'>
+  - types:
+      - amenity=baby_hatch
+    sign: 🚼
+  - types:
+      - healthcare=blood_bank
+    sign: <img data-src='maki:blood-bank'>
+  - types:
+      - healthcare=blood_donation
+    sign: <img data-src='maki:blood-bank'>
+  - types:
+      - amenity=nursing_home
+  - types:
+      - amenity=social_facility
+    sign: <i class="fas fa-users"></i>
+  - types:
+      - amenity=veterinary
+    sign: <img data-src='maki:veterinary'>
+  - types:
+      - healthcare=physiotherapist
+    sign: <i class="fas fa-user-injured"></i>
+  - types:
+      - healthcare=psychotherapist
+    sign: <i class="fas fa-couch"></i>
+  - types:
+      - healthcare=alternative
+    sign: ''
+  - types:
+      - healthcare=audiologist
+    sign: <i class="fas fa-headphones-alt"></i>
+  - types:
+      - healthcare=birthing_centre
+      - healthcare=birthing_center
+    sign: <i class="fas fa-baby"></i>
+  - types:
+      - healthcare=dialysis
+    sign: ''
+  - types:
+      - healthcare=laboratory
+    sign: <i class="fas fa-vials"></i>
+  - types:
+      - healthcare=midwife
+    sign: ''
+  - types:
+      - healthcare=nutrition_counseling
+    sign: <i class="fas fa-carrot"></i>
+  - types:
+      - healthcare=occupational_therapist
+    sign: ''
+  - types:
+      - healthcare=optometrist
+    sign: <i class="fas fa-eye"></i>
+  - types:
+      - healthcare=podiatrist
+    sign: ''
+  - types:
+      - healthcare=rehabilitation
+    sign: <i class="fas fa-crutch"></i>
+  - types:
+      - healthcare=speech_therapist
+    sign: ''
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for data in const %}<option value="{{ data.types[0] }}" query="({% for t in data.types %}nwr[{{ t }}];{% endfor %})" minzoom="{{ data.zoom }}">{{ tagTrans(data.types[0]) }}</option>{% endfor %}'
diff --git a/heritage.json b/heritage.json
deleted file mode 100644
index a0bdbe1..0000000
--- a/heritage.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-    "type": "overpass",
-    "query": {
-        "8": "nwr[heritage~\"^(|.*;)1(|;.*)$\"];",
-        "11": "nwr[heritage~\"^(|.*;)(1|2)(|;.*)$\"];",
-        "13": "nwr[heritage];"
-    },
-    "feature": {
-        "description": [
-            "{% set found = false %}",
-            "{% for k in ['amenity', 'shop', 'telecom', 'waterway', 'craft', 'highway', 'railway', 'aerialway', 'emergency', 'geological', 'man_made', 'natural', 'office', 'power', 'aeroway', 'tourism', 'leisure', 'military', 'landuse', 'barrier', 'route'] if not found %}",
-            "  {% if attribute(tags, k) and attribute(tags, k) != 'yes' %}",
-            "    {{ tagTransList(k, attribute(tags, k)) }}",
-            "    {% set found = true %}",
-            "  {% endif %}",
-            "{% endfor %}",
-            "{% if found %}{# nothing #}",
-            "{% elseif tags.building and tags.building != 'yes' %}",
-            "{{ tagTransList('building', tags.building) }}",
-            "{% elseif tags.historic and tags.historic not in ['heritage', 'yes', 'building'] %}",
-            "{{ tagTransList('historic', tags.historic) }}",
-            "{% elseif tags.building == 'yes' or tags.historic == 'building' %}",
-            "{{ keyTrans('building') }}",
-            "{% endif %}"
-        ],
-        "priority": "{{ min(tags.heritage|split(\";\")) }}"
-    },
-    "name": {
-        "ca": "Protecció del Patrimoni",
-        "de": "Denkmalschutz",
-        "en": "Heritage Protection",
-        "fr": "Protection patrimoniale",
-        "hu": "Örökségvédelem",
-        "it": "Protezione del patrimonio",
-        "pl": "Ochrona dziedzictwa",
-        "pt": "Património cultural",
-        "pt-br": "Patrimônio histórico",
-        "tr": "Kültürel Miras"
-    }
-}
diff --git a/heritage.yaml b/heritage.yaml
new file mode 100644
index 0000000..f2e61ea
--- /dev/null
+++ b/heritage.yaml
@@ -0,0 +1,34 @@
+type: overpass
+name:
+  ca: Protecció del Patrimoni
+  de: Denkmalschutz
+  en: Heritage Protection
+  fr: Protection patrimoniale
+  hu: Örökségvédelem
+  it: Protezione del patrimonio
+  pl: Ochrona dziedzictwa
+  pt: Património cultural
+  pt-br: Patrimônio histórico
+  tr: Kültürel Miras
+query:
+  8: nwr[heritage~"^(|.*;)1(|;.*)$"];
+  11: nwr[heritage~"^(|.*;)(1|2)(|;.*)$"];
+  13: nwr[heritage];
+feature:
+  description: |-
+    {% set found = false %}
+    {% for k in ['amenity', 'shop', 'telecom', 'waterway', 'craft', 'highway', 'railway', 'aerialway', 'emergency', 'geological', 'man_made', 'natural', 'office', 'power', 'aeroway', 'tourism', 'leisure', 'military', 'landuse', 'barrier', 'route'] if not found %}
+      {% if attribute(tags, k) and attribute(tags, k) != 'yes' %}
+        {{ tagTransList(k, attribute(tags, k)) }}
+        {% set found = true %}
+      {% endif %}
+    {% endfor %}
+    {% if found %}{# nothing #}
+    {% elseif tags.building and tags.building != 'yes' %}
+    {{ tagTransList('building', tags.building) }}
+    {% elseif tags.historic and tags.historic not in ['heritage', 'yes', 'building'] %}
+    {{ tagTransList('historic', tags.historic) }}
+    {% elseif tags.building == 'yes' or tags.historic == 'building' %}
+    {{ keyTrans('building') }}
+    {% endif %}
+  priority: '{{ min(tags.heritage|split(";")) }}'
diff --git a/law.json b/law.json
deleted file mode 100644
index 3b0d895..0000000
--- a/law.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ca": "Llei",
-        "cs": "Právo",
-        "de": "Juristische Institutionen",
-        "en": "Law",
-        "es": "Ley",
-        "fr": "Services législatifs",
-        "gl": "Leis",
-        "hu": "Jog",
-        "it": "Legge",
-        "ja": "法律",
-        "nb": "Lov",
-        "nl": "Juridische diensten",
-        "oc": "Lèi",
-        "pl": "Prawo",
-        "pt": "Direito",
-        "pt-br": "Direito",
-        "ru": "Юристы",
-        "sr": "Закон",
-        "tr": "Hukuk"
-    },
-    "query": {
-        "14": [
-            "(",
-            "node[amenity~\"^(courthouse)$\"];",
-            "way[amenity~\"^(courthouse)$\"];",
-            "relation[amenity~\"^(courthouse)$\"];",
-            "node[office~\"^(lawyer|notary)$\"];",
-            "way[office~\"^(lawyer|notary)$\"];",
-            "relation[office~\"^(lawyer|notary)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% else %}",
-            "  {% set key = 'office' %}",
-            "  {% set value = tags.office %}",
-            "{% endif %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}",
-        "markerSign": "{{ const[key ~ '=' ~ value].sign|raw }}"
-    },
-    "info": [
-        "<table>",
-        "{% for kv, data in const %}",
-        "{% if data.zoom <= map.zoom %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>",
-        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
-        "    </td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "amenity=courthouse": {
-            "sign": "<i class=\"fas fa-gavel\"></i>",
-            "zoom": 14
-        },
-        "office=lawyer": {
-            "sign": "⚖",
-            "zoom": 14
-        },
-        "office=notary": {
-            "sign": "<i class=\"fas fa-file-signature\"></i>",
-            "zoom": 14
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/law.yaml b/law.yaml
new file mode 100644
index 0000000..85089e8
--- /dev/null
+++ b/law.yaml
@@ -0,0 +1,71 @@
+type: overpass
+name:
+  ca: Llei
+  cs: Právo
+  de: Juristische Institutionen
+  en: Law
+  es: Ley
+  fr: Services législatifs
+  gl: Leis
+  hu: Jog
+  it: Legge
+  ja: 法律
+  nb: Lov
+  nl: Juridische diensten
+  oc: Lèi
+  pl: Prawo
+  pt: Direito
+  pt-br: Direito
+  ru: Юристы
+  sr: Закон
+  tr: Hukuk
+query:
+  14: |-
+    (
+    node[amenity~"^(courthouse)$"];
+    way[amenity~"^(courthouse)$"];
+    relation[amenity~"^(courthouse)$"];
+    node[office~"^(lawyer|notary)$"];
+    way[office~"^(lawyer|notary)$"];
+    relation[office~"^(lawyer|notary)$"];
+    )
+feature:
+  pre: |-
+    {% if tags.amenity %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% else %}
+      {% set key = 'office' %}
+      {% set value = tags.office %}
+    {% endif %}
+  description: '{{ tagTrans(key, value) }}'
+  markerSign: '{{ const[key ~ "=" ~ value].sign|raw }}'
+info: |-
+  <table>
+  {% for kv, data in const %}
+  {% if data.zoom <= map.zoom %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>
+        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}
+      </td>
+    </tr>
+  {% endif %}
+  {% endfor %}
+  </table>
+const:
+  amenity=courthouse:
+    sign: <i class="fas fa-gavel"></i>
+    zoom: 14
+  office=lawyer:
+    sign: ⚖
+    zoom: 14
+  office=notary:
+    sign: <i class="fas fa-file-signature"></i>
+    zoom: 14
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}" query="nwr[{{ k }}]" minzoom="{{ v.zoom }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/pt_amenities.json b/pt_amenities.json
deleted file mode 100644
index d922f91..0000000
--- a/pt_amenities.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Infraestructures",
-        "ca": "Serveis",
-        "cs": "Občanská vybavenost",
-        "de": "Einrichtungen",
-        "en": "Amenities",
-        "es": "Instalaciones",
-        "fr": "Équipements",
-        "gl": "Instalacións",
-        "hu": "Létesítmények",
-        "it": "Servizi",
-        "ja": "生活環境",
-        "nb": "Fasiliteter",
-        "nl": "Voorzieningen",
-        "oc": "Infrastructuras de transpòrt",
-        "pl": "Pożyteczne w transporcie publicznym",
-        "pt": "Equipamentos",
-        "pt-br": "Equipamentos",
-        "ru": "Транспортные принадлежности",
-        "sr": "Додаци",
-        "tr": "Tesisler",
-        "uk": "Amenities"
-    },
-    "query": {
-        "8": [
-            "(",
-            "nwr[aeroway=aerodrome]['aerodrome:type'~'(international)'];",
-            ")"
-        ],
-        "10": [
-            "(",
-            "nwr[aeroway=aerodrome]['aerodrome:type'~'(international|regional|public)'];",
-            ")"
-        ],
-        "12": [
-            "(",
-            "nwr[aeroway=aerodrome];",
-            ")"
-        ],
-        "16": [
-            "(",
-            "nwr[amenity~\"^(taxi|ticket_counter)$\"];",
-            "nwr[railway~\"^(subway_entrance)$\"];",
-            "nwr[aeroway=aerodrome];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.aeroway == 'aerodrome' %}",
-            "  {% set key = 'aeroway' %}",
-            "  {% set value = tags.aeroway %}",
-            "{% elseif tags.railway == 'subway_entrance' %}",
-            "  {% set key = 'railway' %}",
-            "  {% set value = tags.railway %}",
-            "{% else %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% endif %}"
-        ],
-        "description": "{{ debug(key, value) }}{{ tagTrans(key, value) }}",
-        "markerSign": "{{ const[value]|raw }}"
-    },
-    "const": {
-        "taxi": "🚖",
-        "ticket_counter": "🎫",
-        "subway_entrance": "🚉",
-        "aerodrome": "<i class='fas fa-plane-departure'></i>"
-    }
-}
diff --git a/pt_amenities.yaml b/pt_amenities.yaml
new file mode 100644
index 0000000..89e3eb9
--- /dev/null
+++ b/pt_amenities.yaml
@@ -0,0 +1,61 @@
+type: overpass
+name:
+  ast: Infraestructures
+  ca: Serveis
+  cs: Občanská vybavenost
+  de: Einrichtungen
+  en: Amenities
+  es: Instalaciones
+  fr: Équipements
+  gl: Instalacións
+  hu: Létesítmények
+  it: Servizi
+  ja: 生活環境
+  nb: Fasiliteter
+  nl: Voorzieningen
+  oc: Infrastructuras de transpòrt
+  pl: Pożyteczne w transporcie publicznym
+  pt: Equipamentos
+  pt-br: Equipamentos
+  ru: Транспортные принадлежности
+  sr: Додаци
+  tr: Tesisler
+  uk: Amenities
+query:
+  8: |-
+    (
+    nwr[aeroway=aerodrome]['aerodrome:type'~'(international)'];
+    )
+  10: |-
+    (
+    nwr[aeroway=aerodrome]['aerodrome:type'~'(international|regional|public)'];
+    )
+  12: |-
+    (
+    nwr[aeroway=aerodrome];
+    )
+  16: |-
+    (
+    nwr[amenity~"^(taxi|ticket_counter)$"];
+    nwr[railway~"^(subway_entrance)$"];
+    nwr[aeroway=aerodrome];
+    )
+feature:
+  pre: |-
+    {% if tags.aeroway == 'aerodrome' %}
+      {% set key = 'aeroway' %}
+      {% set value = tags.aeroway %}
+    {% elseif tags.railway == 'subway_entrance' %}
+      {% set key = 'railway' %}
+      {% set value = tags.railway %}
+    {% else %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% endif %}
+  description: '{{ debug(key, value) }}{{ tagTrans(key, value) }}'
+  markerSign: '{{ const[value]|raw }}'
+const:
+  taxi: 🚖
+  ticket_counter: 🎫
+  subway_entrance: 🚉
+  aerodrome: <i class='fas fa-plane-departure'></i>
diff --git a/public.json b/public.json
deleted file mode 100644
index fa0f8ec..0000000
--- a/public.json
+++ /dev/null
@@ -1,108 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Serviciu Públicu",
-        "ca": "Serveis Públics",
-        "cs": "Veřejné služby",
-        "de": "Öffentliche Dienste",
-        "el": "Δημόσιες Υπηρεσίες",
-        "en": "Public Services",
-        "es": "Servicios públicos",
-        "et": "Kommunaalteenused",
-        "fr": "Services et équipements publics",
-        "gl": "Servizos públicos",
-        "hu": "Közszolgáltatások",
-        "it": "Servizi pubblici",
-        "ja": "公共サービス",
-        "nb": "Offentlige tjenester",
-        "nl": "Openbare diensten",
-        "oc": "Servicis e equimaments publics",
-        "pl": "Usługi publiczne",
-        "pt": "Serviços públicos",
-        "pt-br": "Utilidade pública",
-        "ro": "Servicii publice",
-        "ru": "Общественные места",
-        "sr": "Јавне службе",
-        "tr": "Kamu Hizmetleri",
-        "uk": "Громадські місця"
-    },
-    "query": {
-        "12": [
-            "(",
-            "node[amenity~'^(embassy|public_building|townhall)$'];",
-            "way[amenity~'^(embassy|public_building|townhall)$'];",
-            "relation[amenity~'^(embassy|public_building|townhall)$'];",
-            "node[amenity=recycling][recyling_type=centre];",
-            "way[amenity=recycling][recyling_type=centre];",
-            "relation[amenity=recycling][recyling_type=centre];",
-            "nwr[office~\"^(government|administration)$\"];",
-            ");"
-        ],
-        "16": [
-            "(",
-            "node[amenity~'^(embassy|public_building|townhall|clock|drinking_water|recycling|toilets)$'];",
-            "way[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];",
-            "relation[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];",
-            "node[drinking_water][drinking_water!=no];",
-            "nwr[office~\"^(government|administration)$\"];",
-            ");"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity %}",
-            "{% set key = 'amenity' %}",
-            "{% set value = tags.amenity %}",
-            "{% elseif tags.office %}",
-            "{% set key = 'office' %}",
-            "{% set value = tags.office %}",
-            "{% elseif tags.drinking_water and tags.drinking_water != 'no' %}",
-            "{% set key = 'amenity' %}",
-            "{% set value = 'drinking_water' %}",
-            "{% endif %}"
-        ],
-        "description": [
-            "{% if key == 'office' %}",
-            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
-            "{% else %}",
-            "  {{ tagTrans(key, value) }}",
-            "{% endif %}"
-        ],
-        "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
-        "markerSign": [
-            "{% set kv = key ~ '=' ~ value %}",
-            "{% if const[kv] %}",
-            "{{ const[kv]|raw }}",
-            "{% endif %}"
-        ]
-    },
-    "info": [
-        "<table>",
-        "{% for value, sign in const %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
-        "  </tr>",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "amenity=clock": "<i class='fa fa-clock-o' aria-hidden='true'></i>",
-        "amenity=drinking_water": "<img data-src='maki:drinking-water'>",
-        "amenity=embassy": "<img data-src='maki:embassy'>",
-        "amenity=public_building": "<img data-src='maki:building'>",
-        "amenity=recycling": "<img data-src='maki:recycling'>",
-        "amenity=toilets": "<img data-src='maki:toilet'>",
-        "amenity=townhall": "<img data-src='maki:town-hall'>",
-        "office=administration": "<img data-src='maki:town-hall'>",
-        "office=government": "<img data-src='maki:town-hall'>"
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "type": "select",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/public.yaml b/public.yaml
new file mode 100644
index 0000000..9225593
--- /dev/null
+++ b/public.yaml
@@ -0,0 +1,94 @@
+type: overpass
+name:
+  ast: Serviciu Públicu
+  ca: Serveis Públics
+  cs: Veřejné služby
+  de: Öffentliche Dienste
+  el: Δημόσιες Υπηρεσίες
+  en: Public Services
+  es: Servicios públicos
+  et: Kommunaalteenused
+  fr: Services et équipements publics
+  gl: Servizos públicos
+  hu: Közszolgáltatások
+  it: Servizi pubblici
+  ja: 公共サービス
+  nb: Offentlige tjenester
+  nl: Openbare diensten
+  oc: Servicis e equimaments publics
+  pl: Usługi publiczne
+  pt: Serviços públicos
+  pt-br: Utilidade pública
+  ro: Servicii publice
+  ru: Общественные места
+  sr: Јавне службе
+  tr: Kamu Hizmetleri
+  uk: Громадські місця
+query:
+  12: |-
+    (
+    node[amenity~'^(embassy|public_building|townhall)$'];
+    way[amenity~'^(embassy|public_building|townhall)$'];
+    relation[amenity~'^(embassy|public_building|townhall)$'];
+    node[amenity=recycling][recyling_type=centre];
+    way[amenity=recycling][recyling_type=centre];
+    relation[amenity=recycling][recyling_type=centre];
+    nwr[office~"^(government|administration)$"];
+    );
+  16: |-
+    (
+    node[amenity~'^(embassy|public_building|townhall|clock|drinking_water|recycling|toilets)$'];
+    way[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];
+    relation[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];
+    node[drinking_water][drinking_water!=no];
+    nwr[office~"^(government|administration)$"];
+    );
+feature:
+  pre: |-
+    {% if tags.amenity %}
+    {% set key = 'amenity' %}
+    {% set value = tags.amenity %}
+    {% elseif tags.office %}
+    {% set key = 'office' %}
+    {% set value = tags.office %}
+    {% elseif tags.drinking_water and tags.drinking_water != 'no' %}
+    {% set key = 'amenity' %}
+    {% set value = 'drinking_water' %}
+    {% endif %}
+  description: |-
+    {% if key == 'office' %}
+      {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})
+    {% else %}
+      {{ tagTrans(key, value) }}
+    {% endif %}
+  body: '{% if tags.operator %}{{ keyTrans("operator") }}: {{ tags.operator }}<br/>{% endif %}'
+  markerSign: |-
+    {% set kv = key ~ '=' ~ value %}
+    {% if const[kv] %}
+    {{ const[kv]|raw }}
+    {% endif %}
+info: |-
+  <table>
+  {% for value, sign in const %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ sign|raw }}</div></td>
+      <td>{{ tagTrans('amenity', value) }}</td>
+    </tr>
+  {% endfor %}
+  </table>
+const:
+  amenity=clock: <i class='fa fa-clock-o' aria-hidden='true'></i>
+  amenity=drinking_water: <img data-src='maki:drinking-water'>
+  amenity=embassy: <img data-src='maki:embassy'>
+  amenity=public_building: <img data-src='maki:building'>
+  amenity=recycling: <img data-src='maki:recycling'>
+  amenity=toilets: <img data-src='maki:toilet'>
+  amenity=townhall: <img data-src='maki:town-hall'>
+  office=administration: <img data-src='maki:town-hall'>
+  office=government: <img data-src='maki:town-hall'>
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    type: select
+    values: '{% for k, v in const %}<option value="{{ k }}" query="nwr[{{ k }}]" minzoom="{{ v.zoom }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/religion.json b/religion.json
deleted file mode 100644
index ba836fb..0000000
--- a/religion.json
+++ /dev/null
@@ -1,178 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Relixón",
-        "ca": "Religió",
-        "cs": "Náboženství",
-        "de": "Religion",
-        "el": "Θρησκεία",
-        "en": "Religion",
-        "es": "Religión",
-        "et": "Religioon",
-        "fr": "Religion",
-        "gl": "Relixión",
-        "hu": "Vallás",
-        "it": "Religione",
-        "ja": "宗教",
-        "nb": "Religion",
-        "nl": "Religie",
-        "oc": "Religion",
-        "pl": "Religia",
-        "pt": "Religião",
-        "pt-br": "Religião",
-        "ro": "Religie",
-        "ru": "Религия",
-        "sr": "Религија",
-        "tr": "Din",
-        "uk": "Релігія"
-    },
-    "query": {
-        "13": [
-            "(",
-            "node[amenity~\"^(place_of_worship|grave_yard|crematorium)$\"];",
-            "way[amenity~\"^(place_of_worship|grave_yard|crematorium)$\"];",
-            "relation[amenity~\"^(place_of_worship|grave_yard|crematorium)$\"];",
-            "way[landuse~\"^(cemetery)$\"];",
-            "relation[landuse~\"^(cemetery)$\"];",
-            ")"
-        ],
-        "14": [
-            "(",
-            "node[amenity~\"^(place_of_worship|grave_yard|crematorium)$\"];",
-            "way[amenity~\"^(place_of_worship|grave_yard|crematorium)$\"];",
-            "relation[amenity~\"^(place_of_worship|grave_yard|crematorium)$\"];",
-            "way[landuse~\"^(cemetery)$\"];",
-            "relation[landuse~\"^(cemetery)$\"];",
-            "node[historic~\"^wayside_(cross|shrine|chapel)$\"];",
-            "way[historic~\"^wayside_(cross|shrine|chapel)$\"];",
-            "relation[historic~\"^wayside_(cross|shrine|chapel)$\"];",
-            "nwr[office~\"^(parish|religion)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.landuse == 'cemetery' %}",
-            "{% set key = 'landuse' %}",
-            "{% set value = tags.landuse %}",
-            "{% elseif tags.historic in [ 'wayside_cross', 'wayside_shrine', 'wayside_chapel' ] %}",
-            "{% set key = 'historic' %}",
-            "{% set value = tags.historic %}",
-            "{% elseif tags.office %}",
-            "{% set key = 'office' %}",
-            "{% set value = tags.office %}",
-            "{% else %}",
-            "{% set key = 'amenity' %}",
-            "{% set value = tags.amenity %}",
-            "{% endif %}"
-        ],
-        "description": [
-            "{% if tags.building and tags.religion %}",
-            "  {% if isTranslated('tag:building=' ~ tags.building ~ ' religion=' ~ tags.religion) %}",
-            "    {{ trans('tag:building=' ~ tags.building ~ ' religion=' ~ tags.religion) }}",
-            "  {% elseif tags.building != 'yes' %}",
-            "    {{ trans('tag:building=' ~ tags.building) }}",
-            "  {% else %}",
-            "    {{ tagTrans(key, value) }}",
-            "  {% endif %}",
-            "{% else %}",
-            "  {{ tagTrans(key, value) }}",
-            "{% endif %}"
-        ],
-        "listDetails": "{{ tagTransList('religion', tags.religion) }}{% if tags.denomination %} - {{ tagTransList('denomination', tags.denomination) }}{% endif %}",
-        "body": [
-            "{% if tags.building %}",
-            "  {{ keyTrans('building') }}: {{ tagTrans('building', tags.building) }}<br/>",
-            "{% endif %}",
-            "{% if tags.religion %}",
-            "  {{ keyTrans('religion') }}: {{ tagTransList('religion', tags.religion) }}<br/>",
-            "{% endif %}",
-            "{% if tags.denomination %}",
-            "  {{ keyTrans('denomination') }}: {{ tagTransList('denomination', tags.denomination) }}<br/>",
-            "{% endif %}"
-        ],
-        "markerSign": "{{ const.religion[tags.religion] }}"
-    },
-    "const": {
-        "religion": {
-            "christian": "✝",
-            "muslim": "☪",
-            "buddhist": "☸",
-            "shinto": "",
-            "hindu": "ॐ",
-            "jewish": "✡",
-            "taoist": "",
-            "sikh": "",
-            "none": "",
-            "multifaith": "",
-            "unitarian_universialist": "",
-            "spiritualist": "",
-            "jain": "",
-            "voodoo": "",
-            "confucian": "",
-            "bahai": "",
-            "caodaism": "",
-            "tenrikyo": "",
-            "vietnamese_folk": "",
-            "pagan": "☆",
-            "scientologist": "",
-            "zoroastrian": "",
-            "pentecostal": "",
-            "shamanic": ""
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "show_default": "true",
-            "query": "nwr[{{ value }}]",
-            "type": "select",
-            "values": {
-                "place_of_worship": {
-                    "name": "{{ tagTrans('amenity', 'place_of_worship') }}",
-                    "query": "nwr[amenity=place_of_worship]"
-                },
-                "grave_yard": {
-                    "name": "{{ tagTrans('amenity', 'grave_yard') }}",
-                    "query": "nwr[amenity=grave_yard]"
-                },
-                "crematorium": {
-                    "name": "{{ tagTrans('amenity', 'crematorium') }}",
-                    "query": "nwr[amenity=crematorium]"
-                },
-                "cemetery": {
-                    "name": "{{ tagTrans('landuse', 'cemetery') }}",
-                    "query": "nwr[landuse=cemetery]"
-                },
-                "wayside_cross": {
-                    "name": "{{ tagTrans('historic', 'wayside_cross') }}",
-                    "query": "nwr[historic=wayside_cross]"
-                },
-                "wayside_shrine": {
-                    "name": "{{ tagTrans('historic', 'wayside_shrine') }}",
-                    "query": "nwr[historic=wayside_shrine]"
-                },
-                "wayside_chapel": {
-                    "name": "{{ tagTrans('historic', 'wayside_chapel') }}",
-                    "query": "nwr[historic=wayside_chapel]"
-                },
-                "parish": {
-                    "name": "{{ tagTrans('office', 'parish') }}",
-                    "query": "nwr[office=parish]"
-                },
-                "office": {
-                    "name": "{{ tagTrans('office', 'religion') }}",
-                    "query": "nwr[office=religion]"
-                }
-            }
-        },
-        "religion": {
-            "name": "{{ keyTrans('religion') }}",
-            "show_default": "true",
-            "type": "select",
-            "valueName": "{{ tagTrans('religion', value) }}",
-            "values": "{% set list = [] %}{% for t, v in const.religion %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('religion', t) }}</option>{% endfor %}<option value='other' query='nwr[religion][religion!~\"^({{ list|join('|') }})$\"]'>{{ trans('other') }}</option>",
-            "op": "has"
-        }
-    }
-}
diff --git a/religion.yaml b/religion.yaml
new file mode 100644
index 0000000..b75bf62
--- /dev/null
+++ b/religion.yaml
@@ -0,0 +1,153 @@
+type: overpass
+name:
+  ast: Relixón
+  ca: Religió
+  cs: Náboženství
+  de: Religion
+  el: Θρησκεία
+  en: Religion
+  es: Religión
+  et: Religioon
+  fr: Religion
+  gl: Relixión
+  hu: Vallás
+  it: Religione
+  ja: 宗教
+  nb: Religion
+  nl: Religie
+  oc: Religion
+  pl: Religia
+  pt: Religião
+  pt-br: Religião
+  ro: Religie
+  ru: Религия
+  sr: Религија
+  tr: Din
+  uk: Релігія
+query:
+  13: |-
+    (
+    node[amenity~"^(place_of_worship|grave_yard|crematorium)$"];
+    way[amenity~"^(place_of_worship|grave_yard|crematorium)$"];
+    relation[amenity~"^(place_of_worship|grave_yard|crematorium)$"];
+    way[landuse~"^(cemetery)$"];
+    relation[landuse~"^(cemetery)$"];
+    )
+  14: |-
+    (
+    node[amenity~"^(place_of_worship|grave_yard|crematorium)$"];
+    way[amenity~"^(place_of_worship|grave_yard|crematorium)$"];
+    relation[amenity~"^(place_of_worship|grave_yard|crematorium)$"];
+    way[landuse~"^(cemetery)$"];
+    relation[landuse~"^(cemetery)$"];
+    node[historic~"^wayside_(cross|shrine|chapel)$"];
+    way[historic~"^wayside_(cross|shrine|chapel)$"];
+    relation[historic~"^wayside_(cross|shrine|chapel)$"];
+    nwr[office~"^(parish|religion)$"];
+    )
+feature:
+  pre: |-
+    {% if tags.landuse == 'cemetery' %}
+    {% set key = 'landuse' %}
+    {% set value = tags.landuse %}
+    {% elseif tags.historic in [ 'wayside_cross', 'wayside_shrine', 'wayside_chapel' ] %}
+    {% set key = 'historic' %}
+    {% set value = tags.historic %}
+    {% elseif tags.office %}
+    {% set key = 'office' %}
+    {% set value = tags.office %}
+    {% else %}
+    {% set key = 'amenity' %}
+    {% set value = tags.amenity %}
+    {% endif %}
+  description: |-
+    {% if tags.building and tags.religion %}
+      {% if isTranslated('tag:building=' ~ tags.building ~ ' religion=' ~ tags.religion) %}
+        {{ trans('tag:building=' ~ tags.building ~ ' religion=' ~ tags.religion) }}
+      {% elseif tags.building != 'yes' %}
+        {{ trans('tag:building=' ~ tags.building) }}
+      {% else %}
+        {{ tagTrans(key, value) }}
+      {% endif %}
+    {% else %}
+      {{ tagTrans(key, value) }}
+    {% endif %}
+  listDetails: '{{ tagTransList("religion", tags.religion) }}{% if tags.denomination %} - {{ tagTransList("denomination", tags.denomination) }}{% endif %}'
+  body: |-
+    {% if tags.building %}
+      {{ keyTrans('building') }}: {{ tagTrans('building', tags.building) }}<br/>
+    {% endif %}
+    {% if tags.religion %}
+      {{ keyTrans('religion') }}: {{ tagTransList('religion', tags.religion) }}<br/>
+    {% endif %}
+    {% if tags.denomination %}
+      {{ keyTrans('denomination') }}: {{ tagTransList('denomination', tags.denomination) }}<br/>
+    {% endif %}
+  markerSign: '{{ const.religion[tags.religion] }}'
+const:
+  religion:
+    christian: ✝
+    muslim: ☪
+    buddhist: ☸
+    shinto: ''
+    hindu: ॐ
+    jewish: ✡
+    taoist: ''
+    sikh: ''
+    none: ''
+    multifaith: ''
+    unitarian_universialist: ''
+    spiritualist: ''
+    jain: ''
+    voodoo: ''
+    confucian: ''
+    bahai: ''
+    caodaism: ''
+    tenrikyo: ''
+    vietnamese_folk: ''
+    pagan: ☆
+    scientologist: ''
+    zoroastrian: ''
+    pentecostal: ''
+    shamanic: ''
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    show_default: 'true'
+    query: nwr[{{ value }}]
+    type: select
+    values:
+      place_of_worship:
+        name: '{{ tagTrans("amenity", "place_of_worship") }}'
+        query: nwr[amenity=place_of_worship]
+      grave_yard:
+        name: '{{ tagTrans("amenity", "grave_yard") }}'
+        query: nwr[amenity=grave_yard]
+      crematorium:
+        name: '{{ tagTrans("amenity", "crematorium") }}'
+        query: nwr[amenity=crematorium]
+      cemetery:
+        name: '{{ tagTrans("landuse", "cemetery") }}'
+        query: nwr[landuse=cemetery]
+      wayside_cross:
+        name: '{{ tagTrans("historic", "wayside_cross") }}'
+        query: nwr[historic=wayside_cross]
+      wayside_shrine:
+        name: '{{ tagTrans("historic", "wayside_shrine") }}'
+        query: nwr[historic=wayside_shrine]
+      wayside_chapel:
+        name: '{{ tagTrans("historic", "wayside_chapel") }}'
+        query: nwr[historic=wayside_chapel]
+      parish:
+        name: '{{ tagTrans("office", "parish") }}'
+        query: nwr[office=parish]
+      office:
+        name: '{{ tagTrans("office", "religion") }}'
+        query: nwr[office=religion]
+  religion:
+    name: '{{ keyTrans("religion") }}'
+    show_default: 'true'
+    type: select
+    valueName: '{{ tagTrans("religion", value) }}'
+    values: '{% set list = [] %}{% for t, v in const.religion %}<option value="{{ t }}">{% set list = list|merge([ t ]) %}{{ tagTrans("religion", t) }}</option>{% endfor %}<option value="other" query="nwr[religion][religion!~"^({{ list|join("|") }})$"]">{{ trans("other") }}</option>'
+    op: has
diff --git a/shop.json b/shop.json
deleted file mode 100644
index 0c25c82..0000000
--- a/shop.json
+++ /dev/null
@@ -1,402 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Compres",
-        "ca": "Compres",
-        "cs": "Obchody",
-        "de": "Einkauf",
-        "el": "Αγορές",
-        "en": "Shopping",
-        "es": "Compras",
-        "et": "Ostmine",
-        "fr": "Magasins/Boutiques",
-        "gl": "Compras",
-        "hu": "Vásárlás",
-        "it": "Acquisti",
-        "ja": "ショッピング",
-        "nb": "Shopping",
-        "nl": "Winkelen",
-        "oc": "Botigas",
-        "pl": "Zakupy",
-        "pt": "Compras",
-        "pt-br": "Compras",
-        "ro": "Cumpărături",
-        "ru": "Покупки",
-        "sr": "Куповина",
-        "tr": "Alışveriş",
-        "uk": "Торгівля"
-    },
-    "query": {
-        "14": "(node[shop~'^(mall|department_store)$'];way[shop~'^(mall|department_store)$'];relation[shop~'^(mall|department_store)$'];);",
-        "16": "(node[shop];way[shop];relation[shop];);"
-    },
-    "feature": {
-        "pre": [
-            "{% set shop0 = tags.shop|split(';')[0] %}",
-            "{% set current = const.default %}",
-            "{% if const.shops[shop0] %}",
-            "  {% set current = const.shops[shop0] %}",
-            "{% endif %}"
-        ],
-        "description": [
-            "{% if tags.shop == 'yes' %}",
-            "  {{ keyTrans('shop') }}",
-            "{% else %}",
-            "  {{ tagTransList('shop', tags.shop) }}",
-            "{% endif %}"
-        ],
-        "markerSign": [
-            "{% set c = current.sign %}",
-            "{% if c|slice(0, 4) == 'fas:' %}",
-            "  <i class=\"fas fa-{{ c|slice(4) }}\"></i>",
-            "{% elseif c|slice(0, 4) == 'far:' %}",
-            "  <i class=\"far fa-{{ c|slice(4) }}\"></i>",
-            "{% elseif c|slice(0, 5) == 'maki:' %}",
-            "  <img data-src=\"{{ c }}\">",
-            "{% else %}",
-            "  {{ c|raw }}",
-            "{% endif %}"
-        ],
-        "body": [
-            "<ul>",
-            "  {% if tags.clothes %}",
-            "  <li class='hasSymbol'>",
-            "    <i class=\"fas fa-tshirt\" aria-hidden=\"true\"></i>",
-            "    <span class='key'>{{ keyTrans('clothes') }}:</span>",
-            "    <span class='value'>{{ tagTransList('clothes', tags.clothes) }}</span>",
-            "  </li>",
-            "  {% endif %}",
-            "</ul>"
-        ]
-    },
-    "const": {
-        "default": {
-            "sign": "fas:shopping-bag"
-        },
-        "shops": {
-            "vacant": {
-                "sign": "fas:times"
-            },
-            "alcohol": {
-                "sign": "fas:wine-bottle"
-            },
-            "wine": {
-                "sign": "fas:wine-bottle"
-            },
-            "beverages": {
-                "sign": "fas:wine-bottle"
-            },
-            "baby_goods": {
-                "sign": "fas:baby"
-            },
-            "bag": {
-                "sign": "fas:shopping-bag"
-            },
-            "general": {
-                "sign": "fas:shopping-bag"
-            },
-            "variety_store": {
-                "sign": "fas:shopping-bag"
-            },
-            "bakery": {
-                "sign": "fas:birthday-cake"
-            },
-            "confectionery": {
-                "sign": "fas:birthday-cake"
-            },
-            "pastry": {
-                "sign": "fas:birthday-cake"
-            },
-            "bicycle": {
-                "sign": "fas:bicycle"
-            },
-            "motorcycle": {
-                "sign": "fas:motorcycle"
-            },
-            "boutique": {
-                "sign": "&#128090;"
-            },
-            "clothes": {
-                "sign": "&#128090;"
-            },
-            "fabric": {
-                "sign": ""
-            },
-            "fashion": {
-                "sign": "&#128090;"
-            },
-            "leather": {
-                "sign": "&#128090;"
-            },
-            "sewing": {
-                "sign": "&#128090;"
-            },
-            "tailor": {
-                "sign": "&#128090;"
-            },
-            "dry_cleaning": {
-                "sign": "&#128090;"
-            },
-            "sea_food": {
-                "sign": "fas:fish"
-            },
-            "butcher": {
-                "sign": "fas:utensils"
-            },
-            "cheese": {
-                "sign": "fas:utensils"
-            },
-            "chocolate": {
-                "sign": "fas:utensils"
-            },
-            "deli": {
-                "sign": "fas:utensils"
-            },
-            "dairy": {
-                "sign": "fas:utensils"
-            },
-            "farm": {
-                "sign": "fas:utensils"
-            },
-            "greengrocer": {
-                "sign": "fas:utensils"
-            },
-            "pasta": {
-                "sign": "fas:utensils"
-            },
-            "spices": {
-                "sign": "fas:utensils"
-            },
-            "coffee": {
-                "sign": "fas:coffee"
-            },
-            "tea": {
-                "sign": "fas:coffee"
-            },
-            "convenience": {
-                "sign": "fas:shopping-basket"
-            },
-            "department_store": {
-                "sign": "fas:building"
-            },
-            "mall": {
-                "sign": "fas:building"
-            },
-            "electronics": {
-                "sign": "fas:tv"
-            },
-            "computer": {
-                "sign": "fas:desktop"
-            },
-            "electrical": {
-                "sign": "fas:bolt"
-            },
-            "lighting": {
-                "sign": "fas:bulb"
-            },
-            "fishing": {
-                "sign": "fas:fish"
-            },
-            "toys": {
-                "sign": "fas:dice"
-            },
-            "florist": {
-                "sign": "&#127799;"
-            },
-            "garden_centre": {
-                "sign": "&#127799;"
-            },
-            "hairdresser": {
-                "sign": "&#128113;"
-            },
-            "ice_cream": {
-                "sign": "fas:ice-cream"
-            },
-            "jewelry": {
-                "sign": "fas:ring"
-            },
-            "kiosk": {
-                "sign": "fas:newspaper"
-            },
-            "newsagent": {
-                "sign": "fas:newspaper"
-            },
-            "shoes": {
-                "sign": "fas:shoe-prints"
-            },
-            "travel_agency": {
-                "sign": "&#129523;"
-            },
-            "supermarket": {
-                "sign": "fas:shopping-cart"
-            },
-            "watches": {
-                "sign": "far:clock"
-            },
-            "gift": {
-                "sign": "fas:gift"
-            },
-            "locksmith": {
-                "sign": "fas:key"
-            },
-            "houseware": {
-                "sign": "fas:tools"
-            },
-            "doityourself": {
-                "sign": "fas:tools"
-            },
-            "hardware": {
-                "sign": "fas:tools"
-            },
-            "art": {
-                "sign": "fas:palette"
-            },
-            "stationery": {
-                "sign": "fas:pencil-ruler"
-            },
-            "funeral_directors": {
-                "sign": "maki:monument"
-            },
-            "copyshop": {
-                "sign": "fas:copy"
-            },
-            "tobacco": {
-                "sign": "fas:smoking"
-            },
-            "furniture": {
-                "sign": "fas:couch"
-            },
-            "interior_decoration": {
-                "sign": "fas:couch"
-            },
-            "car_repair": {
-                "sign": "fas:car"
-            },
-            "car": {
-                "sign": "fas:car"
-            },
-            "car_parts": {
-                "sign": "fas:car"
-            },
-            "tyres": {
-                "sign": "fas:car"
-            },
-            "beauty": {
-                "sign": ""
-            },
-            "cosmetics": {
-                "sign": ""
-            },
-            "music": {
-                "sign": "fas:guitar"
-            },
-            "optician": {
-                "sign": "fas:glasses"
-            },
-            "books": {
-                "sign": "fas:book"
-            },
-            "sports": {
-                "sign": "fas:basketball-ball"
-            },
-            "chemist": {
-                "sign": "fas:tablets"
-            },
-            "pet": {
-                "sign": "fas:paw"
-            },
-            "photo": {
-                "sign": "fas:camera"
-            },
-            "ticket": {
-                "sign": "fas:ticket-alt"
-            },
-            "outdoor": {
-                "sign": "fas:campground"
-            },
-            "massage": {
-                "sign": ""
-            },
-            "paint": {
-                "sign": "fas:paint-roller"
-            },
-            "trade": {
-                "sign": "fas:tools"
-            },
-            "bookmaker": {
-                "sign": "fas:money-bill-wave"
-            },
-            "kitchen": {
-                "sign": "fas:utensils"
-            },
-            "second_hand": {
-                "sign": ""
-            },
-            "lottery": {
-                "sign": "fas:money-bill-wave"
-            },
-            "pawnbroker": {
-                "sign": "fas:money-bill-wave"
-            },
-            "bed": {
-                "sign": "fas:bed"
-            },
-            "charity": {
-                "sign": "fas:hand-holding-heart"
-            },
-            "tattoo": {
-                "sign": ""
-            },
-            "mobile_phone": {
-                "sign": "fas:mobile-alt"
-            }
-        },
-        "clothes": [
-            "women",
-            "men",
-            "leather",
-            "fur",
-            "underwear",
-            "children",
-            "wedding",
-            "sports",
-            "workwear",
-            "lingerie",
-            "babies",
-            "hats",
-            "fashion",
-            "suits",
-            "unisexs",
-            "traditional",
-            "costumes",
-            "bridal",
-            "oversize",
-            "swimwear",
-            "maternity",
-            "brand",
-            "military",
-            "vintage",
-            "accessories",
-            "schoolwear",
-            "motorcycle",
-            "denim"
-        ]
-    },
-    "filter": {
-        "shop": {
-            "name": "{{ trans('filter:type') }}",
-            "type": "select",
-            "show_default": "true",
-            "values": "{% set list = [] %}{% for k, v in const.shops %}<option value=\"{{ k }}\">{% set list = list|merge([ k ]) %}{{ tagTrans('shop', k) }}</option>{% endfor %}<option weight='1' value='other' query='nwr[shop][shop!~\"^(|.*;)({{ list|join('|') }})(|;.*)$\"]'>{{ trans('other') }}</option>",
-            "sort": "natsort",
-            "op": "has"
-        },
-        "clothes": {
-            "name": "{{ keyTrans('clothes') }}",
-            "type": "select",
-            "values": "{% set list = [] %}<option weight='-1' value='*' query='nwr[clothes]'>{{ trans('any value') }}</option>{% for k in const.clothes %}{% set list = list|merge([ k ]) %}<option value='{{ k }}'>{{ tagTrans('clothes', k) }}</option>{% endfor %}<option weight='1' value='other' query='nwr[clothes][clothes!~\"^(|.*;)({{ list|join('|') }})(|;.*)$\"]'>{{ trans('other') }}</option>",
-            "sort": "natsort",
-            "op": "has"
-        }
-    }
-}
diff --git a/shop.yaml b/shop.yaml
new file mode 100644
index 0000000..6596188
--- /dev/null
+++ b/shop.yaml
@@ -0,0 +1,306 @@
+type: overpass
+name:
+  ast: Compres
+  ca: Compres
+  cs: Obchody
+  de: Einkauf
+  el: Αγορές
+  en: Shopping
+  es: Compras
+  et: Ostmine
+  fr: Magasins/Boutiques
+  gl: Compras
+  hu: Vásárlás
+  it: Acquisti
+  ja: ショッピング
+  nb: Shopping
+  nl: Winkelen
+  oc: Botigas
+  pl: Zakupy
+  pt: Compras
+  pt-br: Compras
+  ro: Cumpărături
+  ru: Покупки
+  sr: Куповина
+  tr: Alışveriş
+  uk: Торгівля
+query:
+  14: (node[shop~'^(mall|department_store)$'];way[shop~'^(mall|department_store)$'];relation[shop~'^(mall|department_store)$'];);
+  16: (node[shop];way[shop];relation[shop];);
+feature:
+  pre: |-
+    {% set shop0 = tags.shop|split(';')[0] %}
+    {% set current = const.default %}
+    {% if const.shops[shop0] %}
+      {% set current = const.shops[shop0] %}
+    {% endif %}
+  description: |-
+    {% if tags.shop == 'yes' %}
+      {{ keyTrans('shop') }}
+    {% else %}
+      {{ tagTransList('shop', tags.shop) }}
+    {% endif %}
+  markerSign: |-
+    {% set c = current.sign %}
+    {% if c|slice(0, 4) == 'fas:' %}
+      <i class="fas fa-{{ c|slice(4) }}"></i>
+    {% elseif c|slice(0, 4) == 'far:' %}
+      <i class="far fa-{{ c|slice(4) }}"></i>
+    {% elseif c|slice(0, 5) == 'maki:' %}
+      <img data-src="{{ c }}">
+    {% else %}
+      {{ c|raw }}
+    {% endif %}
+  body: |-
+    <ul>
+      {% if tags.clothes %}
+      <li class='hasSymbol'>
+        <i class="fas fa-tshirt" aria-hidden="true"></i>
+        <span class='key'>{{ keyTrans('clothes') }}:</span>
+        <span class='value'>{{ tagTransList('clothes', tags.clothes) }}</span>
+      </li>
+      {% endif %}
+    </ul>
+const:
+  default:
+    sign: fas:shopping-bag
+  shops:
+    vacant:
+      sign: fas:times
+    alcohol:
+      sign: fas:wine-bottle
+    wine:
+      sign: fas:wine-bottle
+    beverages:
+      sign: fas:wine-bottle
+    baby_goods:
+      sign: fas:baby
+    bag:
+      sign: fas:shopping-bag
+    general:
+      sign: fas:shopping-bag
+    variety_store:
+      sign: fas:shopping-bag
+    bakery:
+      sign: fas:birthday-cake
+    confectionery:
+      sign: fas:birthday-cake
+    pastry:
+      sign: fas:birthday-cake
+    bicycle:
+      sign: fas:bicycle
+    motorcycle:
+      sign: fas:motorcycle
+    boutique:
+      sign: '&#128090;'
+    clothes:
+      sign: '&#128090;'
+    fabric:
+      sign: ''
+    fashion:
+      sign: '&#128090;'
+    leather:
+      sign: '&#128090;'
+    sewing:
+      sign: '&#128090;'
+    tailor:
+      sign: '&#128090;'
+    dry_cleaning:
+      sign: '&#128090;'
+    sea_food:
+      sign: fas:fish
+    butcher:
+      sign: fas:utensils
+    cheese:
+      sign: fas:utensils
+    chocolate:
+      sign: fas:utensils
+    deli:
+      sign: fas:utensils
+    dairy:
+      sign: fas:utensils
+    farm:
+      sign: fas:utensils
+    greengrocer:
+      sign: fas:utensils
+    pasta:
+      sign: fas:utensils
+    spices:
+      sign: fas:utensils
+    coffee:
+      sign: fas:coffee
+    tea:
+      sign: fas:coffee
+    convenience:
+      sign: fas:shopping-basket
+    department_store:
+      sign: fas:building
+    mall:
+      sign: fas:building
+    electronics:
+      sign: fas:tv
+    computer:
+      sign: fas:desktop
+    electrical:
+      sign: fas:bolt
+    lighting:
+      sign: fas:bulb
+    fishing:
+      sign: fas:fish
+    toys:
+      sign: fas:dice
+    florist:
+      sign: '&#127799;'
+    garden_centre:
+      sign: '&#127799;'
+    hairdresser:
+      sign: '&#128113;'
+    ice_cream:
+      sign: fas:ice-cream
+    jewelry:
+      sign: fas:ring
+    kiosk:
+      sign: fas:newspaper
+    newsagent:
+      sign: fas:newspaper
+    shoes:
+      sign: fas:shoe-prints
+    travel_agency:
+      sign: '&#129523;'
+    supermarket:
+      sign: fas:shopping-cart
+    watches:
+      sign: far:clock
+    gift:
+      sign: fas:gift
+    locksmith:
+      sign: fas:key
+    houseware:
+      sign: fas:tools
+    doityourself:
+      sign: fas:tools
+    hardware:
+      sign: fas:tools
+    art:
+      sign: fas:palette
+    stationery:
+      sign: fas:pencil-ruler
+    funeral_directors:
+      sign: maki:monument
+    copyshop:
+      sign: fas:copy
+    tobacco:
+      sign: fas:smoking
+    furniture:
+      sign: fas:couch
+    interior_decoration:
+      sign: fas:couch
+    car_repair:
+      sign: fas:car
+    car:
+      sign: fas:car
+    car_parts:
+      sign: fas:car
+    tyres:
+      sign: fas:car
+    beauty:
+      sign: ''
+    cosmetics:
+      sign: ''
+    music:
+      sign: fas:guitar
+    optician:
+      sign: fas:glasses
+    books:
+      sign: fas:book
+    sports:
+      sign: fas:basketball-ball
+    chemist:
+      sign: fas:tablets
+    pet:
+      sign: fas:paw
+    photo:
+      sign: fas:camera
+    ticket:
+      sign: fas:ticket-alt
+    outdoor:
+      sign: fas:campground
+    massage:
+      sign: ''
+    paint:
+      sign: fas:paint-roller
+    trade:
+      sign: fas:tools
+    bookmaker:
+      sign: fas:money-bill-wave
+    kitchen:
+      sign: fas:utensils
+    second_hand:
+      sign: ''
+    lottery:
+      sign: fas:money-bill-wave
+    pawnbroker:
+      sign: fas:money-bill-wave
+    bed:
+      sign: fas:bed
+    charity:
+      sign: fas:hand-holding-heart
+    tattoo:
+      sign: ''
+    mobile_phone:
+      sign: fas:mobile-alt
+  clothes:
+    - women
+    - men
+    - leather
+    - fur
+    - underwear
+    - children
+    - wedding
+    - sports
+    - workwear
+    - lingerie
+    - babies
+    - hats
+    - fashion
+    - suits
+    - unisexs
+    - traditional
+    - costumes
+    - bridal
+    - oversize
+    - swimwear
+    - maternity
+    - brand
+    - military
+    - vintage
+    - accessories
+    - schoolwear
+    - motorcycle
+    - denim
+filter:
+  shop:
+    name: '{{ trans(''filter:type'') }}'
+    type: select
+    show_default: 'true'
+    values: '{% set list = [] %}{% for k, v in const.shops %}<option value="{{ k }}">{% set list = list|merge([ k ]) %}{{ tagTrans(''shop'', k) }}</option>{% endfor %}<option weight=''1'' value=''other'' query=''nwr[shop][shop!~"^(|.*;)({{ list|join(''|'') }})(|;.*)$"]''>{{ trans(''other'') }}</option>'
+    sort: natsort
+    op: has
+  clothes:
+    name: '{{ keyTrans(''clothes'') }}'
+    type: select
+    values: |-
+      {% set list = [] %}
+      <option weight="-1" value="*" query="nwr[clothes]">{{ trans("any value") }}</option>
+      {% for k in const.clothes %}
+        {% set list = list|merge([ k ]) %}
+        <option value="{{ k }}">
+        {{ tagTrans("clothes", k) }}
+        </option>
+      {% endfor %}
+
+      <option weight="1" value="other" query="nwr[clothes][clothes!~"^(|.*;)({{ list|join("|") }})(|;.*)$"]">
+      {{ trans("other") }}
+      </option>
+    sort: natsort
+    op: has
diff --git a/swimming_bathing.json b/swimming_bathing.json
deleted file mode 100644
index c589ffa..0000000
--- a/swimming_bathing.json
+++ /dev/null
@@ -1,165 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ca": "Natació i bany",
-        "cs": "Koupání",
-        "de": "Schwimmen und Baden",
-        "en": "Swimming and bathing",
-        "es": "Natación y baño",
-        "fr": "Natation, baignade et bains",
-        "gl": "Natación e baño",
-        "hu": "Fürdőzés, úszás",
-        "it": "Nuoto e balneazione",
-        "ja": "水泳と入浴",
-        "nb": "Svømming og bading",
-        "nl": "Zwemmen en baden",
-        "oc": "Natacion, banhada e banhèra",
-        "pl": "Pływanie i kąpiele",
-        "pt": "Natação e banho",
-        "pt-br": "Natação e banho",
-        "ru": "Бассейны и сауны",
-        "sr": "Пливање и купање",
-        "tr": "Yüzme ve banyo yapma"
-    },
-    "query": {
-        "13": [
-            "(",
-            "nwr[leisure=swimming_area];",
-            "nwr[natural~\"^(water)\"][sport~\"^(|.*;)swimming(;.*|)$\"];",
-            "nwr[natural~\"^(beach)\"];",
-            "nwr[leisure~\"^(water_park|beach_resort)$\"];",
-            "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(;.*|)$\"];",
-            "nwr[amenity=public_bath];",
-            "nwr[tourism=spa_resort];",
-            ")"
-        ],
-        "16": [
-            "(",
-            "nwr[leisure=swimming_area];",
-            "nwr[natural~\"^(water)\"][sport~\"^(|.*;)swimming(;.*|)$\"];",
-            "nwr[natural~\"^(beach)\"];",
-            "nwr[leisure~\"^(water_park|beach_resort)$\"];",
-            "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(;.*|)$\"];",
-            "nwr[amenity~\"^(public_bath|shower)$\"];",
-            "nwr[tourism=spa_resort];",
-            "",
-            "nwr[leisure=swimming_pool][access!=private];",
-            "nwr[leisure=sauna];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% set k = null %}{% set v = null %}{% set append = null %}",
-            "{% if tags.amenity == 'public_bath' %}",
-            "  {% set k = 'amenity' %}",
-            "  {% set v = 'public_bath' %}",
-            "  {% if attribute(tags, 'bath:type') %}{% set append = tagTrans('bath:type', attribute(tags, 'bath:type')) %}{% endif %}",
-            "{% elseif tags.amenity == 'shower' %}",
-            "  {% set k = 'amenity' %}",
-            "  {% set v = 'shower' %}",
-            "{% elseif tags.tourism == 'spa_resort' %}",
-            "  {% set k = 'tourism' %}",
-            "  {% set v = tags.tourism %}",
-            "{% elseif tags.leisure == 'sauna' %}",
-            "  {% set k = 'leisure' %}",
-            "  {% set v = tags.leisure %}",
-            "  {% if tags.sauna and tags.sauna != 'yes' %}{% set append = tagTransList('sauna', tags.sauna) %}{% endif %}",
-            "{% elseif tags.leisure == 'sports_centre' %}",
-            "  {% set k = 'leisure' %}",
-            "  {% set v = tags.leisure %}",
-            "  {% set append = tagTrans('sport', 'swimming') %}",
-            "{% elseif tags.leisure %}",
-            "  {% set k = 'leisure' %}",
-            "  {% set v = tags.leisure %}",
-            "{% elseif tags.natural %}",
-            "  {% set k = 'natural' %}",
-            "  {% set v = tags.natural %}",
-            "  {% if tags.sport %}{% set append = tagTrans('sport', 'swimming') %}{% endif %}",
-            "{% endif %}"
-        ],
-        "description": [
-            "{{ tagTrans(k, v) }}",
-            "{% if append %}({{ append }}){% endif %}"
-        ],
-        "markerSign": "{{ const[k ~ '=' ~ v].sign|raw }}",
-        "priority": "{% if tags.name %}0{% else %}1{% endif %}"
-    },
-    "info": [
-        "<table>",
-        "{% for value, data in const %}",
-        "{% if data.zoom <= map.zoom %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td title=\"{% if data.taginfo %}{{ data.taginfo }}{% else %}{{ value }}{% endif %}\">",
-        "      {{ keyTrans(value) }}",
-        "      {% if data.append %}({{ trans(data.append) }}){% endif %}",
-        "    </td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "leisure=swimming_area": {
-            "zoom": 13,
-            "sign": "<img data-src='maki:swimming?size=11&fill=blue'>"
-        },
-        "leisure=water_park": {
-            "zoom": 13,
-            "sign": "<img data-src='maki:swimming'>"
-        },
-        "leisure=beach_resort": {
-            "zoom": 13,
-            "sign": "<img data-src='temaki:beach'>"
-        },
-        "leisure=sports_centre": {
-            "zoom": 13,
-            "append": "tag:sport=swimming",
-            "taginfo": "leisure=swimming_area, sport=swimming",
-            "sign": "<img data-src='maki:basketball'>"
-        },
-        "natural=water": {
-            "zoom": 13,
-            "append": "tag:sport=swimming",
-            "taginfo": "natural=water, sport=swimming",
-            "sign": "<i style='color: blue' class=\"fas fa-water\"></i>"
-        },
-        "natural=beach": {
-            "zoom": 13,
-            "sign": "<img data-src='temaki:beach?fill=green'>"
-        },
-        "amenity=public_bath": {
-            "zoom": 13,
-            "taginfo": "amenity=public_bath, bath:type=*",
-            "sign": "<i class=\"fa fa-bath\" style='color: black' aria-hidden=\"true\"></i>"
-        },
-        "tourism=spa_resort": {
-            "zoom": 13,
-            "sign": "<i class=\"fa fa-bath\" style='color: blue' aria-hidden=\"true\"></i>"
-        },
-        "leisure=swimming_pool": {
-            "zoom": 16,
-            "append": "tag:access!=private",
-            "taginfo": "leisure=swimming_pool, access!=private",
-            "sign": "<i style='font-size: 80%; color: black;' class='fas fa-swimming-pool'></i>"
-        },
-        "leisure=sauna": {
-            "zoom": 16,
-            "taginfo": "leisure=sauna, sauna:type=*",
-            "sign": "<i class=\"fa fa-thermometer-full\" aria-hidden=\"true\"></i>"
-        },
-        "amenity=shower": {
-            "zoom": 16,
-            "sign": "🚿 "
-        }
-    },
-    "filter": {
-        "type": {
-            "name": "{{ trans('filter:type') }}",
-            "type": "select",
-            "show_default": "true",
-            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
-        }
-    }
-}
diff --git a/swimming_bathing.yaml b/swimming_bathing.yaml
new file mode 100644
index 0000000..38a2473
--- /dev/null
+++ b/swimming_bathing.yaml
@@ -0,0 +1,141 @@
+type: overpass
+name:
+  ca: Natació i bany
+  cs: Koupání
+  de: Schwimmen und Baden
+  en: Swimming and bathing
+  es: Natación y baño
+  fr: Natation, baignade et bains
+  gl: Natación e baño
+  hu: Fürdőzés, úszás
+  it: Nuoto e balneazione
+  ja: 水泳と入浴
+  nb: Svømming og bading
+  nl: Zwemmen en baden
+  oc: Natacion, banhada e banhèra
+  pl: Pływanie i kąpiele
+  pt: Natação e banho
+  pt-br: Natação e banho
+  ru: Бассейны и сауны
+  sr: Пливање и купање
+  tr: Yüzme ve banyo yapma
+query:
+  13: |-
+    (
+    nwr[leisure=swimming_area];
+    nwr[natural~"^(water)"][sport~"^(|.*;)swimming(;.*|)$"];
+    nwr[natural~"^(beach)"];
+    nwr[leisure~"^(water_park|beach_resort)$"];
+    nwr[leisure=sports_centre][sport~"^(|.*;)swimming(;.*|)$"];
+    nwr[amenity=public_bath];
+    nwr[tourism=spa_resort];
+    )
+  16: |-
+    (
+    nwr[leisure=swimming_area];
+    nwr[natural~"^(water)"][sport~"^(|.*;)swimming(;.*|)$"];
+    nwr[natural~"^(beach)"];
+    nwr[leisure~"^(water_park|beach_resort)$"];
+    nwr[leisure=sports_centre][sport~"^(|.*;)swimming(;.*|)$"];
+    nwr[amenity~"^(public_bath|shower)$"];
+    nwr[tourism=spa_resort];
+
+    nwr[leisure=swimming_pool][access!=private];
+    nwr[leisure=sauna];
+    )
+feature:
+  pre: |-
+    {% set k = null %}{% set v = null %}{% set append = null %}
+    {% if tags.amenity == 'public_bath' %}
+      {% set k = 'amenity' %}
+      {% set v = 'public_bath' %}
+      {% if attribute(tags, 'bath:type') %}{% set append = tagTrans('bath:type', attribute(tags, 'bath:type')) %}{% endif %}
+    {% elseif tags.amenity == 'shower' %}
+      {% set k = 'amenity' %}
+      {% set v = 'shower' %}
+    {% elseif tags.tourism == 'spa_resort' %}
+      {% set k = 'tourism' %}
+      {% set v = tags.tourism %}
+    {% elseif tags.leisure == 'sauna' %}
+      {% set k = 'leisure' %}
+      {% set v = tags.leisure %}
+      {% if tags.sauna and tags.sauna != 'yes' %}{% set append = tagTransList('sauna', tags.sauna) %}{% endif %}
+    {% elseif tags.leisure == 'sports_centre' %}
+      {% set k = 'leisure' %}
+      {% set v = tags.leisure %}
+      {% set append = tagTrans('sport', 'swimming') %}
+    {% elseif tags.leisure %}
+      {% set k = 'leisure' %}
+      {% set v = tags.leisure %}
+    {% elseif tags.natural %}
+      {% set k = 'natural' %}
+      {% set v = tags.natural %}
+      {% if tags.sport %}{% set append = tagTrans('sport', 'swimming') %}{% endif %}
+    {% endif %}
+  description: |-
+    {{ tagTrans(k, v) }}
+    {% if append %}({{ append }}){% endif %}
+  markerSign: '{{ const[k ~ "=" ~ v].sign|raw }}'
+  priority: '{% if tags.name %}0{% else %}1{% endif %}'
+info: |-
+  <table>
+  {% for value, data in const %}
+  {% if data.zoom <= map.zoom %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td title="{% if data.taginfo %}{{ data.taginfo }}{% else %}{{ value }}{% endif %}">
+        {{ keyTrans(value) }}
+        {% if data.append %}({{ trans(data.append) }}){% endif %}
+      </td>
+    </tr>
+  {% endif %}
+  {% endfor %}
+  </table>
+const:
+  leisure=swimming_area:
+    zoom: 13
+    sign: <img data-src='maki:swimming?size=11&fill=blue'>
+  leisure=water_park:
+    zoom: 13
+    sign: <img data-src='maki:swimming'>
+  leisure=beach_resort:
+    zoom: 13
+    sign: <img data-src='temaki:beach'>
+  leisure=sports_centre:
+    zoom: 13
+    append: tag:sport=swimming
+    taginfo: leisure=swimming_area, sport=swimming
+    sign: <img data-src='maki:basketball'>
+  natural=water:
+    zoom: 13
+    append: tag:sport=swimming
+    taginfo: natural=water, sport=swimming
+    sign: '<i style="color: blue" class="fas fa-water"></i>'
+  natural=beach:
+    zoom: 13
+    sign: <img data-src='temaki:beach?fill=green'>
+  amenity=public_bath:
+    zoom: 13
+    taginfo: amenity=public_bath, bath:type=*
+    sign: '<i class="fa fa-bath" style="color: black" aria-hidden="true"></i>'
+  tourism=spa_resort:
+    zoom: 13
+    sign: '<i class="fa fa-bath" style="color: blue" aria-hidden="true"></i>'
+  leisure=swimming_pool:
+    zoom: 16
+    append: tag:access!=private
+    taginfo: leisure=swimming_pool, access!=private
+    sign: '<i style="font-size: 80%; color: black;" class="fas fa-swimming-pool"></i>'
+  leisure=sauna:
+    zoom: 16
+    taginfo: leisure=sauna, sauna:type=*
+    sign: <i class="fa fa-thermometer-full" aria-hidden="true"></i>
+  amenity=shower:
+    zoom: 16
+    sign: '🚿 '
+filter:
+  type:
+    name: '{{ trans("filter:type") }}'
+    type: select
+    show_default: 'true'
+    values: '{% for k, v in const %}<option value="{{ k }}" query="nwr[{{ k }}]" minzoom="{{ v.zoom }}">{{ tagTrans(k) }}</option>{% endfor %}'
diff --git a/walk_amenities.yaml b/walk_amenities.yaml
index f650ed5..dad2a85 100644
--- a/walk_amenities.yaml
+++ b/walk_amenities.yaml
@@ -18,7 +18,7 @@ name:
   sr: Додаци
   tr: Olanaklar
 query:
-  '13': |-
+  13: |-
     (
     node[highway~"^(elevator)$"];
     node[information];
@@ -27,7 +27,7 @@ query:
     nwr[amenity~"^(shelter)$"];
     way[highway~'^(footway|steps)$'][conveying];
     )
-  '16': |-
+  16: |-
     (
     node[highway~"^(crossing|elevator)$"];
     node[information];
diff --git a/walk_amenities_qa.yaml b/walk_amenities_qa.yaml
index c0b7fef..bd11e56 100644
--- a/walk_amenities_qa.yaml
+++ b/walk_amenities_qa.yaml
@@ -5,7 +5,7 @@ name:
   pl: Użyteczne w ruchu pieszym
   tr: Yürüyüş Olanakları
 query:
-  '13': |-
+  13: |-
     (
     node[highway~"^(elevator)$"];
     node[information];
@@ -14,7 +14,7 @@ query:
     nwr[amenity~"^(shelter)$"];
     way[highway~'^(footway|steps)$'][conveying];
     )
-  '16': |-
+  16: |-
     (
     node[highway~"^(crossing|elevator)$"];
     node[information];
diff --git a/waste.json b/waste.json
deleted file mode 100644
index 34fc821..0000000
--- a/waste.json
+++ /dev/null
@@ -1,146 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Basures",
-        "ca": "Deixalles",
-        "cs": "Nakládání s odpady",
-        "de": "Entsorgung",
-        "en": "Disposal",
-        "es": "Basura",
-        "fr": "Déchets et recyclage",
-        "gl": "Lixo",
-        "hu": "Hulladék",
-        "it": "Smaltimento",
-        "ja": "処理場",
-        "nb": "Avfall",
-        "nl": "Afvalverwijdering",
-        "oc": "Bordilhas e reciclatge",
-        "pl": "Przetwarzanie odpadów",
-        "pt": "Lixo",
-        "pt-br": "Resíduos",
-        "ru": "Переработка отходов",
-        "sr": "Отпад",
-        "tr": "Atık ve Geri Dönüşüm"
-    },
-    "query": {
-        "13": [
-            "(",
-            "node[landuse=landfill];",
-            "node[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "node[amenity=recycling][recycling_type=centre];",
-            "way[landuse=landfill];",
-            "way[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "way[amenity=recycling][recycling_type=centre];",
-            "relation[landuse=landfill];",
-            "relation[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "relation[amenity=recycling][recycling_type=centre];",
-            "nwr[amenity=waste_transfer_station];",
-            "nwr[power=generator][\"generator:source\"~\"^(.*;|)waste(;.*|)$\"];",
-            ")"
-        ],
-        "15": [
-            "(",
-            "node[landuse=landfill];",
-            "node[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "node[amenity~\"^(recycling|waste_disposal|waste_transfer_station)$\"];",
-            "way[landuse=landfill];",
-            "way[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "way[amenity~\"^(recycling|waste_disposal|waste_transfer_station)$\"];",
-            "relation[landuse=landfill];",
-            "relation[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "relation[amenity~\"^(recycling|waste_disposal|waste_transfer_station)$\"];",
-            "nwr[power=generator][\"generator:source\"~\"^(.*;|)waste(;.*|)$\"];",
-            ")"
-        ],
-        "18": [
-            "(",
-            "node[landuse=landfill];",
-            "node[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "node[amenity~\"^(recycling|waste_basket|waste_disposal|waste_transfer_station)$\"];",
-            "way[landuse=landfill];",
-            "way[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "way[amenity~\"^(recycling|waste_basket|waste_disposal|waste_transfer_station)$\"];",
-            "relation[landuse=landfill];",
-            "relation[man_made~\"^(wastewater_plant|incinerator)$\"];",
-            "relation[amenity~\"^(recycling|waste_basket|waste_disposal|waste_transfer_station)$\"];",
-            "nwr[power=generator][\"generator:source\"~\"^(.*;|)waste(;.*|)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% set add = '' %}",
-            "{% if tags.landuse == 'landfill' %}",
-            "  {% set key = 'landuse' %}",
-            "  {% set value = tags.landuse %}",
-            "{% elseif tags.man_made in [ 'incinerator', 'wastewater_plant' ] %}",
-            "  {% set key = 'man_made' %}",
-            "  {% set value = tags.man_made %}",
-            "{% elseif tags.amenity in [ 'recycling', 'waste_basket', 'waste_disposal', 'waste_transfer_station' ] %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% elseif tags.power == 'generator' %}",
-            "  {% set key = 'power' %}",
-            "  {% set value = tags.power %}",
-            "  {% set add = '(' ~ tagTransList('generator:source', attribute(tags, 'generator:source')) ~ ')' %}",
-            "{% endif %}",
-            "{% set kv = key ~ '=' ~ value %}"
-        ],
-        "description": "{{ tagTrans(key, value) }} {{ add }}",
-        "body": [
-            "{% if tags.recycling_type %}",
-            "{{ keyTrans('recycling_type') }}: {{ tagTrans('recycling_type', tags.recycling_type) }}",
-            "{% endif %}"
-        ],
-        "markerSign": [
-            "{% if const[kv] %}",
-            "{{ const[kv].sign|raw }}",
-            "{% endif %}"
-        ]
-    },
-    "info": [
-        "<table>",
-        "{% for kv, data in const %}",
-        "  {% if map.zoom >= data.minZoom %}",
-        "  {% set key  = kv|split('=')[0] %}",
-        "  {% set value  = kv|split('=')[1] %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans(key, value) }}{% if data.add %} ({{ trans(data.add) }}){% endif %}</td>",
-        "  </tr>",
-        "  {% endif %}",
-        "{% endfor %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}</td>",
-        "    <td>{{ trans('other') }}</td>",
-        "  </tr>",
-        "</table>"
-    ],
-    "const": {
-        "amenity=recycling": {
-            "minZoom": 13,
-            "sign": "<img data-src='maki:recycling'>"
-        },
-        "man_made=wastewater_plant": {
-            "minZoom": 13,
-            "sign": "<i class='fas fa-water'></i>"
-        },
-        "man_made=incinerator": {
-            "minZoom": 13,
-            "sign": "<i class='fas fa-burn'></i>"
-        },
-        "power=generator": {
-            "minZoom": 13,
-            "sign": "<i class='fas fa-bolt'></i>",
-            "add": "tag:generator:source=waste"
-        },
-        "amenity=waste_disposal": {
-            "minZoom": 15,
-            "sign": "<img data-src='maki:waste-basket'>"
-        },
-        "amenity=waste_basket": {
-            "minZoom": 18,
-            "sign": "<img data-src='maki:waste-basket'>"
-        }
-    }
-}
diff --git a/waste.yaml b/waste.yaml
new file mode 100644
index 0000000..fc7947c
--- /dev/null
+++ b/waste.yaml
@@ -0,0 +1,127 @@
+type: overpass
+name:
+  ast: Basures
+  ca: Deixalles
+  cs: Nakládání s odpady
+  de: Entsorgung
+  en: Disposal
+  es: Basura
+  fr: Déchets et recyclage
+  gl: Lixo
+  hu: Hulladék
+  it: Smaltimento
+  ja: 処理場
+  nb: Avfall
+  nl: Afvalverwijdering
+  oc: Bordilhas e reciclatge
+  pl: Przetwarzanie odpadów
+  pt: Lixo
+  pt-br: Resíduos
+  ru: Переработка отходов
+  sr: Отпад
+  tr: Atık ve Geri Dönüşüm
+query:
+  13: |-
+    (
+    node[landuse=landfill];
+    node[man_made~"^(wastewater_plant|incinerator)$"];
+    node[amenity=recycling][recycling_type=centre];
+    way[landuse=landfill];
+    way[man_made~"^(wastewater_plant|incinerator)$"];
+    way[amenity=recycling][recycling_type=centre];
+    relation[landuse=landfill];
+    relation[man_made~"^(wastewater_plant|incinerator)$"];
+    relation[amenity=recycling][recycling_type=centre];
+    nwr[amenity=waste_transfer_station];
+    nwr[power=generator]["generator:source"~"^(.*;|)waste(;.*|)$"];
+    )
+  15: |-
+    (
+    node[landuse=landfill];
+    node[man_made~"^(wastewater_plant|incinerator)$"];
+    node[amenity~"^(recycling|waste_disposal|waste_transfer_station)$"];
+    way[landuse=landfill];
+    way[man_made~"^(wastewater_plant|incinerator)$"];
+    way[amenity~"^(recycling|waste_disposal|waste_transfer_station)$"];
+    relation[landuse=landfill];
+    relation[man_made~"^(wastewater_plant|incinerator)$"];
+    relation[amenity~"^(recycling|waste_disposal|waste_transfer_station)$"];
+    nwr[power=generator]["generator:source"~"^(.*;|)waste(;.*|)$"];
+    )
+  18: |-
+    (
+    node[landuse=landfill];
+    node[man_made~"^(wastewater_plant|incinerator)$"];
+    node[amenity~"^(recycling|waste_basket|waste_disposal|waste_transfer_station)$"];
+    way[landuse=landfill];
+    way[man_made~"^(wastewater_plant|incinerator)$"];
+    way[amenity~"^(recycling|waste_basket|waste_disposal|waste_transfer_station)$"];
+    relation[landuse=landfill];
+    relation[man_made~"^(wastewater_plant|incinerator)$"];
+    relation[amenity~"^(recycling|waste_basket|waste_disposal|waste_transfer_station)$"];
+    nwr[power=generator]["generator:source"~"^(.*;|)waste(;.*|)$"];
+    )
+feature:
+  pre: |-
+    {% set add = '' %}
+    {% if tags.landuse == 'landfill' %}
+      {% set key = 'landuse' %}
+      {% set value = tags.landuse %}
+    {% elseif tags.man_made in [ 'incinerator', 'wastewater_plant' ] %}
+      {% set key = 'man_made' %}
+      {% set value = tags.man_made %}
+    {% elseif tags.amenity in [ 'recycling', 'waste_basket', 'waste_disposal', 'waste_transfer_station' ] %}
+      {% set key = 'amenity' %}
+      {% set value = tags.amenity %}
+    {% elseif tags.power == 'generator' %}
+      {% set key = 'power' %}
+      {% set value = tags.power %}
+      {% set add = '(' ~ tagTransList('generator:source', attribute(tags, 'generator:source')) ~ ')' %}
+    {% endif %}
+    {% set kv = key ~ '=' ~ value %}
+  description: '{{ tagTrans(key, value) }} {{ add }}'
+  body: |-
+    {% if tags.recycling_type %}
+    {{ keyTrans('recycling_type') }}: {{ tagTrans('recycling_type', tags.recycling_type) }}
+    {% endif %}
+  markerSign: |-
+    {% if const[kv] %}
+    {{ const[kv].sign|raw }}
+    {% endif %}
+info: |-
+  <table>
+  {% for kv, data in const %}
+    {% if map.zoom >= data.minZoom %}
+    {% set key  = kv|split('=')[0] %}
+    {% set value  = kv|split('=')[1] %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>
+      <td>{{ tagTrans(key, value) }}{% if data.add %} ({{ trans(data.add) }}){% endif %}</td>
+    </tr>
+    {% endif %}
+  {% endfor %}
+    <tr>
+      <td>{{ markerCircle({})|raw }}</td>
+      <td>{{ trans('other') }}</td>
+    </tr>
+  </table>
+const:
+  amenity=recycling:
+    minZoom: 13
+    sign: <img data-src='maki:recycling'>
+  man_made=wastewater_plant:
+    minZoom: 13
+    sign: <i class='fas fa-water'></i>
+  man_made=incinerator:
+    minZoom: 13
+    sign: <i class='fas fa-burn'></i>
+  power=generator:
+    minZoom: 13
+    sign: <i class='fas fa-bolt'></i>
+    add: tag:generator:source=waste
+  amenity=waste_disposal:
+    minZoom: 15
+    sign: <img data-src='maki:waste-basket'>
+  amenity=waste_basket:
+    minZoom: 18
+    sign: <img data-src='maki:waste-basket'>