diff --git a/assets/layers/route_marker/license_info.json b/assets/layers/route_marker/license_info.json
new file mode 100644
index 0000000000..e8f5acb073
--- /dev/null
+++ b/assets/layers/route_marker/license_info.json
@@ -0,0 +1,10 @@
+[
+  {
+    "path": "route_marker.svg",
+    "license": "CC0-1.0",
+    "authors": [
+      "Robin van der Linde"
+    ],
+    "sources": []
+  }
+]
\ No newline at end of file
diff --git a/assets/layers/route_marker/route_marker.json b/assets/layers/route_marker/route_marker.json
new file mode 100644
index 0000000000..b30833a93c
--- /dev/null
+++ b/assets/layers/route_marker/route_marker.json
@@ -0,0 +1,93 @@
+{
+  "id": "route_marker",
+  "name": {
+    "en": "Route markers"
+  },
+  "description": {
+    "en": "Route markers are small markers often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route."
+  },
+  "source": {
+    "osmTags": "information=route_marker"
+  },
+  "minzoom": 14,
+  "presets": [
+    {
+      "title": {
+        "en": "a route marker"
+      },
+      "tags": [
+        "tourism=information",
+        "information=route_marker"
+      ],
+      "description": {
+        "en": "A route marker is a small marker often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route."
+      }
+    }
+  ],
+  "deletion": true,
+  "allowMove": {
+    "enableImproveAccuracy": true,
+    "enableRelocation": false
+  },
+  "title": {
+    "render": {
+      "en": "Route marker"
+    }
+  },
+  "mapRendering": [
+    {
+      "location": [
+        "centroid",
+        "point"
+      ],
+      "icon": "./assets/layers/route_marker/route_marker.svg"
+    }
+  ],
+  "tagRenderings": [
+    "images",
+    {
+      "id": "type",
+      "question": {
+        "en": "For what kind of route is this marker?"
+      },
+      "multiAnswer": true,
+      "mappings": [
+        {
+          "if": "bicycle=yes",
+          "ifnot": "biycle=no",
+          "then": {
+            "en": "This is a route marker for a bicycle route."
+          }
+        },
+        {
+          "if": "hiking=yes",
+          "ifnot": "hiking=no",
+          "then": {
+            "en": "This is a route marker for a hiking route."
+          }
+        },
+        {
+          "if": "mtb=yes",
+          "ifnot": "mtb=no",
+          "then": {
+            "en": "This is a route marker for a mountain bike route."
+          }
+        },
+        {
+          "if": "horse=yes",
+          "ifnot": "horse=no",
+          "then": {
+            "en": "This is a route marker for a horse riding route."
+          }
+        },
+        {
+          "if": "ski=yes",
+          "ifnot": "ski=no",
+          "then": {
+            "en": "This is a route marker for a ski route."
+          }
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/assets/layers/route_marker/route_marker.svg b/assets/layers/route_marker/route_marker.svg
new file mode 100644
index 0000000000..7dd5e4a1bd
--- /dev/null
+++ b/assets/layers/route_marker/route_marker.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/layers/route_marker/route_marker.svg.license b/assets/layers/route_marker/route_marker.svg.license
new file mode 100644
index 0000000000..75299f8845
--- /dev/null
+++ b/assets/layers/route_marker/route_marker.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/vending_machine/vending_machine.json b/assets/layers/vending_machine/vending_machine.json
index 8bb4e740b0..ca193086e2 100644
--- a/assets/layers/vending_machine/vending_machine.json
+++ b/assets/layers/vending_machine/vending_machine.json
@@ -525,15 +525,15 @@
           },
           {
             "if": "vending=meat",
-            "then": "./assets/layers/id_presets/temaki-meat.svg"
+            "then": "circle:white;./assets/layers/id_presets/temaki-meat.svg"
           },
           {
             "if": "vending=fruit",
-            "then": "./assets/layers/vending_machine/fruits.svg"
+            "then": "circle:white;./assets/layers/vending_machine/fruits.svg"
           },
           {
             "if": "vending=strawberries",
-            "then": "./assets/layers/vending_machine/strawberry.svg"
+            "then": "circle:white;./assets/layers/vending_machine/strawberry.svg"
           },
           {
             "if": "vending=flowers",
@@ -678,7 +678,7 @@
               "vending~.*meat.*"
             ]
           },
-          "then": "./assets/layers/id_presets/temaki-meat.svg"
+          "then": "circle:white;./assets/layers/id_presets/temaki-meat.svg"
         },
         {
           "if": {
@@ -687,7 +687,7 @@
               "vending~.*fruit.*"
             ]
           },
-          "then": "./assets/layers/vending_machine/fruits.svg"
+          "then": "circle:white;./assets/layers/vending_machine/fruits.svg"
         },
         {
           "if": {
@@ -696,7 +696,7 @@
               "vending~.*strawberries.*"
             ]
           },
-          "then": "./assets/layers/vending_machine/strawberry.svg"
+          "then": "circle:white;./assets/layers/vending_machine/strawberry.svg"
         },
         {
           "if": {
diff --git a/assets/svg/cross.svg.license b/assets/svg/cross.svg.license
index 2452bee1e8..ed02883002 100644
--- a/assets/svg/cross.svg.license
+++ b/assets/svg/cross.svg.license
@@ -1,2 +1,2 @@
 SPDX-FileCopyrightText: Pieter Vander Vennet
-SPDX-License-Identifier: CC0
\ No newline at end of file
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/cyclenodes/cyclenodes.json b/assets/themes/cyclenodes/cyclenodes.json
index 5789a55cc5..5d208d1c72 100644
--- a/assets/themes/cyclenodes/cyclenodes.json
+++ b/assets/themes/cyclenodes/cyclenodes.json
@@ -27,19 +27,14 @@
   "startLat": 51.755515,
   "startLon": 14.327545,
   "startZoom": 11,
-  "widenFactor": 0.05,
-  "clustering": {
-    "maxZoom": 11,
-    "minNeededElements": 1000000
-  },
   "layers": [
     {
       "id": "node2node",
       "name": {
-        "en": "node to node links",
+        "en": "Node to node links",
         "de": "Knotenpunktverbindungen",
         "es": "enlaces nodo a nodo",
-        "nl": "verbindingen van node naar node",
+        "nl": "Verbindingen van node naar node",
         "fr": "liens noeud à noeud",
         "ca": "enllaços node a node",
         "cs": "propojení mezi uzly",
@@ -57,10 +52,10 @@
       "minzoom": 12,
       "title": {
         "render": {
-          "en": "node to node link",
+          "en": "Node to node link",
           "de": "Knotenpunktverbindung",
           "es": "enlace nodo a nodo",
-          "nl": "node-naar-node verbinding",
+          "nl": "Node-naar-node verbinding",
           "fr": "lien noeud à noeud",
           "ca": "Enllaç node a node",
           "cs": "propojení mezi uzly",
@@ -70,10 +65,10 @@
           {
             "if": "ref~*",
             "then": {
-              "en": "node to node link {ref}",
+              "en": "Node to node link {ref}",
               "de": "Knotenpunktverbindung {ref}",
               "es": "enlace nodo a nodo {ref}",
-              "nl": "node-naar-node verbinding {ref}",
+              "nl": "Node-naar-node verbinding {ref}",
               "fr": "lien noeud à noeud {ref}",
               "ca": "Enllaç node a node {ref}",
               "cs": "propojení mezi uzly {ref}",
@@ -90,36 +85,29 @@
       ],
       "tagRenderings": [
         {
-          "question": {
-            "en": "When was this node to node link last surveyed?",
-            "de": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
-            "es": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
-            "nl": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
-            "fr": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
-            "ca": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
-            "cs": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
-            "pl": "Kiedy ostatnio badano to połączenie węzła z węzłem?"
-          },
-          "render": {
-            "en": "This node to node link was last surveyed on {survey:date}",
-            "de": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft",
-            "es": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}",
-            "nl": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}",
-            "fr": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}",
-            "ca": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}",
-            "cs": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}",
-            "pl": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
-          },
-          "freeform": {
-            "key": "survey:date",
-            "type": "date"
-          },
-          "mappings": [
-            {
-              "if": "survey:date:={_now:date}",
-              "then": "Surveyed today!"
+          "builtin": "survey_date",
+          "override": {
+            "question": {
+              "en": "When was this node to node link last surveyed?",
+              "de": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
+              "es": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
+              "nl": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
+              "fr": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
+              "ca": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
+              "cs": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
+              "pl": "Kiedy ostatnio badano to połączenie węzła z węzłem?"
+            },
+            "render": {
+              "en": "This node to node link was last surveyed on {survey:date}",
+              "de": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft",
+              "es": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}",
+              "nl": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}",
+              "fr": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}",
+              "ca": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}",
+              "cs": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}",
+              "pl": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
             }
-          ],
+          },
           "id": "node2node-survey:date"
         },
         "export_as_gpx"
