diff --git a/car_routes.json b/car_routes.json
index a31247e..d1c7734 100644
--- a/car_routes.json
+++ b/car_routes.json
@@ -2,6 +2,7 @@
     "type": "overpass",
     "name": {
         "en": "Car routes",
+        "fr": "Itinéraires auto",
         "hu": "Főútvonalak",
         "pt-br": "Rotas rodoviárias"
     },
diff --git a/children.json b/children.json
index e814ed1..69fc913 100644
--- a/children.json
+++ b/children.json
@@ -37,7 +37,7 @@
             "{% elseif tags.shop=='baby_goods' or tags.shop=='toys' %}",
             "{{ keyTrans('shop') }}: {{ tagTrans('shop', tags.shop) }}",
             "{% elseif tags.amenity=='toilets' and tags.diaper %}",
-            "{{ tagTrans('amenity', 'toilets') }} with diaper changing table",
+            "{{ tagTrans('amenity', 'toilets diaper=yes') }}",
             "{% endif %}"
         ],
         "markerSign": [
@@ -78,7 +78,7 @@
         "  </tr>",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>🚽🚼</div></td>",
-        "    <td>{{ tagTrans('amenity', 'toilets') }} with diaper changing table</td>",
+        "    <td>{{ tagTrans('amenity', 'toilets diaper=yes') }}</td>",
         "  </tr>",
         "</table>"
     ]
diff --git a/coal.json b/coal.json
index 3cc7137..d084cae 100644
--- a/coal.json
+++ b/coal.json
@@ -2,7 +2,9 @@
     "type": "overpass",
     "name": {
         "de": "Kohle",
-        "en": "Coal"
+        "en": "Coal",
+        "fr": "Charbon",
+        "pt-br": "Carvão"
     },
     "query": {
         "11": [
diff --git a/cycle_routes.json b/cycle_routes.json
index 3844eec..828dfaf 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -21,6 +21,12 @@
         "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color|default(const[''].color) })|raw }}",
         "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
         "styles": "",
+        "style:hover": {
+            "width": 0
+        },
+        "style:selected": {
+            "width": 0
+        },
         "markerSymbol": ""
     },
     "memberFeature": {
@@ -28,6 +34,10 @@
             "{% set priority = 4 %}",
             "{% set network = '' %}",
             "{% set refs = [] %}",
+            "{% set dirForward = false %}",
+            "{% set dirBackward = false %}",
+            "{% set hover = false %}",
+            "{% set selected = false %}",
             "",
             "{% for master in masters %}",
             "  {% set _p = const[master.tags.network].priority|default(4) %}",
@@ -38,6 +48,12 @@
             "  {% if master.tags.ref %}",
             "    {% set refs = refs|merge([ master.tags.ref ]) %}",
             "  {% endif %}",
+            "  {% if master.role == 'forward' %}{% set dirForward = true %}",
+            "  {% elseif master.role == 'backward' %}{% set dirBackward = true %}",
+            "  {% else %}{% set dirForward = true %}{% set dirBackward = true %}",
+            "  {% endif %}",
+            "  {% if master.flags.hover %}{% set hover = master.role|default('both') %}{% endif %}",
+            "  {% if master.flags.selected %}{% set selected = master.role|default('both') %}{% endif %}",
             "{% endfor %}"
         ],
         "title": "",
@@ -54,14 +70,64 @@
             "</ul>"
         ],
         "listExclude": "1",
+        "styles": "default{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}",
         "style": {
             "color": "{{ const[network].color }}",
-            "width": 4,
+            "width": "4",
+            "dashArray": "{% if not dirForward or not dirBackward %}27,8{% endif %}",
+            "dashOffset": "{% if dirBackward %}28{% else %}0{% endif %}",
+            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
+            "noClip": "{% if not dirForward or not dirBackward %}true{% else %}false{% endif %}",
             "opacity": 1,
             "text": "{{ refs|join(' · ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold"
+            "textFontWeight": "bold",
+            "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "35",
+            "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "{{ const[network].color }}"
+        },
+        "style:hover": {
+            "pane": "hover",
+            "width": "4",
+            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
+            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
+            "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
+            "color": "black",
+            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "35",
+            "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "black"
+        },
+        "style:selected": {
+            "pane": "selected",
+            "width": "4",
+            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
+            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
+            "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
+            "color": "#3f3f3f",
+            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "35",
+            "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "#3f3f3f"
         }
     },
     "const": {
diff --git a/electric_power.json b/electric_power.json
index ce31be5..e2cee97 100644
--- a/electric_power.json
+++ b/electric_power.json
@@ -6,13 +6,13 @@
         "de": "Elektrischer Strom",
         "en": "Electric Power",
         "et": "Elekter",
-        "fr": "Énergie",
+        "fr": "Production/transport électrique",
         "hu": "Áramellátás",
         "it": "Energia",
         "ja": "電力",
         "nl": "Stroomvoorziening",
         "pt": "Eletricidade",
-        "pt-br": "Energia",
+        "pt-br": "Energia elétrica",
         "ro": "Energie",
         "ru": "Энергетика"
     },
