diff --git a/assets/layers/speed_camera/license_info.json b/assets/layers/speed_camera/license_info.json
new file mode 100644
index 0000000000..6c09b57947
--- /dev/null
+++ b/assets/layers/speed_camera/license_info.json
@@ -0,0 +1,13 @@
+[
+ {
+ "path": "speed_camera.svg",
+ "license": "CC0",
+ "authors": [
+ "Earlyswerver",
+ "OpenClipArt"
+ ],
+ "sources": [
+ "https://en.wikipedia.org/wiki/File:Earlyswerver_UK_Speed_Camera_Sign.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/speed_camera/speed_camera.json b/assets/layers/speed_camera/speed_camera.json
new file mode 100644
index 0000000000..c249d78958
--- /dev/null
+++ b/assets/layers/speed_camera/speed_camera.json
@@ -0,0 +1,127 @@
+{
+ "id": "speed_camera",
+ "name": {
+ "en": "Speed Camera"
+ },
+ "description": {
+ "en": "Layer showing speed cameras"
+ },
+ "title": {
+ "render": {
+ "en": "Speed Camera"
+ }
+ },
+ "minzoom": 12,
+ "source": {
+ "osmTags": "highway=speed_camera"
+ },
+ "tagRenderings": [
+ {
+ "id": "maxspeed",
+ "question": {
+ "en": "What is the maximum speed allowed at this speed camera?"
+ },
+ "freeform": {
+ "key": "maxspeed",
+ "type": "pnat",
+ "placeholder": {
+ "en": "Maximum speed allowed"
+ }
+ },
+ "render": {
+ "en": "The maximum speed allowed is {canonical(maxspeed)}"
+ }
+ },
+ {
+ "id": "ref",
+ "render": {
+ "en": "The reference number of this speed camera is {ref}"
+ },
+ "condition": "ref~*"
+ }
+ ],
+ "presets": [
+ {
+ "tags": [
+ "highway=speed_camera"
+ ],
+ "title": {
+ "en": "a speed camera"
+ },
+ "preciseInput": {
+ "preferredBackground": "photo",
+ "maxSnapDistance": 10,
+ "snapToLayer": [
+ "maxspeed"
+ ]
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "icon": "square:white;./assets/layers/speed_camera/speed_camera.svg",
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ],
+ "units": [
+ {
+ "appliesToKey": [
+ "maxspeed"
+ ],
+ "applicableUnits": [
+ {
+ "#": "km/h is the default for a maxspeed; should be empty string",
+ "canonicalDenomination": "",
+ "alternativeDenomination": [
+ "km/u",
+ "kmh",
+ "kph"
+ ],
+ "human": {
+ "en": "kilometers/hour",
+ "ca": "quilòmetres/hora",
+ "es": "kilómetros/hora",
+ "nl": "kilometers/uur",
+ "de": "Kilometer/Stunde"
+ },
+ "humanShort": {
+ "en": "km/h",
+ "ca": "km/h",
+ "es": "km/h",
+ "nl": "km/u",
+ "de": "km/h"
+ }
+ },
+ {
+ "canonicalDenomination": "mph",
+ "useIfNoUnitGiven": [
+ "gb",
+ "us"
+ ],
+ "alternativeDenomination": [
+ "m/u",
+ "mh",
+ "m/ph"
+ ],
+ "human": {
+ "en": "miles/hour",
+ "ca": "milles/hora",
+ "es": "millas/hora",
+ "nl": "miles/uur",
+ "de": "Meilen/Stunde"
+ },
+ "humanShort": {
+ "en": "mph",
+ "ca": "mph",
+ "es": "mph",
+ "nl": "mph",
+ "de": "mph"
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/assets/layers/speed_camera/speed_camera.svg b/assets/layers/speed_camera/speed_camera.svg
new file mode 100644
index 0000000000..3d4755a264
--- /dev/null
+++ b/assets/layers/speed_camera/speed_camera.svg
@@ -0,0 +1,20 @@
+
+
diff --git a/assets/layers/speed_display/license_info.json b/assets/layers/speed_display/license_info.json
new file mode 100644
index 0000000000..04cf544188
--- /dev/null
+++ b/assets/layers/speed_display/license_info.json
@@ -0,0 +1,12 @@
+[
+ {
+ "path": "speed_display.svg",
+ "license": "CC0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": [
+ "https://www.keshikan.net/fonts-e.html"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/speed_display/speed_display.json b/assets/layers/speed_display/speed_display.json
new file mode 100644
index 0000000000..4c2b1fa488
--- /dev/null
+++ b/assets/layers/speed_display/speed_display.json
@@ -0,0 +1,132 @@
+{
+ "id": "speed_display",
+ "name": {
+ "en": "Speed Display"
+ },
+ "description": {
+ "en": "Layer showing speed displays that alert drivers of their speed."
+ },
+ "title": {
+ "render": {
+ "en": "Speed Display"
+ }
+ },
+ "minzoom": 12,
+ "source": {
+ "osmTags": "highway=speed_display"
+ },
+ "tagRenderings": [
+ {
+ "id": "maxspeed",
+ "question": {
+ "en": "What is the maximum speed allowed at this speed display?"
+ },
+ "freeform": {
+ "key": "maxspeed",
+ "type": "pnat",
+ "placeholder": {
+ "en": "Speed allowed at speed display"
+ }
+ },
+ "render": {
+ "en": "The maximum speed allowed at this speed display is {canonical(maxspeed)}"
+ }
+ },
+ {
+ "id": "inscription",
+ "question": {
+ "en": "What is the text on this speed display?"
+ },
+ "freeform": {
+ "key": "inscription",
+ "type": "string",
+ "placeholder": {
+ "en": "Text on speed display (e.g. 'Your speed')"
+ }
+ },
+ "render": {
+ "en": "The text on this speed display is {inscription}"
+ }
+ }
+ ],
+ "presets": [
+ {
+ "title": {
+ "en": "a speed display"
+ },
+ "tags": [
+ "highway=speed_display"
+ ],
+ "preciseInput": {
+ "preferredBackground": "photo"
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "icon": "./assets/layers/speed_display/speed_display.svg"
+ }
+ ],
+ "units": [
+ {
+ "appliesToKey": [
+ "maxspeed"
+ ],
+ "applicableUnits": [
+ {
+ "#": "km/h is the default for a maxspeed; should be empty string",
+ "canonicalDenomination": "",
+ "alternativeDenomination": [
+ "km/u",
+ "kmh",
+ "kph"
+ ],
+ "human": {
+ "en": "kilometers/hour",
+ "ca": "quilòmetres/hora",
+ "es": "kilómetros/hora",
+ "nl": "kilometers/uur",
+ "de": "Kilometer/Stunde"
+ },
+ "humanShort": {
+ "en": "km/h",
+ "ca": "km/h",
+ "es": "km/h",
+ "nl": "km/u",
+ "de": "km/h"
+ }
+ },
+ {
+ "canonicalDenomination": "mph",
+ "useIfNoUnitGiven": [
+ "gb",
+ "us"
+ ],
+ "alternativeDenomination": [
+ "m/u",
+ "mh",
+ "m/ph"
+ ],
+ "human": {
+ "en": "miles/hour",
+ "ca": "milles/hora",
+ "es": "millas/hora",
+ "nl": "miles/uur",
+ "de": "Meilen/Stunde"
+ },
+ "humanShort": {
+ "en": "mph",
+ "ca": "mph",
+ "es": "mph",
+ "nl": "mph",
+ "de": "mph"
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/assets/layers/speed_display/speed_display.svg b/assets/layers/speed_display/speed_display.svg
new file mode 100644
index 0000000000..45546f684b
--- /dev/null
+++ b/assets/layers/speed_display/speed_display.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/themes/maxspeed/maxspeed.json b/assets/themes/maxspeed/maxspeed.json
index 23114c8fbb..9d3e18d768 100644
--- a/assets/themes/maxspeed/maxspeed.json
+++ b/assets/themes/maxspeed/maxspeed.json
@@ -28,6 +28,8 @@
"startZoom": 1,
"widenFactor": 0.01,
"layers": [
- "maxspeed"
+ "maxspeed",
+ "speed_camera",
+ "speed_display"
]
-}
\ No newline at end of file
+}