diff --git a/children.json b/children.json
index 69fc9134b..660515f32 100644
--- a/children.json
+++ b/children.json
@@ -81,5 +81,41 @@
         "    <td>{{ tagTrans('amenity', 'toilets diaper=yes') }}</td>",
         "  </tr>",
         "</table>"
-    ]
+    ],
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "values": {
+                "playground": {
+                    "name": "{{ tagTrans('leisure', 'playground') }}",
+                    "query": "nwr[leisure=playground]"
+                },
+                "indoor_play": {
+                    "name": "{{ tagTrans('leisure', 'indoor_play') }}",
+                    "query": "nwr[leisure=indoor_play]"
+                },
+                "summer_camp": {
+                    "name": "{{ tagTrans('leisure', 'summer_camp') }}",
+                    "query": "nwr[leisure=summer_camp]"
+                },
+                "kids_area": {
+                    "name": "{{ keyTrans('kids_area') }}",
+                    "query": "nwr[kids_area]"
+                },
+                "shop_baby_goods": {
+                    "name": "{{ tagTrans('shop', 'baby_goods') }}",
+                    "query": "nwr[shop=baby_goods]"
+                },
+                "shop_toys": {
+                    "name": "{{ tagTrans('shop', 'toys') }}",
+                    "query": "nwr[shop=toys]"
+                },
+                "toilets": {
+                    "name": "{{ tagTrans('amenities', 'toilets diaper=yes') }}",
+                    "query": "nwr[amenity=toilets][diaper]"
+                }
+            }
+        }
+    }
 }
diff --git a/communication.json b/communication.json
index 83a90d31e..3053b3e83 100644
--- a/communication.json
+++ b/communication.json
@@ -130,5 +130,13 @@
             "sign": "<img src='maki:telephone'>",
             "zoom": 16
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/craft.json b/craft.json
index f9c49d4a1..af1656938 100644
--- a/craft.json
+++ b/craft.json
@@ -73,5 +73,13 @@
             "window_construction": "",
             "winery": "🍷"
         }
+    },
+    "filter": {
+        "craft": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "show_default": "true",
+            "values": "{% set list = [] %}{% for t, v in const.crafts %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('craft', t) }}</option>{% endfor %}<option value='other' query='nwr[craft][craft!~\"^({{ list|join('|') }})$\"]'>{{ trans('other') }}</option>"
+        }
     }
 }
diff --git a/culture.json b/culture.json
index 630f3751b..226b774b8 100644
--- a/culture.json
+++ b/culture.json
@@ -121,5 +121,15 @@
         "  </tr>",
         "{% endfor %}",
         "</table>"
-    ]
+    ],
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "query": "nwr[{{ value }}]",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\">{{ trans('tag:' ~ k) }}</option>{% endfor %}<option value=\"other\" query=\"nwr[amenity=fountain]\">{{ trans('other') }}</option>",
+            "valueName": "{{ trans('tag:' ~ value) }}"
+        }
+    }
 }
diff --git a/education.json b/education.json
index 5b4772da6..ba2fc70b8 100644
--- a/education.json
+++ b/education.json
@@ -129,5 +129,13 @@
             "sign": "<i class='fas fa-vials'></i>",
             "zoom": 14
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/emergency.json b/emergency.json
index 73b606d98..361337c07 100644
--- a/emergency.json
+++ b/emergency.json
@@ -96,5 +96,34 @@
             "sign": "<img data-src='maki:hospital?fill=white'>",
             "background": "#009262"
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "show_default": "true",
+            "values": {
+                "fire_station": {
+                    "name": "{{ tagTrans('amenity', 'fire_station') }}",
+                    "query": "nwr[amenity=fire_station]"
+                },
+                "hospital": {
+                    "name": "{{ tagTrans('amenity', 'hospital') }}",
+                    "query": "nwr[amenity=hospital]"
+                },
+                "police": {
+                    "name": "{{ tagTrans('amenity', 'police') }}",
+                    "query": "nwr[amenity=police]"
+                },
+                "emergency_phone": {
+                    "name": "{{ tagTrans('emergency', 'phone') }}",
+                    "query": "node[emergency=phone]"
+                },
+                "emergency_access_point": {
+                    "name": "{{ tagTrans('highway', 'emergency_access_point') }}",
+                    "query": "node[highway=emergency_access_point]"
+                }
+            }
+        }
     }
 }
