diff --git a/lang/de.json b/lang/de.json
index b9abf63..dc739fb 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -42,7 +42,7 @@
     "category:memorial": "Denkmäler und Monumente",
     "category:military": "Militär",
     "category:mtb-routes": "Mointainbikerouten",
-    "category:natural": "Geographische Objekte",
+    "category:natural": "Naturformationen",
     "category:office": "Ämter, Dienst- und Geschäftsstellen",
     "category:oil_gas": "Erdöl und Erdgas",
     "category:organisations": "Organisationen",
diff --git a/natural.json b/natural.json
index 1e2d84c..65f8398 100644
--- a/natural.json
+++ b/natural.json
@@ -3,7 +3,7 @@
     "name": {
         "ast": "Formaciones naturales",
         "cs": "Přírodní úkazy",
-        "de": "Geographische Objekte",
+        "de": "Naturformationen",
         "el": "Φυσικοί Σχηματισμοί",
         "en": "Natural Formations",
         "fr": "Éléments naturels",
@@ -24,16 +24,12 @@
         ],
         "13": [
             "(",
-            "node[natural~\"^(peak|volcano|wood|scrub|heath|grassland|fell|bare_rock|scree|shingle|sand|mud|water|wetland|glacier|bay|cape|beach|coastline|spring|hot_spring|geyser|valley|ridge|arete|cliff|saddle|rock|stone|sinkhole|cave_entrance)$\"];",
-            "way[natural~\"^(peak|volcano|wood|scrub|heath|grassland|fell|bare_rock|scree|shingle|sand|mud|water|wetland|glacier|bay|cape|beach|coastline|spring|hot_spring|geyser|valley|ridge|arete|cliff|saddle|rock|stone|sinkhole|cave_entrance)$\"];",
-            "relation[natural~\"^(peak|volcano|wood|scrub|heath|grassland|fell|bare_rock|scree|shingle|sand|mud|water|wetland|glacier|bay|cape|beach|coastline|spring|hot_spring|geyser|valley|ridge|arete|cliff|saddle|rock|stone|sinkhole|cave_entrance)$\"];",
+            "nwr[natural~\"^(peak|volcano|wood|scrub|heath|grassland|fell|bare_rock|scree|shingle|sand|mud|wetland|glacier|cape|beach|coastline|valley|ridge|arete|cliff|saddle|rock|stone|sinkhole|cave_entrance)$\"];",
             ")"
         ],
         "16": [
             "(",
-            "node[natural];",
-            "way[natural];",
-            "relation[natural];",
+            "nwr[natural][natural!~\"^(water|divide|bay|strait|spring|hot_spring|geyser)$\"];",
             ")"
         ]
     },
@@ -42,6 +38,195 @@
             "{{ localizedTag(tags, 'name') | default(trans('unnamed')) }}",
             "{% if tags.natural == 'peak' and tags.ele %}({{ tags.ele }}m){% endif %}"
         ],
