diff --git a/culture-media.yaml b/culture-media.yaml
index bffbb72..a31785c 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -9,40 +9,47 @@ query:
     )
 feature: 
   pre: |
-    {% set color = 'red' %}
-    {% set str = 'No image, wikimedia_commons or wikidata' %}
+    {% set cat = 'no' %}
+    {% set str = null %}
 
     {% if tags.wikidata %}
-      {% set color = 'blue' %}
-      {% set str = 'has wikidata tag' %}
+      {% set cat = 'wikidata' %}
       {% set wikidata = tags.wikidata|wikidataEntity %}
 
       {% if wikidata and wikidata.claims.P18|length == 0 %}
-        {% set color = '#007fff' %}
-        {% set str = 'has wikidata tag, but wikidata object does not have an image' %}
+        {% set cat = 'wikidata_no_image' %}
       {% endif %}
 
       {% if wikidata.claims.P31[0].mainsnak.datavalue.value.id in ['Q5'] %}
-        {% set color = 'magenta' %}
-        {% set str = "wikidata points to a human, should most likely be 'subject:wikidata'" %}
+        {% set cat = 'wikidata_human' %}
       {% endif %}
 
     {% elseif tags.wikipedia %}
-      {% set color = '#af00ff' %}
-      {% set str = 'wikipedia tag found without corresponding wikidata tag' %}
+      {% set cat = 'wikipedia_no_wikidata' %}
 
     {% elseif tags.wikimedia_commons or tags.image %}
-      {% set color = 'cyan' %}
+      {% set cat = 'has_image' %}
       {% set str = tags.wikimedia_commons ? 'has wikimedia_commons tag' : 'has image tag' %}
 
     {% endif %}
 
+    {% set def = const.categories[cat] %}
+
+  exclude: |
+    {% if filter.category == 'wikidata_no_image' %}
+      {{ (not wikidata) or (wikidata.claims.P18|length != 0) }}
+    {% elseif filter.category == 'no_image_or_wikidata_no_image' %}
+      {{ (tags.wikidata and not wikidata) or (wikidata.claims.P18|length != 0) }}
+    {% elseif filter.category == 'wikidata_human' %}
+      {{ wikidata.claims.P31[0].mainsnak.datavalue.value.id not in ['Q5'] }}
+    {% endif %}
+
   body: |
-    {{ str }}
+    {{ str|default(def.text) }}
 
   style:
     color: |
-      {{ color }}
+      {{ def.color }}
 
   description: |
     {% if tags.historic and tags.historic != 'yes' %}
@@ -54,11 +61,13 @@ feature:
       {{ tagTransList('tourism', tags.tourism) }}
     {% elseif tags.amenity %}
       {{ tagTrans('amenity', tags.amenity) }}
+    {% elseif tags.building %}
+      {{ tags.building == 'yes' ? keyTrans('building') : tagTrans('building', tags.building) }}
     {% elseif tags.heritage %}
       {{ keyTrans('heritage') }}
     {% endif %}
-  markerSymbol: "{{ markerPointer({ fillColor: color })|raw }}"
-  listMarkerSymbol: "{{ markerCircle({ fillColor: color })|raw }}"
+  markerSymbol: "{{ markerPointer({ fillColor: def.color })|raw }}"
+  listMarkerSymbol: "{{ markerCircle({ fillColor: def.color })|raw }}"
 
   markerSign: |
     {% set icon = '' %}
@@ -85,44 +94,28 @@ filter:
         <option value='{{ kv }}' query='nwr[{{ d.query|default(kv) }}]'>{% if d.trans %}{{ trans(d.trans) }}{% elseif not v %}{{ keyTrans(k) }}{% else %}{{ tagTrans(k, v) }}{% endif %}</option>
       {% endfor %}
     op: "has"