diff --git a/index.json b/index.json
index 2fbd6b8..77bd73e 100644
--- a/index.json
+++ b/index.json
@@ -46,6 +46,9 @@
                 },
                 {
                     "id": "outdoor"
+                },
+                {
+                    "id": "swimming_bathing"
                 }
             ]
         },
@@ -86,6 +89,9 @@
                 {
                     "id": "communication"
                 },
+                {
+                    "id": "office"
+                },
                 {
                     "id": "financial"
                 },
@@ -254,12 +260,17 @@
                     "type": "index",
                     "name": {
                         "en": "Energy",
-                        "de": "Energie"
+                        "de": "Energie",
+                        "pt-br": "Energia",
+                        "fr": "Énergie"
                     },
                     "subCategories": [
                         {
                             "id": "electric_power"
                         },
+                        {
+                            "id": "power_routes"
+                        },
                         {
                             "id": "coal"
                         },
@@ -338,6 +349,9 @@
                 },
                 {
                     "id": "wikipedia"
+                },
+                {
+                    "id": "xmas"
                 }
             ]
         }
diff --git a/lang/ast.json b/lang/ast.json
index a5e172f..5439d69 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "",
     "category:natural": "Formaciones naturales",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Otres",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Llugares",
     "category:playgrounds": "Xuegos infantiles",
     "category:post": "Corréu",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Paraes y estaciones",
@@ -62,6 +64,7 @@
     "category:shop": "Compres",
     "category:special": "",
     "category:sport": "Deportes",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismu",
     "category:tourism_services": "Turismu",
     "category:transport": "Tresporte",
@@ -74,5 +77,6 @@
     "category:waste": "Basures",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Fábriques"
+    "category:works": "Fábriques",
+    "category:xmas": ""
 }
diff --git a/lang/ca.json b/lang/ca.json
index 9a95a3e..2b4a38d 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
@@ -62,6 +64,7 @@
     "category:shop": "",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "",
     "category:tourism_services": "",
     "category:transport": "",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/cs.json b/lang/cs.json
index 316a8e5..ac91fbc 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -36,6 +36,7 @@
     "category:military": "Vojenské",
     "category:mtb-routes": "",
     "category:natural": "Přírodní úkazy",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Jiné",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Sídla",
     "category:playgrounds": "Hřiště",
     "category:post": "Poštovní služby",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Zastávky & Stanice",
@@ -62,6 +64,7 @@
     "category:shop": "Obchody",
     "category:special": "",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turistika",
     "category:tourism_services": "Turistika",
     "category:transport": "Doprava",
@@ -74,5 +77,6 @@
     "category:waste": "Nakládání s odpady",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Továrny"
+    "category:works": "Továrny",
+    "category:xmas": ""
 }
diff --git a/lang/de.json b/lang/de.json
index 2a77009..8056518 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -36,6 +36,7 @@
     "category:military": "Militär",
     "category:mtb-routes": "",
     "category:natural": "Geographische Objekte",
+    "category:office": "Ämter, Dienst- und Geschäftsstellen",
     "category:oil_gas": "Erdöl und Erdgas",
     "category:other": "Andere",
     "category:outdoor": "Freiluftaktivitäten",
@@ -44,6 +45,7 @@
     "category:places_geo": "Orte",
     "category:playgrounds": "Spielplätze",
     "category:post": "Post",
+    "category:power_routes": "",
     "category:pt": "ÖV Karte",
     "category:pt:routes": "Routen",
     "category:pt:stops": "Haltestellen",
@@ -62,6 +64,7 @@
     "category:shop": "Einkauf",
     "category:special": "Spezial",
     "category:sport": "Sport",
+    "category:swimming_bathing": "Schwimmen und Baden",
     "category:tourism_attractions": "Tourismus",
     "category:tourism_services": "Tourismus",
     "category:transport": "Transport",
@@ -74,5 +77,6 @@
     "category:waste": "Entsorgung",
     "category:water": "Gewässer",
     "category:wikipedia": "Wikipedia",
