diff --git a/administrative.json b/administrative.json
index 7f6bf0e..05bc2d1 100644
--- a/administrative.json
+++ b/administrative.json
@@ -11,6 +11,7 @@
         "hu": "Adminisztratív határok",
         "it": "Suddivisioni amministrative",
         "nl": "Administratieve gebieden",
+        "pt": "Regiões administrativas",
         "pt-br": "Divisão Político-Administrativa",
         "ro": "Zona administrativa",
         "ru": "Административные границы"
diff --git a/agriculture.json b/agriculture.json
index e7f2927..7ef928f 100644
--- a/agriculture.json
+++ b/agriculture.json
@@ -12,6 +12,7 @@
         "it": "Agricoltura",
         "ja": "農業",
         "nl": "Landbouw",
+        "pt": "Agricultura",
         "pt-br": "Agricultura",
         "ro": "Agricultura",
         "ru": "Сельское хозяйство"
@@ -37,4 +38,4 @@
             "{% endif %}"
         ]
     }
-}
\ No newline at end of file
+}
diff --git a/alternative_routes.json b/alternative_routes.json
index f9ad554..019e49d 100644
--- a/alternative_routes.json
+++ b/alternative_routes.json
@@ -8,6 +8,7 @@
         "it": "Itinerari segnalati",
         "ja": "ルート",
         "nl": "Alternatieve routes",
+        "pt": "Rotas",
         "pt-br": "Rotas",
         "ru": "Маршруты",
         "uk": "Маршрути"
diff --git a/buildings.json b/buildings.json
index 17b49fa..eba8b83 100644
--- a/buildings.json
+++ b/buildings.json
@@ -4,6 +4,7 @@
         "de": "Gebäude",
         "en": "Buildings",
         "fr": "Bâtiments",
+        "pt": "Edifícios",
         "pt-br": "Edificações"
     },
     "query": {
diff --git a/car_amenities.json b/car_amenities.json
index 67daf23..9351fee 100644
--- a/car_amenities.json
+++ b/car_amenities.json
@@ -43,10 +43,9 @@
         "car_rental": "R",
         "car_sharing": "S",
         "car_wash": "🚿",
-        "charging_station": "🔌 ",
+        "charging_station": "🔌",
         "fuel": "⛽",
         "parking": "🅿",
-        "motorcycle_parking": "🅿",
-        "charging_station": "🔌"
+        "motorcycle_parking": "🅿"
     }
 }
diff --git a/car_furniture.json b/car_furniture.json
index 39cb629..9e64dc3 100644
--- a/car_furniture.json
+++ b/car_furniture.json
@@ -9,6 +9,7 @@
         "ja": "街路設置公共物",
         "nl": "Straatmeubilair",
         "pl": "Elementy drogowe",
+        "pt": "Mobiliário urbano",
         "pt-br": "Mobiliário Urbano",
         "ru": "Элементы дороги",
         "uk": "Street Furniture"
diff --git a/car_maxspeed.json b/car_maxspeed.json
index 4cd4929..5c5be40 100644
--- a/car_maxspeed.json
+++ b/car_maxspeed.json
@@ -4,6 +4,7 @@
         "de": "Höchstgeschwindigkeiten",
         "en": "Maxspeed",
         "fr": "Limites de vitesse",
+        "pt": "Velocidade máxima",
         "pt-br": "Velocidade Máxima"
     },
     "query": {
diff --git a/car_routes.json b/car_routes.json
new file mode 100644
index 0000000..22e00ba
--- /dev/null
+++ b/car_routes.json
@@ -0,0 +1,59 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Car routes"
+    },
+    "query": {
+        "10": "relation[type=route][route=road]"
+    },
+    "members": true,
+    "feature": {
+        "pre": "{% set color = '#' ~ tags.network|default('')|md5|slice(0, 6) %}",
+        "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% 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 %}",
+            "  {% set refs = refs|merge([ tags.ref ]) %}",
+            "{% endif %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.network %}",
+            "    {% set color = '#' ~ master.tags.network|md5|slice(0, 6) %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "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'>{{ tagTrans('network', master.tags.network) }}</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/communication.json b/communication.json
index ca554a1..27f8372 100644
--- a/communication.json
+++ b/communication.json
@@ -13,6 +13,7 @@
         "it": "Communicazioni",
         "ja": "交流",
         "nl": "Communicatie",
+        "pt": "Comunicação",
         "pt-br": "Comunicação",
         "ro": "Comunicatii",
         "ru": "Услуги связи",
diff --git a/construction.json b/construction.json
index 97249d1..6a52740 100644
--- a/construction.json
+++ b/construction.json
@@ -9,6 +9,7 @@
         "it": "Cantieri",
         "ja": "工事中",
         "nl": "Bouwterrein",
+        "pt": "Locais de construção",
         "pt-br": "Terrenos e Obras",
         "ru": "Места строительства"
     },
diff --git a/craft.json b/craft.json
index 1c24c53..c1b119b 100644
--- a/craft.json
+++ b/craft.json
@@ -4,6 +4,7 @@
         "de": "Handwerk",
         "en": "Craft",
         "fr": "Artisanat",
+        "pt": "Artesanato",
         "pt-br": "Ofícios"
     },
     "query": {
diff --git a/culture.json b/culture.json
index aeb7220..9fd02fc 100644
--- a/culture.json
+++ b/culture.json
@@ -15,6 +15,7 @@
         "ja": "文化",
         "nl": "Cultuur",
         "pl": "Kultura",
+        "pt": "Cultura",
         "pt-br": "Cultura",
         "ro": "Cultura",
         "ru": "Культура",
diff --git a/culture_religion.json b/culture_religion.json
index 9ba32a8..ee1cd5d 100644
--- a/culture_religion.json
+++ b/culture_religion.json
@@ -15,6 +15,7 @@
         "ja": "文化",
         "nl": "Cultuur",
         "pl": "Kultura",
+        "pt": "Cultura e religião",
         "pt-br": "Cultura",
         "ro": "Cultura",
         "ru": "Культура",
diff --git a/cycle_routes.json b/cycle_routes.json
index 14cd4fa..5df6c4c 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -4,6 +4,7 @@
         "de": "Radrouten",
         "en": "Cycle Routes",
         "fr": "Itinéraires vélo",
+        "pt": "Ciclovias",
         "pt-br": "Ciclorrotas"
     },
     "query": {
@@ -12,12 +13,93 @@
         "12": "relation[type=route][route=bicycle][network~'^(icn|ncn|rcn)$']",
         "15": "relation[type=route][route=bicycle]"
     },
+    "members": true,
     "feature": {
-        "priority": "{% if tags.network=='icn' %}0{% elseif tags.network=='ncn' %}1{% elseif tags.network=='rcn' %}2{% else %}3{% endif %}",
+        "priority": "{{ const[tags.network].priority|default(4) }}",
+        "description": "{{ tagTrans('network', tags.network) }}",
+        "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": "",
+        "markerSymbol": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set priority = 4 %}",
+            "{% set network = '' %}",
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% set _p = const[master.tags.network].priority|default(4) %}",
+            "  {% if _p < priority %}",
+            "    {% set priority = _p %}",
+            "    {% set network = master.tags.network %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "title": "",
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul class='overpass-layer-list'>",
+            "{% for master in masters %}",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].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'>{{ tagTrans('network', master.tags.network) }}</span>",
+            "  </li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
         "style": {
+            "color": "{{ const[network].color }}",
             "width": 4,
-            "color": "{% if tags.network=='icn' %}#ff0000{% elseif tags.network=='ncn' %}#ff007f{% elseif tags.network=='rcn' %}#7f00ff{% else %}#0000ff{% endif %}",
-            "opacity": 1
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    },
+    "const": {
+        "icn": {
+            "color": "#ff0000",
+            "priority": 0,
+            "zoom": 6
+        },
+        "ncn": {
+            "color": "#ff00ba",
+            "priority": 1,
+            "zoom": 9
+        },
+        "rcn": {
+            "color": "#ba00ff",
+            "priority": 2,
+            "zoom": 12
+        },
+        "lcn": {
+            "color": "#0000ff",
+            "priority": 3,
+            "zoom": 15
+        },
+        "": {
+            "color": "#007fff",
+            "priority": 4,
+            "zoom": 15
         }
-    }
+    },
+    "info": [
+        "<table>",
+        "{% for value, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerLine({ 'width': 4, color: data.color })|raw }}</td>",
+        "    <td>{% if value %}{{ tagTrans('network', value) }}{% else %}{{ trans('unknown') }}{% endif %}</td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ]
 }
diff --git a/education.json b/education.json
index 7b2ac9d..57bdc3d 100644
--- a/education.json
+++ b/education.json
@@ -12,6 +12,7 @@
         "ja": "教育サービス",
         "nl": "Onderwijs",
         "pl": "Edukacyjne",
+        "pt": "Educação",
         "pt-br": "Educação",
         "ro": "Servicii educatie",
         "ru": "Образование",
diff --git a/emergency.json b/emergency.json
index 0b39e12..2889d1e 100644
--- a/emergency.json
+++ b/emergency.json
@@ -13,6 +13,7 @@
         "it": "Servizi d'emergenza",
         "ja": "緊急サービス",
         "nl": "Hulpdiensten",
+        "pt": "Emergência",
         "pt-br": "Emergência",
         "ro": "Servicii urgenta",
         "ru": "Экстренные службы",
@@ -83,4 +84,4 @@
             "sign": "📞"
         }
     }
-}
\ No newline at end of file
+}
diff --git a/financial.json b/financial.json
index b8dc5b5..0320bbc 100644
--- a/financial.json
+++ b/financial.json
@@ -11,6 +11,7 @@
         "ja": "金融",
         "nl": "Financieel",
         "pl": "Finasowe",
+        "pt": "Finanças",
         "pt-br": "Finanças",
         "ro": "Financiar",
         "ru": "Финансы",
diff --git a/gastro-smoking.json b/gastro-smoking.json
index d7ac6ec..2bd2b6f 100644
--- a/gastro-smoking.json
+++ b/gastro-smoking.json
@@ -4,6 +4,7 @@
         "de": "Rauchfreie Gastronomie",
         "en": "Smokefree Gastronomy",
         "fr": "Restauration sans tabac",