diff --git a/financial.json b/financial.json
index 82b3bfbd5..9dce9800c 100644
--- a/financial.json
+++ b/financial.json
@@ -101,5 +101,13 @@
             "sign": "<i class=\"fas fa-piggy-bank\"></i>",
             "zoom": 15
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/gastro.json b/gastro.json
index d83858610..d26740af4 100644
--- a/gastro.json
+++ b/gastro.json
@@ -45,5 +45,72 @@
             "</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 %}"
+    },
+    "info": "{{ repoTrans('Objects with diet information') }}",
+    "filter": {
+        "amenity": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "show_default": "true",
+            "values": [
+              "bar",
+              "biergarten",
+              "cafe",
+              "fast_food",
+              "ice_cream",
+              "pub",
+              "restaurant"
+            ],
+            "valueName": "{{ tagTrans('amenity', value) }}",
+            "op": "="
+        },
+        "cuisine_food": {
+            "name": "{{ keyTrans('cuisine/food') }}",
+            "type": "select",
+            "key": "cuisine",
+            "values": [ "barbecue", "burger", "casserole", "chicken", "couscous", "curry", "fish", "fish_and_chips", "fried_food", "friture", "gyros", "kebab", "noodle", "pasta", "pizza", "sandwich", "sausage", "seafood", "soup", "steak_house", "sub", "sushi", "tapas", "wings" ],
+            "valueName": "{{ tagTrans('cuisine', value) }}",
+            "op": "has"
+        },
+        "cuisine_dessert": {
+            "name": "{{ keyTrans('cuisine/dessert') }}",
+            "type": "select",
+            "key": "cuisine",
+            "values": [ "bagel", "biscuit", "bougatsa", "cake", "coffee_shop", "cookie", "crepe", "dessert", "donut", "empanada", "frozen_yogurt", "gingerbread", "ice_cream", "chimney_cake", "langos", "pancake", "pastry", "petit_four", "pie", "pogacha", "poppy_seed_roll", "profiterole", "punch_cake", "savory_pancakes", "strudel", "teahouse", "waffle" ],
+            "valueName": "{{ tagTrans('cuisine', value) }}",
+            "op": "has"
+        },
+        "cuisine_ethnicity": {
+            "name": "{{ keyTrans('cuisine/ethnicity') }}",
+            "type": "select",
+            "key": "cuisine",
+            "values": [ "afghan", "african", "american", "arab", "argentinian", "asian", "australian", "baiana", "balkan", "basque", "bavarian", "belarusan", "bolivian", "brazilian", "cantonese", "capixaba", "caribbean", "chinese", "croatian", "czech", "danish", "french", "gaucho", "german", "greek", "hawaiian", "hunan", "hungarian", "indian", "international", "iranian", "italian", "japanese", "jewish", "korean", "kyo_ryouri", "latin_american", "lebanese", "malagasy", "mediterranean", "mexican", "mineira", "new_mexican", "okinawa_ryori", "pakistani", "peruvian", "polish", "portuguese", "regional", "rhenish", "russian", "shandong", "sichuan", "spanish", "texan", "tex-mex", "thai", "turkish", "vietnamese", "westphalian" ],
+            "valueName": "{{ tagTrans('cuisine', value) }}",
+            "op": "has"
+        },
+        "diet": {
+            "name": "{{ keyTrans('diet') }}",
+            "type": "select",
+            "values": {
+               "*": {
+                 "name": "{{ repoTrans('Objects with diet information') }}",
+                 "query": "nwr[~\"^diet:\"~\".\"]"
+               },
+               "diet:vegan": {},
+               "diet:vegetarian": {},
+               "diet:pescetarian": {},
+               "diet:lacto_vegetarian": {},
+               "diet:ovo_vegetarian": {},
+               "diet:fruitarian": {},
+               "diet:raw": {},
+               "diet:gluten_free": {},
+               "diet:dairy_free": {},
+               "diet:lactose_free": {},
+               "diet:halal": {},
+               "diet:kosher": {}
+            },
+            "valueName": "{{ keyTrans(value) }}",
+            "op": "has_key_value"
+        }
     }
 }
diff --git a/health.json b/health.json
index a54078285..8c7c3ddcc 100644
--- a/health.json
+++ b/health.json
@@ -88,5 +88,13 @@
         "amenity=pharmacy": "<img src='maki:pharmacy'>",
         "amenity=social_facility": "",
         "amenity=veterinary": "<img src='maki:veterinary'>"
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/historic.json b/historic.json
index 0042fc19c..adc3b1b7c 100644
--- a/historic.json
+++ b/historic.json
@@ -113,5 +113,51 @@
             "sign": "<img data-src='temaki:ruins'>",
             "zoom": 14
         }