@@ -128,12 +116,12 @@
     {
       "id": "node",
       "name": {
-        "en": "nodes",
+        "en": "Nodes",
         "de": "Knotenpunkte",
         "ca": "nodes",
         "es": "nodos",
         "nb_NO": "noder",
-        "nl": "knooppunten",
+        "nl": "Knooppunten",
         "fr": "noeuds",
         "pa_PK": "نوڈ",
         "cs": "uzly",
@@ -157,11 +145,11 @@
             "mappings": [
               {
                 "if": "rcn_ref~*",
-                "then": "
{rcn_ref}
"
+                "then": "{rcn_ref}
"
               },
               {
                 "if": "rcn_ref=",
-                "then": "?
"
+                "then": "?
"
               }
             ]
           }
@@ -170,11 +158,11 @@
       "minzoom": 12,
       "title": {
         "render": {
-          "en": "cycle node {rcn_ref}",
+          "en": "Cycle node {rcn_ref}",
           "de": "Knotenpunkt {rcn_ref}",
           "es": "nodo ciclista {rcn_ref}",
           "nb_NO": "sykkelnode {rcn_ref}",
-          "nl": "fietsknooppunt {rcn_ref}",
+          "nl": "Fietsknooppunt {rcn_ref}",
           "fr": "nœud cycliste {rcn_ref}",
           "ca": "node ciclista {rcn_ref}",
           "cs": "uzel cyklu {rcn_ref}",
@@ -183,36 +171,48 @@
       },
       "tagRenderings": [
         {
+          "id": "node-rxn_ref",
           "question": {
-            "en": "When was this cycle node last surveyed?",
-            "de": "Wann wurde dieser Fahrradknotenpunkt zuletzt überprüft?",
-            "es": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
-            "nl": "Wanneer is dit fietsknooppunt voor het laatst gecontroleerd?",
-            "fr": "Quand ce nœud cyclable a-t-il été vérifié sur le terrain pour la dernière fois ?",
-            "ca": "Quan va ser sondejat aquest node ciclista per última vegada?",
-            "cs": "Kdy byl tento uzel cyklu naposledy zkontrolován?",
-            "pl": "Kiedy ostatni raz badano ten węzeł rowerowy?"
-          },
-          "render": {
-            "en": "This cycle node was last surveyed on {survey:date}",
-            "de": "Dieser Fahrradknoten wurde zuletzt überprüft am {survey:date}",
-            "es": "Este nodo ciclista se sondeó por última vez el {survey:date}",
-            "nl": "Dit fietsknooppunt is voor het laatst gecontroleerd op {survey:date}",
-            "fr": "Ce nœud cycliste a été verifié pour la dernière fois le {survey:date}",
-            "ca": "Aquest node ciclista es va sondejar per última vegada el {survey:date}",
-            "cs": "Tento uzel cyklu byl naposledy zkontrolován dne {survey:date}",
-            "pl": "Ten węzeł rowerowy był ostatnio badany w dniu {survey:date}"
+            "en": "What is the reference number of this cycling node?",
+            "nl": "Wat is het referentienummer van dit fietsknooppunt?"
           },
           "freeform": {
-            "key": "survey:date",
-            "type": "date"
-          },
-          "mappings": [
-            {
-              "if": "survey:date:={_now:date}",
-              "then": "Surveyed today!"
+            "key": "rcn_ref",
+            "type": "int",
+            "placeholder": {
+              "en": "e.g. 1",
+              "nl": "bijv. 1"
             }
-          ],
+          },
+          "render": {
+            "en": "This cycling node has reference number {rcn_ref}",
+            "nl": "Dit fietsknooppunt heeft referentienummer {rcn_ref}"
+          }
+        },
+        {
+          "builtin": "survey_date",
+          "override": {
+            "question": {
+              "en": "When was this cycle node last surveyed?",
+              "de": "Wann wurde dieser Fahrradknotenpunkt zuletzt überprüft?",
+              "es": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
+              "nl": "Wanneer is dit fietsknooppunt voor het laatst gecontroleerd?",
+              "fr": "Quand ce nœud cyclable a-t-il été vérifié sur le terrain pour la dernière fois ?",
+              "ca": "Quan va ser sondejat aquest node ciclista per última vegada?",
+              "cs": "Kdy byl tento uzel cyklu naposledy zkontrolován?",
+              "pl": "Kiedy ostatni raz badano ten węzeł rowerowy?"
+            },
+            "render": {
+              "en": "This cycle node was last surveyed on {survey:date}",
+              "de": "Dieser Fahrradknoten wurde zuletzt überprüft am {survey:date}",
+              "es": "Este nodo ciclista se sondeó por última vez el {survey:date}",
+              "nl": "Dit fietsknooppunt is voor het laatst gecontroleerd op {survey:date}",
+              "fr": "Ce nœud cycliste a été verifié pour la dernière fois le {survey:date}",
+              "ca": "Aquest node ciclista es va sondejar per última vegada el {survey:date}",
+              "cs": "Tento uzel cyklu byl naposledy zkontrolován dne {survey:date}",
+              "pl": "Ten węzeł rowerowy był ostatnio badany w dniu {survey:date}"
+            }
+          },
           "id": "node-survey:date"
         },
         {
@@ -238,12 +238,70 @@
           },
           "freeform": {
             "key": "expected_rcn_route_relations",
-            "type": "int"
+            "type": "int",
+            "placeholder": {
+              "en": "e.g. 3",
+              "nl": "bijv. 3"
+            }
           },
           "id": "node-expected_rcn_route_relations"
         },
         "images"
+      ],
+      "presets": [
+        {
+          "tags": [
+            "rcn_ref=?",
+            "network:type=node_network"
+          ],
+          "title": {
+            "en": "a cycling node",
+            "nl": "een fietsknooppunt"
+          },
+          "snapToLayer": [
+            "cycleways_and_roads"
+          ]
+        }
       ]
+    },
+    {
+      "builtin": [
+        "guidepost"
+      ],
+      "override": {
+        "minzoom": 16
+      }
+    },
+    {
+      "builtin": "route_marker",
+      "override": {
+        "minzoom": 16,
+        "mapRendering": [
+          {
+            "icon": "./assets/themes/cyclenodes/route_marker.svg"
+          }
+        ],
+        "presets": [
+          {
+            "tags": [
+              "tourism=information",
+              "information=route_marker",
+              "network:type=node_network",
+              "bicycle=yes"
+            ],
+            "title": {
+              "en": "a route marker for a node to node link"
+            }
+          }
+        ]
+      }
+    },
+    {
+      "builtin": "cycleways_and_roads",
+      "override": {
+        "name": null,
+        "shownByDefault": false
+      }
     }
   ],
   "credits": "Sebastian Kürten"
