diff --git a/networkd/tasks/vlan.yml b/networkd/tasks/vlan.yml
index b8f6d15a4bd2a8c3b61ef903cd81ef2a82c13968..093acbf628430961894406720e57184ff7582cb2 100644
--- a/networkd/tasks/vlan.yml
+++ b/networkd/tasks/vlan.yml
@@ -34,7 +34,7 @@
     group: root
     mode: '0644'
   with_items: "{{ vlan.vlans }}"
-  when: item.bridge
+  when: item.bridge | default(False)
   notify:
     - restart networkd
 - name: ensure bridge networks are configured
@@ -45,6 +45,6 @@
     group: root
     mode: '0644'
   with_items: "{{ vlan.vlans }}"
-  when: item.bridge
+  when: item.bridge | default(False)
   notify:
     - restart networkd
diff --git a/networkd/templates/20-wired-routed.network.j2 b/networkd/templates/20-wired-routed.network.j2
index 6161bd248d2bec5b0f632da75947eced71a9dc96..16446cfe732035c83f0ac06f04fd15f8b210936a 100644
--- a/networkd/templates/20-wired-routed.network.j2
+++ b/networkd/templates/20-wired-routed.network.j2
@@ -22,6 +22,9 @@ IPForward=yes
 {% for key, value in (network.settings|default({})).items() %}
 {{ key }}={{ value }}
 {% endfor %}
+{% for vlan in network.vlans|default([]) %}
+VLAN=vl-{{ vlan.name }}
+{% endfor %}
 
 {% for route in network.routes|default([{'gateway': network.gateway}]) %}
 [Route]
diff --git a/networkd/templates/20-wired-vlan.network.j2 b/networkd/templates/20-wired-vlan.network.j2
index 4b7052153a9bae40c7c8ddcdfa1065e05c218e6a..8d0f6719ac7e34888dd27e8f4549e81510d43a1a 100644
--- a/networkd/templates/20-wired-vlan.network.j2
+++ b/networkd/templates/20-wired-vlan.network.j2
@@ -1,3 +1,7 @@
+{% if item.1.addresses | default(False) %}
+{% set network = item.1 %}
+{% include "20-wired-routed.network.j2" %}
+{% else %}
 [Match]
 Name={{ item.1.interface }}
 
@@ -9,3 +13,4 @@ BindCarrier={{ item.1.interface }}
 {% if networkd_ipfwd %}
 IPForward=yes
 {% endif %}
+{% endif %}
diff --git a/networkd/templates/vlan.network.j2 b/networkd/templates/vlan.network.j2
index 6b7c90f0c527a78b4175a1af7f280a205aae62cd..2875094b4167abdfadcf686d891a9febf2458f5d 100644
--- a/networkd/templates/vlan.network.j2
+++ b/networkd/templates/vlan.network.j2
@@ -1,4 +1,4 @@
-{% if item.bridge %}
+{% if item.bridge | default(False) %}
 [Match]
 Name=vl-{{ item.name }}
 
@@ -10,7 +10,9 @@ Bridge=vmbr-{{ item.name }}
 	'addresses': item.addresses|default([item.address] if item.address is defined else []),
 	'nameservers': item.nameservers|default([]),
 	'routes': item.routes|default([{'gateway': item.gateway}] if item.gateway is defined else []),
-	'link_local_addressing': item.link_local_addressing|default(None)
+	'link_local_addressing': item.link_local_addressing|default(None),
+	'settings': item.settings|default({}),
+	'custom': item.custom|default([])
 	} %}
 {% include "20-wired-routed.network.j2" %}
 {% endif %}