-    "category:works": "Fabriken"
+    "category:works": "Fabriken",
+    "category:xmas": ""
 }
diff --git a/lang/el.json b/lang/el.json
index 97c3dc6..6daf1ec 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -36,6 +36,7 @@
     "category:military": "Στρατιωτικό",
     "category:mtb-routes": "",
     "category:natural": "Φυσικοί Σχηματισμοί",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Μέρη",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Στάσεις & Σταθμοί",
@@ -62,6 +64,7 @@
     "category:shop": "Αγορές",
     "category:special": "",
     "category:sport": "Άθληση",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Τουρισμός",
     "category:tourism_services": "Τουρισμός",
     "category:transport": "Μεταφορές",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/en.json b/lang/en.json
index 153aea4..8d7fa63 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -36,6 +36,7 @@
     "category:military": "Military",
     "category:mtb-routes": "Mountain bike routes",
     "category:natural": "Natural Formations",
+    "category:office": "Offices",
     "category:oil_gas": "Petroleum and natural gas",
     "category:other": "Other",
     "category:outdoor": "Outdoor activities",
@@ -44,6 +45,7 @@
     "category:places_geo": "Places",
     "category:playgrounds": "Playground",
     "category:post": "Post",
+    "category:power_routes": "Power routes",
     "category:pt": "Public transport map",
     "category:pt:routes": "Routes",
     "category:pt:stops": "Stops & Stations",
@@ -62,6 +64,7 @@
     "category:shop": "Shopping",
     "category:special": "Special",
     "category:sport": "Sport",
+    "category:swimming_bathing": "Swimming and bathing",
     "category:tourism_attractions": "Tourism",
     "category:tourism_services": "Tourism",
     "category:transport": "Transportation",
@@ -74,5 +77,6 @@
     "category:waste": "Disposal",
     "category:water": "Waterbodies",
     "category:wikipedia": "Wikipedia",
-    "category:works": "Works"
+    "category:works": "Works",
+    "category:xmas": "Christmas"
 }
diff --git a/lang/es.json b/lang/es.json
index b13fced..75245e1 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Paradas y estaciones",
@@ -62,6 +64,7 @@
     "category:shop": "",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "",
     "category:tourism_services": "",
     "category:transport": "",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/et.json b/lang/et.json
index e647441..e8985de 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Ülejäänud",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Kohad",
     "category:playgrounds": "Mänguväljak",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
@@ -62,6 +64,7 @@
     "category:shop": "Ostmine",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport": "Transport",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/fr.json b/lang/fr.json
index 784d81c..5902679 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -7,9 +7,9 @@
     "category:car_amenities": "Équipements auto",
     "category:car_furniture": "Fournitures automobiles",
     "category:car_maxspeed": "Limites de vitesse",
-    "category:car_routes": "",
+    "category:car_routes": "Itinéraires auto",
     "category:children": "Équipements pour enfants",
-    "category:coal": "",
+    "category:coal": "Charbon",
     "category:communication": "Communication",
     "category:construction": "Constructions",
     "category:craft": "Artisanat",
@@ -18,9 +18,9 @@
     "category:cycle_amenities": "Équipements vélo",
     "category:cycle_routes": "Itinéraires vélo",
     "category:education": "Éducation",
-    "category:electric_power": "Énergie",
+    "category:electric_power": "Production/transport électrique",
     "category:emergency": "Services d'urgence",
-    "category:energy": "",
+    "category:energy": "Énergie",
     "category:financial": "Finance",
     "category:gastro": "Restauration",
     "category:gastro-smoking": "Restauration sans tabac",
@@ -32,11 +32,12 @@
     "category:internet": "Internet",
     "category:leisure": "Loisirs",
     "category:leisure_sport_shopping": "Loisirs",
-    "category:memorial": "",
+    "category:memorial": "Mémoriaux",
     "category:military": "Militaire",
     "category:mtb-routes": "Itinéraires de VTT",
     "category:natural": "Éléments naturels",
-    "category:oil_gas": "",
+    "category:office": "Bureaux",
+    "category:oil_gas": "Pétrole et gaz naturel",
     "category:other": "Autres",
     "category:outdoor": "Activités de plein air",
     "category:phone": "Téléphone",
@@ -44,7 +45,8 @@
     "category:places_geo": "Lieux",
     "category:playgrounds": "Jeux pour enfants",
     "category:post": "",