+  category:
+    name: "{{ trans('category') }}"
+    show_default: "true"
+    type: "select"
+    values: |
+      <option value='no' query='nwr[!image][!wikimedia_commons][!wikidata][!wikipedia]'>No image, wikimedia_commons or wikidata</option>
+      <option value='wikipedia_no_wikidata' query='nwr[!wikidata][wikipedia]'>wikipedia tag found without corresponding wikidata tag</option>
+      <option value='has_image' query='(nwr[!wikidata][image];nwr[!wikidata][wikimedia_commons];)'>image or wikimedia_commons tag but no wikidata</option>
+      <option value='wikidata' query='nwr[wikidata]'>has wikidata tag</option>
+      <option value='wikidata_no_image' query='nwr[wikidata]'>has wikidata tag, but wikidata object does not have an image</option>
+      <option value='no_image_or_wikidata_no_image' query='(nwr[!image][!wikimedia_commons][!wikidata][!wikipedia];nwr[wikidata];)'>no image/wikimedia_commons OR wikidata without image</option>
+      <option value='wikidata_human' query='nwr[wikidata]'>wikidata tag points to a human, should most likely be 'subject:wikidata'</option>
 info: |
   <table>
+    {% for k, def in const.categories %}
       <tr>
         <td>
-          {{ markerCircle({ fillColor: 'red' })|raw }}
-        </td>
-        <td>No image, wikimedia_commons or wikidata</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: 'magenta' })|raw }}
-        </td>
-        <td>wikidata tag points to a human, should most likely be 'subject:wikidata'</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: '#af00ff' })|raw }}
+          {{ markerCircle({ fillColor: def.color })|raw }}
         </td>
-        <td>wikipedia tag found without corresponding wikidata tag</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: 'cyan' })|raw }}
-        </td>
-        <td>image or wikimedia_commons tag but no wikidata</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: '#007fff' })|raw }}
-        </td>
-        <td>has wikidata tag, but wikidata object does not have an image</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: 'blue' })|raw }}
-        </td>
-        <td>has wikidata tag</td>
+        <td>{{ def.text }}</td>
       </tr>
+    {% endfor %}
   </table>
 
   This category lists artwork, memorials, historic and heritage protected objects. These should have an <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Key:image">image</a> or <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Key:wikimedia_commons">wikimedia_commons</a> tag, or (even better) a <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Key:wikidata">wikidata</a> tag pointing to the object's entry.<br>
@@ -155,3 +148,22 @@ const:
     other:
       query: 'nwr[historic][historic!~"^(memorial|monument|wayside_cross|wayside_shrine|building)$"]'
       trans: 'other'
+  categories:
+    'no':
+      color: red
+      text: No image, wikimedia_commons or wikidata
+    has_image:
+      color: cyan
+      text: image or wikimedia_commons tag but no wikidata
+    wikidata_no_image:
+      color: '#007fff'
+      text: has wikidata tag, but wikidata object does not have an image
+    wikidata:
+      color: blue
+      text: has wikidata tag
+    wikidata_human:
+      color: magenta
+      text: wikidata tag points to a human, should most likely be 'subject:wikidata'
+    wikipedia_no_wikidata:
+      color: '#af00ff'
+      text: wikipedia tag found without corresponding wikidata tag
diff --git a/footways.yaml b/footways.yaml
index 4b3ca59..098b62a 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -6,7 +6,7 @@ query:
     way[footway];
     way["area:highway"~"^(footway|pedestrian|steps|path|platform|sidewalk)$"];
     relation["area:highway"~"^(footway|pedestrian|steps|path|platform|sidewalk)$"];
-    way[sidewalk~"^(yes|both|left|right|no|none)$"];
+    way[sidewalk~"^(yes|both|left|right|no|separate|none)$"];
     way["sidewalk:left"~"(yes|no|separate)$"];
     way["sidewalk:right"~"(yes|no|separate)$"];
     way["sidewalk:both"~"(yes|no|separate)$"];
@@ -17,6 +17,7 @@ feature:
   pre: |
     {% set sides = ['default'] %}
     {% set sidewalk_left = null %}{% set sidewalk_right = null %}