+    },
+    "filter": {
+        "type": {
+            "key": "historic",
+            "show_default": "true",
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "values": "{% set list = [] %}{% for t, v in const %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('historic', t) }}</option>{% endfor %}<option value='other' query='nwr[historic][historic!~\"^({{ list|join('|') }})$\"]'>{{ trans('other') }}</option>",
+            "valueName": "{{ tagTrans('historic', value) }}"
+        },
+        "conflict": {
+            "key": "memorial:conflict",
+            "op": "has",
+            "name": "{{ keyTrans('memorial:conflict') }}",
+            "type": "select",
+            "values": [
+                "WW1",
+                "WW2"
+            ],
+            "valueName": "{{ tagTrans('memorial:conflict', value) }}"
+        },
+        "civilization": {
+            "key": "historic:civilization",
+            "op": "has",
+            "name": "{{ keyTrans('historic:civilization') }}",
+            "type": "select",
+            "values": [
+                "ancient_egyptian",
+                "ancient_greek",
+                "ancient_roman",
+                "byzantine",
+                "celtic",
+                "etruscan",
+                "imperial_chinese",
+                "korean",
+                "medieval",
+                "modern",
+                "neolithic",
+                "nuragic",
+                "ottoman",
+                "prehistoric",
+                "roman",
+                "western_roman"
+            ],
+            "valueName": "{{ tagTrans('historic:civilization', value) }}"
+        }
     }
 }
diff --git a/lang/de.json b/lang/de.json
index 1771e3b5c..9ef040927 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -88,5 +88,6 @@
     "category:xmas": "Weihnachten",
     "date format not understood": "Datumsformat nicht erkannt",
     "outdated feature": "Informationen nicht aktuell",
-    "xmas:outdated-warning": "Objekt wurde nicht für die aktuelle Saison aktualisiert. Bitte prüfen und das Tag 'xmas:lastcheck' auf das aktuelle Datum setzen."
+    "xmas:outdated-warning": "Objekt wurde nicht für die aktuelle Saison aktualisiert. Bitte prüfen und das Tag 'xmas:lastcheck' auf das aktuelle Datum setzen.",
+    "Objects with diet information": "Objekte mit Ernährungsinformationen"
 }
diff --git a/law.json b/law.json
index f670988c8..a750264fb 100644
--- a/law.json
+++ b/law.json
@@ -57,5 +57,13 @@
             "sign": "<i class=\"fas fa-file-signature\"></i>",
             "zoom": 14
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/memorial.json b/memorial.json
index 2022e21ee..bd5b94270 100644
--- a/memorial.json
+++ b/memorial.json
@@ -106,5 +106,61 @@
             "sign": "<img data-src='maki:monument?size=15'>",
             "zoom": 11
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "values": {
+                "monument": {
+                    "name": "{{ tagTrans('historic', 'monument') }}",
+                    "query": "nwr[historic=monument]"
+                },
+                "memorial": {
+                    "name": "{{ tagTrans('historic', 'memorial') }}",
+                    "query": "nwr[historic=memorial]"
+                },
+                "stolperstein": {
+                    "name": "{{ tagTrans('historic', 'memorial memorial=stolperstein') }}",
+                    "query": "(nwr[memorial=stolperstein];nwr[\"memorial:type\"=stolperstein];)"
+                }
+            }
+        },
+        "conflict": {
+            "key": "memorial:conflict",
+            "op": "has",
+            "name": "{{ keyTrans('memorial:conflict') }}",
+            "type": "select",
+            "values": [
+                "WW1",
+                "WW2"
+            ],
+            "valueName": "{{ tagTrans('memorial:conflict', value) }}"
+        },
+        "civilization": {
+            "key": "historic:civilization",
+            "op": "has",
+            "name": "{{ keyTrans('historic:civilization') }}",
+            "type": "select",
+            "values": [
+                "ancient_egyptian",
+                "ancient_greek",
+                "ancient_roman",
+                "byzantine",
+                "celtic",
+                "etruscan",
+                "imperial_chinese",
+                "korean",
+                "medieval",
+                "modern",
+                "neolithic",
+                "nuragic",
+                "ottoman",
+                "prehistoric",
+                "roman",
+                "western_roman"
+            ],
+            "valueName": "{{ tagTrans('historic:civilization', value) }}"
+        }
     }
 }