-    "category:pt": "",
+    "category:power_routes": "Réseaux électriques",
+    "category:pt": "Carte des transports publics",
     "category:pt:routes": "Lignes",
     "category:pt:stops": "Arrêts/Stops, Stations",
     "category:pt_amenities": "Équipements",
@@ -55,13 +57,14 @@
     "category:railway-maxspeed": "Limites de vitesse",
     "category:railway-routes": "Lignes ferroviaires",
     "category:religion": "Religion",
-    "category:renewables": "",
+    "category:renewables": "Énergies renouvelables",
     "category:residential": "Zones résidentielles",
     "category:resources": "Extraction des ressources",
     "category:services": "Services",
     "category:shop": "Magasins/Boutiques",
     "category:special": "Catégories spéciales",
     "category:sport": "Sports",
+    "category:swimming_bathing": "Natation/Baignade/Bains",
     "category:tourism_attractions": "Tourisme",
     "category:tourism_services": "Tourisme",
     "category:transport": "Transports",
@@ -74,5 +77,6 @@
     "category:waste": "Déchets/Recyclage",
     "category:water": "Hydrographie",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Zones industrielles"
+    "category:works": "Zones industrielles",
+    "category:xmas": "Noël"
 }
diff --git a/lang/hu.json b/lang/hu.json
index a673480..b188f7a 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -36,6 +36,7 @@
     "category:military": "Katonai objektumok",
     "category:mtb-routes": "Hegyikerékpáros útvonalak",
     "category:natural": "Természeti képződmények",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Egyéb",
     "category:outdoor": "Szabadtéri tevékenységek",
@@ -44,6 +45,7 @@
     "category:places_geo": "Helyek",
     "category:playgrounds": "Játszóterek",
     "category:post": "Posta",
+    "category:power_routes": "",
     "category:pt": "Tömegközlekedési térkép",
     "category:pt:routes": "Útvonalak",
     "category:pt:stops": "Megállók és állomások",
@@ -62,6 +64,7 @@
     "category:shop": "Vásárlás",
     "category:special": "Speciális",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Látnivalók",
     "category:tourism_services": "Turisztikai szolgáltatások",
     "category:transport": "Közlekedés",
@@ -74,5 +77,6 @@
     "category:waste": "Hulladék",
     "category:water": "Vizek",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Üzemek"
+    "category:works": "Üzemek",
+    "category:xmas": ""
 }
diff --git a/lang/it.json b/lang/it.json
index 1e54cd3..75dff96 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -36,6 +36,7 @@
     "category:military": "Militare",
     "category:mtb-routes": "",
     "category:natural": "Natura",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Altri",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Luoghi",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Stazioni e fermate",
@@ -62,6 +64,7 @@
     "category:shop": "Acquisti",
     "category:special": "",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
     "category:transport": "Trasporti",
@@ -74,5 +77,6 @@
     "category:waste": "Smaltimento",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Fabbriche"
+    "category:works": "Fabbriche",
+    "category:xmas": ""
 }
diff --git a/lang/ja.json b/lang/ja.json
index 6f92a3b..01be546 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -36,6 +36,7 @@
     "category:military": "軍事",
     "category:mtb-routes": "",
     "category:natural": "自然地層",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "その他",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "場所",
     "category:playgrounds": "",
     "category:post": "郵便",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "停留所と駅",
@@ -62,6 +64,7 @@
     "category:shop": "ショッピング",
     "category:special": "",
     "category:sport": "スポーツ",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "観光",
     "category:tourism_services": "観光",
     "category:transport": "輸送",
@@ -74,5 +77,6 @@
     "category:waste": "処理場",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "工場"
+    "category:works": "工場",
+    "category:xmas": ""
 }
diff --git a/lang/nl.json b/lang/nl.json
index a7ca08e..39911ad 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -36,6 +36,7 @@
     "category:military": "Militair",
     "category:mtb-routes": "",
     "category:natural": "Natuurlijke Formaties",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Andere",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Plaatsen",
     "category:playgrounds": "",
     "category:post": "Post",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Haltes en Stations",
@@ -62,6 +64,7 @@
     "category:shop": "Winkelen",
     "category:special": "",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Toerisme",
     "category:tourism_services": "Toerisme",
     "category:transport": "Vervoer",
@@ -74,5 +77,6 @@
     "category:waste": "Afvalverwijdering",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Fabrieken"
+    "category:works": "Fabrieken",
+    "category:xmas": ""
 }