+    {% set cycleway = false %}
     {% set category = tags.highway %}
 
     {% if attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['yes', 'both', 'left', 'both', 'right'] or tags.footway == 'sidewalk' %}
@@ -27,6 +28,16 @@ feature:
       {% set sides = sides|merge(['main']) %}
     {% endif %}
 
+    {% if tags.highway in ['cycleway'] %}
+      {% set category = 'footway' %}
+      {% set cycleway = true %}
+      {% set sides = sides|merge(['cycleway']) %}
+    {% endif %}
+    {% if tags.highway in ['path'] and tags.bicycle in ['yes', 'designated'] %}
+      {% set cycleway = true %}
+      {% set sides = sides|merge(['cycleway']) %}
+    {% endif %}
+
     {% if attribute(tags, 'area:highway') in ['footway'] %}
       {% set sides = sides|merge(['main']) %}
       {% set category = attribute(tags, 'area:highway') %}
@@ -37,15 +48,6 @@ feature:
       {% set category = 'platform' %}
     {% endif %}
 
-    {% set foot = false %}
-    {% if tags.highway not in ['pedestrian', 'footway'] and tags.foot in ['yes', 'designated'] %}
-      {% set foot = tags.foot %}
-      {% set sides = sides|merge(['foot']) %}
-    {% endif %}
-    {% if tags.highway == 'path' and tags.bicycle in ['yes', 'designated'] %}
-      {% set category = 'cycleway' %}
-    {% endif %}
-
     {% if tags.footway == 'crossing' %}
       {% set category = 'crossing' %}
     {% endif %}
@@ -56,6 +58,12 @@ feature:
       {% set sides = sides|merge(['leftr', 'rightr']) %}
     {% endif %}
 
+    {% if tags.sidewalk == 'separate' %}
+      {% set sidewalk_left = 'separate' %}
+      {% set sidewalk_right = 'separate' %}
+      {% set sides = sides|merge(['leftr', 'rightr']) %}
+    {% endif %}
+
     {% if attribute(tags, 'sidewalk:both') %}
       {% set sidewalk_left = attribute(tags, 'sidewalk:both') %}
       {% set sides = sides|merge(['leftr', 'rightr']) %}
