diff --git a/footways.yaml b/footways.yaml
new file mode 100644
index 0000000..a19c23b
--- /dev/null
+++ b/footways.yaml
@@ -0,0 +1,245 @@
+query:
+  15: |
+    (
+    way[highway~"^(footway|pedestrian|steps|path)$"];
+    way[highway=cycleway][foot~"^(yes|designated)$"];
+    way[footway];
+    way[sidewalk~"^(yes|both|left|right|no|none)$"];
+    way["sidewalk:left"~"(yes|no|separate)$"];
+    way["sidewalk:right"~"(yes|no|separate)$"];
+    way["sidewalk:both"~"(yes|no|separate)$"];
+    nwr["railway"="platform"];
+    node[highway=crossing];
+    )
+feature:
+  pre: |
+    {% set sides = ['default'] %}
+    {% set sidewalk_left = null %}{% set sidewalk_right = null %}
+    {% set category = tags.highway %}
+
+    {% if attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['yes', 'both', 'left', 'both', 'right'] or tags.footway == 'sidewalk' %}
+      {% set category = 'sidewalk' %}
+    {% endif %}
+
+    {% if tags.highway in ['pedestrian', 'footway','steps','path','cycleway'] %}
+      {% set sides = sides|merge(['main']) %}
+    {% endif %}
+
+    {% if tags.railway in ['platform'] %}
+      {% set sides = sides|merge(['main']) %}
+      {% set category = 'platform' %}
+    {% endif %}
+
+    {% set foot = false %}
+    {% if tags.highway not in ['pedestrian', 'footway', 'path'] and tags.foot in ['yes', 'designated'] %}
+      {% set foot = tags.foot %}
+      {% set sides = sides|merge(['foot']) %}
+    {% endif %}
+
+    {% if tags.footway == 'crossing' %}
+      {% set category = 'crossing' %}
+    {% endif %}
+
+    {% if attribute(tags, 'sidewalk:both') %}
+      {% set sidewalk_left = attribute(tags, 'sidewalk:both') %}
+      {% set sides = sides|merge(['leftr', 'rightr']) %}
+    {% endif %}
+
+    {% if attribute(tags, 'sidewalk:left') %}
+      {% set sidewalk_left = attribute(tags, 'sidewalk:left') %}
+      {% set sides = sides|merge(['leftr']) %}
+    {% endif %}
+
+    {% if attribute(tags, 'sidewalk:left') == 'yes' or attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['left', 'both'] %}
+      {% set sidewalk_left = 'yes' %}
+      {% set sides = sides|merge(['leftr', 'left']) %}
+    {% endif %}
+
+    {% if attribute(tags, 'sidewalk:right') %}
+      {% set sidewalk_right = attribute(tags, 'sidewalk:right') %}
+      {% set sides = sides|merge(['rightr']) %}
+    {% endif %}
+
+    {% if attribute(tags, 'sidewalk:right') == 'yes' or attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['right', 'both'] %}
+      {% set sidewalk_right = 'yes' %}
+      {% set sides = sides|merge(['rightr', 'right']) %}
+    {% endif %}
+
+    {% if type == 'node' %}
+      {% set sides = ['node'] %}
+    {% endif %}
+  description: |
+    {% if tags.footway %}
+    {{ tagTrans('footway', tags.footway) }}
+    {% else %}
+    {{ tagTrans('highway', tags.highway) }}
+    {% endif %}
+  markerSymbol: ""
+  listMarkerSymbol: |
+    {% if tags.area == 'yes' %}polygon{% else %}line{% endif %}
+  style:
+    opacity: 0
+    fillOpacity: 0
+    width: 5
+  style:node:
+    width: 0
+    radius: 5
+    fillOpacity: 1
+    fill: true
+    color: |
+      {{ const.categories[category].color }}
+  style:main:
+    fill: |
+      {% if tags.area == 'yes' %}true{% else %}false{% endif %}
+    width: |
+      {% if tags.area == 'yes' %}
+      1
+      {% elseif foot and tags.segregated == 'yes' %}
+      2
+      {% else %}
+      {{ const.categories[category].width|default(3) }}
+      {% endif %}
+    color: |
+      {{ const.categories[category].color }}
+    dashArray: |
+      {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}
+      3,3
+      {% endif %}
+    lineCap: |
+      {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
+    offset: |
+      {% if foot and tags.segregated == 'yes' %}1{% else %}0{% endif %}
+  style:foot:
+    fill: false
+    width: |
+      {% if foot and tags.segregated == 'yes' %}
+      2
+      {% else %}
+      3
+      {% endif %}
+    color: |
+      {{ const.categories.footway.color }}
+    dashArray: |
+      {% if foot and tags.segregated != 'yes' %}
+      3,3
+      {% endif %}
+    dashOffset: 3
+    lineCap: |
+      {% if foot and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
+    offset: |
+      {% if foot and tags.segregated == 'yes' %}-1{% else %}0{% endif %}
+  style:left:
+    width: 3
+    offset: |
+      {{ -5 / map.metersPerPixel }}
+    color: |
+      {{ const.categories.sidewalk.color }}
+  style:right:
+    width: 3
+    offset: |
+      {{ 5 / map.metersPerPixel }}
+    color: |
+      {{ const.categories.sidewalk.color }}
+
+  style:leftr:
+    width: |
+      {{ sidewalk_left ? 5 / map.metersPerPixel : 0 }}
+    offset: |
+      {{ -2.5 / map.metersPerPixel }}
+    opacity: 0.3
+    dashArray: '1,10'
+    lineCap: butt
+    color: |
+      {{ sidewalk_left in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color }}
+
+  style:rightr:
+    width: |
+      {{ sidewalk_right ? 5 / map.metersPerPixel : 0 }}
+    offset: |
+      {{ 2.5 / map.metersPerPixel }}
+    opacity: 0.3
+    dashArray: '1,10'
+    lineCap: butt
+    color: |
+      {{ sidewalk_right in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color }}
+    
+  styles: |
+    {{ sides|join(',') }}
+info: |
+  <table>
+  {% for k, d in const.categories if k != 'cycleway' %}
+    <tr>
+      <td>{{ markerLine({
+        width: d.width|default(3),
+        color: d.color,
+        dashArray: d.dashArray
+      }) }}</td>
+    <td>{{ tagTrans(d.key|default('highway'), k) }}</td>
+    </tr>
+  {% endfor %}
+  <tr>
+    <td>{{ markerCircle({
+      width: 0,
+      radius: 5,
+      fillOpacity: 1,
+      fill: true,
+      color: const.categories.crossing.color
+    }) }}</td>
+    <td>{{ tagTrans('highway', 'crossing') }}</td>
+  </tr>
+  <tr>
+    <td>{{ markerLine({
+      styles: 'default,foot',
+      style: {
+        width: 4,
+        color: const.categories.cycleway.color,
+        dashArray: '3,3'
+      },
+      'style:foot': {
+        width: 4,
+        color: const.categories.footway.color,
+        dashArray: '3,3',
+        dashOffset: 3
+      }
+    }) }}</td>
+    <td>highway=cycleway segregated=no</td>
+  </tr>
+  <tr>
+    <td>{{ markerLine({
+      styles: 'default,foot',
+      style: {
+        width: 2,
+        color: const.categories.cycleway.color,
+        offset: -1
+      },
+      'style:foot': {
+        width: 2,
+        color: const.categories.footway.color,
+        offset: 1
+      }
+    }) }}</td>
+    <td>highway=cycleway segregated=yes</td>
+  </tr>
+  </table>
+const:
+  categories:
+    sidewalk:
+      color: '#ff007f'
+      key: footway
+    pedestrian:
+      color: '#ff00c8'
+      width: 5
+    footway:
+      color: '#ab00ff'
+    path:
+      color: '#ee922d'
+    steps:
+      color: '#ab00ff'
+      dashArray: '3,3'
+    crossing:
+      color: '#964e00'
+    cycleway:
+      color: '#002aff'
+    platform:
+      key: railway
+      color: '#00ff00'
diff --git a/index.json b/index.json
index 6f11775..556f750 100644
--- a/index.json
+++ b/index.json
@@ -157,6 +157,12 @@
                         },
                         {
                             "id": "hiking_routes"
+                        },
+                        {
+                            "id": "footways"
+                        },
+                        {
+                            "id": "kerbs"
                         }
                     ]
                 },