diff --git a/lang/pl.json b/lang/pl.json
index fbce3f3..b470971 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Miejsca",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Przystanki i Stacje",
@@ -62,6 +64,7 @@
     "category:shop": "Zakupy",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turystyka",
     "category:tourism_services": "Turystyka",
     "category:transport": "Transport",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/pt-br.json b/lang/pt-br.json
index e0fa41f..04af446 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -9,7 +9,7 @@
     "category:car_maxspeed": "Velocidade máxima",
     "category:car_routes": "Rotas rodoviárias",
     "category:children": "Equipamentos infantis",
-    "category:coal": "",
+    "category:coal": "Carvão",
     "category:communication": "Comunicação",
     "category:construction": "Terrenos vazios e obras",
     "category:craft": "Ofícios",
@@ -18,9 +18,9 @@
     "category:cycle_amenities": "Equipamentos",
     "category:cycle_routes": "Ciclorrotas",
     "category:education": "Educação",
-    "category:electric_power": "Energia",
+    "category:electric_power": "Energia elétrica",
     "category:emergency": "Emergência",
-    "category:energy": "",
+    "category:energy": "Energia",
     "category:financial": "Finanças",
     "category:gastro": "Gastronomia",
     "category:gastro-smoking": "Gastronomia sem fumo",
@@ -32,11 +32,12 @@
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:leisure_sport_shopping": "Lazer, esportes e compras",
-    "category:memorial": "",
+    "category:memorial": "Memoriais",
     "category:military": "Militar",
-    "category:mtb-routes": "Rotas mountain bike",
+    "category:mtb-routes": "Rotas de mountain bike",
     "category:natural": "Formações naturais",
-    "category:oil_gas": "",
+    "category:office": "",
+    "category:oil_gas": "Petróleo e gás",
     "category:other": "Outros",
     "category:outdoor": "Atividades ao ar livre",
     "category:phone": "Telefone",
@@ -44,6 +45,7 @@
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parquinhos",
     "category:post": "Correios",
+    "category:power_routes": "",
     "category:pt": "Mapa de transporte público",
     "category:pt:routes": "Rotas",
     "category:pt:stops": "Paradas e estações",
@@ -55,13 +57,14 @@
     "category:railway-maxspeed": "Velocidade máxima",
     "category:railway-routes": "Rotas ferroviárias",
     "category:religion": "Religião",
-    "category:renewables": "",
+    "category:renewables": "Renováveis",
     "category:residential": "Áreas residenciais",
     "category:resources": "Extração de recursos",
     "category:services": "Prestação de serviços",
     "category:shop": "Compras",
     "category:special": "Especial",
     "category:sport": "Esportes",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Serviços de turismo",
     "category:transport": "Mobilidade",
@@ -74,5 +77,6 @@
     "category:waste": "Lixo",
     "category:water": "Hidrografia",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Fábricas"
+    "category:works": "Fábricas",
+    "category:xmas": ""
 }
diff --git a/lang/pt.json b/lang/pt.json
index 64314ad..ac5a8aa 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "",
     "category:natural": "Formações naturais",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Outros",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parques infantis",
     "category:post": "Correios",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "Rotas",
     "category:pt:stops": "",
@@ -62,6 +64,7 @@
     "category:shop": "Compras",
     "category:special": "Especial",
     "category:sport": "Desporto",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
     "category:transport": "Transportes",
@@ -74,5 +77,6 @@
     "category:waste": "Lixo",
     "category:water": "Massas de água",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Fábricas"
+    "category:works": "Fábricas",
+    "category:xmas": ""
 }
diff --git a/lang/ro.json b/lang/ro.json
index 827c329..857f9e0 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Altele",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Locuri",
     "category:playgrounds": "Loc de joaca",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
@@ -62,6 +64,7 @@
     "category:shop": "Cumpărături",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport": "Transport",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/ru.json b/lang/ru.json
index 57ed500..0d2c78d 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -36,6 +36,7 @@
     "category:military": "Вооружённые силы",
     "category:mtb-routes": "",
     "category:natural": "Природные образования",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Прочее",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Места",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Остановки и станции",
@@ -62,6 +64,7 @@
     "category:shop": "Покупки",
     "category:special": "",
     "category:sport": "Спорт",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport": "Транспорт",
@@ -74,5 +77,6 @@
     "category:waste": "Переработка отходов",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Промышленность"
+    "category:works": "Промышленность",
+    "category:xmas": ""
 }
diff --git a/lang/template.json b/lang/template.json
index 39c78d3..135ff39 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
@@ -62,6 +64,7 @@
     "category:shop": "",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "",
     "category:tourism_services": "",
     "category:transport": "",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/uk.json b/lang/uk.json