-        "description": "{{ tagTrans('natural', tags.natural) }}"
+        "description": "{{ tagTrans('natural', tags.natural) }}",
+        "style": {
+            "color": "{{ const[tags.natural].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 }}"
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "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>",
+            "sort": "natsort",
+            "op": "has"
+        }
+    },
+    "const": {
+        "wood": {
+            "sign": "<i class='fas fa-tree'></i>",
+            "color": "darkgreen",
+            "group": "vegetation"
+        },
+        "tree_row": {
+            "sign": "<i class='fas fa-tree'></i>",
+            "color": "darkgreen",
+            "group": "vegetation"
+        },
+        "tree": {
+            "sign": "<i class='fas fa-tree'></i>",
+            "color": "darkgreen",
+            "group": "vegetation"
+        },
+        "scrub": {
+            "sign": "",
+            "color": "green",
+            "group": "vegetation"
+        },
+        "heath": {
+            "sign": "",
+            "color": "green",
+            "group": "vegetation"
+        },
+        "moor": {
+            "sign": "",
+            "color": "#8aba50",
+            "group": "vegetation"
+        },
+        "grassland": {
+            "sign": "",
+            "color": "#00dd24",
+            "group": "vegetation"
+        },
+        "fell": {
+            "sign": "",
+            "color": "#49ba91",
+            "group": "vegetation"
+        },
+        "bare_rock": {
+            "sign": "",
+            "color": "#6f6f6f",
+            "group": "vegetation"
+        },
+        "scree": {
+            "sign": "",
+            "color": "#6f6f6f",
+            "group": "vegetation"
+        },
+        "shingle": {
+            "sign": "",
+            "color": "#6f6f6f",
+            "group": "vegetation"
+        },
+        "sand": {
+            "sign": "",
+            "color": "#f9d199",
+            "group": "vegetation"
+        },
+        "mud": {
+            "sign": "<img data-src='maki:wetland?fill=white'>",
+            "color": "#988b00",
+            "group": "vegetation"
+        },
+        "wetland": {
+            "sign": "<img data-src='maki:wetland?fill=white'>",
+            "color": "#00baff",
+            "group": "water"
+        },
+        "glacier": {
+            "sign": "<i style='color: black;' class='fas fa-icicles'></i>",
+            "color": "white",
+            "group": "water"
+        },
+        "cape": {
+            "sign": "",
+            "color": "#1d7500",
+            "group": "water"
+        },
+        "peninsula": {
+            "sign": "",
+            "color": "#1d7500",
+            "group": "water"
+        },
+        "beach": {
+            "sign": "<i class='fas fa-umbrella-beach'></i>",
+            "color": "#f9d199",
+            "group": "water"
+        },
+        "coastline": {
+            "sign": "",
+            "color": "blue",
+            "group": "water"
+        },
+        "reef": {
+            "sign": "",
+            "color": "#005fbd",
+            "group": "water"
+        },
+        "peak": {
+            "sign": "<i class='fas fa-mountain'></i>",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "hill": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "volcano": {
+            "sign": "",
+            "color": "#cf3a00",
+            "group": "landform"
+        },
+        "valley": {
+            "sign": "",
+            "color": "#1d7500",
+            "group": "landform"
+        },
+        "river_terrace": {
+            "sign": "",
+            "color": "#a0a500",
+            "group": "landform"
+        },
+        "ridge": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "arete": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "cliff": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "saddle": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "rock": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "stone": {
+            "sign": "",
+            "color": "#4f4f4f",
+            "group": "landform"
+        },
+        "sinkhole": {
+            "sign": "",
+            "color": "#a0a500",
+            "group": "landform"
+        },
+        "cave_entrance": {
+            "sign": "",
+            "color": "#000000",
+            "group": "landform"
+        },
+        "isthmus": {
+            "sign": "",
+            "color": "#1d7500",
+            "group": "landform"
+        }
     }
 }
