diff --git a/assets/layers/lock_outline/lock_outline.json b/assets/layers/lock_outline/lock_outline.json
new file mode 100644
index 0000000000..4488f6800f
--- /dev/null
+++ b/assets/layers/lock_outline/lock_outline.json
@@ -0,0 +1,37 @@
+{
+ "id": "lock_outline",
+ "name": {
+ "en": "Lock area"
+ },
+ "description": {
+ "en": "Small layer showing the outline of the lock waterway, but without containing any information"
+ },
+ "source": {
+ "osmTags": "water=lock"
+ },
+ "minzoom": 15,
+ "title": null,
+ "pointRendering": [
+ {
+ "location": [
+ "point"
+ ],
+ "marker": [
+ {
+ "icon": "circle",
+ "color": "white"
+ }
+ ]
+ }
+ ],
+ "lineRendering": [
+ {
+ "width": 1,
+ "color": "blue"
+ }
+ ],
+ "tagRenderings": [],
+ "allowMove": false,
+ "credits": "Pieter Vander Vennet",
+ "credits:uid": 3818858
+}
diff --git a/assets/layers/waterway/waterway.json b/assets/layers/waterway/waterway.json
new file mode 100644
index 0000000000..f23a5c2e89
--- /dev/null
+++ b/assets/layers/waterway/waterway.json
@@ -0,0 +1,79 @@
+{
+ "id": "waterway",
+ "name": {
+ "en": "Navigable waterways"
+ },
+ "description": {
+ "en": "Waterways which are navigable by small boats, yachts, ..."
+ },
+ "source": {
+ "osmTags": {
+ "and": [
+ "motorboat!=no",
+ "boat!=no",
+ {
+ "or": [
+ "waterway=river",
+ "waterway=canal"
+ ]
+ }
+ ]
+ }
+ },
+ "title": {
+ "en": "{name}"
+ },
+ "pointRendering": null,
+ "lineRendering": [
+ {
+ "color": "blue",
+ "width": {
+ "mappings": [
+ {
+ "if": "waterway=canal",
+ "then": "8"
+ },
+ {
+ "if": "waterway=river",
+ "then": "8"
+ },
+ {
+ "if": "waterway=stream",
+ "then": "6"
+ }
+ ]
+ }
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ "wikipedia",
+ {
+ "id": "type",
+ "question": {
+ "en": "What type of waterway is this?"
+ },
+ "mappings": [
+ {
+ "if": "waterway=river",
+ "then": {
+ "en": "This is a river"
+ }
+ },
+ {
+ "if": "waterway=canal",
+ "then": {
+ "en": "This is a canal"
+ }
+ },
+ {
+ "if": "waterway=stream",
+ "then": {
+ "en": "This is a stream "
+ }
+ }
+ ]
+ }
+ ],
+ "allowMove": false
+}
diff --git a/assets/layers/waterway_lock/license_info.json b/assets/layers/waterway_lock/license_info.json
new file mode 100644
index 0000000000..df32c5e317
--- /dev/null
+++ b/assets/layers/waterway_lock/license_info.json
@@ -0,0 +1,12 @@
+[
+ {
+ "path": "waterway_lock.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Oosoom"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:BSicon_uLOCKSl.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/waterway_lock/waterway_lock.json b/assets/layers/waterway_lock/waterway_lock.json
new file mode 100644
index 0000000000..67315bed6c
--- /dev/null
+++ b/assets/layers/waterway_lock/waterway_lock.json
@@ -0,0 +1,220 @@
+{
+ "id": "waterway_lock",
+ "name": {
+ "en": "Locks"
+ },
+ "description": {
+ "en": "Locks on canals, rivers and other navigable waterways "
+ },
+ "source": {
+ "osmTags": "lock=yes"
+ },
+ "minzoom": 10,
+ "title": {
+ "render": {
+ "en": "{lock_name} Lock {lock_ref} (on {name})"
+ }
+ },
+ "pointRendering": [
+ {
+ "location": [
+ "point",
+ "polygon_centroid",
+ "projected_centerpoint"
+ ],
+ "marker": [
+ {
+ "icon": "circle",
+ "color": "white"
+ },
+ {
+ "icon": "./assets/layers/waterway_lock/waterway_lock.svg"
+ }
+ ],
+ "rotation": "calc( {_direction:centerpoint}deg - 90deg )",
+ "pitchAlignment": "map",
+ "label": {
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "lock_name~*",
+ "vhf~*"
+ ]
+ },
+ "then": {
+ "en": "{lock_name} (VHF {vhf})"
+ }
+ },
+ {
+ "if": "lock_name~*",
+ "then": {
+ "en": "{lock_name}"
+ }
+ }
+ ]
+ },
+ "labelCssClasses": "bg-white rounded px-2"
+ }
+ ],
+ "lineRendering": [
+ {
+ "width": 1,
+ "color": "blue"
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "What is the maximum width (beam) of boats using this lock?"
+ },
+ "id": "max_length",
+ "render": {
+ "en": "This lock permits boats with a maximum width of {maxwidth}"
+ },
+ "freeform": {
+ "key": "maxwidth",
+ "unit": "length"
+ },
+ "questionHint": {
+ "en": "Omit units if designated in meters. Feet and inches maybe indicated with apostrophes and quotation marks."
+ },
+ "condition": "waterway!=derelict_canal"
+ },
+ {
+ "question": {
+ "en": "What is the maximum length of boats that may use this lock?"
+ },
+ "id": "2_qyvwk0kx77jcmh2",
+ "multiAnswer": false,
+ "freeform": {
+ "key": "maxlength"
+ },
+ "render": {
+ "en": "Boats with a maximum length of {maxlength} may use this lock."
+ },
+ "questionHint": {
+ "en": "Omit units if designated in meters. Feet and inches maybe indicated with apostrophes and quotation marks."
+ },
+ "condition": "waterway!=derelict_canal"
+ },
+ {
+ "question": {
+ "en": "How far does this lock raise or lower a boat?"
+ },
+ "id": "3_sm4v6ow91r2i4kd",
+ "questionHint": {
+ "en": "Omit units if designated in meters. Feet and inches maybe indicated with apostrophes and quotation marks."
+ },
+ "multiAnswer": false,
+ "freeform": {
+ "key": "lock:height",
+ "type": "nat"
+ },
+ "render": {
+ "en": "This lock has a drop height of {lock:height}"
+ },
+ "condition": "waterway!=derelict_canal"
+ },
+ {
+ "question": {
+ "en": "Is this lock automated?"
+ },
+ "id": "4_pwnx07go36rzk54",
+ "mappings": [
+ {
+ "if": "automated=yes",
+ "then": {
+ "en": "This lock is automated (operated from control panel or control room)"
+ },
+ "ifnot": "automated="
+ },
+ {
+ "if": "manual=yes",
+ "then": {
+ "en": "This lock is manually operated (with muscle power)"
+ },
+ "ifnot": "manual="
+ }
+ ],
+ "multiAnswer": true,
+ "condition": "waterway!=derelict_canal"
+ },
+ {
+ "question": {
+ "en": "What is the maximum draft of boats using this lock?"
+ },
+ "id": "5_1sz01guflvjeyx7",
+ "questionHint": {
+ "en": "Omit units if designated in meters. Feet and inches maybe indicated with apostrophes and quotation marks."
+ },
+ "multiAnswer": false,
+ "render": {
+ "en": "The maximum draft of boats using this lock is {draft}."
+ },
+ "freeform": {
+ "key": "draft"
+ },
+ "condition": "waterway!=derelict_canal"
+ },
+ {
+ "question": {
+ "en": "What is the name of this lock?"
+ },
+ "id": "lock_name",
+ "questionHint": {
+ "en": "The numerical reference code can be added in a follow-up question "
+ },
+ "multiAnswer": false,
+ "render": {
+ "en": "This lock is named {lock_name}"
+ },
+ "freeform": {
+ "key": "lock_name"
+ }
+ },
+ {
+ "question": {
+ "en": "Does this lock have a reference number/code?"
+ },
+ "id": "ref",
+ "multiAnswer": false,
+ "render": {
+ "en": "This is lock {lock_ref}"
+ },
+ "freeform": {
+ "key": "lock_ref"
+ }
+ },
+ {
+ "question": {
+ "en": "What VHF channel should be used to communicate with this lock?"
+ },
+ "id": "vhf",
+ "render": {
+ "en": "The VHF channelnis {vhf}"
+ },
+ "freeform": {
+ "key": "vhf"
+ }
+ },
+ "opening_hours_24_7",
+ "phone",
+ {
+ "question": {
+ "en": "What is the name of the waterway that this lock is on?"
+ },
+ "id": "waterway_name",
+ "render": {
+ "en": "The waterway is name {name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ }
+ ],
+ "allowMove": false,
+ "credits": "Pieter Vander Vennet",
+ "credits:uid": 3818858
+}
\ No newline at end of file
diff --git a/assets/layers/waterway_lock/waterway_lock.svg b/assets/layers/waterway_lock/waterway_lock.svg
new file mode 100644
index 0000000000..59e3454060
--- /dev/null
+++ b/assets/layers/waterway_lock/waterway_lock.svg
@@ -0,0 +1,16 @@
+
\ No newline at end of file
diff --git a/assets/layers/waterway_lock/waterway_lock.svg.license b/assets/layers/waterway_lock/waterway_lock.svg.license
new file mode 100644
index 0000000000..1d28ce620d
--- /dev/null
+++ b/assets/layers/waterway_lock/waterway_lock.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Oosoom
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/narrowboat/narrowboat.json b/assets/themes/narrowboat/narrowboat.json
new file mode 100644
index 0000000000..97d477c5c8
--- /dev/null
+++ b/assets/themes/narrowboat/narrowboat.json
@@ -0,0 +1,37 @@
+{
+ "id": "narrowboat",
+ "title": {
+ "en": "Narrowboat Amenities"
+ },
+ "description": {
+ "en": "Features of interest to narrowboats and similar cruisers on inland waterways. "
+ },
+ "icon": "./assets/layers/waterway_lock/waterway_lock.svg",
+ "startZoom": 5,
+ "startLat": 54.44,
+ "startLon": -5.23,
+ "layers": [
+ "waterway_lock",
+ "waterway",
+ "lock_outline",
+ {
+ "builtin": [
+ "drinking_water",
+ "shower",
+ "toilet"
+ ],
+ "override": {
+ "minzoom": 14
+ }
+ }
+ ],
+ "#layers": [
+ "https://studio.mapcomplete.org/89098/layers/waterway_locks/waterway_locks.json",
+ "https://studio.mapcomplete.org/89098/layers/waterway_sanitary_dump_station/waterway_sanitary_dump_station.json",
+ "https://studio.mapcomplete.org/89098/layers/fuel_dock/fuel_dock.json",
+ "https://studio.mapcomplete.org/89098/layers/water_point/water_point.json",
+ "https://studio.mapcomplete.org/89098/layers/winding_holes/winding_holes.json",
+ "https://studio.mapcomplete.org/89098/layers/marinas/marinas.json",
+ "https://studio.mapcomplete.org/89098/layers/chandler/chandler.json"
+ ]
+}