index ae7ca29..cb3d073 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "Природне середовище",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Інше",
     "category:outdoor": "",
@@ -44,6 +45,7 @@
     "category:places_geo": "Місцевість",
     "category:playgrounds": "Дитячий майданчик",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Зупинки та станції",
@@ -62,6 +64,7 @@
     "category:shop": "Торгівля",
     "category:special": "",
     "category:sport": "Спорт. Інше.",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport": "Транспорт",
@@ -74,5 +77,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/memorial.json b/memorial.json
index 117785c..4095a13 100644
--- a/memorial.json
+++ b/memorial.json
@@ -2,7 +2,9 @@
     "type": "overpass",
     "name": {
         "de": "Denkmäler",
-        "en": "Memorials"
+        "en": "Memorials",
+        "fr": "Mémoriaux",
+        "pt-br": "Memoriais"
     },
     "query": {
         "11": [
diff --git a/mtb-routes.json b/mtb-routes.json
index 02d2c71..ffc2670 100644
--- a/mtb-routes.json
+++ b/mtb-routes.json
@@ -4,7 +4,7 @@
         "en": "Mountain bike routes",
         "fr": "Itinéraires de VTT",
         "hu": "Hegyikerékpáros útvonalak",
-        "pt-br": "Rotas mountain bike"
+        "pt-br": "Rotas de mountain bike"
     },
     "query": {
         "13": "relation[type=route][route=mtb]"
diff --git a/office.json b/office.json
new file mode 100644
index 0000000..c66872f
--- /dev/null
+++ b/office.json
@@ -0,0 +1,45 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "Ämter, Dienst- und Geschäftsstellen",
+        "en": "Offices",
+        "fr": "Bureaux"
+    },
+    "query": {
+        "14": "nwr[office]"
+    },
+    "feature": {
+        "description": [
+            "{{ tagTrans('office', tags.office) }}",
+            "{% if tags.office == 'government' and tags.government %}({{ tagTrans('government', tags.government) }}){% endif %}"
+        ],
+        "markerSign": "{{ const[tags.office]|raw }}"
+    },
+    "const": {
+        "government": "<i class='fas fa-landmark'></i>",
+        "company": "<i class='fas fa-building'></i>",
+        "estate_agent": "<i class='fas fa-home'></i>",
+        "insurance": "<i class='fas fa-file-signature'></i>",
+        "lawyer": "<i class='fas fa-gavel'></i>",
+        "educational_institution": "<i class='fas fa-school'></i>",
+        "administrative": "<i class='fas fa-landmark'></i>",
+        "telecommunication": "<i class='fas fa-phone'></i>",
+        "ngo": "<i class='fas fa-people-carry'></i>",
+        "quango": "<i class='fas fa-people-carry'></i>",
+        "association": "<i class='fas fa-people-carry'></i>",
+        "it": "<i class='fas fa-desktop'></i>",
+        "accountant": "<i class='fas fa-money-bill-alt'></i>",
+        "tax_advisor": "<i class='fas fa-money-bill-alt'></i>",
+        "employment_agency": "<i class='fas fa-user'></i>",
+        "research": "<i class='fas fa-flask'></i>",
+        "religion": "<i class='fas fa-pray'></i>",
+        "architect": "<i class='fas fa-torii-gate'></i>",
+        "financial": "<i class='fas fa-money-bill'></i>",
+        "newspaper": "<i class='fas fa-newspaper'></i>",
+        "political_party": "<i class='fas fa-flag'></i>",
+        "advertising_agency": "<i class='fas fa-ad'></i>",
+        "therapist": "<i class='fas fa-couch'></i>",
+        "travel_agent": "<i class='fas fa-plane-departure'></i>",
+        "publisher": "<i class='fas fa-book'></i>"
+    }
+}
diff --git a/oil_gas.json b/oil_gas.json
index 6dfaf03..d74a1df 100644
--- a/oil_gas.json
+++ b/oil_gas.json
@@ -2,7 +2,9 @@
     "type": "overpass",
     "name": {
         "de": "Erdöl und Erdgas",
-        "en": "Petroleum and natural gas"
+        "en": "Petroleum and natural gas",
+        "fr": "Pétrole et gaz naturel",
+        "pt-br": "Petróleo e gás"
     },
     "query": {
         "11": [
@@ -23,7 +25,7 @@
             ")"
         ],
         "13": [
-          "(",
+            "(",
             "way[man_made~\"^(pipeline|goods_conveyor)$\"][substance~\"^(|.*;)(oil|gas|lng|cng|multiphase)(|;.*)$\"];",
             "relation[man_made~\"^(pipeline|goods_conveyor)$\"][substance~\"^(|.*;)(oil|gas|lng|cng|multiphase)(|;.*)$\"];",
             "node[landuse=industrial][industrial~\"^(|.*;)(oil|gas|lng|cng|multiphase|refinery|oil_refinery)(|;.*)$\"];",
diff --git a/power_routes.json b/power_routes.json
new file mode 100644
index 0000000..4405a20
--- /dev/null
+++ b/power_routes.json
@@ -0,0 +1,64 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Power routes",
+        "fr": "Réseaux électriques"
+    },
+    "query": {
+        "10": "relation[type=route][route=power]"
+    },
+    "members": true,
+    "feature": {
+        "pre": "{% set color = '#' ~ tags.operator|default('')|md5|slice(0, 6) %}",
+        "description": "{% if tags.operator %}{{ tags.operator }}{% endif %}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': color })|raw }}",
+        "markerSymbol": "",
+        "styles": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "{% set color = '#d41d8c' %}",
+            "{% if tags.ref %}",
+            "  {% for ref in tags.ref|split(';') %}",
+            "    {% set refs = refs|merge([ ref|trim ]) %}",
+            "  {% endfor %}",
+            "{% endif %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.operator %}",
+            "    {% set color = '#' ~ master.tags.operator|md5|slice(0, 6) %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}",
+            "",
+            "{% set refs = refs|unique|natsort({ insensitive: true }) %}"
+        ],
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul>",
+            "{% for master in masters %}",
+            "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: _color })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ master.tags.operator }}</span>",
+            "  </li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "{{ color }}",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join(' · ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    }
+}
diff --git a/pt.json b/pt.json
index 46451cf..7ade18d 100644
--- a/pt.json
+++ b/pt.json
@@ -3,6 +3,7 @@
     "name": {
         "de": "ÖV Karte",
         "en": "Public transport map",
+        "fr": "Carte des transports publics",
         "hu": "Tömegközlekedési térkép",
         "pt-br": "Mapa de transporte público"
     },