diff --git a/assets/themes/cyclenodes/license_info.json b/assets/themes/cyclenodes/license_info.json
index 469e824d72..faf7743b74 100644
--- a/assets/themes/cyclenodes/license_info.json
+++ b/assets/themes/cyclenodes/license_info.json
@@ -8,5 +8,16 @@
     "sources": [
       "https://github.com/mobanisto/MapComplete/commit/1aeb1fdb5b09908d67907f3c816152bfebfdcc79"
     ]
+  },
+  {
+    "path": "route_marker.svg",
+    "license": "CC0-1.0",
+    "authors": [
+      "Robin van der Linde",
+      "MarianSigler"
+    ],
+    "sources": [
+      "https://commons.wikimedia.org/wiki/File:Sinnbild_Radfahrer,_StVO_1992.svg"
+    ]
   }
 ]
\ No newline at end of file
diff --git a/assets/themes/cyclenodes/logo.svg b/assets/themes/cyclenodes/logo.svg
index 6a860858af..3d44d5d964 100644
--- a/assets/themes/cyclenodes/logo.svg
+++ b/assets/themes/cyclenodes/logo.svg
@@ -15,13 +15,13 @@
   
   
     
-    
-    
-    
+    
+    
+    
     
     
       
       
     
   
-
\ No newline at end of file
+
diff --git a/assets/themes/cyclenodes/route_marker.svg b/assets/themes/cyclenodes/route_marker.svg
new file mode 100644
index 0000000000..c5c49be16f
--- /dev/null
+++ b/assets/themes/cyclenodes/route_marker.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/themes/cyclenodes/route_marker.svg.license b/assets/themes/cyclenodes/route_marker.svg.license
new file mode 100644
index 0000000000..234c11e02e
--- /dev/null
+++ b/assets/themes/cyclenodes/route_marker.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde; MarianSigler
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/license_info.json b/assets/themes/walkingnodes/license_info.json
new file mode 100644
index 0000000000..ab0fef0f1d
--- /dev/null
+++ b/assets/themes/walkingnodes/license_info.json
@@ -0,0 +1,20 @@
+[
+  {
+    "path": "logo.svg",
+    "license": "GPL-3.0-only",
+    "authors": [
+      "sebkur"
+    ],
+    "sources": [
+      "https://github.com/mobanisto/MapComplete/commit/1aeb1fdb5b09908d67907f3c816152bfebfdcc79"
+    ]
+  },
+  {
+    "path": "route_marker.svg",
+    "license": "CC0-1.0",
+    "authors": [
+      "Robin van der Linde"
+    ],
+    "sources": []
+  }
+]
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/logo.svg b/assets/themes/walkingnodes/logo.svg
new file mode 100644
index 0000000000..b685930769
--- /dev/null
+++ b/assets/themes/walkingnodes/logo.svg
@@ -0,0 +1,27 @@
+
+
diff --git a/assets/themes/walkingnodes/logo.svg.license b/assets/themes/walkingnodes/logo.svg.license
new file mode 100644
index 0000000000..3176633b82
--- /dev/null
+++ b/assets/themes/walkingnodes/logo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: sebkur
+SPDX-License-Identifier: GPL-3.0-only
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/route_marker.svg b/assets/themes/walkingnodes/route_marker.svg
new file mode 100644
index 0000000000..4679b92857
--- /dev/null
+++ b/assets/themes/walkingnodes/route_marker.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/themes/walkingnodes/route_marker.svg.license b/assets/themes/walkingnodes/route_marker.svg.license
new file mode 100644
index 0000000000..75299f8845
--- /dev/null
+++ b/assets/themes/walkingnodes/route_marker.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/walkingnodes.json b/assets/themes/walkingnodes/walkingnodes.json
new file mode 100644
index 0000000000..b433bc3fa4
--- /dev/null
+++ b/assets/themes/walkingnodes/walkingnodes.json
@@ -0,0 +1,262 @@
+{
+  "id": "walkingnodes",
+  "title": {
+    "en": "Walking Node Networks",
+    "nl": "Wandelknooppuntnetwerken"
+  },
+  "description": {
+    "en": "This map shows walking node networks and allows you to add new nodes easily",
+    "nl": "Deze kaart toont wandelknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen"
+  },
+  "icon": "./assets/themes/walkingnodes/logo.svg",
+  "hideFromOverview": true,
+  "startLat": 51.755515,
+  "startLon": 14.327545,
+  "startZoom": 11,
+  "layers": [
+    {
+      "id": "node2node",
+      "name": {
+        "en": "Node to node links",
+        "de": "Knotenpunktverbindungen",
+        "es": "enlaces nodo a nodo",
+        "nl": "Verbindingen van node naar node",
+        "fr": "liens noeud à noeud",
+        "ca": "enllaços node a node",
+        "cs": "propojení mezi uzly",
+        "pl": "łącza węzeł do węzła"
+      },
+      "source": {
+        "osmTags": {
+          "and": [
+            "network=rwn",
+            "network:type=node_network",
+            "route=foot"
+          ]
+        }
+      },
+      "minzoom": 12,
+      "title": {
+        "render": {
+          "en": "Node to node link",
+          "de": "Knotenpunktverbindung",
+          "es": "enlace nodo a nodo",
+          "nl": "Node-naar-node verbinding",
+          "fr": "lien noeud à noeud",
+          "ca": "Enllaç node a node",
+          "cs": "propojení mezi uzly",
+          "pl": "połączenie węzła z węzłem"
+        },
+        "mappings": [
+          {
+            "if": "ref~*",
+            "then": {
+              "en": "node to node link {ref}",
+              "de": "Knotenpunktverbindung {ref}",
+              "es": "enlace nodo a nodo {ref}",
+              "nl": "node-naar-node verbinding {ref}",
+              "fr": "lien noeud à noeud {ref}",
+              "ca": "Enllaç node a node {ref}",
+              "cs": "propojení mezi uzly {ref}",
+              "pl": "połączenie węzła z węzłem {ref}"
+            }
+          }
+        ]
+      },
+      "mapRendering": [
+        {
+          "width": "4",
+          "color": "#452b29"
+        }
+      ],
+      "tagRenderings": [
+        {
+          "builtin": "survey_date",
+          "override": {
+            "question": {
+              "en": "When was this node to node link last surveyed?",
+              "de": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
+              "es": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
+              "nl": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
+              "fr": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
+              "ca": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
+              "cs": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
+              "pl": "Kiedy ostatnio badano to połączenie węzła z węzłem?"
+            },
+            "render": {
+              "en": "This node to node link was last surveyed on {survey:date}",
+              "de": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft",
+              "es": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}",
+              "nl": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}",
+              "fr": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}",
+              "ca": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}",
+              "cs": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}",
+              "pl": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
+            }
+          },
+          "id": "node2node-survey:date"
+        },
+        "export_as_gpx"
+      ]
+    },
+    {
+      "id": "node",
+      "name": {
+        "en": "Nodes",
+        "de": "Knotenpunkte",
+        "ca": "nodes",
+        "es": "nodos",
+        "nb_NO": "noder",
+        "nl": "Knooppunten",
+        "fr": "noeuds",
+        "pa_PK": "نوڈ",
+        "cs": "uzly",
+        "eu": "nodoak",
+        "pl": "węzły"
+      },
+      "source": {
+        "osmTags": {
+          "and": [
+            "rwn_ref~*"
+          ]
+        }
+      },
+      "mapRendering": [
+        {
+          "location": [
+            "point",
+            "centroid"
+          ],
+          "label": {
+            "mappings": [
+              {
+                "if": "rwn_ref~*",
+                "then": "{rwn_ref}
"
+              },
+              {
+                "if": "rwn_ref=",
+                "then": "?
"
+              }
+            ]
+          }
+        }
+      ],
+      "minzoom": 12,
+      "title": {
+        "render": {
+          "en": "Walking node {rwn_ref}",
+          "nl": "Wandelknooppunt {rwn_ref}"
+        }
+      },
+      "tagRenderings": [
+        {
+          "id": "node-rwn_ref",
+          "question": {
+            "en": "What is the reference number of this walking node?",
+            "nl": "Wat is het referentienummer van dit wandelknooppunt?"
+          },
+          "freeform": {
+            "key": "rwn_ref",
+            "type": "int",
+            "placeholder": {
+              "en": "e.g. 1",
+              "nl": "bijv. 1"
+            }
+          },
+          "render": {
+            "en": "This walking node has reference number {rwn_ref}",
+            "nl": "Dit wandelknooppunt heeft referentienummer {rwn_ref}"
+          }
+        },
+        {
+          "builtin": "survey_date",
+          "override": {
+            "question": {
+              "en": "When was this walking node last surveyed?",
+              "nl": "Wanneer is dit wandelknooppunt het laatst gesurveyed?"
+            },
+            "render": {
+              "en": "This walking node was last surveyed on {survey:date}",
+              "nl": "Dit wandelknooppunt werd het laatst gesurveyed op {survey:date}"
+            }
+          }
+        },
+        {
+          "question": {
+            "en": "How many other walking nodes does this node link to?",
+            "nl": "Met hoeveel andere wandelknooppunten heeft dit knooppunt een verbinding?"
+          },
+          "render": {
+            "en": "This node links to {expected_rwn_route_relations} other walking nodes.",
+            "nl": "Dit knooppunt verbindt met {expected_rwn_route_relations} andere wandelknooppunten."
+          },
+          "freeform": {
+            "key": "expected_rwn_route_relations",
+            "type": "int",
+            "placeholder": {
+              "en": "e.g. 3",
+              "nl": "bijv. 3"
+            }
+          },
+          "id": "node-expected_rwn_route_relations"
+        },
+        "images"
+      ],
+      "presets": [
+        {
+          "tags": [
+            "rwn_ref=?",
+            "network:type=node_network"
+          ],
+          "title": {
+            "en": "a walking node",
+            "nl": "een wandelknooppunt"
+          },
+          "snapToLayer": [
+            "cycleways_and_roads"
+          ]
+        }
+      ]
+    },
+    {
+      "builtin": [
+        "guidepost"
+      ],
+      "override": {
+        "minzoom": 16
+      }
+    },
+    {
+      "builtin": "route_marker",
+      "override": {
+        "minzoom": 16,
+        "mapRendering": [
+          {
+            "icon": "./assets/themes/walkingnodes/route_marker.svg"
+          }
+        ],
+        "presets": [
+          {
+            "tags": [
+              "tourism=information",
+              "information=route_marker",
+              "network:type=node_network",
+              "hiking=yes"
+            ],
+            "title": {
+              "en": "a route marker for a node to node link"
+            }
+          }
+        ]
+      }
+    },
+    {
+      "builtin": "cycleways_and_roads",
+      "override": {
+        "name": null,
+        "shownByDefault": false
+      }
+    }
+  ],
+  "credits": "Sebastian Kürten"
+}
\ No newline at end of file
diff --git a/src/Models/ThemeConfig/LayerConfig.ts b/src/Models/ThemeConfig/LayerConfig.ts
index 13e0b84ef2..42feb0ebfe 100644
--- a/src/Models/ThemeConfig/LayerConfig.ts
+++ b/src/Models/ThemeConfig/LayerConfig.ts
@@ -229,7 +229,11 @@ export default class LayerConfig extends WithContextLoader {
                 maxSnapDistance: undefined,
             }
             if (pr["preciseInput"] !== undefined) {
-                throw "Layer " + this.id + " still uses the old 'preciseInput'-field"
+                throw (
+                    "Layer " +
+                    this.id +
+                    " still uses the old 'preciseInput'-field. For snapping to layers, use 'snapToLayer' instead"
+                )
             }
             if (pr.snapToLayer !== undefined) {
                 let snapToLayers: string[]
@@ -520,7 +524,7 @@ export default class LayerConfig extends WithContextLoader {
             neededTags = this.source.osmTags["and"]
         }
 
-        let tableRows = Utils.NoNull(
+        const tableRows = Utils.NoNull(
             this.tagRenderings
                 .map((tr) => tr.FreeformValues())
                 .map((values) => {