+        "pt": "Restauração livre de tabaco",
         "pt-br": "Gastronomia sem fumo"
     },
     "query": {
diff --git a/gastro.json b/gastro.json
index c0c1298..369ff4c 100644
--- a/gastro.json
+++ b/gastro.json
@@ -12,6 +12,7 @@
         "ja": "食べ物",
         "nl": "Gastronomie",
         "pl": "Gastronomia",
+        "pt": "Restauração",
         "pt-br": "Gastronomia",
         "ro": "Gastronomie",
         "ru": "Общепит",
@@ -29,6 +30,18 @@
             "   <span class='key'>{{ keyTrans('cuisine') }}:</span>",
             "   <span class='value'>{{ tagTransList('cuisine', tags.cuisine)|default(trans('unknown')) }}</span>",
             "  </li>",
+            "  {% set diets = tagsPrefix(tags, 'diet:') %}",
+            "  {% if diets %}",
+            "    <li class='hasSymbol'>",
+            "     <i class=\"fa fa-cutlery\" aria-hidden=\"true\"></i>",
+            "     <span class='key'>{{ keyTrans('diet') }}:</span>",
+            "     <span class='value'>",
+            "     {% for kv, k in diets %}",
+            "       {% set v = tags[k] %}",
+            "       <span title='{{ k ~ '=' ~ v }}' style='white-space: nowrap; margin-right: 0.5em;'>{% if v == 'no' %}✘ {% elseif v == 'only' %}❗{% else %}✔{% endif %}{{ keyTrans(k) }}</span>",
+            "     {% endfor %}",
+            "    </span></li>",
+            "  {% endif %}",
             "</ul>"
         ],
         "markerSign": "{% if tags.amenity=='bar' %}&#127864;{% elseif tags.amenity=='biergarten'%}&#127867;{% elseif tags.amenity=='cafe' %}&#9749;{% elseif tags.amenity=='fast_food' %}&#127828;{% elseif tags.amenity=='ice_cream' %}&#127848;{% elseif tags.amenity=='pub' %}&#127866;{% else %}&#127860;{% endif %}"
diff --git a/health.json b/health.json
index 92c8c91..f35801e 100644
--- a/health.json
+++ b/health.json
@@ -11,6 +11,7 @@
         "ja": "健康",
         "nl": "Gezondheid",
         "pl": "Zdrowie",
+        "pt": "Saúde",
         "pt-br": "Saúde e Assistência",
         "ro": "Sanatate",
         "ru": "Медицина",
@@ -87,4 +88,4 @@
         "amenity=social_facility": "",
         "amenity=veterinary": "<img src='maki:veterinary'>"
     }
-}
\ No newline at end of file
+}
diff --git a/hiking_routes.json b/hiking_routes.json
index 16bcd05..0ae1629 100644
--- a/hiking_routes.json
+++ b/hiking_routes.json
@@ -4,6 +4,7 @@
         "de": "Wanderrouten",
         "en": "Hiking routes",
         "fr": "Itinéraires pédestres",
+        "pt": "Rotas de caminhada",
         "pt-br": "Rotas de Caminhada"
     },
     "query": {
@@ -12,27 +13,92 @@
         "12": "relation[type=route][route=hiking][network~\"^(iwn|nwn|rwn)$\"]",
         "14": "relation[type=route][route=hiking]"
     },
+    "members": true,
     "feature": {
-        "description": "{{ tagTrans('network', tags.network) }}",
-        "priority": [
-            "{% set network_data = const[tags.network] %}",
-            "{% if network_data %}",
-            "{{ network_data.priority }}",
-            "{% endif %}"
-        ]
+        "priority": "{{ const[tags.network].priority|default(4) }}",
+        "description": "{% if tags.network %}{{ tagTrans('network', tags.network) }}{% endif %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network|default('')].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": "",
+        "markerSymbol": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set priority = 4 %}",
+            "{% set network = '' %}",
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% set _p = const[master.tags.network].priority|default(4) %}",
+            "  {% if _p < priority %}",
+            "    {% set priority = _p %}",
+            "    {% set network = master.tags.network %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul class='overpass-layer-list'>",
+            "{% for master in masters %}",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: const[master.tags.network].color|default(const[''].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'>{{ tagTrans('network', master.tags.network) }}</span>",
+            "  </li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "{{ const[network].color }}",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
     },
     "const": {
         "iwn": {
-            "priority": 1
+            "color": "#ff0000",
+            "priority": 0,
+            "zoom": 10
         },
         "nwn": {
-            "priority": 2
+            "color": "#ff00ba",
+            "priority": 1,
+            "zoom": 11
         },
         "rwn": {
-            "priority": 3
+            "color": "#ba00ff",
+            "priority": 2,
+            "zoom": 12
         },
         "lwn": {
-            "priority": 4
+            "color": "#0000ff",
+            "priority": 3,
+            "zoom": 14
+        },
+        "": {
+            "color": "#007fff",
+            "priority": 4,
+            "zoom": 14
         }
-    }
+    },
+    "info": [
+        "<table>",
+        "{% for value, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerLine({ 'width': 4, color: data.color })|raw }}</td>",
+        "    <td>{% if value %}{{ tagTrans('network', value) }}{% else %}{{ trans('unknown') }}{% endif %}</td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ]
 }
diff --git a/historic.json b/historic.json
index 48e2727..76c2e27 100644
--- a/historic.json
+++ b/historic.json
@@ -13,6 +13,7 @@
         "ja": "記念",
         "nl": "Historisch",
         "pl": "Miejsca Historyczne",
+        "pt": "Histórico",
         "pt-br": "Histórico",
         "ro": "Istoric",
         "ru": "Историческое",
@@ -82,4 +83,4 @@
             "zoom": 11
         }
     }
-}
\ No newline at end of file
+}
diff --git a/index.json b/index.json
index 1b5b475..dfcb4ee 100644
--- a/index.json
+++ b/index.json
@@ -22,7 +22,8 @@
                 "ro": "Timp liber, Sport si Cumparaturi",
                 "ru": "Досуг",
                 "uk": "Дозвілля",
-                "pt-br": "Lazer, Esportes e Compras"
+                "pt-br": "Lazer, Esportes e Compras",
+                "pt": "Lazer, desporto e compras"
             },
             "subCategories": [
                 {
@@ -42,6 +43,9 @@
                 },
                 {
                     "id": "children"
+                },
+                {
+                    "id": "outdoor"
                 }
             ]
         },
@@ -66,7 +70,8 @@
                 "ro": "Servicii",
                 "ru": "Услуги",
                 "uk": "Послуги",
-                "pt-br": "Serviços"
+                "pt-br": "Serviços",
+                "pt": "Serviços"
             },
             "subCategories": [
                 {
@@ -114,7 +119,8 @@
                 "ro": "Transport",
                 "ru": "Транспорт",
                 "uk": "Транспорт",
-                "pt-br": "Transportes"
+                "pt-br": "Transportes",
+                "pt": "Transportes"
             },
             "subCategories": [
                 {
@@ -124,7 +130,8 @@
                         "de": "Zu Fuß gehen",
                         "en": "Walking",
                         "fr": "Marche à pied",
-                        "pt-br": "Pedestre"
+                        "pt-br": "Pedestre",
+                        "pt": "Pedestre"
                     },
                     "subCategories": [
                         {
@@ -142,7 +149,8 @@
                         "de": "Radfahren",
                         "en": "Cycling",
                         "fr": "Cyclisme",
-                        "pt-br": "Ciclismo"
+                        "pt-br": "Ciclismo",
+                        "pt": "Ciclismo"
                     },
                     "subCategories": [
                         {
@@ -172,17 +180,15 @@
                         "ro": "Transport public",
                         "ru": "Общественный транспорт",
                         "uk": "Громадський транспорт",
-                        "pt-br": "Transporte Público"
+                        "pt-br": "Transporte Público",
+                        "pt": "Transportes públicos"
                     },
                     "subCategories": [
                         {
                             "id": "pt_amenities"
                         },
                         {
-                            "id": "pt_stops"
-                        },
-                        {
-                            "id": "pt_routes"
+                            "id": "pt"
                         }
                     ]
                 },
@@ -202,7 +208,8 @@
                         "ro": "Trafic individual",
                         "ru": "Частный транспорт",
                         "uk": "Приватний транспорт",
-                        "pt-br": "Tráfego Individual"
+                        "pt-br": "Tráfego Individual",
+                        "pt": "Transporte individual"
                     },
                     "subCategories": [
                         {
@@ -210,6 +217,9 @@
                         },
                         {
                             "id": "car_maxspeed"
+                        },
+                        {
+                            "id": "car_routes"
                         }
                     ]
                 }
@@ -222,7 +232,8 @@
                 "de": "Infrastruktur",
                 "en": "Infrastructure",
                 "fr": "Infrastructures",
-                "pt-br": "Infraestrutura"
+                "pt-br": "Infraestrutura",
+                "pt": "Infraestrutura"
             },
             "subCategories": [
                 {
@@ -252,7 +263,8 @@
                         "ja": "鉄道",
                         "nl": "Spoorwegen",
                         "ru": "Железные дороги",
-                        "pt-br": "Ferrovia"
+                        "pt-br": "Ferrovia",
+                        "pt": "Linhas ferroviárias"
                     },
                     "subCategories": [
                         {
@@ -260,6 +272,9 @@
                         },
                         {
                             "id": "railway-electrification"
+                        },
+                        {
+                            "id": "railway-routes"
                         }
                     ]
                 },
@@ -287,7 +302,8 @@
                 "en": "Special",
                 "de": "Spezial",
                 "pt-br": "Especial",
