Index: resources/data/defaultpresets.xml
===================================================================
--- resources/data/defaultpresets.xml	(revision 19460)
+++ resources/data/defaultpresets.xml	(working copy)
@@ -1523,6 +1523,9 @@
         <item name="Advanced stop line" icon="presets/vehicle/asl.svg" type="node" preset_name_label="true">
             <link wiki="Tag:cycleway=asl" />
             <key key="cycleway" value="asl" />
+            <optional>
+                <combo key="direction" text="Direction" values="forward,backward" values_sort="false" />
+            </optional>
         </item> <!-- Advanced stop line -->
         <item name="Mini-Roundabout" icon="presets/vehicle/restriction/mini_roundabout_left.svg" type="node" preset_name_label="true">
             <link wiki="Tag:highway=mini_roundabout" />
Index: resources/data/validator/combinations.mapcss
===================================================================
--- resources/data/validator/combinations.mapcss	(revision 19460)
+++ resources/data/validator/combinations.mapcss	(working copy)
@@ -1137,3 +1137,16 @@
   assertNoMatch: "way highway=path segregated=yes cycleway:surface=needles footway:surface=paving_stones";
   assertNoMatch: "way highway=primary oneway=yes bicycle:lanes=no|designated|yes cycleway:lanes=|lane|no";
 }
+
+/* #21927 */
+way[!cycleway][!cycleway:right][!cycleway:left][!cycleway:both][!cycleway:lanes] > node[cycleway=asl] {
+  throwWarning: tr("{0} not on cycleway", "{0.tag}");
+  group: tr("suspicious tag combination");
+}
+
+way[/^oneway(:bicycle)?$/!~/^yes$/] > node[cycleway=asl][!direction],
+way[!oneway][!oneway:bicycle] > node[cycleway=asl][!direction] {
+  throwWarning: tr("{0} without {1}", "{0.tag}", "{1.key}");
+  group: tr("missing tag");
+  suggestAlternative: "{0.tag} + {1.key}=*";
+}