@@ -67,6 +68,12 @@
         ],
         "markerSymbol": "",
         "styles": "",
+        "style:hover": {
+            "width": 0
+        },
+        "style:selected": {
+            "width": 0
+        },
         "listStopsExclude": "true",
         "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
         "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
@@ -82,6 +89,10 @@
             "{% set isWay = false %}",
             "{% set aRoute = null %}",
             "{% set refs = [] %}",
+            "{% set dirForward = false %}",
+            "{% set dirBackward = false %}",
+            "{% set hover = false %}",
+            "{% set selected = false %}",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport == 'stop_area' %}",
             "    {% set stopName = master.tags.name %}",
@@ -97,7 +108,14 @@
             "    {% if master.tags.ref %}",
             "      {% set refs = refs|merge([ master.tags.ref ]) %}",
             "    {% endif %}",
+            "    {% if master.dir == 'forward' %}{% set dirForward = true %}",
+            "    {% elseif master.dir == 'backward' %}{% set dirBackward = true %}",
+            "    {% else %}{% set dirForward = true %}{% set dirBackward = true %}",
+            "    {% endif %}",
             "  {% endif %}",
+            "",
+            "  {% if master.flags.hover %}{% set hover = master.dir|default('both') %}{% endif %}",
+            "  {% if master.flags.selected %}{% set selected = master.dir|default('both') %}{% endif %}",
             "{% endfor %}",
             "",
             "{% set refs = refs|unique|natsort({ insensitive: true }) %}",
@@ -118,25 +136,78 @@
             "{% endfor %}",
             "</ul>"
         ],
-        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}way{% else %}{% endif %}",
+        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}casing,way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
         "listStopsMarkerSign": null,
         "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
         "listStopsExclude": "{{ not isStop or stopCount == 0 }}",
         "listStopsTitle": "{% if tags %}{{ tags.name|default(stopName)|default(trans('unknown')) }}{% else %}<li>{{ trans('loading') }}</li>{% endif %}",
         "listStopsDescription": "{{ refs|join(' · ') }}",
         "listRoutesExclude": "true",