-                "fr": "Catégories spéciales"
+                "fr": "Catégories spéciales",
+                "pt": "Especial"
             },
             "subCategories": [
                 {
diff --git a/internet.json b/internet.json
index 1bafbe4..04454ce 100644
--- a/internet.json
+++ b/internet.json
@@ -10,6 +10,7 @@
         "hu": "Internethozzáférés",
         "ja": "インターネット接続",
         "nl": "Internettoegang",
+        "pt": "Acesso à Internet",
         "pt-br": "Acesso à Internet",
         "ro": "Acces internet"
     }
diff --git a/lang/ast.json b/lang/ast.json
index 827a031..54948ae 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -3,44 +3,48 @@
     "category:agriculture": "Agricultura",
     "category:alternative_amenities": "Infraestructures",
     "category:alternative_routes": "Rutes",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Infraestructures",
     "category:car_furniture": "Acondicionamientu urbanu",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Comunicaciones",
     "category:construction": "Sitios d'obres",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Servicios educativos",
     "category:emergency": "Servicios d'emerxencia",
     "category:financial": "Dineru",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomía",
     "category:health": "Salú",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Hestoria",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Accesu a Internet",
     "category:leisure": "Recréu",
     "category:military": "Militar",
+    "category:mtb-routes": "",
     "category:natural": "Formaciones naturales",
     "category:other": "Otres",
+    "category:outdoor": "",
     "category:phone": "Teléfonos",
     "category:places": "Llugares",
     "category:places_geo": "Llugares",
     "category:playgrounds": "Xuegos infantiles",
     "category:post": "Corréu",
     "category:power": "Enerxía",
+    "category:pt": "",
+    "category:pt:stops": "Paraes y estaciones",
+    "category:pt:routes": "",
     "category:pt_amenities": "Infraestructures",
-    "category:pt_routes": null,
-    "category:pt_stops": "Paraes y estaciones",
     "category:public": "Serviciu Públicu",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Relixón",
     "category:residential": "Zones residenciales",
     "category:resources": "Estraición de recursos",
@@ -49,12 +53,11 @@
     "category:tourism_attractions": "Turismu",
     "category:tourism_services": "Turismu",
     "category:transport_alternative": "Alternativu (Ciclismu, senderismu, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Basures",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Fábriques",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Recréu, deportes y compres",
     "category:railway": "Ferrocarril",
     "category:services": "Servicios",
diff --git a/lang/ca.json b/lang/ca.json
index 6a797d9..de49b3a 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -1,60 +1,63 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:administrative": "",
+    "category:agriculture": "",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Comunicacions",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura i religió",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
-    "category:education": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
+    "category:education": "",
     "category:emergency": "Serveis d'emergència",
-    "category:financial": null,
+    "category:financial": "",
     "category:gastro-smoking": "",
-    "category:gastro": null,
-    "category:health": null,
-    "category:hiking_routes": null,
-    "category:historic": null,
-    "category:index": null,
+    "category:gastro": "",
+    "category:health": "",
+    "category:hiking_routes": "",
+    "category:historic": "",
+    "category:index": "",
     "category:internet": "Accés a Internet",
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
-    "category:other": null,
-    "category:phone": null,
-    "category:places": null,
-    "category:places_geo": null,
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": null,
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
-    "category:religion": null,
-    "category:residential": null,
-    "category:resources": null,
-    "category:shop": null,
-    "category:sport": null,
-    "category:tourism_attractions": null,
-    "category:tourism_services": null,
-    "category:transport_alternative": null,
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:leisure": "",
+    "category:military": "",
+    "category:mtb-routes": "",
+    "category:natural": "",
+    "category:other": "",
+    "category:outdoor": "",
+    "category:phone": "",
+    "category:places": "",
+    "category:places_geo": "",
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
+    "category:religion": "",
+    "category:residential": "",
+    "category:resources": "",
+    "category:shop": "",
+    "category:sport": "",
+    "category:tourism_attractions": "",
+    "category:tourism_services": "",
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Oci, esport i compres",
     "category:services": "Serveis"
 }
diff --git a/lang/cs.json b/lang/cs.json
index 92078a4..14c38f7 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -3,44 +3,48 @@
     "category:agriculture": "Zemědělství",
     "category:alternative_amenities": "Občanská vybavenost",
     "category:alternative_routes": "Trasy cest",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Občasnká vybavenost",
     "category:car_furniture": "Pouliční přislušenství",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Komunikace",
     "category:construction": "Staveniště",
     "category:craft": "",
     "category:culture": "Kultura",
     "category:culture_religion": "Kultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Vzdělávací služby",
     "category:emergency": "Pohotovostní služby",
     "category:financial": "Finanční služby",
     "category:gastro-smoking": "",
     "category:gastro": "Stravování",
     "category:health": "Zdravotnictví",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Historické",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Přístup k internetu",
     "category:leisure": "Volný čas",
     "category:military": "Vojenské",
+    "category:mtb-routes": "",
     "category:natural": "Přírodní úkazy",
     "category:other": "Jiné",
+    "category:outdoor": "",
     "category:phone": "Telefony",
     "category:places": "Sídla",
     "category:places_geo": "Sídla",
     "category:playgrounds": "Hřiště",
     "category:post": "Poštovní služby",
     "category:power": "Elektřina",
+    "category:pt": "",
+    "category:pt:stops": "Zastávky & Stanice",
+    "category:pt:routes": "",
     "category:pt_amenities": "Občanská vybavenost",
-    "category:pt_routes": null,
-    "category:pt_stops": "Zastávky & Stanice",
     "category:public": "Veřejné služby",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religion",
     "category:residential": "Obytné oblasti",
     "category:resources": "Těžba surovin",
@@ -49,12 +53,11 @@
     "category:tourism_attractions": "Turistika",
     "category:tourism_services": "Turistika",
     "category:transport_alternative": "Alternativní (Cyklistika, Pěší turistika, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Nakládání s odpady",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Továrny",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Volný čas, sporty a nákupy",
     "category:railway": "Železnice",
     "category:services": "Služby",
diff --git a/lang/de.json b/lang/de.json
index ba51927..1f9715d 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -23,24 +23,28 @@
     "category:health": "Gesundheitsdienste",
     "category:hiking_routes": "Wanderrouten",
     "category:historic": "Geschichte",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internetzugang",
     "category:leisure": "Freizeit",
     "category:military": "Militär",
+    "category:mtb-routes": "",
     "category:natural": "Geographische Objekte",
     "category:other": "Andere",
+    "category:outdoor": "Freiluftaktivitäten",
     "category:phone": "Telekommunikation",
     "category:places": "Orte",
     "category:places_geo": "Orte",
     "category:playgrounds": "Spielplätze",
     "category:post": "Post",
     "category:power": "Energie",
+    "category:pt": "ÖV Karte",
+    "category:pt:stops": "Haltestellen",
+    "category:pt:routes": "Routen",
     "category:pt_amenities": "Einrichtungen",
-    "category:pt_routes": "Routen",
-    "category:pt_stops": "Haltestellen",
     "category:public": "Öffentliche Dienste",
     "category:railway-electrification": "Eisenbahn Elektrifizierung",
     "category:railway-infrastructure": "Eisenbahn Infrastruktur",
+    "category:railway-routes": "",
     "category:religion": "Religion",
     "category:residential": "Wohngebiete",
     "category:resources": "Ressourcengewinnung",
@@ -48,13 +52,12 @@
     "category:sport": "Sport",
     "category:tourism_attractions": "Tourismus",
     "category:tourism_services": "Tourismus",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "Einrichtungen",
     "category:waste": "Entsorgung",
     "category:water": "Gewässer",
     "category:wikipedia": "Wikipedia",
     "category:works": "Fabriken",
-    "category:cycle_infrastructure": "Radwege",
     "category:infrastructure": "Infrastruktur",
     "category:leisure_sport_shopping": "Freizeit, Sport und Einkauf",
     "category:railway": "Eisenbahn",
diff --git a/lang/el.json b/lang/el.json
index a8b68ee..a629d53 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -1,60 +1,63 @@
 {
     "category:administrative": "Διοικητικά Όρια",
     "category:agriculture": "Γεωργία",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Επικοινωνίες",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Πολιτισμός",
     "category:culture_religion": "Πολιτισμός",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Υπηρεσίες Εκπαίδευσης",
     "category:emergency": "Υπηρεσίες Έκτακτης Ανάγκης",
     "category:financial": "Χρήμα",
     "category:gastro-smoking": "",
     "category:gastro": "Γαστρονομία",
     "category:health": "Υγεία",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Ιστορικά",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Αναψυχή",
     "category:military": "Στρατιωτικό",
+    "category:mtb-routes": "",
     "category:natural": "Φυσικοί Σχηματισμοί",
-    "category:other": null,
-    "category:phone": null,
+    "category:other": "",
+    "category:outdoor": "",
+    "category:phone": "",
     "category:places": "Μέρη",
     "category:places_geo": "Μέρη",
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": "Στάσεις & Σταθμοί",
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "Στάσεις & Σταθμοί",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
     "category:public": "Δημόσιες Υπηρεσίες",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Θρησκεία",
     "category:residential": "Περιοχές Κατοικίας",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Αγορές",
     "category:sport": "Άθληση",
     "category:tourism_attractions": "Τουρισμός",
     "category:tourism_services": "Τουρισμός",
     "category:transport_alternative": "Εναλλακτικά (ποδηλασία, ορειβασία,...)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Αναψυχή, Αθλητισμός και Αγορές",
     "category:services": "Υπηρεσίες",
     "category:transport": "Μεταφορές",
diff --git a/lang/en.json b/lang/en.json
index 2b8fc3c..c5920a4 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -23,24 +23,28 @@
     "category:health": "Health",
     "category:hiking_routes": "Hiking routes",
     "category:historic": "Historic",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internet access",
     "category:leisure": "Leisure",
     "category:military": "Military",
+    "category:mtb-routes": "Mountain bike routes",
     "category:natural": "Natural Formations",
     "category:other": "Other",
+    "category:outdoor": "Outdoor activities",
     "category:phone": "Phone",
     "category:places": "Places",
     "category:places_geo": "Places",
     "category:playgrounds": "Playground",
     "category:post": "Post",
     "category:power": "Power",
+    "category:pt": "Public transport map",
+    "category:pt:stops": "Stops & Stations",
+    "category:pt:routes": "Routes",
     "category:pt_amenities": "Amenities",
-    "category:pt_routes": "Routes",
-    "category:pt_stops": "Stops & Stations",
     "category:public": "Public Services",
     "category:railway-electrification": "Railway electrification",
     "category:railway-infrastructure": "Railway infrastructure",
+    "category:railway-routes": "Railway Routes",
     "category:religion": "Religion",
     "category:residential": "Residential Areas",
     "category:resources": "Resource Extraction",
@@ -48,13 +52,12 @@
     "category:sport": "Sport",
     "category:tourism_attractions": "Tourism",
     "category:tourism_services": "Tourism",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "Amenities",
     "category:waste": "Disposal",
     "category:water": "Waterbodies",
     "category:wikipedia": "Wikipedia",
     "category:works": "Works",
-    "category:cycle_infrastructure": "Cycleways",
     "category:infrastructure": "Infrastructure",
     "category:leisure_sport_shopping": "Leisure, Sport and Shopping",
     "category:railway": "Railway",
diff --git a/lang/es.json b/lang/es.json
index f82052d..18d7d3e 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -1,60 +1,63 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
-    "category:communication": null,
-    "category:construction": null,
+    "category:administrative": "",
+    "category:agriculture": "",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
+    "category:communication": "",
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura y religión",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
-    "category:education": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
+    "category:education": "",
     "category:emergency": "Servicios de emergencia",
-    "category:financial": null,
+    "category:financial": "",
     "category:gastro-smoking": "",
-    "category:gastro": null,
-    "category:health": null,
-    "category:hiking_routes": null,
-    "category:historic": null,
-    "category:index": null,
+    "category:gastro": "",
+    "category:health": "",
+    "category:hiking_routes": "",
+    "category:historic": "",
+    "category:index": "",
     "category:internet": "Acceso a Internet",
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
-    "category:other": null,
-    "category:phone": null,
-    "category:places": null,
-    "category:places_geo": null,
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": "Paradas y estaciones",
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
-    "category:religion": null,
-    "category:residential": null,
-    "category:resources": null,
-    "category:shop": null,
-    "category:sport": null,
-    "category:tourism_attractions": null,
-    "category:tourism_services": null,
-    "category:transport_alternative": null,
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:leisure": "",
+    "category:military": "",
+    "category:mtb-routes": "",
+    "category:natural": "",
+    "category:other": "",
+    "category:outdoor": "",
+    "category:phone": "",
+    "category:places": "",
+    "category:places_geo": "",
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "Paradas y estaciones",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
+    "category:religion": "",
+    "category:residential": "",
+    "category:resources": "",
+    "category:shop": "",
+    "category:sport": "",
+    "category:tourism_attractions": "",
+    "category:tourism_services": "",
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Ocio, deporte y compras",
     "category:services": "Servicios"
 }
