diff --git a/files/defaults.Debian b/files/defaults.Debian
new file mode 100644
index 0000000..186270b
--- /dev/null
+++ b/files/defaults.Debian
@@ -0,0 +1,13 @@
+# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
+#DHCPD_CONF=/etc/dhcp/dhcpd.conf
+
+# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
+#DHCPD_PID=/var/run/dhcpd.pid
+
+# Additional options to start dhcpd with.
+# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
+#OPTIONS=""
+
+# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
+# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
+INTERFACES="{% for interface in salt['pillar.get']('isc_dhcp:server:interfaces', []) %}{{ interface.name }}{% if not loop.last %} {% endif %}{% endfor %}"
\ No newline at end of file
diff --git a/files/dhcpd.conf b/files/dhcpd.conf
new file mode 100644
index 0000000..2dc1836
--- /dev/null
+++ b/files/dhcpd.conf
@@ -0,0 +1,103 @@
+{%- from "isc_dhcp/map.jinja" import server with context %}
+
+{%- if server.omapi_port is defined -%}
+omapi-port {{ server.omapi_port }};
+{% endif -%}
+
+ddns-update-style {{ server.ddns_update_style|default('none') }};
+
+{%- if server.ddns_updates is defined %}
+ddns-updates {{ server.ddns_updates }};
+{%- endif -%}
+
+{%- if server.update_static_leases is defined %}
+update-static-leases {{ server.update_static_leases }};
+{%- endif -%}
+
+{%- if server.use_host_decl_names is defined %}
+use-host-decl-names {{ server.use_host_decl_names }};
+{{- "\n" }}
+{%- endif -%}
+
+{%- if server.zones is defined -%}
+{%- for zone in server.dhcpd.zones|default({}) %}
+zone {{ zone.name }} {
+  primary {{ zone.primary }};
+  {%- if 'key' in zone %}
+  key {{ zone.key|default('rndc-key') }};
+  {%- endif %}
+}
+{{- "\n" }}
+{%- endfor -%}
+{%- endif %}
+
+default-lease-time {{ server.default_lease_time|default('600') }};
+max-lease-time {{ server.max_lease_time|default('7200') }};
+
+{%- if server.authoritative|default(False) %}
+authoritative;
+{%- endif %}
+
+log-facility {{ server.logging.facility|default('local7') }};
+
+{%- if server.next_server is defined -%}
+{{ "\n" }}
+next-server {{ server.next_server }};
+{%- endif -%}
+
+{%- if server.filename is defined %}
+filename "{{ server.filename }}";
+{{- "\n" }}
+{%- endif -%}
+
+{%- if server.allow is defined -%}
+  {%- for a in server.dhcpd.allow|default([]) %}
+allow {{ a }};
+  {%- endfor -%}
+{{ "\n" }}
+{%- endif -%}
+
+{%- if server.deny is defined -%}
+  {%- for d in server.dhcpd.deny|default([]) %}
+deny {{ d }};
+  {%- endfor -%}
+{{ "\n" }}
+{%- endif -%}
+
+{%- if server.ignore is defined -%}
+  {%- for i in server.ignore|default([]) %}
+ignore {{ i }};
+  {%- endfor -%}
+{{ "\n" }}
+{%- endif -%}
+
+{%- set options = server.dhcpd.default_options|default([]) -%}
+{%- if server.dhcpd.options is defined -%}
+  {%- do options.extend(server.dhcpd.options) -%}
+{%- endif -%}
+
+{%- for o in options %}
+option {{ o }};
+{%- endfor -%}
+{%- set options = [] -%}
+
+{%- if server.default_includes is defined -%}
+  {%- set includes = server.dhcpd.default_includes -%}
+{%- endif -%}
+{%- if server.dhcpd.includes is defined -%}
+  {%- do includes.extend(server.dhcpd.includes) -%}
+{%- endif -%}
+{{ "\n" }}
+
+{%- for i in includes %}
+include "{{ i }}";
+{%- endfor -%}
+{%- set includes = [] -%}
+
+{%- if server.dhcpd.file_append is defined %}
+
+{{ server.dhcpd.file_append }}
+
+{%- endif -%}
+
+{%- endif -%}