@@ -143,17 +151,17 @@ feature:
           <span class='key'>{{ keyTrans('wheelchair') }}:</span>
           <span class='value'>{{ tagTrans('wheelchair', attribute(tags, 'sidewalk:left:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface')) %}<li>
+        {% if attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface')) %}<li>
           <span class='key'>{{ keyTrans('surface') }}:</span>
-          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))) }}</span>
+          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface'))) }}</span>
         </li>{% endif %}
         {% if attribute(tags, 'sidewalk:left:tactile_paving') %}<li>
           <span class='key'>{{ keyTrans('tactile_paving') }}:</span>
           <span class='value'>{{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:left:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness')) %}<li>
+        {% if attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness')) %}<li>
           <span class='key'>{{ keyTrans('smoothness') }}:</span>
-          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))) }}</span>
+          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness'))) }}</span>
         </li>{% endif %}
         {% set v = attribute(tags, 'sidewalk:left:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %}
         {% if v %}<li>
@@ -174,17 +182,17 @@ feature:
           <span class='key'>{{ keyTrans('wheelchair') }}:</span>
           <span class='value'>{{ tagTrans('wheelchair', attribute(tags, 'sidewalk:right:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface')) %}<li>
+        {% if attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface')) %}<li>
           <span class='key'>{{ keyTrans('surface') }}:</span>
-          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))) }}</span>
+          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface'))) }}</span>
         </li>{% endif %}
         {% if attribute(tags, 'sidewalk:right:tactile_paving') %}<li>
           <span class='key'>{{ keyTrans('tactile_paving') }}:</span>
           <span class='value'>{{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:right:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness')) %}<li>
+        {% if attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness')) %}<li>
           <span class='key'>{{ keyTrans('smoothness') }}:</span>
-          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))) }}</span>
+          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness'))) }}</span>
         </li>{% endif %}
         {% set v = attribute(tags, 'sidewalk:right:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %}
         {% if i %}<li>
@@ -204,20 +212,22 @@ feature:
       {{ markerLine({
            'styles': sides|join(','),
            'style:main': {
-              width: foot and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3),
+              width: cycleway and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3),
               color: const.categories[category].color,
-              dashArray: tags.highway == 'steps' or (foot and tags.segregated != 'yes') ? '3,3' : '',
-              lineCap: tags.highway == 'steps' or (foot and tags.segregated != 'yes') ? 'butt' : 'round',
-              offset: foot and tags.segregated == 'yes' ? 1 : 0
+              dashArray: tags.highway == 'steps' ? '3,3' :
+                cycleway and tags.segregated != 'yes' ? '8,8' :
+                '',
+              lineCap: tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') ? 'butt' : 'round',
+              offset: cycleway and tags.segregated == 'yes' ? 1 : 0
             },
-            'style:foot': {
+            'style:cycleway': {
               fill: false,
-              width: foot and tags.segregated == 'yes' ? 2 : 3,
-              color: const.categories.footway.color,
-              dashArray: foot and tags.segregated != 'yes' ? '3,3' : '',
-              dashOffset: 3,
-              lineCap: foot and tags.segregated != 'yes' ? 'butt' : 'round',
-              offset: foot and tags.segregated == 'yes' ? -1 : 0
+              width: cycleway and tags.segregated == 'yes' ? 2 : 3,
+              color: const.categories.cycleway.color,
+              dashArray: cycleway and tags.segregated != 'yes' ? '8,8' : '',
+              dashOffset: 8,
+              lineCap: cycleway and tags.segregated != 'yes' ? 'butt' : 'round',
+              offset: cycleway and tags.segregated == 'yes' ? -1 : 0
             },
             'style:left': {
               width: 3,
@@ -266,40 +276,37 @@ feature:
       0
       {% elseif tags.area == 'yes' %}
       1
-      {% elseif foot and tags.segregated == 'yes' %}
-      2
+      {% elseif cycleway and tags.segregated == 'yes' %}
+      3
       {% else %}
       {{ const.categories[category].width|default(3) }}
       {% endif %}
     color: |
       {{ const.categories[category].color }}
     dashArray: |
-      {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}
+      {% if tags.highway == 'steps' %}
       3,3
+      {% elseif cycleway and tags.segregated != 'yes' %}
+      8,8
       {% endif %}
     lineCap: |
-      {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
+      {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
     offset: |
-      {% if foot and tags.segregated == 'yes' %}1{% else %}0{% endif %}
-  style:foot:
+      {% if cycleway and tags.segregated == 'yes' %}1.5{% else %}0{% endif %}
+  style:cycleway:
     fill: false
-    width: |
-      {% if foot and tags.segregated == 'yes' %}
-      2
-      {% else %}
-      3
-      {% endif %}
+    width: 3
     color: |
-      {{ const.categories.footway.color }}
+      {{ const.categories.cycleway.color }}
     dashArray: |
-      {% if foot and tags.segregated != 'yes' %}
-      3,3
+      {% if cycleway and tags.segregated != 'yes' %}
+      8,8
       {% endif %}
-    dashOffset: 3
+    dashOffset: 8
     lineCap: |
-      {% if foot and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
+      {% if cycleway and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
     offset: |
-      {% if foot and tags.segregated == 'yes' %}-1{% else %}0{% endif %}
+      {% if cycleway and tags.segregated == 'yes' %}-1.5{% else %}0{% endif %}
   style:left:
     fill: false
     width: 3
@@ -389,13 +396,13 @@ info: |
       style: {
         width: 4,
         color: const.categories.cycleway.color,
-        dashArray: '3,3'
+        dashArray: '8,8'
       },
       'style:foot': {
         width: 4,
         color: const.categories.footway.color,
-        dashArray: '3,3',
-        dashOffset: 3
+        dashArray: '8,8',
+        dashOffset: 8
       }
     }) }}</td>
     <td>{{ tagTrans('highway', 'cycleway segregated=no') }}</td>
@@ -404,14 +411,14 @@ info: |
     <td>{{ markerLine({
       styles: 'default,foot',
       style: {
-        width: 2,
+        width: 3,
         color: const.categories.cycleway.color,
-        offset: -1
+        offset: -1.5
       },
       'style:foot': {
-        width: 2,
+        width: 3,
         color: const.categories.footway.color,
-        offset: 1
+        offset: 1.5
       }
     }) }}</td>
     <td>{{ tagTrans('highway', 'cycleway segregated=yes') }}</td>
@@ -438,6 +445,149 @@ info: |
   </tr>
   {% endfor %}
   </table>
+filter:
+  access:
+    name: '{{ keyTrans("access") }}'
+    type: select
+    placeholder: '<{{ trans("any value") }}>'
+    valueName: '{{ tagTrans("access", value) }}'
+    values:
+      'yes': {}
+      private: {}
+      permissive: {}
+      customers: {}
+      discouraged: {}
+      '!':
+        name: <{{ trans('empty value') }}>
+        query: nwr[!access]
+        weight: -3
+      '?':
+        name: <{{ trans("other") }}>
+        query: nwr[access]["access"!~"^(public|private|permissive|customers|discouraged|unknown|yes)$"]
+        weight: -2
+      unknown:
+        name: '<{{ trans("unknown") }}>'
+        query: nwr["access"="unknown"]
+        weight: -1
+  surface:
+    name: '{{ keyTrans("surface") }}'
+    type: select
+    placeholder: '<{{ trans("any value") }}>'
+    valueName: '{{ tagTrans("surface", value) }}'
+    query: |
+      {% if value == 'all_paved' %}
+      {% set value = "(paved|asphalt|chipseal|concrete|concrete:lanes|concrete:plates|paving_stones|sett|unhewn_cobblestone|cobblestone|metal|wood|rubber)" %}
+      {% elseif value == 'all_unpaved' %}
+      {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt|clay)" %}
+      {% endif %}
+
+      (
+        nwr[!sidewalk][!"sidewalk:both"][!"sidewalk:right"][!"sidewalk:left"][surface~"^{{ value }}$"];
+        nwr[~"sidewalk(:left|:right|:both|):surface"~"^{{ value }}$"];
+      )
+    values:
+      all_paved:
+        name: "<{{ tagTrans('surface', 'paved') }}>"
+        weight: -1
+      all_unpaved:
+        name: "<{{ tagTrans('surface', 'unpaved') }}>"
+        weight: -1
+      acrylic: {}
+      artificial_turf: {}
+      asphalt: {}
+      carpet: {}
+      chipseal: {}
+      clay: {}
+      cobblestone: {}
+      compacted: {}
+      concrete: {}
+      concrete:lanes: {}
+      concrete:plates: {}
+      dirt: {}
+      earth: {}
+      fine_gravel: {}
+      grass: {}
+      grass_paver: {}
+      gravel: {}
+      ground: {}
+      ice: {}
+      metal: {}
+      metal_grid: {}
+      mud: {}
+      paved: {}
+      paving_stones: {}
+      pebblestone: {}
+      rock: {}
+      rubber: {}
+      salt: {}
+      sand: {}
+      sett: {}
+      snow: {}
+      stepping_stones: {}
+      tartan: {}
+      unhewn_cobblestone: {}
+      unpaved: {}
+      wood: {}
+      woodchips: {}
+      '!':
+        name: <{{ trans('empty value') }}>
+        query: |
+          (
+          nwr[!sidewalk][!"sidewalk:both"][!"sidewalk:right"][!"sidewalk:left"][!"surface"];
+          nwr["sidewalk:left"="yes"][!"sidewalk:left:surface"];
+          nwr["sidewalk:right"="yes"][!"sidewalk:right:surface"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"];
+          nwr["sidewalk"="left"][!"sidewalk:left:surface"];
+          nwr["sidewalk"="right"][!"sidewalk:right:surface"];
+          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"];
+          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"];
+          )
+        weight: -4
+      '?':
+        name: <{{ trans("other") }}>
+        query: nwr[surface]["surface"!~"^(acrylic|artificial_turf|asphalt|carpet|chipseal|clay|cobblestone|compacted|concrete|concrete:lanes|concrete:plates|dirt|earth|fine_gravel|grass|grass_paver|gravel|ground|ice|metal|metal_grid|mud|paved|paving_stones|pebblestone|rock|rubber|salt|sand|sett|snow|stepping_stones|tartan|unhewn_cobblestone|unpaved|wood|woodchips)$"]
+        weight: -3
+      unknown:
+        name: '<{{ trans("unknown") }}>'
+        weight: -2
+  smoothness:
+    name: '{{ keyTrans("smoothness") }}'
+    type: select
+    placeholder: '<{{ trans("any value") }}>'
+    valueName: '{{ tagTrans("smoothness", value) }}'
+    query: '(nwr[smoothness="{{ value }}"];nwr[~"sidewalk:(left|right|both):smoothness"~"{{ value }}"];)'
+    values:
+      bad: {}
+      excellent: {}
+      good: {}
+      horrible: {}
+      impassable: {}
+      intermediate: {}
+      very_bad: {}
+      very_horrible: {}
+      '!':
+        name: <{{ trans('empty value') }}>
+        query: |
+          (
+          nwr[!"smoothness"];
+          nwr["sidewalk:left"="yes"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk:right"="yes"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk"="left"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk"="right"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:right:smoothness"];
+          )
+        weight: -3
+      '?':
+        name: <{{ trans("other") }}>
+        query: nwr[smoothness]["smoothness"!~"^(bad|excellent|good|horrible|impassable|intermediate|very_bad|very_horrible)$"]
+        weight: -2
+      unknown:
+        name: '<{{ trans("unknown") }}>'
+        weight: -1
 const:
   categories:
     sidewalk:
diff --git a/kerbs.yaml b/kerbs.yaml
index f21b7d7..3c6fd42 100644
--- a/kerbs.yaml
+++ b/kerbs.yaml
@@ -14,18 +14,18 @@ feature:
     <li>{{ keyTrans('kerb') }}: {{ tags.kerb ? tagTrans('kerb', tags.kerb) : trans('unknown') }}</li>
     <li>{{ keyTrans('wheelchair') }}: {{ tags.wheelchair ? tagTrans('wheelchair', tags.wheelchair) : trans('unknown') }}</li>
     <li>{{ keyTrans('tactile_paving') }}: {{ tags.tactile_paving ? tagTrans('tactile_paving', tags.tactile_paving) : trans('unknown') }}</li>
-    <li>{{ keyTrans('height') }}: {{ 'height' in tags ? tags.height : trans('unknown') }}</li>
+    <li>{{ keyTrans('height') }}: {{ tags.height ? tags.height|formatUnit('distance') : trans('unknown') }}</li>
     </ul>
   markerSymbol:
   listMarkerSymbol: |
     {% if type == 'way' %}
     line
     {% else %}
-    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb], color: const.wheelchair[wheelchair] }) }}
+    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb][config.color_scheme|default('color1')], color: 'black' }) }}
     {% endif %}
   details: |
     {% if tags.kerb and tags.kerb != 'yes' %}{{ tagTrans('kerb', tags.kerb) }}{% endif %}