diff --git a/lang/et.json b/lang/et.json
index a325cf5..fcd6066 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -1,60 +1,63 @@
 {
     "category:administrative": "Administratiivalad",
     "category:agriculture": "Põllumajandus",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Kommunikatsioon",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Kultuur",
     "category:culture_religion": "Kultuur ja religioon",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Haridusteenused",
     "category:emergency": "Hädaabi teenused",
-    "category:financial": null,
+    "category:financial": "",
     "category:gastro-smoking": "",
-    "category:gastro": null,
-    "category:health": null,
-    "category:hiking_routes": null,
+    "category:gastro": "",
+    "category:health": "",
+    "category:hiking_routes": "",
     "category:historic": "Ajalooline",
-    "category:index": null,
-    "category:internet": null,
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
+    "category:index": "",
+    "category:internet": "",
+    "category:leisure": "",
+    "category:military": "",
+    "category:mtb-routes": "",
+    "category:natural": "",
     "category:other": "Ülejäänud",
+    "category:outdoor": "",
     "category:phone": "Telefon",
     "category:places": "Kohad",
     "category:places_geo": "Kohad",
     "category:playgrounds": "Mänguväljak",
-    "category:post": null,
+    "category:post": "",
     "category:power": "Elekter",
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": null,
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
     "category:public": "Kommunaalteenused",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religioon",
     "category:residential": "Elamupiirkonnad",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Ostmine",
-    "category:sport": null,
+    "category:sport": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport_alternative": "Alternatiivne (jalgrattasõit, matkamine, ...)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Vaba aeg, sport ja ostmine",
     "category:railway": "Raudtee",
     "category:services": "Teenused",
diff --git a/lang/fr.json b/lang/fr.json
index 7a833b3..2966570 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -23,24 +23,28 @@
     "category:health": "Santé",
     "category:hiking_routes": "Itinéraires pédestres",
     "category:historic": "Histoire",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internet",
     "category:leisure": "Loisirs",
     "category:military": "Militaire",
+    "category:mtb-routes": "Itinéraires de VTT",
     "category:natural": "Éléments naturels",
     "category:other": "Autres",
+    "category:outdoor": "Activités de plein air",
     "category:phone": "Téléphone",
     "category:places": "Lieux",
     "category:places_geo": "Lieux",
     "category:playgrounds": "Jeux pour enfants",
-    "category:post": null,
+    "category:post": "",
     "category:power": "Énergie",
+    "category:pt": "",
+    "category:pt:stops": "Arrêts/Stops, Stations",
+    "category:pt:routes": "Lignes",
     "category:pt_amenities": "Équipements",
-    "category:pt_routes": "Lignes",
-    "category:pt_stops": "Arrêts/Stops, Stations",
     "category:public": "Services Publics",
     "category:railway-electrification": "Puissance électrique ferroviaire",
     "category:railway-infrastructure": "Infrastructure ferroviaire",
+    "category:railway-routes": "Lignes ferroviaires",
     "category:religion": "Religion",
     "category:residential": "Zones résidentielles",
     "category:resources": "Extraction des ressources",
@@ -54,7 +58,6 @@
     "category:water": "Hydrographie",
     "category:wikipedia": "Wikipédia",
     "category:works": "Zones industrielles",
-    "category:cycle_infrastructure": "Infrastructures vélo",
     "category:infrastructure": "Infrastructures",
     "category:leisure_sport_shopping": "Loisirs",
     "category:railway": "Chemins de fer",
diff --git a/lang/hu.json b/lang/hu.json
index 7cb807f..18aff4a 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -1,60 +1,63 @@
 {
     "category:administrative": "Adminisztratív határok",
     "category:agriculture": "Mezőgazdaság",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Kommunikácó",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Kultúra",
     "category:culture_religion": "Kultúra",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
-    "category:education": null,
-    "category:emergency": null,
-    "category:financial": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
+    "category:education": "",
+    "category:emergency": "",
+    "category:financial": "",
     "category:gastro-smoking": "",
     "category:gastro": "Gasztronómia",
-    "category:health": null,
-    "category:hiking_routes": null,
+    "category:health": "",
+    "category:hiking_routes": "",
     "category:historic": "Historikus",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internethozzáférés",
-    "category:leisure": null,
+    "category:leisure": "",
     "category:military": "Katonai",
+    "category:mtb-routes": "",
     "category:natural": "Természeti képződmények",
     "category:other": "Egyéb",
+    "category:outdoor": "",
     "category:phone": "Telefon",
     "category:places": "Helyek",
     "category:places_geo": "Helyek",
-    "category:playgrounds": null,
+    "category:playgrounds": "",
     "category:post": "Posta",
     "category:power": "Áramellátás",
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": "Megállók és állomások",
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:pt": "",
+    "category:pt:stops": "Megállók és állomások",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Vallás",
     "category:residential": "Lakóövezetek",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Vásárlás",
     "category:sport": "Sport",
     "category:tourism_attractions": "Túrizmus",
     "category:tourism_services": "Túrizmus",
     "category:transport_alternative": "Alternatív (Krékpár, Túra)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Szabadidő",
     "category:railway": "Vasút",
     "category:services": "Szolgáltatás",
diff --git a/lang/it.json b/lang/it.json
index 7478533..d910d5c 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -3,44 +3,48 @@
     "category:agriculture": "Agricoltura",
     "category:alternative_amenities": "Infrastrutture",
     "category:alternative_routes": "Itinerari segnalati",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Infrastrutture",
     "category:car_furniture": "Dotazioni stradali",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Communicazioni",
     "category:construction": "Cantieri",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Istruzione",
     "category:emergency": "Servizi d'emergenza",
     "category:financial": "Finanze",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomia",
     "category:health": "Sanità",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Storia",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Tempo libero",
     "category:military": "Militare",
+    "category:mtb-routes": "",
     "category:natural": "Natura",
     "category:other": "Altri",
-    "category:phone": null,
+    "category:outdoor": "",
+    "category:phone": "",
     "category:places": "Luoghi",
     "category:places_geo": "Luoghi",
-    "category:playgrounds": null,
-    "category:post": null,
+    "category:playgrounds": "",
+    "category:post": "",
     "category:power": "Energia",
+    "category:pt": "",
+    "category:pt:stops": "Stazioni e fermate",
+    "category:pt:routes": "",
     "category:pt_amenities": "Infrastrutture",
-    "category:pt_routes": null,
-    "category:pt_stops": "Stazioni e fermate",
     "category:public": "Servizi pubblici",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religione",
     "category:residential": "Aree residenziali",
     "category:resources": "Areee estrattive",
@@ -49,12 +53,11 @@
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
     "category:transport_alternative": "Alternativi (bicicletta, camminate, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Smaltimento",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Fabbriche",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Tempo libero, sport e shopping",
     "category:railway": "Ferrovie",
     "category:services": "Servizi",
diff --git a/lang/ja.json b/lang/ja.json
index 173f467..bb9baa3 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -1,60 +1,63 @@
 {
-    "category:administrative": null,
+    "category:administrative": "",
     "category:agriculture": "農業",
     "category:alternative_amenities": "生活環境",
     "category:alternative_routes": "ルート",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "生活環境",
     "category:car_furniture": "街路設置公共物",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "交流",
     "category:construction": "工事中",
     "category:craft": "",
     "category:culture": "文化",
     "category:culture_religion": "文化",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "教育サービス",
     "category:emergency": "緊急サービス",
     "category:financial": "金融",
     "category:gastro-smoking": "",
     "category:gastro": "食べ物",
     "category:health": "健康",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "記念",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "インターネット接続",
     "category:leisure": "レジャー",
     "category:military": "軍事",
+    "category:mtb-routes": "",
     "category:natural": "自然地層",
     "category:other": "その他",
+    "category:outdoor": "",
     "category:phone": "電話",
     "category:places": "場所",
     "category:places_geo": "場所",
-    "category:playgrounds": null,
+    "category:playgrounds": "",
     "category:post": "郵便",
     "category:power": "電力",
+    "category:pt": "",
+    "category:pt:stops": "停留所と駅",
+    "category:pt:routes": "",
     "category:pt_amenities": "生活環境",
-    "category:pt_routes": null,
-    "category:pt_stops": "停留所と駅",
     "category:public": "公共サービス",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "宗教",
     "category:residential": "住居エリア",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "ショッピング",
     "category:sport": "スポーツ",
     "category:tourism_attractions": "観光",
     "category:tourism_services": "観光",
     "category:transport_alternative": "その他交通 (サイクリング、ハイキング、...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "処理場",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "工場",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "レジャー",
     "category:railway": "鉄道",
     "category:services": "サービス",
diff --git a/lang/nl.json b/lang/nl.json
index e542067..beab190 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -3,44 +3,48 @@
     "category:agriculture": "Landbouw",
     "category:alternative_amenities": "Voorzieningen",
     "category:alternative_routes": "Alternatieve routes",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Voorzieningen",
     "category:car_furniture": "Straatmeubilair",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Communicatie",
     "category:construction": "Bouwterrein",
     "category:craft": "",
     "category:culture": "Cultuur",
     "category:culture_religion": "Cultuur",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Onderwijs",
     "category:emergency": "Hulpdiensten",
     "category:financial": "Financieel",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomie",
     "category:health": "Gezondheid",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Historisch",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Internettoegang",
     "category:leisure": "Vrije tijd",
     "category:military": "Militair",
+    "category:mtb-routes": "",
     "category:natural": "Natuurlijke Formaties",
     "category:other": "Andere",
+    "category:outdoor": "",
     "category:phone": "Telefonie",
     "category:places": "Plaatsen",
     "category:places_geo": "Plaatsen",
-    "category:playgrounds": null,
+    "category:playgrounds": "",
     "category:post": "Post",
     "category:power": "Stroomvoorziening",
+    "category:pt": "",
+    "category:pt:stops": "Haltes en Stations",
+    "category:pt:routes": "",
     "category:pt_amenities": "Voorzieningen",
-    "category:pt_routes": null,
-    "category:pt_stops": "Haltes en Stations",
     "category:public": "Openbare diensten",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religie",
     "category:residential": "Woongebieden",
     "category:resources": "Grondstoffenwinning",
@@ -49,12 +53,11 @@
     "category:tourism_attractions": "Toerisme",
     "category:tourism_services": "Toerisme",
     "category:transport_alternative": "Alternatief (Fiets, Wandel, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Afvalverwijdering",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Fabrieken",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Vrije tijd, Sport en Winkelen",
     "category:railway": "Spoorwegen",
     "category:services": "Dienstverlening",
diff --git a/lang/pl.json b/lang/pl.json
index 251dc1d..e4ef278 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -1,60 +1,63 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
+    "category:administrative": "",
+    "category:agriculture": "",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
     "category:car_furniture": "Elementy drogowe",
-    "category:car_maxspeed": null,
-    "category:children": null,
-    "category:communication": null,
-    "category:construction": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
+    "category:communication": "",
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Kultura",
     "category:culture_religion": "Kultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Edukacyjne",
-    "category:emergency": null,
+    "category:emergency": "",
     "category:financial": "Finasowe",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomia",
     "category:health": "Zdrowie",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Miejsca Historyczne",
-    "category:index": null,
-    "category:internet": null,
-    "category:leisure": null,
-    "category:military": null,
-    "category:natural": null,
-    "category:other": null,
-    "category:phone": null,
+    "category:index": "",
+    "category:internet": "",
+    "category:leisure": "",
+    "category:military": "",
+    "category:mtb-routes": "",
+    "category:natural": "",
+    "category:other": "",
+    "category:outdoor": "",
+    "category:phone": "",
     "category:places": "Miejsca",
     "category:places_geo": "Miejsca",
-    "category:playgrounds": null,
-    "category:post": null,
-    "category:power": null,
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": "Przystanki i Stacje",
-    "category:public": null,
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
-    "category:religion": null,
-    "category:residential": null,
-    "category:resources": null,
+    "category:playgrounds": "",
+    "category:post": "",
+    "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "Przystanki i Stacje",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
+    "category:public": "",
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
+    "category:religion": "",
+    "category:residential": "",
+    "category:resources": "",
     "category:shop": "Zakupy",
-    "category:sport": null,
+    "category:sport": "",
     "category:tourism_attractions": "Turystyka",
     "category:tourism_services": "Turystyka",
-    "category:transport_alternative": null,
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Wypoczynek, Sport i Zakupy",
     "category:services": "Usługi",
     "category:transport": "Transport",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index dc34575..2018af4 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -23,24 +23,28 @@
     "category:health": "Saúde e Assistência",
     "category:hiking_routes": "Rotas de Caminhada",
     "category:historic": "Histórico",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:military": "Militar",
+    "category:mtb-routes": "",
     "category:natural": "Formações Naturais",
     "category:other": "Outros",
+    "category:outdoor": "",
     "category:phone": "Telefone",
     "category:places": "Lugares",
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parquinhos",
     "category:post": "Correios",
     "category:power": "Energia",
+    "category:pt": "",
+    "category:pt:stops": "Paradas e Estações",
+    "category:pt:routes": "Rotas",
     "category:pt_amenities": "Equipamentos",
-    "category:pt_routes": "Rotas",
-    "category:pt_stops": "Paradas e Estações",
     "category:public": "Serviços Públicos",
     "category:railway-electrification": "Eletrificação Ferroviária",
     "category:railway-infrastructure": "Infraestrutura Ferroviária",
+    "category:railway-routes": "",
     "category:religion": "Religião",
     "category:residential": "Áreas Residenciais",
     "category:resources": "Extração de Recursos",
@@ -48,13 +52,12 @@
     "category:sport": "Esportes",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
-    "category:transport_alternative": null,
+    "category:transport_alternative": "",
     "category:walk_amenities": "Equipamentos",
     "category:waste": "Lixo",
     "category:water": "Hidrografia",
     "category:wikipedia": "Wikipédia",
     "category:works": "Fábricas",
-    "category:cycle_infrastructure": "Ciclovias",
     "category:infrastructure": "Infraestrutura",
     "category:leisure_sport_shopping": "Lazer, Esportes e Compras",
     "category:railway": "Ferrovia",
diff --git a/lang/pt.json b/lang/pt.json
new file mode 100644
index 0000000..6b83f42
--- /dev/null
+++ b/lang/pt.json
@@ -0,0 +1,71 @@
+{
+    "category:administrative": "Regiões administrativas",
+    "category:agriculture": "Agricultura",
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "Rotas",
+    "category:buildings": "Edifícios",
+    "category:car_amenities": "",
+    "category:car_furniture": "Mobiliário urbano",
+    "category:car_maxspeed": "Velocidade máxima",
+    "category:children": "",
+    "category:communication": "Comunicação",
+    "category:construction": "Locais de construção",
+    "category:craft": "Artesanato",
+    "category:culture": "Cultura",
+    "category:culture_religion": "Cultura e religião",
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "Ciclovias",
+    "category:education": "Educação",
+    "category:emergency": "Emergência",
+    "category:financial": "Finanças",
+    "category:gastro-smoking": "Restauração livre de tabaco",
+    "category:gastro": "Restauração",
+    "category:health": "Saúde",
+    "category:hiking_routes": "Rotas de caminhada",
+    "category:historic": "Histórico",
+    "category:index": "",
+    "category:internet": "Acesso à Internet",
+    "category:leisure": "Lazer",
+    "category:military": "Militar",
+    "category:mtb-routes": "",
+    "category:natural": "Formações naturais",
+    "category:other": "Outros",
+    "category:outdoor": "",
+    "category:phone": "Telefone",
+    "category:places": "Lugares",
+    "category:places_geo": "Lugares",
+    "category:playgrounds": "Parques infantis",
+    "category:post": "Correios",
+    "category:power": "Eletricidade",
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "Rotas",
+    "category:pt_amenities": "",
+    "category:public": "Serviços públicos",
+    "category:railway-electrification": "Eletrificação ferroviária",
+    "category:railway-infrastructure": "Infraestrutura ferroviária",
+    "category:railway-routes": "",
+    "category:religion": "Religião",
+    "category:residential": "Áreas residenciais",
+    "category:resources": "Extração de recursos",
+    "category:shop": "Compras",
+    "category:sport": "Desporto",
+    "category:tourism_attractions": "Turismo",
+    "category:tourism_services": "Turismo",
+    "category:transport_alternative": "",
+    "category:walk_amenities": "",
+    "category:waste": "Lixo",
+    "category:water": "Massas de água",
+    "category:wikipedia": "Wikipédia",
+    "category:works": "Fábricas",
+    "category:infrastructure": "Infraestrutura",
+    "category:leisure_sport_shopping": "Lazer, desporto e compras",
+    "category:railway": "Linhas ferroviárias",
+    "category:services": "Serviços",
+    "category:special": "Especial",
+    "category:transport": "Transportes",
+    "category:transport_car": "Transporte individual",
+    "category:transport_cycle": "Ciclismo",
+    "category:transport_pt": "Transportes públicos",
+    "category:transport_walk": "Pedestre"
+}
diff --git a/lang/ro.json b/lang/ro.json
index d726a6c..543a739 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -1,60 +1,63 @@
 {
     "category:administrative": "Zona administrativa",
     "category:agriculture": "Agricultura",
-    "category:alternative_amenities": null,
-    "category:alternative_routes": null,
-    "category:buildings": null,
-    "category:car_amenities": null,
-    "category:car_furniture": null,
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:alternative_amenities": "",
+    "category:alternative_routes": "",
+    "category:buildings": "",
+    "category:car_amenities": "",
+    "category:car_furniture": "",
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Comunicatii",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Cultura",
     "category:culture_religion": "Cultura",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Servicii educatie",
     "category:emergency": "Servicii urgenta",
     "category:financial": "Financiar",
     "category:gastro-smoking": "",
     "category:gastro": "Gastronomie",
     "category:health": "Sanatate",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Istoric",
-    "category:index": null,
+    "category:index": "",
     "category:internet": "Acces internet",
     "category:leisure": "Timp liber",
     "category:military": "Militar",
-    "category:natural": null,
+    "category:mtb-routes": "",
+    "category:natural": "",
     "category:other": "Altele",
+    "category:outdoor": "",
     "category:phone": "Telefon",
     "category:places": "Locuri",
     "category:places_geo": "Locuri",
     "category:playgrounds": "Loc de joaca",
-    "category:post": null,
+    "category:post": "",
     "category:power": "Energie",
-    "category:pt_amenities": null,
-    "category:pt_routes": null,
-    "category:pt_stops": null,
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
+    "category:pt_amenities": "",
     "category:public": "Servicii publice",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Religie",
     "category:residential": "Zona rezidentiala",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Cumpărături",
-    "category:sport": null,
+    "category:sport": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport_alternative": "Alternativ(Bicicleta,Drumetii)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Timp liber, Sport si Cumparaturi",
     "category:services": "Servicii",
     "category:transport": "Transport",
diff --git a/lang/ru.json b/lang/ru.json
index 9985ae0..3f308a2 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -3,44 +3,48 @@
     "category:agriculture": "Сельское хозяйство",
     "category:alternative_amenities": "Полезные места",
     "category:alternative_routes": "Маршруты",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Обслуживание транспорта",
     "category:car_furniture": "Элементы дороги",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Услуги связи",
     "category:construction": "Места строительства",
     "category:craft": "",
     "category:culture": "Культура",
     "category:culture_religion": "Культура",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Образование",
     "category:emergency": "Экстренные службы",
     "category:financial": "Финансы",
     "category:gastro-smoking": "",
     "category:gastro": "Общепит",
     "category:health": "Медицина",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Историческое",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Досуг",
     "category:military": "Вооружённые силы",
+    "category:mtb-routes": "",
     "category:natural": "Природные образования",
     "category:other": "Прочее",
-    "category:phone": null,
+    "category:outdoor": "",
+    "category:phone": "",
     "category:places": "Места",
     "category:places_geo": "Места",
-    "category:playgrounds": null,
-    "category:post": null,
+    "category:playgrounds": "",
+    "category:post": "",
     "category:power": "Энергетика",
+    "category:pt": "",
+    "category:pt:stops": "Остановки и станции",
+    "category:pt:routes": "",
     "category:pt_amenities": "Транспортные принадлежности",
-    "category:pt_routes": null,
-    "category:pt_stops": "Остановки и станции",
     "category:public": "Общественные места",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Религия",
     "category:residential": "Жилые районы",
     "category:resources": "Добыча ресурсов",
@@ -49,12 +53,11 @@
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport_alternative": "Альтернативное передвижение (Велоспорт, Пешие прогулки, ...)",
-    "category:walk_amenities": null,
+    "category:walk_amenities": "",
     "category:waste": "Переработка отходов",
-    "category:water": null,
-    "category:wikipedia": null,
+    "category:water": "",
+    "category:wikipedia": "",
     "category:works": "Промышленность",
-    "category:cycle_infrastructure": null,
     "category:leisure_sport_shopping": "Досуг",
     "category:railway": "Железные дороги",
     "category:services": "Услуги",
diff --git a/lang/template.json b/lang/template.json
index 54044bd..56c2d2c 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -27,20 +27,24 @@
     "category:internet": "",
     "category:leisure": "",
     "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "",
     "category:other": "",
+    "category:outdoor": "",
     "category:phone": "",
     "category:places": "",
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
     "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "",
+    "category:pt:routes": "",
     "category:pt_amenities": "",
-    "category:pt_routes": "",
-    "category:pt_stops": "",
     "category:public": "",
     "category:railway-electrification": "",
     "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "",
     "category:residential": "",
     "category:resources": "",
@@ -53,16 +57,5 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "",
-    "category:cycle_infrastructure": "",
-    "category:infrastructure": "",
-    "category:leisure_sport_shopping": "",
-    "category:railway": "",
-    "category:services": "",
-    "category:special": "",
-    "category:transport": "",
-    "category:transport_car": "",
-    "category:transport_cycle": "",
-    "category:transport_pt": "",
-    "category:transport_walk": ""
+    "category:works": ""
 }
diff --git a/lang/uk.json b/lang/uk.json
index f8e7d1d..8ac916e 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -1,60 +1,63 @@
 {
-    "category:administrative": null,
-    "category:agriculture": null,
+    "category:administrative": "",
+    "category:agriculture": "",
     "category:alternative_amenities": "Amenities",
     "category:alternative_routes": "Маршрути",
-    "category:buildings": null,
+    "category:buildings": "",
     "category:car_amenities": "Amenities",
     "category:car_furniture": "Street Furniture",
-    "category:car_maxspeed": null,
-    "category:children": null,
+    "category:car_maxspeed": "",
+    "category:children": "",
     "category:communication": "Телекомунікації",
-    "category:construction": null,
+    "category:construction": "",
     "category:craft": "",
     "category:culture": "Культура ",
     "category:culture_religion": "Культура ",
-    "category:cycle_amenities": null,
-    "category:cycle_routes": null,
+    "category:cycle_amenities": "",
+    "category:cycle_routes": "",
     "category:education": "Освіта",
     "category:emergency": "Швидка допомога",
     "category:financial": "Фінанси",
     "category:gastro-smoking": "",
     "category:gastro": "Гастрономія",
     "category:health": "Здоров'я",
-    "category:hiking_routes": null,
+    "category:hiking_routes": "",
     "category:historic": "Історія",
-    "category:index": null,
-    "category:internet": null,
+    "category:index": "",
+    "category:internet": "",
     "category:leisure": "Дозвілля",
-    "category:military": null,
+    "category:military": "",
+    "category:mtb-routes": "",
     "category:natural": "Природне середовище",
     "category:other": "Інше",
-    "category:phone": null,
+    "category:outdoor": "",
+    "category:phone": "",
     "category:places": "Місцевість",
     "category:places_geo": "Місцевість",
     "category:playgrounds": "Дитячий майданчик",
-    "category:post": null,
-    "category:power": null,
+    "category:post": "",
+    "category:power": "",
+    "category:pt": "",
+    "category:pt:stops": "Зупинки та станції",
+    "category:pt:routes": "",
     "category:pt_amenities": "Amenities",
-    "category:pt_routes": null,
-    "category:pt_stops": "Зупинки та станції",
     "category:public": "Громадські місця",
-    "category:railway-electrification": null,
-    "category:railway-infrastructure": null,
+    "category:railway-electrification": "",
+    "category:railway-infrastructure": "",
+    "category:railway-routes": "",
     "category:religion": "Релігія",
     "category:residential": "Житлова зона",
-    "category:resources": null,
+    "category:resources": "",
     "category:shop": "Торгівля",
     "category:sport": "Спорт. Інше.",
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport_alternative": "Інші (Велосипедні, піші, ...)",
-    "category:walk_amenities": null,
-    "category:waste": null,
-    "category:water": null,
-    "category:wikipedia": null,
-    "category:works": null,
-    "category:cycle_infrastructure": null,
+    "category:walk_amenities": "",
+    "category:waste": "",
+    "category:water": "",
+    "category:wikipedia": "",
+    "category:works": "",
     "category:leisure_sport_shopping": "Дозвілля",
     "category:services": "Послуги",
     "category:transport": "Транспорт",
diff --git a/leisure.json b/leisure.json
index 2dfbcf2..2dca403 100644
--- a/leisure.json
+++ b/leisure.json
@@ -10,6 +10,7 @@
         "it": "Tempo libero",
         "ja": "レジャー",
         "nl": "Vrije tijd",
+        "pt": "Lazer",
         "pt-br": "Lazer",
         "ro": "Timp liber",
         "ru": "Досуг",
diff --git a/military.json b/military.json
index 9c3e3ce..602868c 100644
--- a/military.json
+++ b/military.json
@@ -11,6 +11,7 @@
         "it": "Militare",
         "ja": "軍事",
         "nl": "Militair",
+        "pt": "Militar",
         "pt-br": "Militar",
         "ro": "Militar",
         "ru": "Вооружённые силы"
diff --git a/mtb-routes.json b/mtb-routes.json
new file mode 100644
index 0000000..f0871f5
--- /dev/null
+++ b/mtb-routes.json
@@ -0,0 +1,51 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Mountain bike routes",
+        "fr": "Itinéraires de VTT"
+    },
+    "query": {
+        "13": "relation[type=route][route=mtb]"
+    },
+    "members": true,
+    "feature": {
+        "description": "{{ tagTrans('route', 'mtb') }}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': '#007fff' })|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": "",
+        "markerSymbol": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}"
+        ],
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul class='overpass-layer-list'>",
+            "{% for master in masters %}",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: '#007fff' })|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'>{{ tagTrans('route', 'mtb') }}</span>",
+            "  </li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "#007fff",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    }
+}
diff --git a/natural.json b/natural.json
index ec35b9f..4faac84 100644
--- a/natural.json
+++ b/natural.json
@@ -11,6 +11,7 @@
         "it": "Natura",
         "ja": "自然地層",
         "nl": "Natuurlijke Formaties",
