diff --git a/communication.json b/communication.json
index 27f8372..83a90d3 100644
--- a/communication.json
+++ b/communication.json
@@ -25,21 +25,38 @@
             "node[amenity~'^(post_office|internet_cafe)$'];",
             "way[amenity~'^(post_office|internet_cafe)$'];",
             "relation[amenity~'^(post_office|internet_cafe)$'];",
+            "nwr[office~\"^(telecommunication|it|newspaper|publisher|advertising_agency)$\"];",
             ");"
         ],
         "16": [
             "(node[amenity~'^(post_office|internet_cafe|post_box|telephone)$'];",
             "way[amenity~'^(post_office|internet_cafe)$'];",
             "relation[amenity~'^(post_office|internet_cafe)$'];",
+            "nwr[office~\"^(telecommunication|it|newspaper|publisher|advertising_agency)$\"];",
             ");"
         ]
     },
     "feature": {
+        "pre": [
+            "{% if tags.amenity %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
         "title": "{{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) |default(tagTrans('amenity', tags.amenity)) }}",
-        "description": "{{ tagTrans('amenity', tags.amenity) }}",
+        "description": [
+            "{% if key == 'office' %}",
+            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}"
+        ],
         "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br/>{% endif %}",
         "markerSign": [
-            "{% set data = const[tags.amenity] %}",
+            "{% set data = const[key ~ '=' ~ value] %}",
             "{% if data %}",
             "{{ data.sign|raw }}",
             "{% endif %}"
@@ -47,30 +64,69 @@
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
+        "    <td>",
+        "      {% if kv|split('=')[0] == 'office' %}",
+        "        {{ keyTrans('office') }}",
+        "        ({{ tagTrans('office', kv|split('=')[1]) }})",
+        "      {% else %}",
+        "        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "      {% endif %}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "post_office": {
+        "amenity=post_office": {
             "sign": "<img src='maki:post?size=15'>",
             "zoom": 13
         },
-        "post_box": {
+        "amenity=post_box": {
             "sign": "<img src='maki:post?size=11'>",
             "zoom": 16
         },
-        "internet_cafe": {
+        "amenity=internet_cafe": {
             "sign": "<i class='fa fa-laptop' aria-hidden='true'></i>",
             "zoom": 13
         },
-        "telephone": {
+        "office=telecommunication": {
+            "sign": "<i class='fas fa-mobile-alt'></i>",
+            "zoom": 13
+        },
+        "office=it": {
+            "sign": "<i class='fas fa-desktop'></i>",
+            "zoom": 13
+        },
+        "office=newspaper": {
+            "sign": "<i class='fas fa-newspaper'></i>",
+            "zoom": 13
+        },
+        "office=publisher": {
+            "sign": "<i class='fas fa-book'></i>",
+            "zoom": 13
+        },
+        "office=advertising_agency": {
+            "sign": "<i class='fas fa-sign'></i>",
+            "zoom": 13
+        },
+        "office=public_relations": {
+            "sign": "<i class='fas fa-sign'></i>",
+            "zoom": 13
+        },
+        "office=audiovisual_production": {
+            "sign": "<i class='fas fa-film'></i>",
+            "zoom": 13
+        },
+        "office=film_production": {
+            "sign": "<i class='fas fa-film'></i>",
+            "zoom": 13
+        },
+        "amenity=telephone": {
             "sign": "<img src='maki:telephone'>",
             "zoom": 16
         }
diff --git a/cycle_routes.json b/cycle_routes.json
index 828dfaf..2cb57ed 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -16,18 +16,18 @@
     },
     "members": true,
     "feature": {
-        "priority": "{{ const[tags.network].priority|default(4) }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
         "description": "{{ tagTrans('network', tags.network) }}",
+        "markerSymbol": "",
         "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color|default(const[''].color) })|raw }}",
-        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "priority": "{{ const[tags.network].priority|default(4) }}",
         "styles": "",
         "style:hover": {
-            "width": 0
+            "width": "0"
         },
         "style:selected": {
-            "width": 0
-        },
-        "markerSymbol": ""
+            "width": "0"
+        }
     },
     "memberFeature": {
         "pre": [
@@ -72,62 +72,62 @@
         "listExclude": "1",
         "styles": "default{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}",
         "style": {
-            "color": "{{ const[network].color }}",
             "width": "4",
+            "color": "{{ const[network].color }}",
+            "opacity": "1",
+            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "dashArray": "{% if not dirForward or not dirBackward %}27,8{% endif %}",
             "dashOffset": "{% if dirBackward %}28{% else %}0{% endif %}",
-            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "noClip": "{% if not dirForward or not dirBackward %}true{% else %}false{% endif %}",
-            "opacity": 1,
             "text": "{{ refs|join(' ยท ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold",
             "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
             "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
             "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
+            "pattern-path-color": "{{ const[network].color }}",
             "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "{{ const[network].color }}"
+            "textFontWeight": "bold"
         },
         "style:hover": {
             "pane": "hover",
             "width": "4",
+            "color": "black",
+            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
             "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
             "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
             "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
-            "color": "black",
             "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
             "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
             "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "black"
+            "pattern-path-color": "black",
+            "pattern-path-fillOpacity": "1"
         },
         "style:selected": {
             "pane": "selected",
             "width": "4",
+            "color": "#3f3f3f",
+            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
             "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
             "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
             "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
-            "color": "#3f3f3f",
             "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
             "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
             "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "#3f3f3f"
+            "pattern-path-color": "#3f3f3f",
+            "pattern-path-fillOpacity": "1"
         }
     },
     "const": {
diff --git a/education.json b/education.json
index c366e82..5b4772d 100644
--- a/education.json
+++ b/education.json
@@ -32,6 +32,7 @@
             "node[amenity~'^(college|university|library|school|kindergarten|language_school)$'];",
             "way[amenity~'^(college|university|library|school|kindergarten|language_school)$'];",
             "relation[amenity~'^(college|university|library|school|kindergarten|language_school)$'];",
+            "nwr[office~\"^(educational_institution|research)$\"];",
             ")"
         ],
         "16": [
@@ -39,20 +40,30 @@
             "node[amenity~'^(college|university|library|school|kindergarten|public_bookcase)$'];",
             "way[amenity~'^(college|university|library|school|kindergarten|public_bookcase)$'];",
             "relation[amenity~'^(college|university|library|school|kindergarten|public_bookcase)$'];",
+            "nwr[office~\"^(educational_institution|research)$\"];",
             ")"
         ]
     },
     "feature": {
-        "description": "{{ tagTrans('amenity', tags.amenity) }}",
+        "pre": [
+            "{% if tags.office == 'educational_institution' or tags.office == 'research' %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% else %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% endif %}"
+        ],
+        "description": "{{ tagTrans(key, value) }}",
         "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
         "markerSign": [
-            "{% set data = const[tags.amenity] %}",
+            "{% set data = const[key ~ '=' ~ value] %}",
             "{% if data %}",
-            "{{ data.sign }}",
+            "{{ data.sign|raw }}",
             "{% endif %}"
         ],
         "priority": [
-            "{% set data = const[tags.amenity] %}",
+            "{% set data = const[key ~ '=' ~ value] %}",
             "{% if data %}",
             "{{ data.priority }}",
             "{% endif %}"
@@ -60,51 +71,63 @@
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "university": {
+        "amenity=university": {
             "priority": 0,
             "sign": "๐ŸŽ“",
             "zoom": 11
         },
-        "college": {
+        "amenity=college": {
             "priority": 1,
             "sign": "๐ŸŽ“",
             "zoom": 11
         },
-        "library": {
+        "amenity=library": {
             "priority": 2,
             "sign": "๐Ÿ•ฎ",
             "zoom": 11
         },
-        "school": {
+        "amenity=school": {
             "priority": 3,
             "sign": "๐Ÿซ",
             "zoom": 14
         },
-        "language_school": {
+        "amenity=language_school": {
             "priority": 3,
             "sign": "๐Ÿซ",
             "zoom": 14
         },
-        "kindergarten": {
+        "amenity=kindergarten": {
             "priority": 4,
             "sign": "โ›น",
             "zoom": 14
         },
-        "public_bookcase": {
+        "amenity=public_bookcase": {
             "priority": 5,
             "sign": "๐Ÿ“š",
             "zoom": 16
+        },
+        "office=educational_institution": {
+            "priority": 3,
+            "sign": "๐Ÿข",
+            "zoom": 14
+        },
+        "office=research": {
+            "priority": 3,
+            "sign": "<i class='fas fa-vials'></i>",
+            "zoom": 14
         }
     }
 }
diff --git a/financial.json b/financial.json
index b0ea37a..82b3bfb 100644
--- a/financial.json
+++ b/financial.json
@@ -31,37 +31,75 @@
             "node[amenity~\"^(bank|bureau_de_change|atm)$\"];",
             "way[amenity~\"^(bank|bureau_de_change|atm)$\"];",
             "relation[amenity~\"^(bank|bureau_de_change|atm)$\"];",
+            "node[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
+            "way[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
+            "relation[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
             ")"
         ]
     },
     "feature": {
-        "description": "{{ tagTrans('amenity', tags.amenity) }}",
-        "markerSign": "{{ const[tags.amenity].sign|raw }}"
+        "pre": [
+            "{% if tags.amenity %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
+        "description": "{{ tagTrans(key, value) }}",
+        "markerSign": "{{ const[key ~ '=' ~ value].sign|raw }}"
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "atm": {
-            "sign": "<img src='maki:bank?size=11'>",
+        "amenity=atm": {
+            "sign": "<img data-src='maki:bank?size=11'>",
             "zoom": 15
         },
-        "bank": {
-            "sign": "<img src='maki:building'>",
+        "amenity=bank": {
+            "sign": "<img data-src='maki:building'>",
             "zoom": 14
         },
-        "bureau_de_change": {
+        "amenity=bureau_de_change": {
             "sign": "โ‡„",
             "zoom": 15
+        },
+        "office=financial": {
+            "sign": "<i class=\"fas fa-coins\"></i>",
+            "zoom": 15
+        },
+        "office=accountant": {
+            "sign": "<i class=\"fas fa-book\"></i>",
+            "zoom": 15
+        },
+        "office=insurance": {
+            "sign": "<i class=\"fas fa-file-signature\"></i>",
+            "zoom": 15
+        },
+        "office=tax": {
+            "sign": "%",
+            "zoom": 15
+        },
+        "office=tax_advisor": {
+            "sign": "<span style='color: green'>%</span>",
+            "zoom": 15
+        },
+        "office=cooperative": {
+            "sign": "<i class=\"fas fa-piggy-bank\"></i>",
+            "zoom": 15
         }
     }
 }
diff --git a/index.json b/index.json
index c2be5f1..126668e 100644
--- a/index.json
+++ b/index.json
@@ -95,11 +95,17 @@
                 {
                     "id": "financial"
                 },
+                {
+                    "id": "law"
+                },
                 {
                     "id": "public"
                 },
                 {
                     "id": "tourism_services"
+                },
+                {
+                    "id": "organisations"
                 }
             ]
         },
diff --git a/law.json b/law.json
new file mode 100644
index 0000000..02beff1
--- /dev/null
+++ b/law.json
@@ -0,0 +1,59 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Law"
+    },
+    "query": {
+        "14": [
+            "(",
+            "node[amenity~\"^(courthouse)$\"];",
+            "way[amenity~\"^(courthouse)$\"];",
+            "relation[amenity~\"^(courthouse)$\"];",
+            "node[office~\"^(lawyer|notary)$\"];",
+            "way[office~\"^(lawyer|notary)$\"];",
+            "relation[office~\"^(lawyer|notary)$\"];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% if tags.amenity %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
+        "description": "{{ tagTrans(key, value) }}",
+        "markerSign": "{{ const[key ~ '=' ~ value].sign|raw }}"
+    },
+    "info": [
+        "<table>",
+        "{% for kv, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ],
+    "const": {
+        "amenity=courthouse": {
+            "sign": "<i class=\"fas fa-gavel\"></i>",
+            "zoom": 14
+        },
+        "office=lawyer": {
+            "sign": "โš–",
+            "zoom": 14
+        },
+        "office=notary": {
+            "sign": "<i class=\"fas fa-file-signature\"></i>",
+            "zoom": 14
+        }
+    }
+}
diff --git a/organisations.json b/organisations.json
new file mode 100644
index 0000000..a6652b3
--- /dev/null
+++ b/organisations.json
@@ -0,0 +1,80 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Organisations"
+    },
+    "query": {
+        "13": [
+            "(",
+            "nwr[office~\"^(ngo|quango|political_party|association|charity)$\"];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% set key = 'office' %}",
+            "{% set value = tags.office %}",
+            ""
+        ],
+        "description": "{{ tagTrans(key, value) }}",
+        "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
+        "markerSign": [
+            "{% set data = const[key ~ '=' ~ value] %}",
+            "{% if data %}",
+            "{{ data.sign|raw }}",
+            "{% endif %}"
+        ],
+        "priority": [
+            "{% set data = const[key ~ '=' ~ value] %}",
+            "{% if data %}",
+            "{{ data.priority }}",
+            "{% endif %}"
+        ]
+    },
+    "info": [
+        "<table>",
+        "{% for kv, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ],
+    "const": {
+        "office=ngo": {
+            "priority": 0,
+            "sign": "<i class='fas fa-users'></i>",
+            "zoom": 13
+        },
+        "office=quango": {
+            "priority": 0,
+            "sign": "<i class='fas fa-users'></i>",
+            "zoom": 13
+        },
+        "office=political_party": {
+            "priority": 0,
+            "sign": "<i class='fas fa-flag'></i>",
+            "zoom": 13
+        },
+        "office=association": {
+            "priority": 0,
+            "sign": "<i class='fas fa-people-carry'></i>",
+            "zoom": 13
+        },
+        "office=foundation": {
+            "priority": 0,
+            "sign": "<i class='fas fa-people-carry'></i>",
+            "zoom": 13
+        },
+        "office=charity": {
+            "priority": 0,
+            "sign": "<i class='fas fa-hands-helping'></i>",
+            "zoom": 13
+        }
+    }
+}
diff --git a/pt.json b/pt.json
index 7ade18d..9c26bf2 100644
--- a/pt.json
+++ b/pt.json
@@ -69,10 +69,10 @@
         "markerSymbol": "",
         "styles": "",
         "style:hover": {
-            "width": 0
+            "width": "0"
         },
         "style:selected": {
-            "width": 0
+            "width": "0"
         },
         "listStopsExclude": "true",
         "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
@@ -136,78 +136,78 @@
             "{% endfor %}",
             "</ul>"
         ],
+        "markerSign": " ",
+        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerPointer({ })|raw }}{% endif %}{% endif %}",
         "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}casing,way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
+        "style:hover": {
+            "pane": "hover",
+            "width": "4",
+            "color": "black",
+            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
+            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
+            "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
+            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
+            "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
+            "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
+            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-color": "black",
+            "pattern-path-fillOpacity": "1"
+        },
+        "style:selected": {
+            "pane": "selected",
+            "width": "4",
+            "color": "#3f3f3f",
+            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
+            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
+            "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
+            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
+            "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
+            "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
+            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-color": "#3f3f3f",
+            "pattern-path-fillOpacity": "1"
+        },
         "listStopsMarkerSign": null,
         "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
         "listStopsExclude": "{{ not isStop or stopCount == 0 }}",
         "listStopsTitle": "{% if tags %}{{ tags.name|default(stopName)|default(trans('unknown')) }}{% else %}<li>{{ trans('loading') }}</li>{% endif %}",
         "listStopsDescription": "{{ refs|join(' ยท ') }}",
         "listRoutesExclude": "true",
-        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerPointer({ })|raw }}{% endif %}{% endif %}",
-        "markerSign": " ",
         "style:stop": {
-            "color": "{{ color|default('#ff0000') }}",
             "width": "4",
+            "color": "{{ color|default('#ff0000') }}",
             "radius": "3",
             "zIndex": "1"
         },
         "style:way": {
-            "color": "{{ color|default('#ff0000') }}",
             "width": "4",
+            "color": "{{ color|default('#ff0000') }}",
+            "opacity": "1",
+            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "dashArray": "{% if not dirForward or not dirBackward %}27,8{% endif %}",
             "dashOffset": "{% if dirBackward %}28{% else %}0{% endif %}",
-            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "noClip": "{% if not dirForward or not dirBackward %}true{% else %}false{% endif %}",
-            "opacity": 1,
             "text": "{{ refs|join(' ยท ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold",
             "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
-            "pattern-polygon": "true",
-            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
-            "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "{{ color|default('#ff0000') }}"
-        },
-        "style:hover": {
-            "pane": "hover",
-            "width": "4",
-            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
-            "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
-            "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
-            "color": "black",
-            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
             "pattern-repeat": "35",
-            "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
-            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
-            "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "black"
-        },
-        "style:selected": {
-            "pane": "selected",
-            "width": "4",
-            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
-            "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
-            "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
-            "color": "#3f3f3f",
-            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
             "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
-            "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
-            "pattern-polygon": "true",
-            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
+            "pattern-path-color": "{{ color|default('#ff0000') }}",
             "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "#3f3f3f"
+            "textFontWeight": "bold"
         }
     },
     "info": [
diff --git a/public.json b/public.json
index 4fad62c..3adc7ff 100644
--- a/public.json
+++ b/public.json
@@ -21,37 +21,51 @@
     "query": {
         "12": [
             "(",
-            "node[amenity~'^(courthouse|embassy|public_building|townhall)$'];",
-            "way[amenity~'^(courthouse|embassy|public_building|townhall)$'];",
-            "relation[amenity~'^(courthouse|embassy|public_building|townhall)$'];",
+            "node[amenity~'^(embassy|public_building|townhall)$'];",
+            "way[amenity~'^(embassy|public_building|townhall)$'];",
+            "relation[amenity~'^(embassy|public_building|townhall)$'];",
             "node[amenity=recycling][recyling_type=centre];",
             "way[amenity=recycling][recyling_type=centre];",
             "relation[amenity=recycling][recyling_type=centre];",
+            "nwr[office~\"^(government|administration)$\"];",
             ");"
         ],
         "16": [
             "(",
-            "node[amenity~'^(courthouse|embassy|public_building|townhall|clock|drinking_water|recycling|toilets)$'];",
-            "way[amenity~'^(courthouse|embassy|public_building|townhall|recycling|toilets)$'];",
-            "relation[amenity~'^(courthouse|embassy|public_building|townhall|recycling|toilets)$'];",
+            "node[amenity~'^(embassy|public_building|townhall|clock|drinking_water|recycling|toilets)$'];",
+            "way[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];",
+            "relation[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];",
             "node[drinking_water];",
+            "nwr[office~\"^(government|administration)$\"];",
             ");"
         ]
     },
     "feature": {
         "pre": [
             "{% if tags.drinking_water %}",
+            "{% set key = 'amenity' %}",
             "{% set value = 'drinking_water' %}",
-            "{% else %}",
+            "{% elseif tags.amenity %}",
+            "{% set key = 'amenity' %}",
             "{% set value = tags.amenity %}",
+            "{% elseif tags.office %}",
+            "{% set key = 'office' %}",
+            "{% set value = tags.office %}",
             "{% endif %}"
         ],
         "title": "{{ tags.name|default(tags.operator)|default(tagTrans('amenity', value)) }}",
-        "description": "{{ tagTrans('amenity', value) }}",
+        "description": [
+            "{% if key == 'office' %}",
+            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}"
+        ],
         "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
         "markerSign": [
-            "{% if const[value] %}",
-            "{{ const[value]|raw }}",
+            "{% set kv = key ~ '=' ~ value %}",
+            "{% if const[kv] %}",
+            "{{ const[kv]|raw }}",
             "{% endif %}"
         ]
     },
@@ -66,13 +80,14 @@
         "</table>"
     ],
     "const": {
-        "courthouse": "โš–",
-        "clock": "<i class='fa fa-clock-o' aria-hidden='true'></i>",
-        "drinking_water": "<img src='maki:drinking-water'>",
-        "embassy": "<img src='maki:embassy'>",
-        "public_building": "<img src='maki:building'>",
-        "recycling": "<img src='maki:recycling'>",
-        "toilets": "<img src='maki:toilet'>",
-        "townhall": "<img src='maki:town-hall'>"
+        "amenity=clock": "<i class='fa fa-clock-o' aria-hidden='true'></i>",
+        "amenity=drinking_water": "<img data-src='maki:drinking-water'>",
+        "amenity=embassy": "<img data-src='maki:embassy'>",
+        "amenity=public_building": "<img data-src='maki:building'>",
+        "amenity=recycling": "<img data-src='maki:recycling'>",
+        "amenity=toilets": "<img data-src='maki:toilet'>",
+        "amenity=townhall": "<img data-src='maki:town-hall'>",
+        "office=administration": "<img data-src='maki:town-hall'>",
+        "office=government": "<img data-src='maki:town-hall'>"
     }
 }
diff --git a/religion.json b/religion.json
index ebdc2b6..b3e2c5a 100644
--- a/religion.json
+++ b/religion.json
@@ -38,6 +38,7 @@
             "node[historic~\"^wayside_(cross|shrine|chapel)$\"];",
             "way[historic~\"^wayside_(cross|shrine|chapel)$\"];",
             "relation[historic~\"^wayside_(cross|shrine|chapel)$\"];",
+            "nwr[office~\"^(parish|religion)$\"];",
             ")"
         ]
     },
