diff --git a/natural.json b/natural.json
index 53749c3..990d263 100644
--- a/natural.json
+++ b/natural.json
@@ -20,36 +20,49 @@
         "9": [
             "(",
             "node[natural~\"^(peak|volcano|valley)$\"];",
+            "nwr[place~\"^(island)$\"];",
             ")"
         ],
         "13": [
             "(",
             "nwr[natural~\"^(peak|volcano|wood|glacier|cape|peninsula|beach|coastline|reef|hill|valley|ridge|arete|saddle|sinkhole|cave_entrance|isthmus)$\"];",
+            "nwr[place~\"^(island|islet)$\"];",
             ")"
         ],
         "16": [
             "(",
             "nwr[natural][natural!~\"^(water|divide|bay|strait|spring|hot_spring|geyser|tree)$\"];",
+            "nwr[place~\"^(island|islet)$\"];",
             ")"
         ],
         "18": [
             "(",
             "nwr[natural][natural!~\"^(water|divide|bay|strait|spring|hot_spring|geyser)$\"];",
+            "nwr[place~\"^(island|islet)$\"];",
             ")"
         ]
     },
     "feature": {
+        "pre": [
+            "{% if tags.place in [ 'island', 'islet' ] %}",
+            "{% set key = 'place' %}",
+            "{% set value = tags.place %}",
+            "{% else %}",
+            "{% set key = 'natural' %}",
+            "{% set value = tags.natural %}",
+            "{% endif %}"
+        ],
         "title": [
             "{{ localizedTag(tags, 'name') | default(trans('unnamed')) }}",
             "{% if tags.natural == 'peak' and tags.ele %}({{ tags.ele }}m){% endif %}"
         ],
-        "description": "{{ tagTrans('natural', tags.natural) }}",
+        "description": "{{ tagTrans(key, value) }}",
         "style": {
-            "color": "{{ const[tags.natural].color|default('#f2756a') }}"
+            "color": "{{ const[value].color|default('#f2756a') }}"
         },
-        "markerSign": "<span style='color: white'>{{ const[tags.natural].sign|raw }}</span>",
-        "markerSymbol": "{{ markerPointer({ fillColor: const[tags.natural].color|default('#f2756a') })|raw }}",
-        "listMarkerSymbol": "{{ markerCircle({ fillColor: const[tags.natural].color|default('#f2756a') })|raw }}"
+        "markerSign": "<span style='color: white'>{{ const[value].sign|raw }}</span>",
+        "markerSymbol": "{{ markerPointer({ fillColor: const[value].color|default('#f2756a') })|raw }}",
+        "listMarkerSymbol": "{{ markerCircle({ fillColor: const[value].color|default('#f2756a') })|raw }}"
     },
     "filter": {
         "type": {
@@ -57,12 +70,26 @@
             "key": "natural",
             "type": "select",
             "show_default": "true",
-            "values": "{% set list = [] %}{% for k, v in const %}<option value=\"{{ k }}\">{% set list = list|merge([ k ]) %}{{ tagTrans('natural', k) }}</option>{% endfor %}<option weight='1' value='other' query='nwr[natural][natural!~\"^(|.*;)({{ list|join('|') }})(|;.*)$\"]'>{{ trans('other') }}</option>",
+            "values": "{% set list = [] %}{% for k, v in const %}<option value=\"{{ k }}\" {% if v.key %}query='nwr[\"{{ v.key }}\"=\"{{ k }}\"]'{% endif %}>{% set list = list|merge([ k ]) %}{{ tagTrans(v.key|default('natural'), k) }}</option>{% endfor %}<option weight='1' value='other' query='nwr[natural][natural!~\"^(|.*;)({{ list|join('|') }})(|;.*)$\"]'>{{ trans('other') }}</option>",
             "sort": "natsort",
             "op": "has"
         }
     },
     "const": {
+        "island": {
+            "zoom": 9,
+            "sign": "<img data-src='temaki:island_trees_building'>",
+            "color": "#cfb997",
+            "key": "place",
+            "group": "landform"
+        },
+        "islet": {
+            "zoom": 13,
+            "sign": "<img data-src='temaki:island_trees_building'>",
+            "color": "#cfb997",
+            "key": "place",
+            "group": "landform"
+        },
         "wood": {
             "zoom": 13,
             "sign": "<i class='fas fa-tree'></i>",