+        "pt": "Formações naturais",
         "pt-br": "Formações Naturais",
         "ru": "Природные образования",
         "uk": "Природне середовище"
diff --git a/other.json b/other.json
index 8ea0472..dc04ed9 100644
--- a/other.json
+++ b/other.json
@@ -10,6 +10,7 @@
         "it": "Altri",
         "ja": "その他",
         "nl": "Andere",
+        "pt": "Outros",
         "pt-br": "Outros",
         "ro": "Altele",
         "ru": "Прочее",
diff --git a/outdoor.json b/outdoor.json
new file mode 100644
index 0000000..9216ef0
--- /dev/null
+++ b/outdoor.json
@@ -0,0 +1,13 @@
+{
+    "type": "index",
+    "name": {
+        "de": "Freiluftaktivitäten",
+        "en": "Outdoor activities",
+        "fr": "Activités de plein air"
+    },
+    "subCategories": [
+        {
+            "id": "mtb-routes"
+        }
+    ]
+}
diff --git a/phone.json b/phone.json
index a2554e1..50ac08a 100644
--- a/phone.json
+++ b/phone.json
@@ -9,6 +9,7 @@
         "hu": "Telefon",
         "ja": "電話",
         "nl": "Telefonie",
+        "pt": "Telefone",
         "pt-br": "Telefone",
         "ro": "Telefon"
     }