+        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerPointer({ })|raw }}{% endif %}{% endif %}",
+        "markerSign": " ",
+        "style:stop": {
+            "color": "{{ color|default('#ff0000') }}",
+            "width": "4",
+            "radius": "3",
+            "zIndex": "1"
+        },
         "style:way": {
-            "width": "3",
             "color": "{{ color|default('#ff0000') }}",
+            "width": "4",
+            "dashArray": "{% if not dirForward or not dirBackward %}27,8{% endif %}",
+            "dashOffset": "{% if dirBackward %}28{% else %}0{% endif %}",
+            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
+            "noClip": "{% if not dirForward or not dirBackward %}true{% else %}false{% endif %}",
+            "opacity": 1,
             "text": "{{ refs|join(' · ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold"
+            "textFontWeight": "bold",
+            "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "35",
+            "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "{{ color|default('#ff0000') }}"
         },
-        "style:stop": {
-            "width": "5",
-            "color": "{{ color|default('#ff0000') }}",
-            "radius": "3"
+        "style:hover": {
+            "pane": "hover",
+            "width": "4",
+            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
+            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
+            "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
+            "color": "black",
+            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "35",
+            "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "black"
+        },
+        "style:selected": {
+            "pane": "selected",
+            "width": "4",
+            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
+            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
+            "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
+            "color": "#3f3f3f",
+            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "35",
+            "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "#3f3f3f"
         }
     },
     "info": [
diff --git a/renewables.json b/renewables.json
index 8e22ef7..6c32493 100644
--- a/renewables.json
+++ b/renewables.json
@@ -2,7 +2,9 @@
     "type": "overpass",
     "name": {
         "de": "Erneuerbare Energien",
-        "en": "Renewables"
+        "en": "Renewables",
+        "fr": "Énergies renouvelables",
+        "pt-br": "Renováveis"
     },
     "query": {
         "11": [
diff --git a/swimming_bathing.json b/swimming_bathing.json
new file mode 100644
index 0000000..eccb601
--- /dev/null
+++ b/swimming_bathing.json
@@ -0,0 +1,134 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "Schwimmen und Baden",
+        "en": "Swimming and bathing",
+        "fr": "Natation/Baignade/Bains"
+    },
+    "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];",
+            "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.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>"
+        }
+    }
+}
diff --git a/xmas.json b/xmas.json
new file mode 100644
index 0000000..ab72802
--- /dev/null
+++ b/xmas.json
@@ -0,0 +1,81 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Christmas",
+        "fr": "Noël"
+    },
+    "query": {
+        "14": [
+            "(",
+            "node[\"xmas:feature\"];",
+            "way[\"xmas:feature\"];",
+            "relation[\"xmas:feature\"];",
+            ")"
+        ]
+    },
+    "feature": {
+        "title": "{{ attribute(tags, \"xmas:name\")|default(trans(\"unnamed\")) }}",
+        "description": "{{ tagTransList(\"xmas:feature\", attribute(tags, \"xmas:feature\")) }}",
+        "body": [
+            "{% if attribute(tags, 'xmas:location') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-globe\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>{{ keyTrans('location') }}:</span>",
+            "  <span class='value'>",
+            "    {{ attribute(tags, 'xmas:location') }}",
+            "  </span>",
+            "</li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'xmas:day_date') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-clock-o\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>Open:</span>",
+            "  <span class='value'>",
+            "    {{ attribute(tags, 'xmas:day_date') }}",
+            "  </span>",
+            "</li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'xmas:opening_hours') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-clock-o\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>{{ keyTrans('opening_hours') }}:</span>",
+            "  <span class='value'>",
+            "    {{ attribute(tags, 'xmas:opening_hours') }}",
+            "  </span>",
+            "</li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'xmas:url') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-globe\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>{{ keyTrans('website') }}:</span>",
+            "  <span class='value'>",
+            "    <a target='_blank' href='{{ attribute(tags, 'xmas:url')|websiteUrl }}'>{{ attribute(tags, 'xmas:url') }}</a>",
+            "  </span>",
+            "</li>",
+            "{% endif %}"
+        ],
+        "markerSign": [
+            "{{ attribute(const, attribute(tags, 'xmas:feature'))|raw }}",
+            ""
+        ]
+    },
+    "const": {
+        "market": "<img src='maki:commercial'>",
+        "tree": "<i class=\"fa fa-tree\" aria-hidden=\"true\"></i>",
+        "shop": "<i class=\"fa fa-shopping-basket\" aria-hidden=\"true\"></i>",
+        "event": "<img src='maki:amusement-park'>"
+    },
+    "info": [
+        "<table>",
+        "{% for value, icon in const %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ icon|raw }}</div></td>",
+        "    <td>{{ tagTrans('xmas:feature', value) }}</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "</table>"
+    ]
+}