diff --git a/office.json b/office.json
index b92ba3451..ddefd6e96 100644
--- a/office.json
+++ b/office.json
@@ -43,5 +43,13 @@
         "therapist": "<i class='fas fa-couch'></i>",
         "travel_agent": "<i class='fas fa-plane-departure'></i>",
         "publisher": "<i class='fas fa-book'></i>"
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/organisations.json b/organisations.json
index 1d73ea0c8..f8ae35890 100644
--- a/organisations.json
+++ b/organisations.json
@@ -78,5 +78,13 @@
             "sign": "<i class='fas fa-hands-helping'></i>",
             "zoom": 13
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/places.json b/places.json
index 2ca3d0194..29d554bda 100644
--- a/places.json
+++ b/places.json
@@ -34,5 +34,14 @@
         "description": "{{ tagTrans('place', tags.place) }}",
         "body": "{% if tags.population %}{{ keyTrans('population') }}: {{ tags.population }}{% endif %}",
         "priority": "{% set priorities = { 'continent': 0, 'country': 1, 'state': 2, 'region': 3, 'city': 4, 'town': 5, 'village': 6, 'suburb': 7, 'hamlet': 8, 'quarter': 9, neighbourhood: 10, 'isolated_dwelling': 11, 'farm': 12 } %}{{ priorities[tags.place] }}"
+    },
+    "filter": {
+        "name": {
+            "key": [ "name", "name:*" ],
+            "name": "{{ keyTrans('name') }}",
+            "type": "text",
+            "change_on": "keyup",
+            "op": "strsearch"
+        }
     }
 }
diff --git a/pt.json b/pt.json
index fd517b592..267ca54e9 100644
--- a/pt.json
+++ b/pt.json
@@ -263,5 +263,19 @@
             "zoom": 12,
             "color": "#007fff"
         }
+    },
+    "filter": {
+        "route": {
+            "type": "select",
+            "values": [
+                "aerialway",
+                "bus",
+                "ferry",
+                "subway",
+                "train",
+                "tram",
+                "trolleybus"
+            ]
+        }
     }
 }
diff --git a/public.json b/public.json
index 448fb3102..3c95f11e2 100644
--- a/public.json
+++ b/public.json
@@ -89,5 +89,13 @@
         "amenity=townhall": "<img data-src='maki:town-hall'>",
         "office=administration": "<img data-src='maki:town-hall'>",
         "office=government": "<img data-src='maki:town-hall'>"
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/religion.json b/religion.json
index b3e2c5ac4..7e3c5aa72 100644
--- a/religion.json
+++ b/religion.json
@@ -83,14 +83,88 @@
             "  {{ keyTrans('denomination') }}: {{ tagTransList('denomination', tags.denomination) }}<br/>",
             "{% endif %}"
         ],
-        "markerSign": [
-            "{% if tags.religion == 'christian' %}✝",
-            "{% elseif tags.religion == 'muslim' %}☪",
-            "{% elseif tags.religion == 'buddhist' %}☸",
-            "{% elseif tags.religion == 'hindu' %}ॐ",
-            "{% elseif tags.religion == 'jewish' %}✡",
-            "{% elseif tags.religion == 'pagan' %}☆",
-            "{% endif %}"
-        ]
+        "markerSign": "{{ const.religion[tags.religion] }}"
+    },
+    "const": {
+        "religion": {
+            "christian": "✝",
+            "muslim": "☪",
+            "buddhist": "☸",
+            "shinto": "",
+            "hindu": "ॐ",
+            "jewish": "✡",
+            "taoist": "",
+            "sikh": "",
+            "none": "",
+            "multifaith": "",
+            "unitarian_universialist": "",
+            "spiritualist": "",
+            "jain": "",
+            "voodoo": "",
+            "confucian": "",
+            "bahai": "",
+            "caodaism": "",
+            "tenrikyo": "",
+            "vietnamese_folk": "",
+            "pagan": "☆",
+            "scientologist": "",
+            "zoroastrian": "",
+            "pentecostal": "",
+            "shamanic": ""
+        }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "query": "nwr[{{ value }}]",
+            "type": "select",
+            "values": {
+              "place_of_worship": {
+                "name": "{{ tagTrans('amenity', 'place_of_worship') }}",
+                "query": "nwr[amenity=place_of_worship]"
+              },
+              "grave_yard": {
+                "name": "{{ tagTrans('amenity', 'grave_yard') }}",
+                "query": "nwr[amenity=grave_yard]"
+              },
+              "crematorium": {
+                "name": "{{ tagTrans('amenity', 'crematorium') }}",
+                "query": "nwr[amenity=crematorium]"
+              },
+              "cemetery": {
+                "name": "{{ tagTrans('landuse', 'cemetery') }}",
+                "query": "nwr[landuse=cemetery]"
+              },
+              "wayside_cross": {
+                "name": "{{ tagTrans('historic', 'wayside_cross') }}",
+                "query": "nwr[historic=wayside_cross]"
+              },
+              "wayside_shrine": {
+                "name": "{{ tagTrans('historic', 'wayside_shrine') }}",
+                "query": "nwr[historic=wayside_shrine]"
+              },
+              "wayside_chapel": {
+                "name": "{{ tagTrans('historic', 'wayside_chapel') }}",
+                "query": "nwr[historic=wayside_chapel]"
+              },
+              "parish": {
+                "name": "{{ tagTrans('office', 'parish') }}",
+                "query": "nwr[office=parish]"
+              },
+              "office": {
+                "name": "{{ tagTrans('office', 'religion') }}",
+                "query": "nwr[office=religion]"
+              }
+            }
+        },
+        "religion": {
+            "name": "{{ keyTrans('religion') }}",
+            "show_default": "true",
+            "type": "select",
+            "valueName": "{{ tagTrans('religion', value) }}",
+            "values": "{% set list = [] %}{% for t, v in const.religion %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('religion', t) }}</option>{% endfor %}<option value='other' query='nwr[religion][religion!~\"^({{ list|join('|') }})$\"]'>{{ trans('other') }}</option>",
+            "op": "has"
+        }
     }
 }