diff --git a/places.json b/places.json
index f0fc803..2ca3d01 100644
--- a/places.json
+++ b/places.json
@@ -13,6 +13,7 @@
         "ja": "場所",
         "nl": "Plaatsen",
         "pl": "Miejsca",
+        "pt": "Lugares",
         "pt-br": "Lugares",
         "ro": "Locuri",
         "ru": "Места",
diff --git a/places_geo.json b/places_geo.json
index e83a837..4e871ff 100644
--- a/places_geo.json
+++ b/places_geo.json
@@ -13,6 +13,7 @@
         "ja": "場所",
         "nl": "Plaatsen",
         "pl": "Miejsca",
+        "pt": "Lugares",
         "pt-br": "Lugares",
         "ro": "Locuri",
         "ru": "Места",
diff --git a/playgrounds.json b/playgrounds.json
index 79802ee..789cf3e 100644
--- a/playgrounds.json
+++ b/playgrounds.json
@@ -6,6 +6,7 @@
         "en": "Playground",
         "et": "Mänguväljak",
         "fr": "Jeux pour enfants",
+        "pt": "Parques infantis",
         "pt-br": "Parquinhos",
         "ro": "Loc de joaca",
         "uk": "Дитячий майданчик"
diff --git a/popupBody.html b/popupBody.html
index c5e9e9e..ffa09d2 100644
--- a/popupBody.html
+++ b/popupBody.html
@@ -115,4 +115,25 @@
 </li>
 {% endif %}
 
+{% set wikipedia = null %}
+{% if attribute(tags, 'wikipedia') %}
+  {% set wikipedia = tags.wikipedia|matches("^([^:]+):(.*)$") %}
+{% endif %}
+
+{% if not wikipedia %}
+  {% for k, v in tags %}
+    {% set m = k|matches("^wikipedia:(.*)$") %}
+    {% if m %}
+      {% set wikipedia = [ 0, m[1], v ] %}
+    {% endif %}
+  {% endfor %}
+{% endif %}
+
+{% if wikipedia %}
+<li class='hasSymbol'>
+  <i class="fa fa-wikipedia-w" aria-hidden="true"></i>
+  <span class='key'>{{ keyTrans('wikipedia') }}:</span>
+  <span class='value'><a href="https://{{ wikipedia[1] }}.wikipedia.org/wiki/{{ wikipedia[2]|replace({ ' ': '_' }) }}">{{ wikipedia[2] }}</a></span>
+{% endif %}
+
 </ul>
diff --git a/post.json b/post.json
index 1e851be..90b660c 100644
--- a/post.json
+++ b/post.json
@@ -7,6 +7,7 @@
         "hu": "Posta",
         "ja": "郵便",
         "nl": "Post",
+        "pt": "Correios",
         "pt-br": "Correios"
     }
 }
