diff --git a/files/dhcpd.conf b/files/dhcpd.conf
index 8681c92..13375a6 100644
--- a/files/dhcpd.conf
+++ b/files/dhcpd.conf
@@ -4,32 +4,48 @@
 omapi-port {{ server.omapi_port }};
 {% endif -%}
 
+{%- if server.ddns_updates is defined %}
+
+ddns-updates on;
+ddns-update-style interim;
+
+update-static-leases on;
+use-host-decl-names on;
+
+{#
+# Key from bind
+include "<%= @dnsupdatekey %>";
+<% @dnsdomain.each do |dom| -%>
+zone <%= dom %>. {
+  primary <%= @nameservers.first %>;
+  key <%= @dnskeyname%>;
+}
+#}
+
+{%- else -%}
+
 ddns-update-style {{ server.ddns_update_style|default('none') }};
 
-{%- if server.ddns_updates is defined %}
-ddns-updates {{ server.ddns_updates }};
-{%- endif -%}
+{%- endif %}
 
 {%- if server.update_static_leases is defined %}
 update-static-leases {{ server.update_static_leases }};
-{%- endif -%}
+{%- endif %}
 
 {%- if server.use_host_decl_names is defined %}
 use-host-decl-names {{ server.use_host_decl_names }};
-{{- "\n" }}
-{%- endif -%}
+{%- endif %}
 
-{%- if server.zones is defined -%}
-{%- for zone in server.dhcpd.zones|default({}) %}
-zone {{ zone.name }} {
+{%- for zone_name, zone in server.zone.iteritems() %}
+
+zone {{ zone_name }} {
   primary {{ zone.primary }};
   {%- if 'key' in zone %}
   key {{ zone.key|default('rndc-key') }};
   {%- endif %}
 }
-{{- "\n" }}
-{%- endfor -%}
-{%- endif %}
+
+{%- endfor %}
 
 default-lease-time {{ server.default_lease_time|default('600') }};
 max-lease-time {{ server.max_lease_time|default('7200') }};
@@ -50,36 +66,29 @@
 {{- "\n" }}
 {%- endif -%}
 
-{%- if server.allow is defined -%}
-  {%- for a in server.dhcpd.allow|default([]) %}
-allow {{ a }};
-  {%- endfor -%}
-{{ "\n" }}
-{%- endif -%}
+option domain-name "{{ server.domain_name }}";
+option domain-name-servers {{ server.name_servers|join( ', ') }};
 
-{%- if server.deny is defined -%}
-  {%- for d in server.dhcpd.deny|default([]) %}
-deny {{ d }};
-  {%- endfor -%}
-{{ "\n" }}
-{%- endif -%}
+allow booting;
+allow bootp;
 
-{%- if server.ignore is defined -%}
-  {%- for i in server.ignore|default([]) %}
-ignore {{ i }};
-  {%- endfor -%}
-{{ "\n" }}
-{%- endif -%}
+option fqdn.no-client-update    on;  # set the "O" and "S" flag bits
+option fqdn.rcode2            255;
+option pxegrub code 150 = text ;
 
-{%- set options = server.default_options|default([]) -%}
+{#
 
-{%- if server.dhcpd.options is defined -%}
-  {%- do options.extend(server.dhcpd.options) -%}
-{%- endif -%}
+<% if has_variable?( 'pxeserver' ) &&
+  has_variable?( 'pxefilename' ) &&
+  @pxeserver &&
+  @pxefilename -%>
+# PXE Handoff.
+next-server <%= @pxeserver %>;
+filename "<%= @pxefilename %>";
+<% end -%>
 
-{%- for o in options %}
-option {{ o }};
-{%- endfor -%}
-{%- set options = [] -%}
+#}
 
-{%- endif -%}
+include "{{ server.config.dir }}/dhcpd.hosts";
+
+{%- endif -%}
\ No newline at end of file