diff --git a/shop.json b/shop.json
index 084c93868..bab0dd593 100644
--- a/shop.json
+++ b/shop.json
@@ -180,5 +180,14 @@
                 "sign": "&#8986;"
             }
         ]
+    },
+    "filter": {
+        "shop": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "show_default": "true",
+            "values": "{% set list = [] %}{% for k, v in const.shops %}{% for t in v.types %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('shop', t) }}</option>{% endfor %}{% endfor %}<option value='other' query='nwr[shop][shop!~\"^(|.*;)({{ list|join('|') }})(|;.*)$\"]'>{{ trans('other') }}</option>",
+            "op": "has"
+        }
     }
 }
diff --git a/sport.json b/sport.json
index 2caadbc26..3b7931bd4 100644
--- a/sport.json
+++ b/sport.json
@@ -68,5 +68,13 @@
         "tennis": "🎾",
         "volleyball": "🏐",
         "weightlifting": "🏋"
+    },
+    "filter": {
+        "sport": {
+            "name": "{{ keyTrans('sport') }}",
+            "type": "select",
+            "show_default": "true",
+            "values": "{% set list = [] %}{% for t, v in const %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('sport', t) }}</option>{% endfor %}<option value='other' query='nwr[sport][sport!~\"^({{ list|join('|') }})$\"]'>{{ trans('other') }}</option>"
+        }
     }
 }
diff --git a/swimming_bathing.json b/swimming_bathing.json
index def3505f6..98e8aee6d 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -139,5 +139,13 @@
             "zoom": 16,
             "sign": "🚿 "
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "type": "select",
+            "show_default": "true",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }
diff --git a/tourism_attractions.json b/tourism_attractions.json
index d69b2b457..8f22154b8 100644
--- a/tourism_attractions.json
+++ b/tourism_attractions.json
@@ -56,5 +56,16 @@
         "theme_park": "<img data-src='maki:amusement-park'>",
         "viewpoint": "<i class='fas fa-eye' aria-hidden='true'></i>",
         "zoo": "🦁"
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "query": "nwr[{{ value }}]",
+            "type": "select",
+            "key": "tourism",
+            "values": "{% set list = [] %}{% for t, v in const %}<option value=\"{{ t }}\">{% set list = list|merge([ t ]) %}{{ tagTrans('tourism', t) }}</option>{% endfor %}",
+            "op": "has"
+        }
     }
 }
diff --git a/tourism_services.json b/tourism_services.json
index 4901f18a0..57b77d2f7 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -141,5 +141,13 @@
             "sign": "ℹ️",
             "zoom": 16
         }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "show_default": "true",
+            "type": "select",
+            "values": "{% for k, v in const %}<option value=\"{{ k }}\" query=\"nwr[{{ k }}]\" minzoom=\"{{ v.zoom }}\">{{ tagTrans(k) }}</option>{% endfor %}"
+        }
     }
 }