diff --git a/power.json b/power.json
index b833d32..4be4028 100644
--- a/power.json
+++ b/power.json
@@ -11,6 +11,7 @@
         "it": "Energia",
         "ja": "電力",
         "nl": "Stroomvoorziening",
+        "pt": "Eletricidade",
         "pt-br": "Energia",
         "ro": "Energie",
         "ru": "Энергетика"
diff --git a/pt.json b/pt.json
new file mode 100644
index 0000000..3693d84
--- /dev/null
+++ b/pt.json
@@ -0,0 +1,193 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "ÖV Karte",
+        "en": "Public transport map"
+    },
+    "query": {
+        "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",
+        "14": [
+            "(",
+            "relation[type=route][route~\"^(subway|monorail|aerialway|bus|trolleybus|ferry|train|tram)$\"];",
+            "relation[type=public_transport][public_transport=stop_area];",
+            ")"
+        ]
+    },
+    "lists": {
+        "stops": {
+            "prefix": "listStops",
+            "name": {
+                "ast": "Paraes y estaciones",
+                "cs": "Zastávky & Stanice",
+                "de": "Haltestellen",
+                "el": "Στάσεις & Σταθμοί",
+                "en": "Stops & Stations",
+                "es": "Paradas y estaciones",
+                "fr": "Arrêts/Stops, Stations",
+                "hu": "Megállók és állomások",
+                "it": "Stazioni e fermate",
+                "ja": "停留所と駅",
+                "nl": "Haltes en Stations",
+                "pl": "Przystanki i Stacje",
+                "pt-br": "Paradas e Estações",
+                "ru": "Остановки и станции",
+                "uk": "Зупинки та станції"
+            }
+        },
+        "routes": {
+            "prefix": "listRoutes",
+            "name": {
+                "de": "Routen",
+                "en": "Routes",
+                "fr": "Lignes",
+                "pt": "Rotas",
+                "pt-br": "Rotas"
+            }
+        }
+    },
+    "feature": {
+        "pre": "{% set isStopArea = tags.public_transport == 'stop_area' %}",
+        "title": [
+            "{% if tags.ref %}{{ tags.ref }} - {% endif %}",
+            "",
+            "{{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) | default(localizedTag(tags, 'ref')) | default(trans('unnamed')) }}"
+        ],
+        "description": "{{ tagTrans('route', tags.route) }}",
+        "body": [
+            "<h4>Stops</h4><ul>",
+            "{% for member in members %}",
+            "{% if member.tags.highway == 'bus_stop' or member.tags.amenity == 'bus_station' or member.tags.amenity == 'ferry_terminal' or member.tags.railway == 'tram_stop' or member.tags.railway == 'halt' or member.tags.railway == 'station' or member.tags.aerialway == 'station' or member.tags.public_transport == 'stop_position' or member.role|slice(-4) == 'stop' %}",
+            "<li data-object='{{ member.id }}' data-sublayer='member'><b>{{ member.tags.name|default(member.id) }}</li>",
+            "{% endif %}",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "markerSymbol": "",
+        "styles": "",
+        "listStopsExclude": "true",
+        "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
+        "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
+        "listRoutesExclude": "{{ isStopArea }}"
+    },
+    "members": true,
+    "memberFeature": {
+        "pre": [
+            "{% set stopName = '' %}",
+            "{% set isStop = false %}",
+            "{% set stopCount = 0 %}",
+            "{% if tags.highway == 'bus_stop' or tags.amenity == 'bus_station' or tags.amenity == 'ferry_terminal' or tags.railway == 'tram_stop' or tags.railway == 'halt' or tags.railway == 'station' or tags.aerialway == 'station' or tags.public_transport == 'stop_position' %}{% set isStop = true %}{% endif %}",
+            "{% set isWay = false %}",
+            "{% set aRoute = null %}",
+            "{% set refs = [] %}",
+            "{% for master in masters %}",
+            "  {% if master.tags.public_transport == 'stop_area' %}",
+            "    {% set stopName = master.tags.name %}",
+            "  {% else %}",
+            "    {% if master.role|matches('^(|.*stop)$') and isStop %}",
+            "      {% set isStop = true %}",
+            "      {% set stopCount = stopCount + 1 %}",
+            "    {% elseif master.role|matches('^(|forward|backward)$') and type == 'way' %}",
+            "      {% set isWay = true %}",
+            "    {% endif %}",
+            "    {% set aRoute = master %}",
+            "",
+            "    {% if master.tags.ref %}",
+            "      {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "    {% endif %}",
+            "  {% endif %}",
+            "{% endfor %}",
+            "",
+            "{% set refs = refs|unique|natsort({ insensitive: true }) %}",
+            "{% set color = const[aRoute.tags.route].color %}"
+        ],
+        "title": "{% if isStop %}{{ tags.name|default(stopName)|default(id) }}{% endif %}",
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul class='overpass-layer-list'>",
+            "{% for master in masters %}",
+            "  {% if master.tags.public_transport != 'stop_area' %}",
+            "  <li data-object=\"{{ master.id }}\">",
+            "    <span class='markerParent'><div class='marker'>{{ markerCircle({fillColor:const[master.tags.route].color})|raw }}</div><div class='icon'>{{ const[master.tags.route].sign|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'>{{ tagTrans('route', master.tags.route) }}</span>",
+            "  </li>",
+            "  {% endif %}",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}way{% else %}{% endif %}",
+        "listStopsMarkerSign": null,
+        "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
+        "listStopsExclude": "{{ not isStop or stopCount == 0 }}",
+        "listStopsTitle": "{{ tags.name|default(stopName)|default(id) }}",
+        "listStopsDescription": "{{ refs|join(' ') }}",
+        "listRoutesExclude": "true",
+        "style:way": {
+            "width": "3",
+            "color": "{{ color|default('#ff0000') }}",
+            "text": "{{ refs|join('  ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        },
+        "style:stop": {
+            "width": "5",
+            "color": "{{ color|default('#ff0000') }}",
+            "radius": "3"
+        }
+    },
+    "info": [
+        "<table>",
+        "{% for value, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({fillColor:data.color})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>{{ tagTrans('route', value) }}</td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ],
+    "const": {
+        "train": {
+            "sign": "<img src='maki:rail?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#00007f"
+        },
+        "subway": {
+            "sign": "<img src='maki:rail-metro?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#0000ff"
+        },
+        "monorail": {
+            "sign": "<span style='color: #ffffff'>M</span>",
+            "zoom": 12,
+            "color": "#006f8f"
+        },
+        "tram": {
+            "sign": "<img src='maki:rail-light?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#7f007f"
+        },
+        "bus": {
+            "sign": "<img src='maki:bus?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#af0000"
+        },
+        "trolleybus": {
+            "sign": "<img src='maki:bus?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#af3f00"
+        },
+        "aerialway": {
+            "sign": "<img src='maki:aerialway?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#00aaaa"
+        },
+        "ferry": {
+            "sign": "<img src='maki:ferry?fill=#ffffff'>",
+            "zoom": 12,
+            "color": "#007fff"
+        }
+    }
+}
diff --git a/pt_routes.json b/pt_routes.json
deleted file mode 100644
index 6f8f365..0000000
--- a/pt_routes.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "de": "Routen",
-        "en": "Routes",
-        "fr": "Lignes",
-        "pt-br": "Rotas"
-    },
-    "query": {
-        "12": "relation[type=route][route~\"^(subway|monorail|ferry|train)$\"];",
-        "14": "relation[type=route][route~\"^(subway|monorail|aerialway|bus|trolleybus|ferry|train|tram)$\"];"
-    },
-    "feature": {
-        "title": [
-            "{% if tags.ref %}{{ tags.ref }} - {% endif %}",
-            "",
-            "{{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) | default(localizedTag(tags, 'ref')) | default(trans('unnamed')) }}"
-        ],
-        "description": "{{ tagTrans('route', tags.route) }}",
-        "listMarkerSign": "{{ const[tags.route].sign|raw }}",
-        "markerSymbol": null,
-        "listMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
-        "style": {
-            "color": "{{ const[tags.route].color }}"
-        }
-    },
-    "info": [
-        "<table>",
-        "{% for value, data in const %}",
-        "{% if data.zoom <= map.zoom %}",
-        "  <tr>",
-        "    <td>{{ markerCircle({fillColor:data.color})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('route', value) }}</td>",
-        "  </tr>",
-        "{% endif %}",
-        "{% endfor %}",
-        "</table>"
-    ],
-    "const": {
-        "train": {
-            "sign": "<img src='maki:rail?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#202020"
-        },
-        "subway": {
-            "sign": "<img src='maki:rail-metro?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#00007f"
-        },
-        "monorail": {
-            "sign": "<span style='color: #ffffff'>M</span>",
-            "zoom": 12,
-            "color": "#006f8f"
-        },
-        "tram": {
-            "sign": "<img src='maki:rail-light?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#7f007f"
-        },
-        "bus": {
-            "sign": "<img src='maki:bus?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#af0000"
-        },
-        "trolleybus": {
-            "sign": "<img src='maki:bus?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#af3f00"
-        },
-        "aerialway": {
-            "sign": "<img src='maki:aerialway?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#00aaaa"
-        },
-        "ferry": {
-            "sign": "<img src='maki:ferry?fill=#ffffff'>",
-            "zoom": 12,
-            "color": "#007fff"
-        }
-    }
-}
diff --git a/pt_stops.json b/pt_stops.json
deleted file mode 100644
index 0905b23..0000000
--- a/pt_stops.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
-    "type": "overpass",
-    "name": {
-        "ast": "Paraes y estaciones",
-        "cs": "Zastávky & Stanice",
-        "de": "Haltestellen",
-        "el": "Στάσεις & Σταθμοί",
-        "en": "Stops & Stations",
-        "es": "Paradas y estaciones",
-        "fr": "Arrêts/Stops, Stations",
-        "hu": "Megállók és állomások",
-        "it": "Stazioni e fermate",
-        "ja": "停留所と駅",
-        "nl": "Haltes en Stations",
-        "pl": "Przystanki i Stacje",
-        "pt-br": "Paradas e Estações",
-        "ru": "Остановки и станции",
-        "uk": "Зупинки та станції"
-    },
-    "query": {
-        "14": [
-            "(",
-            "node[railway~\"^(station|halt|tram_stop|platform)$\"];",
-            "way[railway~\"^(station|platform)$\"];",
-            "node[highway~\"^(bus_stop|platform)$\"];",
-            "way[highway~\"^(platform)$\"];",
-            "node[public_transport~\"^(stop_position|platform)$\"];",
-            "way[public_transport~\"^(platform)$\"];",
-            "node[amenity~\"^(ferry_terminal|bus_station)$\"];",
-            ")"
-        ]
-    },
-    "feature": {
-        "pre": [
-            "{% if tags.amenity in [ 'ferry_terminal', 'bus_station' ] %}",
-            "  {% set key = 'amenity' %}",
-            "  {% set value = tags.amenity %}",
-            "{% elseif tags.railway == 'platform' or tags.highway == 'platform' or tags.public_transport == 'platform' %}",
-            "  {% set key = 'public_transport' %}",
-            "  {% set value = 'platform' %}",
-            "{% else %}",
-            "  {% set key = 'public_transport' %}",
-            "  {% set value = 'stop_position' %}",
-            "{% endif %}"
-        ],
-        "description": "{{ tagTrans(key, value) }}"
-    }
-}
diff --git a/public.json b/public.json
index 2678071..55c4c18 100644
--- a/public.json
+++ b/public.json
@@ -11,6 +11,7 @@
         "it": "Servizi pubblici",
         "ja": "公共サービス",
         "nl": "Openbare diensten",