-    {% if tags.height %}({{ tags.height }}){% endif %}
+    {% if tags.height %}({{ tags.height|formatUnit('distance') }}){% endif %}
   styles: |
     {% if type == 'way' %}
       default,marker
@@ -34,52 +34,83 @@ feature:
     {% endif %}
   style:
     color: |
-      {{ const.kerb[kerb] }}
+      {{ const.kerb[kerb][config.color_scheme|default('color1')] }}
     fill: |
       {{ type == 'way' ? false : true }}
     radius: 4
     fillOpacity: 1
-    width: 2
+    width: |
+      {{ config.thickness|default(2) }}
   style:marker:
     color: |
-      {{ const.kerb[kerb] }}
-    offset: 2
-    width: 2
+      {{ const.kerb[kerb][config.color_scheme|default('color1')] }}
+    offset: |
+      {{ config.thickness|default(2) }}
+    width: |
+      {{ config.thickness|default(2) }}
     fill: false
-    dashArray: '2,9'
+    dashArray: |
+      {{ config.thickness|default(2) }},{{ config.thickness|default(2) * 4 }}
+    lineCap: butt
   style:node:
     fillColor: |
-      {{ const.kerb[kerb] }}
+      {{ const.kerb[kerb][config.color_scheme|default('color1')] }}
     fill: true
     radius: 6
     fillOpacity: 1
     width: 1
     color: black