diff --git a/kerbs.yaml b/kerbs.yaml
new file mode 100644
index 0000000..e2d995f
--- /dev/null
+++ b/kerbs.yaml
@@ -0,0 +1,111 @@
+query:
+  14: (way[kerb];way[barrier=kerb];node[kerb];node[barrier=kerb];)
+name:
+  en: Kerbs
+feature:
+  pre: |
+    {% set kerb = 'unknown' %}
+    {% if const.kerb[tags.kerb] %}
+    {% set kerb = tags.kerb %}
+    {% endif %}
+
+    {% set wheelchair = 'unknown' %}
+    {% if const.wheelchair[tags.wheelchair] %}
+    {% set wheelchair = tags.wheelchair %}
+    {% endif %}
+
+  description: |
+    {{ tagTrans('barrier', 'kerb') }}
+  body: |
+    <ul>
+    {% if tags.kerb %}
+    <li>{{ keyTrans('kerb') }}: {{ tagTrans('kerb', tags.kerb) }}</li>
+    {% endif %}
+    {% if tags.wheelchair %}
+    <li>{{ keyTrans('wheelchair') }}: {{ tagTrans('wheelchair', tags.wheelchair) }}</li>
+    {% endif %}
+    {% if tags.tactile_paving %}
+    <li>{{ keyTrans('tactile_paving') }}: {{ tagTrans('tactile_paving', tags.tactile_paving) }}</li>
+    {% endif %}
+    {% if tags.height %}
+    <li>{{ keyTrans('height') }}: {{ tags.height }}</li>
+    {% endif %}
+    </ul>
+  markerSymbol:
+  listMarkerSymbol: |
+    {% if type == 'way' %}
+    line
+    {% else %}
+    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb], color: const.wheelchair[wheelchair] }) }}
+    {% endif %}
+  details: |
+    {{ tags.kerb }} 
+    {% if tags.height %}({{ tags.height }}){% endif %}
+  styles: |
+    {% if type == 'way' %}
+      default,marker
+    {% else %}
+      node
+    {% endif %}
+  style:
+    color: |
+      {{ const.kerb[kerb] }}
+    fill: |
+      {{ type == 'way' ? false : true }}
+    radius: 4
+    fillOpacity: 1
+    width: 2
+  style:marker:
+    color: |
+      {{ const.kerb[kerb] }}
+    offset: 2
+    width: 2
+    fill: false
+    dashArray: 2,9
+  style:node:
+    fillColor: |
+      {{ const.kerb[kerb] }}
+    fill: true
+    radius: 6
+    fillOpacity: 1
+    width: 2
+    color: |
+      {{ const.wheelchair[wheelchair] }}
+info: |
+  {{ tagTrans('barrier', 'kerb') }}:
+  <table>
+  {% for v, color 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: 2, fillOpacity: 1, color: color }) }}
+      </td>
+      <td>{{ v == 'unknown' ? trans('unknown') : tagTrans('kerb', v) }}</td>
+    </tr>
+  {% endfor %}
+  </table>
+  {{ keyTrans('wheelchair') }}:
+  <table>
+  {% for v, color in const.wheelchair %}
+    <tr>
+      <td>
+        {{ markerCircle({ radius: 6, width: 2, fillOpacity: 1, fillColor: '#000000', color: color }) }}
+      </td>
+      <td>{{ v == 'unknown' ? trans('unknown') : tagTrans('kerb', v) }}</td>
+    </tr>
+  {% endfor %}
+  </table>
+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'