@@ -49,6 +50,9 @@
             "{% elseif tags.historic in [ 'wayside_cross', 'wayside_shrine', 'wayside_chapel' ] %}",
             "{% set key = 'historic' %}",
             "{% set value = tags.historic %}",
+            "{% elseif tags.office %}",
+            "{% set key = 'office' %}",
+            "{% set value = tags.office %}",
             "{% else %}",
             "{% set key = 'amenity' %}",
             "{% set value = tags.amenity %}",
diff --git a/tourism_services.json b/tourism_services.json
index d48a470..0247ae3 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -25,6 +25,7 @@
             "node[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|motel|wilderness_hut)$\"];",
             "way[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|motel|wilderness_hut)$\"];",
             "relation[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|motel|wilderness_hut)$\"];",
+            "nwr[office~\"^(guide|tourism|tourist_accommodation)$\"];",
             ")"
         ],
         "16": [
@@ -32,67 +33,107 @@
             "node[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|information|motel|wilderness_hut)$\"];",
             "way[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|information|motel|wilderness_hut)$\"];",
             "relation[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|information|motel|wilderness_hut)$\"];",
+            "nwr[office~\"^(guide|tourism|tourist_accommodation)$\"];",
             ")"
         ]
     },
     "feature": {
-        "description": "{{ tagTrans('tourism', tags.tourism) }}",
-        "markerSign": "{{ const[tags.tourism].sign|raw }}"
+        "pre": [
+            "{% if tags.tourism %}",
+            "  {% set key = 'tourism' %}",
+            "  {% set value = tags.tourism %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
+        "description": [
+            "{% if key == 'office' %}",
+            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}"
+        ],
+        "markerSign": [
+            "{% set data = const[key ~ '=' ~ value] %}",
+            "{% if data %}",
+            "{{ data.sign|raw }}",
+            "{% endif %}"
+        ]
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('tourism', value) }}</td>",
+        "    <td>",
+        "      {% if kv|split('=')[0] == 'office' %}",
+        "        {{ keyTrans('office') }}",
+        "        ({{ tagTrans('office', kv|split('=')[1]) }})",
+        "      {% else %}",
+        "        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "      {% endif %}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "alpine_hut": {
+        "tourism=alpine_hut": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "apartment": {
+        "tourism=apartment": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "camp_site": {
+        "tourism=camp_site": {
             "sign": "โ›บ",
             "zoom": 13
         },
-        "caravan_site": {
+        "tourism=caravan_site": {
             "sign": "โ›บ",
             "zoom": 13
         },
-        "chalet": {
+        "tourism=chalet": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "guest_house": {
+        "tourism=guest_house": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "hostel": {
+        "tourism=hostel": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "hotel": {
+        "tourism=hotel": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "motel": {
+        "tourism=motel": {
             "sign": "๐Ÿ›Œ",
             "zoom": 13
         },
-        "wilderness_hut": {
+        "tourism=wilderness_hut": {
             "sign": "",
             "zoom": 13
         },
-        "information": {
+        "office=tourism": {
+            "sign": "<i class=\"fas fa-info-circle\"></i>",
+            "zoom": 13
+        },
+        "office=guide": {
+            "sign": "<i class=\"fas fa-flag\"></i>",
+            "zoom": 13
+        },
+        "office=tourist_accommodation": {
+            "sign": "๐Ÿ›Œ",
+            "zoom": 13
+        },
+        "tourism=information": {
             "sign": "โ„น๏ธ",
             "zoom": 16
         }