diff --git a/puppet/dist/host/stentyst/etc/default/dhcp3-server b/puppet/dist/host/stentyst/etc/default/dhcp3-server
new file mode 100644
index 0000000000000000000000000000000000000000..4cc05f721e4b57de29a9955ff30fdc993d1ba59c
--- /dev/null
+++ b/puppet/dist/host/stentyst/etc/default/dhcp3-server
@@ -0,0 +1,11 @@
+# Defaults for dhcp initscript
+# sourced by /etc/init.d/dhcp
+# installed at /etc/default/dhcp3-server by the maintainer scripts
+
+#
+# This is a POSIX shell fragment
+#
+
+# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
+#	Separate multiple interfaces with spaces, e.g. "eth0 eth1".
+INTERFACES="eth1"
diff --git a/puppet/dist/host/stentyst/etc/dhcp3/dhcpd.conf b/puppet/dist/host/stentyst/etc/dhcp3/dhcpd.conf
new file mode 100644
index 0000000000000000000000000000000000000000..00af2e0dfad861f7cb223c35bac8ee0fa9ccc066
--- /dev/null
+++ b/puppet/dist/host/stentyst/etc/dhcp3/dhcpd.conf
@@ -0,0 +1,140 @@
+#
+# Sample configuration file for ISC dhcpd for Debian
+#
+# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
+#
+
+# The ddns-updates-style parameter controls whether or not the server will
+# attempt to do a DNS update when a lease is confirmed. We default to the
+# behavior of the version 2 packages ('none', since DHCP v2 didn't
+# have support for DDNS.)
+ddns-update-style none;
+
+# option definitions common to all supported networks...
+option domain-name "cederqvist lysator.liu.se";
+option domain-name-servers 192.168.10.2;
+option routers 192.168.10.2;
+option ntp-servers 192.168.10.2,
+	ntp1.sth.netnod.se,
+	ntp-s3-2.lysator.liu.se;
+
+default-lease-time 600;
+max-lease-time 7200;
+
+# If this DHCP server is the official DHCP server for the local
+# network, the authoritative directive should be uncommented.
+authoritative;
+
+# Use this to send dhcp log messages to a different log file (you also
+# have to hack syslog.conf to complete the redirection).
+#log-facility local7;
+
+# No service will be given on this subnet, but declaring it helps the 
+# DHCP server to understand the network topology.
+
+#subnet 10.152.187.0 netmask 255.255.255.0 {
+#}
+
+# This is a very basic subnet declaration.
+
+#subnet 10.254.239.0 netmask 255.255.255.224 {
+#  range 10.254.239.10 10.254.239.20;
+#  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
+#}
+
+# This declaration allows BOOTP clients to get dynamic addresses,
+# which we don't really recommend.
+
+#subnet 10.254.239.32 netmask 255.255.255.224 {
+#  range dynamic-bootp 10.254.239.40 10.254.239.60;
+#  option broadcast-address 10.254.239.31;
+#  option routers rtr-239-32-1.example.org;
+#}
+
+# A slightly different configuration for an internal subnet.
+#subnet 10.5.5.0 netmask 255.255.255.224 {
+#  range 10.5.5.26 10.5.5.30;
+#  option domain-name-servers ns1.internal.example.org;
+#  option domain-name "internal.example.org";
+#  option routers 10.5.5.1;
+#  option broadcast-address 10.5.5.31;
+#  default-lease-time 600;
+#  max-lease-time 7200;
+#}
+subnet 192.168.10.0 netmask 255.255.255.0 {
+    range 192.168.10.50 192.168.10.90;
+}
+
+# Hosts which require special configuration options can be listed in
+# host statements.   If no address is specified, the address will be
+# allocated dynamically (if possible), but the host-specific information
+# will still come from the host declaration.
+
+#host passacaglia {
+#  hardware ethernet 0:0:c0:5d:bd:95;
+#  filename "vmunix.passacaglia";
+#  server-name "toccata.fugue.com";
+#}
+
+# Fixed IP addresses can also be specified for hosts.   These addresses
+# should not also be listed as being available for dynamic assignment.
+# Hosts for which fixed IP addresses have been specified can boot using
+# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
+# be booted with DHCP, unless there is an address range on the subnet
+# to which a BOOTP client is connected which has the dynamic-bootp flag
+# set.
+#host fantasia {
+#  hardware ethernet 08:00:07:26:c0:a5;
+#  fixed-address fantasia.fugue.com;
+#}
+host moria.cederqvist { 
+    hardware ethernet 00:c0:f0:4c:9b:97;
+    fixed-address moria.cederqvist;
+}
+host dellalu-lan.cederqvist {
+    hardware ethernet 00:0D:56:AC:93:35;
+    fixed-address dellalu-lan.cederqvist;
+}
+host dellalu.cederqvist { 
+    hardware ethernet 00:04:23:98:5e:23;
+    fixed-address dellalu.cederqvist;
+}
+host scribe.cederqvist {
+    hardware ethernet 00:16:6f:5f:94:62;
+    fixed-address scribe.cederqvist;
+}
+host scribe-lan.cederqvist { 
+    hardware ethernet 00:0e:7b:df:93:dc;
+    fixed-address scribe-lan.cederqvist;
+}
+host squeezebox.cederqvist { 
+    hardware ethernet 00:04:20:06:a9:2b;
+    fixed-address squeezebox.cederqvist;
+}
+
+
+# You can declare a class of clients and then do address allocation
+# based on that.   The example below shows a case where all clients
+# in a certain class get addresses on the 10.17.224/24 subnet, and all
+# other clients get addresses on the 10.0.29/24 subnet.
+
+#class "foo" {
+#  match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
+#}
+
+#shared-network 224-29 {
+#  subnet 10.17.224.0 netmask 255.255.255.0 {
+#    option routers rtr-224.example.org;
+#  }
+#  subnet 10.0.29.0 netmask 255.255.255.0 {
+#    option routers rtr-29.example.org;
+#  }
+#  pool {
+#    allow members of "foo";
+#    range 10.17.224.10 10.17.224.250;
+#  }
+#  pool {
+#    deny members of "foo";
+#    range 10.0.29.10 10.0.29.230;
+#  }
+#}
diff --git a/puppet/master/manifests/site.pp b/puppet/master/manifests/site.pp
index 0d1c21ab53f8df735bfe73b9d08f878a7958d93b..d68f258bb1aceee1ea3038dbdc046889933e8706 100644
--- a/puppet/master/manifests/site.pp
+++ b/puppet/master/manifests/site.pp
@@ -26,15 +26,15 @@ node stentyst {
   }
 
   package { ddclient:
-    ensure => latest;
+    ensure => latest,
   }
 
   package { "debconf-doc":
-    ensure => latest;
+    ensure => latest,
   }
 
   package { "libio-socket-ssl-perl":
-    ensure => latest;
+    ensure => latest,
   }
 
   file { "/etc/default/ddclient":
@@ -80,7 +80,8 @@ node stentyst {
   }
 
   package { "bind9":
-    ensure => latest;
+    ensure => latest,
+    notify => Service[bind9],
   }
 
   service { "bind9":
@@ -111,4 +112,30 @@ node stentyst {
     mode => 644,
     notify => Service["bind9"],
   }
+
+  package { "dhcp3-server":
+    ensure => latest,
+    notify => Service["dhcp3-server"],
+  }
+
+  file { "/etc/default/dhcp3-server":
+    source => "puppet:///host/etc/default/dhcp3-server",
+    owner => root,
+    group => root,
+    mode => 444,
+    notify => Service["dhcp3-server"],
+  }
+
+  file { "/etc/dhcp3/dhcpd.conf":
+    source => "puppet:///host/etc/dhcp3/dhcpd.conf",
+    owner => root,
+    group => root,
+    mode => 444,
+    notify => Service["dhcp3-server"],
+  }
+
+  service { "dhcp3-server":
+    ensure    => running,
+    enable    => true,
+  }
 }