+        "pt": "Serviços públicos",
         "pt-br": "Serviços Públicos",
         "ro": "Servicii publice",
         "ru": "Общественные места",
diff --git a/railway-electrification.json b/railway-electrification.json
index 72a6941..fdb6cde 100644
--- a/railway-electrification.json
+++ b/railway-electrification.json
@@ -4,6 +4,7 @@
         "de": "Eisenbahn Elektrifizierung",
         "en": "Railway electrification",
         "fr": "Puissance électrique ferroviaire",
+        "pt": "Eletrificação ferroviária",
         "pt-br": "Eletrificação Ferroviária"
     },
     "query": {
@@ -38,12 +39,12 @@
         ],
         "title": "{% if tags.ref %}{{ localizedTag(tags, 'ref') }} - {% endif %}{{ localizedTag(tags, 'name')|default(localizedTag(tags, 'operator'))|default(trans('unnamed')) }}",
         "description": [
-            "{{ tagTrans('railway', tags.railway) }} -",
+            "{{ tagTrans('railway', tags.railway) }}",
             "",
             "{% if tags.electrified == 'no' %}",
-            "  {{ trans('not electrified') }}",
+            "  - {{ tagTrans('electrified', 'no') }}",
             "{% elseif tags.electrified %}",
-            "  {{ tags.voltage|default(trans('unknown')) }}V, {{ tags.frequency|default(trans('unknown')) }}Hz",
+            "  - {{ tags.voltage|default(trans('unknown')) }}V, {{ tags.frequency|default(trans('unknown')) }}Hz",
             "{% endif %}"
         ],
         "body": [
diff --git a/railway-infrastructure.json b/railway-infrastructure.json
index a33e91e..1e8a258 100644
--- a/railway-infrastructure.json
+++ b/railway-infrastructure.json
@@ -4,6 +4,7 @@
         "de": "Eisenbahn Infrastruktur",
         "en": "Railway infrastructure",
         "fr": "Infrastructure ferroviaire",
+        "pt": "Infraestrutura ferroviária",
         "pt-br": "Infraestrutura Ferroviária"
     },
     "query": {
@@ -13,14 +14,21 @@
     },
     "feature": {
         "title": "{% if tags.ref %}{{ localizedTag(tags, 'ref') }} - {% endif %}{{ localizedTag(tags, 'name')|default(localizedTag(tags, 'operator'))|default(trans('unnamed')) }}",
-        "description": "{{ tagTrans('railway', tags.railway) }}",
+        "description": [
+            "{{ tagTrans('railway', tags.railway) -}}",
+            "{%- if tags.usage %}",
+            ", {{ tagTrans('railway=rail usage', tags.usage) }}",
+            "{% endif -%}",
+            "{%- if tags.service %}",
+            ", {{ tagTrans('railway=rail service', tags.service) }}",
+            "{% endif -%}"
+        ],
         "body": [
             "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br>{% endif %}",
-            "{% if tags.usage %}{{ keyTrans('usage') }}: {{ tagTrans('usage', tags.usage)|default(trans('unknown')) }}<br/>{% endif %}",
-            "{% if tags.service %}{{ keyTrans('service') }}: {{ tagTrans('service', tags.service ) }}<br/>{% endif %}",
+            "{% if tags.usage %}{{ keyTrans('railway=rail usage') }}: {{ tagTrans('railway=rail usage', tags.usage)|default(trans('unknown')) }}<br/>{% endif %}",
+            "{% if tags.service %}{{ keyTrans('railway=rail service') }}: {{ tagTrans('railway=rail service', tags.service ) }}<br/>{% endif %}",
             "{{ keyTrans('gauge') }}: {{ tags.gauge|default(trans('unknown')) }}<br/>",
-            "{% if tags.electrified == 'no' %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', 'no') }}{% elseif tags.electrified %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', tags.electrified) }}, {{ keyTrans('voltage') }}: {{ tags.voltage|default(trans('unknown')) }}, {{ keyTrans('frequency') }}: {{ tags.frequency|default(trans('unknown')) }}<br/>{% endif %}",
-            ""
+            "{% if tags.electrified == 'no' %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', 'no') }}{% elseif tags.electrified %}{{ keyTrans('electrified') }}: {{ tagTrans('electrified', tags.electrified) }}, {{ keyTrans('voltage') }}: {{ tags.voltage|default(trans('unknown')) }}, {{ keyTrans('frequency') }}: {{ tags.frequency|default(trans('unknown')) }}<br/>{% endif %}"
         ],
         "markerSign": "{% if tags.railway in [ 'halt', 'tram_stop', 'station', 'stop', 'subway_entrance' ] %}X{% endif %}",
         "markerSymbol": [
@@ -144,4 +152,4 @@
         "{% endif %}",
         "</table>"
     ]
-}
+}
\ No newline at end of file
diff --git a/railway-routes.json b/railway-routes.json
new file mode 100644
index 0000000..32aae7e
--- /dev/null
+++ b/railway-routes.json
@@ -0,0 +1,58 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Railway Routes",
+        "fr": "Lignes ferroviaires"
+    },
+    "query": {
+        "12": "relation[type=route][route=railway]"
+    },
+    "members": true,
+    "feature": {
+        "pre": "{% set color = '#' ~ tags.operator|default('')|md5|slice(0, 6) %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': color })|raw }}",
+        "description": "{{ tags.operator }}",
+        "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": "",
+        "markerSymbol": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "{% set color = '#d41d8c' %}",
+            "",
+            "{% 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 %}"
+        ],
+        "title": "",
+        "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/religion.json b/religion.json
index 9da14ab..967b59e 100644
--- a/religion.json
+++ b/religion.json
@@ -12,6 +12,7 @@
         "it": "Religione",
         "ja": "宗教",
         "nl": "Religie",
+        "pt": "Religião",
         "pt-br": "Religião",
         "ro": "Religie",
         "ru": "Религия",
diff --git a/residential.json b/residential.json
index 23278be..cb97078 100644
--- a/residential.json
+++ b/residential.json
@@ -12,6 +12,7 @@
         "it": "Aree residenziali",
         "ja": "住居エリア",
         "nl": "Woongebieden",
+        "pt": "Áreas residenciais",
         "pt-br": "Áreas Residenciais",
         "ro": "Zona rezidentiala",
         "ru": "Жилые районы",
diff --git a/resources.json b/resources.json
index cf2f4e4..e0f8436 100644
--- a/resources.json
+++ b/resources.json
@@ -8,6 +8,7 @@
         "fr": "Extraction des ressources",
         "it": "Areee estrattive",
         "nl": "Grondstoffenwinning",
+        "pt": "Extração de recursos",
         "pt-br": "Extração de Recursos",
         "ru": "Добыча ресурсов"
     },
diff --git a/shop.json b/shop.json
index b99c127..ce8c8cb 100644
--- a/shop.json
+++ b/shop.json
@@ -13,6 +13,7 @@
         "ja": "ショッピング",
         "nl": "Winkelen",
         "pl": "Zakupy",
+        "pt": "Compras",
         "pt-br": "Compras",
         "ro": "Cumpărături",
         "ru": "Покупки",
diff --git a/sport.json b/sport.json
index 50ee5b0..2caadbc 100644
--- a/sport.json
+++ b/sport.json
@@ -11,6 +11,7 @@
         "it": "Sport",
         "ja": "スポーツ",
         "nl": "Sport",
+        "pt": "Desporto",
         "pt-br": "Esportes",
         "ru": "Спорт",
         "uk": "Спорт. Інше."
diff --git a/tourism_attractions.json b/tourism_attractions.json
index 0df04af..f9a36f3 100644
--- a/tourism_attractions.json
+++ b/tourism_attractions.json
@@ -13,6 +13,7 @@
         "ja": "観光",
         "nl": "Toerisme",
         "pl": "Turystyka",
+        "pt": "Turismo",
         "pt-br": "Turismo",
         "ro": "Turism",
         "ru": "Туризм",
diff --git a/tourism_services.json b/tourism_services.json
index 910dbb8..680c183 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -13,6 +13,7 @@
         "ja": "観光",
         "nl": "Toerisme",
         "pl": "Turystyka",
+        "pt": "Turismo",
         "pt-br": "Turismo",
         "ro": "Turism",
         "ru": "Туризм",
@@ -96,4 +97,4 @@
             "zoom": 16
         }
     }
-}
\ No newline at end of file
+}
diff --git a/waste.json b/waste.json
index 00fd5d7..662e2c7 100644
--- a/waste.json
+++ b/waste.json
@@ -9,6 +9,7 @@
         "it": "Smaltimento",
         "ja": "処理場",
         "nl": "Afvalverwijdering",
+        "pt": "Lixo",
         "pt-br": "Lixo",
         "ru": "Переработка отходов"
     },
diff --git a/water.json b/water.json
index a601e01..137f0b9 100644
--- a/water.json
+++ b/water.json
@@ -4,6 +4,7 @@
         "de": "Gewässer",
         "en": "Waterbodies",
         "fr": "Hydrographie",
+        "pt": "Massas de água",
         "pt-br": "Hidrografia"
     },
     "query": {
diff --git a/wikipedia.json b/wikipedia.json
index a3babd5..72bcf0d 100644
--- a/wikipedia.json
+++ b/wikipedia.json
@@ -4,6 +4,7 @@
         "de": "Wikipedia",
         "en": "Wikipedia",
         "fr": "Wikipédia",
+        "pt": "Wikipédia",
         "pt-br": "Wikipédia"
     },
     "query": {
diff --git a/works.json b/works.json
index 9906f29..75bc26e 100644
--- a/works.json
+++ b/works.json
@@ -9,6 +9,7 @@
         "it": "Fabbriche",
         "ja": "工場",
         "nl": "Fabrieken",
+        "pt": "Fábricas",
         "pt-br": "Fábricas",
         "ru": "Промышленность"
     },