diff --git a/networkd/defaults/main.yml b/networkd/defaults/main.yml
index 4db208748fb8a8a055c19731f25a36777749158c..38d6196259a22d27bcfe27acd32204f886ec1eb8 100644
--- a/networkd/defaults/main.yml
+++ b/networkd/defaults/main.yml
@@ -14,6 +14,7 @@
 #     address: '10.10.10.10/24'
 #     gateway: '10.10.10.1'
 #   - type: 'routed'
+#     identifier: 'file-name'
 #     interfaces:
 #       - 'eth0'
 #     addresses:
@@ -51,11 +52,16 @@
 #         name: transport
 #         bridge: true
 
-networkd_type: 'dhcp'  # if networkd not defined
 networkd_ipfwd: false  # works only globally anyway
 
 ### old style config follows, still supported
 
+# if networkd not defined
+networkd_type: 'dhcp'
+
+# for static and dhcp types only
+# networkd_interface: eth0
+
 # for static type only
 networkd_address: 10.10.10.10/24
 networkd_gateway: 10.10.10.1
diff --git a/networkd/tasks/main.yml b/networkd/tasks/main.yml
index e8e06d914959bb2d617bfbf4d688b5a50c173b6f..60ae00932f92f84b2b60f43ce21654f3c671f9e0 100644
--- a/networkd/tasks/main.yml
+++ b/networkd/tasks/main.yml
@@ -3,7 +3,7 @@
 - name: ensure networkd has a valid configuration
   template:
     src: "20-wired-{{ item.1.type }}.network.j2"
-    dest: /etc/systemd/network/{{ item.0 }}-wired.network
+    dest: "/etc/systemd/network/{{ item.0 }}-{{ item.1.identifier|default('wired') }}.network"
     owner: root
     group: root
     mode: '0644'
diff --git a/networkd/templates/20-wired-dhcp.network.j2 b/networkd/templates/20-wired-dhcp.network.j2
index a780e7dd48cff00d4afa8bb272a5629a8b758b6d..373769005fe787c3d897c0b2cd57920e4cb28d3d 100644
--- a/networkd/templates/20-wired-dhcp.network.j2
+++ b/networkd/templates/20-wired-dhcp.network.j2
@@ -1,8 +1,15 @@
 [Match]
-Name={{ item.1.interface|default(ansible_default_ipv4.interface) }}
+Name={{ item.1.interface|default(networkd_interface|default(ansible_default_ipv4.interface)) }}
 
 [Network]
 DHCP=ipv4
 {% if networkd_ipfwd %}
 IPForward=yes
 {% endif %}
+{% for custom in network.custom|default([]) %}
+
+[{{ custom.category }}]
+{% for key, value in custom.settings.items() %}
+{{ key }}={{ value }}
+{% endfor %}
+{% endfor %}
diff --git a/networkd/templates/20-wired-routed.network.j2 b/networkd/templates/20-wired-routed.network.j2
index 94e034056c6172c74b8094f53c5bbd7d4d76f6ee..7cb766dedb1d00022a9fd3cc33f4f4599c40feaf 100644
--- a/networkd/templates/20-wired-routed.network.j2
+++ b/networkd/templates/20-wired-routed.network.j2
@@ -15,6 +15,9 @@ DNS={{ server }}
 {% if networkd_ipfwd %}
 IPForward=yes
 {% endif %}
+{% for key, value in (network.settings|default({})).items() %}
+{{ key }}={{ value }}
+{% endfor %}
 {% endif %}
 
 {% for route in network.routes|default([{'gateway': network.gateway}]) %}
@@ -38,4 +41,14 @@ PreferredSource={{ route.source }}
 {% if route.metric is defined %}
 Metric={{ route.metric }}
 {% endif %}
+{% for key, value in (route.settings|default({})).items() %}
+{{ key }}={{ value }}
+{% endfor %}
+{% endfor %}
+{% for custom in network.custom|default([]) %}
+
+[{{ custom.category }}]
+{% for key, value in custom.settings.items() %}
+{{ key }}={{ value }}
+{% endfor %}
 {% endfor %}