diff --git a/manifests/dns.pp b/manifests/dns.pp
index 4777ad7e8b2ddb1301dd61062353ba77db07aaf7..684a473798cec7bccf447f652d73c9df5e3d3b34 100644
--- a/manifests/dns.pp
+++ b/manifests/dns.pp
@@ -1,17 +1,14 @@
 # Defines the DNS configuration of a system.
 
 class base::dns {
-  base::dns::resolv_conf { "$fqdn": ensure => present }
+  base::dns::resolv_conf { $::fqdn: ensure => present }
 }
 
 # This class adds a reference to a local DNS caching server.
-class base::dns::cache {
+class base::dns::cache inherits base::dns {
   include base::dns::cache_packages
   
-  base::dns::resolv_conf { "$fqdn":
-    ensure    => present,
-    dns_cache => true,
-  }
+  Base::Dns::Resolv_conf[$::fqdn] { dns_cache => true }
 }
 
 class base::dns::cache_packages {
@@ -31,59 +28,47 @@ class base::dns::cache_packages {
 
 # This class is for servers at Livermore.  The resolv.conf puts the
 # Livermore dns server first in the search list.
-class base::dns::dr {
-  base::dns::resolv_conf { $fqdn :
-    ensure           => present,
-    first_dns_server => '204.63.227.68',
-  }
+class base::dns::dr inherits base::dns {
+  Base::Dns::Resolv_conf[$::fqdn] { first_dns_server => '204.63.227.68' }
 }
 
 # This class is for servers at Livermore.  The resolv.conf puts the
 # local caching server first and includes Livermore dns server.
-class base::dns::dr-cache {
-  include base::dns::cache_packages
-
-  base::dns::resolv_conf { $fqdn :
-    ensure           => present,
-    dns_cache        => true,
-    first_dns_server => '204.63.227.68',
-  }
+class base::dns::dr-cache inherits base::dns::cache {
+  Base::Dns::Resolv_conf[$::fqdn] { first_dns_server => '204.63.227.68' }
 }
 
+# RHEL6 requires a custom resolv.conf to deal with a single-threaded lookup
+# bug which reduces performance to a crawl for services like sshd.
+#
+# TODO: remove EL6 custom resolv.conf when this bug is fixed.
 define base::dns::resolv_conf (
   $ensure           = present,
   $dns_cache        = 'NONE',
   $first_dns_server = 'NONE'
 ) {
-  case $ensure {
-    'absent': {
-      file { '/etc/resolv.conf': ensure => absent }
-    }
-    'present': {
-      # RHEL6 requires a custom resolv.conf to deal with a
-      # single-threaded lookup bug which reduces performance to a
-      # crawl for services like sshd.  TODO: remove EL6 custom
-      # resolv.conf when this bug is fixed.
-      if $::lsbdistcodename == 'santiago' {
-        $set_dns_options = true
-        $dns_options     = 'single-request-reopen'
-      } else {
-        $set_dns_options = false
-      }
-      if $dns_cache != 'NONE' {
-        $set_dns_cache = true
-      } else {
-        $set_dns_cache = false
-      }
-      if $first_dns_server != 'NONE' {
-        $set_first_dns_server = true
-      } else {
-        $set_first_dns_server = false
-      }
-      # resolv.conf is constructed from a template
-      file { '/etc/resolv.conf':
-        content => template('base/dns/etc/resolv.conf.erb')
-      }
-    }
+  if $::lsbdistcodename == 'santiago' {
+    $set_dns_options = true
+    $dns_options     = 'single-request-reopen'
+  } else {
+    $set_dns_options = false
+  }
+
+  if $dns_cache != 'NONE' {
+    $set_dns_cache = true
+  } else {
+    $set_dns_cache = false
+  }
+
+  if $first_dns_server != 'NONE' {
+    $set_first_dns_server = true
+  } else {
+    $set_first_dns_server = false
+  }
+
+  # resolv.conf is constructed from a template
+  file { '/etc/resolv.conf':
+    ensure  => $ensure,
+    content => template('base/dns/etc/resolv.conf.erb'),
   }
 }