diff --git a/water.json b/water.json
index a2d7f22..1b08673 100644
--- a/water.json
+++ b/water.json
@@ -12,111 +12,258 @@
         "10": [
             "(",
             "way[waterway~\"^(river|canal)$\"];",
-            "way[natural~\"^(divide)$\"];",
+            "nwr[natural~\"^(divide|bay|strait)$\"];",
             "way[natural=water][water~\"^(lake|lagoon|reservoir|canal)$\"];",
             "relation[natural=water][type=multipolygon][water~\"^(lake|lagoon|reservoir|canal)$\"];",
             ")"
         ],
         "13": [
             "(",
-            "node[natural~\"^(water|divide)$\"];",
-            "way[natural~\"^(water|divide)$\"];",
+            "nwr[natural~\"^(water|divide|bay|strait|spring|hot_spring|geyser)$\"];",
             "relation[type=multipolygon][natural=water];",
             "relation[type=multipolygon][waterway=riverbank];",
-            "way[waterway];",
+            "nwr[waterway];",
             ")"
         ]
     },
     "feature": {
-        "description": [
+        "pre": [
             "{% if tags.waterway %}",
-            "{{ tagTrans('waterway', tags.waterway) }}",
+            "  {% set key = 'waterway' %}",
+            "  {% set value = tags.waterway %}",
             "{% elseif tags.water %}",
-            "{{ tagTrans('water', tags.water) }}",
+            "  {% set key = 'water' %}",
+            "  {% set value = tags.water %}",
             "{% elseif tags.natural %}",
-            "{{ tagTrans('natural', tags.natural) }}",
+            "  {% set key = 'natural' %}",
+            "  {% set value = tags.natural %}",
+            "{% endif %}",
+            "{% set kv = key ~ '=' ~ value %}",
+            "{% set data = const[kv]|default(const['natural=water']) %}"
+        ],
+        "description": [
+            "{{ tagTrans(key, value) }}"
+        ],
+        "body": [
+            "<ul>",
+            "{% if tags.intermittent %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"far fa-circle\"></i>",
+            "   <span class='key'>{{ keyTrans('intermittent') }}:</span>",
+            "   <span class='value'>{{ tagTrans('intermittent', tags.intermittent) }}</span>",
+            "{% endif %}",
+            "</ul>"
+        ],
+        "markerSign": [
+            "{{ const[kv].sign|raw }}"
+        ],
+        "markerSymbol": [
+            "{% if data.symbol == 'pointer' %}",
+            "{{ markerPointer({ fillColor: '#3388ff' })|raw }}",
             "{% endif %}"
         ],
-        "markerSymbol": null,
         "listMarkerSymbol": [
-            "{% if tags.natural == 'water' %}",
+            "{% if data.symbol == 'pointer' %}",
+            "{{ markerCircle({ fillColor: '#3388ff' })|raw }}",
+            "{% elseif data.symbol == 'polygon' %}",
             "polygon",
             "{% else %}",
             "line",
             "{% endif %}"
         ],
-        "priority": [
-            "{% if tags.natural == 'divide' %}",
-            "0",
-            "{% elseif tags.natural == 'water' and tags.water in ['lake', 'lagoon', 'reservoir', 'canal'] %}",
-            "0",
-            "{% elseif tags.waterway == 'river' %}",
-            "1",
-            "{% elseif tags.waterway == 'stream' or tags.waterway == 'drain' %}",
-            "3",
-            "{% elseif tags.waterway == 'ditch' %}",
-            "5",
-            "{% else %}",
-            "2",
-            "{% endif %}"
-        ],
+        "priority": "{{ data.priority }}",
         "style": {
-            "width": [
-                "{% if tags.waterway == 'river' %}",
-                "4",
-                "{% elseif tags.waterway == 'stream' or tags.waterway == 'drain' %}",
-                "2",
-                "{% elseif tags.waterway == 'ditch' %}",
-                "1",
-                "{% else %}",
-                "3",
-                "{% endif %}"
-            ],
-            "color": [
-                "{% if tags.natural == 'divide' %}",
-                "#ff0000",
-                "{% elseif tags.waterway in [ 'dam', 'weir' ] %}",
-                "#000000",
-                "{% else %}",
-                "#3388ff",
-                "{% endif %}"
-            ],
+            "width": "{{ data.style.width }}",
+            "color": "{{ data.style.color }}",
             "text": [
-                "{% if type=='way' and tags.waterway in [ 'river', 'stream', 'canal', 'ditch', 'wadi', 'drystream', 'drain' ] %}",
+                "{% if data.text %}",
                 "{{ tags.name }}   ➔   ",
                 "{% endif %}"
             ],
-            "textRepeat": "1"
+            "textRepeat": "1",
+            "dashArray": "{% if tags.intermittent == 'yes' %}5,5{% endif %}",
+            "lineCap": "{% if tags.intermittent == 'yes' %}butt{% else %}round{% endif %}"
+        }
+    },
+    "const": {
+        "natural=water": {
+            "zoom": 10,
+            "symbol": "polygon",
+            "style": {
+                "width": 3,
+                "color": "#3388ff"
+            },
+            "priority": 2
+        },
+        "water=lake": {
+            "zoom": 10,
+            "symbol": "polygon",
+            "style": {
+                "width": 3,
+                "color": "#3388ff"
+            },
+            "hideInfo": true,
+            "priority": 0
+        },
+        "water=lagoon": {
+            "zoom": 10,
+            "symbol": "polygon",
+            "style": {
+                "width": 3,
+                "color": "#3388ff"
+            },
+            "hideInfo": true,
+            "priority": 0
+        },
+        "water=reservoir": {
+            "zoom": 10,
+            "symbol": "polygon",
+            "style": {
+                "width": 3,
+                "color": "#3388ff"
+            },
+            "hideInfo": true,
+            "priority": 0
+        },
+        "waterway=river": {
+            "zoom": 10,
+            "symbol": "line",
+            "style": {
+                "width": 4,
+                "color": "#3388ff"
+            },
+            "text": true,
+            "priority": 1
+        },
+        "waterway=canal": {
+            "alias": [
+                "water=canal"
+            ],
+            "zoom": 10,
+            "symbol": "line",
+            "style": {
+                "width": 4,
+                "color": "#3388ff"
+            },
+            "text": true,
+            "priority": 1
+        },
+        "waterway=stream": {
+            "zoom": 13,
+            "symbol": "line",
+            "style": {
+                "width": 2,
+                "color": "#3388ff"
+            },
+            "text": true,
+            "priority": 3
+        },
+        "waterway=drain": {
+            "zoom": 13,
+            "symbol": "line",
+            "style": {
+                "width": 2,
+                "color": "#3388ff"
+            },
+            "text": true,
+            "priority": 3
+        },
+        "waterway=ditch": {
+            "zoom": 13,
+            "symbol": "line",
+            "style": {
+                "width": 1,
+                "color": "#3388ff"
+            },
+            "text": true,
+            "priority": 5
+        },
+        "natural=spring": {
+            "sign": "<i class='fas fa-water'></i>",
+            "zoom": 13,
+            "symbol": "pointer"
+        },
+        "natural=hot_spring": {
+            "sign": "<i style='color: orange;' class='fas fa-water'></i>",
+            "zoom": 13,
+            "symbol": "pointer"
+        },
+        "natural=geyser": {
+            "sign": "<i style='color: red;' class='fas fa-water'></i>",
+            "zoom": 13,
+            "symbol": "pointer"
+        },
+        "waterway=waterfall": {
+            "sign": "<img data-src='maki:waterfall'>",
+            "zoom": 13,
+            "symbol": "pointer"
+        },
+        "waterway=dam": {
+            "zoom": 13,
+            "symbol": "line",
+            "style": {
+                "width": 3,
+                "color": "#000000"
+            },
+            "priority": 3
+        },
+        "waterway=weir": {
+            "zoom": 13,
+            "symbol": "line",
+            "style": {
+                "width": 3,
+                "color": "#000000"
+            },
+            "priority": 3
+        },
+        "natural=divide": {
+            "zoom": 10,
+            "symbol": "line",
+            "style": {
+                "width": 3,
+                "color": "#ff0000"
+            },
+            "text": true,
+            "priority": 0
+        }
+    },
+    "filter": {
+        "type": {
+            "name": "{{ trans('filter:type') }}",
+            "key": "natural",
+            "type": "select",
+            "show_default": "true",
+            "values": "{% for k, data in const %}<option value=\"{{ k }}\" query=\"(nwr[{{ k }}];{% for a in data.alias %}nwr[{{ a }}];{% endfor %})\">{{ tagTrans(k) }}</option>{% endfor %}",
+            "sort": "natsort"
+        },
+        "intermittent": {
+            "name": "{{ keyTrans('intermittent') }}",
+            "key": "intermittent",
+            "type": "radio",
+            "values": "<option value='yes' query=\"nwr[intermittent][intermittent!=no]\">{{ tagTrans('intermittent', 'yes') }}</option><option value='no' query=\"(nwr[!intermittent];nwr[intermittent=no];)\">{{ tagTrans('intermittent', 'no') }}</option>"
         }
     },
     "info": [
         "<table>",
+        "  {% for k, data in const %}",
+        "    {% if not data.hideInfo and data.zoom <= map.zoom %}",
+        "    <tr>",
+        "      <td>",
+        "      {% if data.symbol == 'pointer' %}",
+        "        {{ markerCircle({ fillColor: '#3388ff' })|raw }}<div class='sign'>{{ data.sign|raw }}</div>",
+        "      {% elseif data.symbol == 'polygon' %}",
+        "        {{ markerPolygon(data.style)|raw }}",
+        "      {% elseif data.symbol == 'line' %}",
+        "        {{ markerLine(data.style)|raw }}",
+        "      {% endif %}",
+        "      </td>",
+        "      <td>{{ tagTrans(k) }}</td>",
+        "    </tr>",
+        "    {% endif %}",
+        "  {% endfor %}",
         "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"natural\": \"water\" }))|raw }}</td>",
-        "    <td>{{ tagTrans('natural', 'water') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerLine(evaluate({ \"waterway\": \"river\" }))|raw }}</td>",
-        "    <td>{{ tagTrans('waterway', 'river') }},",
-        " {{ tagTrans('waterway', 'canal') }}</td>",
-        "  </tr>",
-        "{% if map.zoom >= 13 %}",
-        "  <tr>",
-        "    <td>{{ markerLine(evaluate({ \"waterway\": \"stream\" }))|raw }}</td>",
-        "    <td>{{ tagTrans('waterway', 'stream') }}, {{ tagTrans('waterway', 'drain') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerLine(evaluate({ \"waterway\": \"ditch\" }))|raw }}</td>",
-        "    <td>{{ tagTrans('waterway', 'ditch') }}</td>",
-        "  </tr>",
-        "  <tr>",
-        "    <td>{{ markerLine(evaluate({ \"waterway\": \"dam\" }))|raw }}</td>",
-        "    <td>{{ tagTrans('waterway', 'dam') }}, {{ tagTrans('waterway', 'weir') }}</td>",
-        "  </tr>",
-        "{% endif %}",
-        "  <tr>",
-        "    <td>{{ markerLine(evaluate({ \"natural\": \"divide\" }))|raw }}</td>",
-        "    <td>{{ tagTrans('natural', 'divide') }}</td>",
+        "    <td>{{ markerLine({ width: 3, color: '#3388ff', dashArray: '5,5', lineCap: 'butt' })|raw }}</td>",
+        "    <td>{{ keyTrans('intermittent') }}</td>",
         "  </tr>",
         "</table>"
     ]