-      {{ const.wheelchair[wheelchair] }}
 info: |
   {{ tagTrans('barrier', 'kerb') }}:
   <table>
-  {% for v, color in const.kerb %}
+  {% for v, def in const.kerb %}
     <tr>
       <td>
-        {{ markerLine({ styles: 'default,marker', style: { width: 2, color: color }, 'style:marker': { width: 2, offset: 2, color: color, dashArray: '2,9'} } ) }}
-        {{ markerCircle({ radius: 4, width: 1, fillOpacity: 1, fillColor: color, color: 'black' }) }}
+        {{ markerLine({ styles: 'default,marker', style: { width: 2, color: def[config.color_scheme|default('color1')] }, 'style:marker': { width: 2, offset: 2, color: def[config.color_scheme|default('color1')], dashArray: '2,9'} } ) }}
+        {{ markerCircle({ radius: 4, width: 1, fillOpacity: 1, fillColor: def[config.color_scheme|default('color1')], color: 'black' }) }}
       </td>
       <td>{{ v == 'unknown' ? trans('unknown') : tagTrans('kerb', v) }}</td>
     </tr>
   {% endfor %}
   </table>
+config:
+  thickness:
+    name: "{{ trans('thickness') }}"
+    type: select
+    default: 2
+    placeholder: false
+    show_default: true
+    values:
+      1: "{{ trans('thickness:thin') }}"
+      2: "{{ trans('thickness:normal') }}"
+      3: "{{ trans('thickness:thick') }}"
+      5: "{{ trans('thickness:very_thick') }}"
+  color_scheme:
+    name: "{{ trans('color_scheme') }}"
+    type: select
+    default: color1
+    placeholder: false
+    show_default: true
+    values:
+      color1: "1"
+      color2: "2"
 const:
   kerb:
-    flush: '#00af00'
-    lowered: '#007f7f'
-    no: '#000000'
-    raised: '#af0000'
-    rolled: '#af7f00'
-    unknown: '#7f7f7f'
-  wheelchair:
-    designated: '#00ff7f'
-    yes: '#00ff00'
-    no: '#ff0000'
-    limited: '#ffff00'
-    unknown: '#ffffff'
+    flush:
+      color1: '#00af00'
+      color2: '#ff007f'
+    lowered:
+      color1: '#007f7f'
+      color2: '#00ffff'
+    'no':
+      color1: '#000000'
+      color2: '#ff0000'
+    raised:
+      color1: '#af0000'
+      color2: '#7f00ff'
+    rolled:
+      color1: '#af7f00'
+      color2: '#00af00'
+    unknown:
+      color1: '#7f7f7f'
+      color2: '#0000ff'