diff --git a/NEWS b/NEWS
index 43e523d25d9426a40a032b74f191642b42663122..21b0136c845f00534184dd4d3008fb70c41f845b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
 unreleased (207x-xx-xx)
 
+    [out_of_date] Add some parameters to the interface to make it easier
+    to point at different out-of-date servers. [adamhl]
+
     [ssh] Change interface parameter. The parameter
     base::ssh::extra_gssapi_only_users has been renamed to
     base::ssh::extra_skip_duo_users to more accurately reflect what this
diff --git a/manifests/out_of_date/client.pp b/manifests/out_of_date/client.pp
index 4d9917af034e7bca22fc47dc32f891011c664908..cfbbedbbfdac15627fed3add96ac59152b559781 100644
--- a/manifests/out_of_date/client.pp
+++ b/manifests/out_of_date/client.pp
@@ -1,38 +1,59 @@
 # Set up the out_of_date client, which reports package status to the server.
 
-class base::out_of_date::client {
+# $platform: should be one 'production' or 'development'.
+
+class base::out_of_date::client (
+  $ensure              = 'present',
+  $platform            = 'production',
+  $ood_server_override = undef,
+){
+  if ($ensure == 'present') {
+    # PRESENT
+
+    # Determine the server to use.
+    if ($ood_server_override) {
+      $ood_server = $ood_server_override
+    } else {
+      case $platform {
+        'production':  { $ood_server = 'frankoz1.stanford.edu' }
+        'development': { $ood_server = 'frankoz1.stanford.edu' }
+        default:       { fail("unrecognized platform") }
+      }
+    }
+
     package { 'stanford-outofdate-client':
         ensure => installed,
     }
 
     file {
-        '/etc/out-of-date':
-            ensure  => directory,
-            owner   => root,
-            group   => root;
-        '/etc/out-of-date/client.conf':
-            source  => 'puppet:///modules/base/out-of-date/etc/out-of-date/client.conf',
-            require => Package['stanford-outofdate-client'];
+      '/etc/out-of-date':
+        ensure  => directory,
+        owner   => root,
+        group   => root;
+      '/etc/out-of-date/client.conf':
+        content => template('base/out_of_date/etc/out-of-date/client.conf.erb'),
+        require => Package['stanford-outofdate-client'];
     }
 
-    if $::lsbdistcodename == 'lenny' {
-      file { '/etc/cron.hourly/out-of-date': ensure => absent }
-    } else {
-      file { '/etc/cron.hourly/out-of-date':
-        source => 'puppet:///modules/base/out-of-date/etc/cron.hourly/out-of-date';
-      }
+    file { '/etc/cron.hourly/out-of-date':
+      source => 'puppet:///modules/base/out-of-date/etc/cron.hourly/out-of-date',
     }
-}
+  } else {
+    # ABSENT
 
-# disable ood-client by removing its cron job.
-class base::out_of_date::client::disabled inherits base::out_of_date::client {
-    File['/etc/cron.hourly/out-of-date'] {
-        ensure => absent
+    package { 'stanford-outofdate-client':
+      ensure => absent,
     }
-}
 
-class base::out_of_date::client::dev inherits base::out_of_date::client {
-    File['/etc/out-of-date/client.conf'] {
-        source  => 'puppet:///modules/base/out-of-date/etc/out-of-date/client-dev.conf'
+    file { '/etc/cron.hourly/out-of-date':
+      ensure => absent
+    }
+
+    file {
+      '/etc/out-of-date':
+        ensure  => absent;
+      '/etc/out-of-date/client.conf':
+        ensure  => absent;
     }
+  }
 }
diff --git a/manifests/out_of_date/client/dev.pp b/manifests/out_of_date/client/dev.pp
new file mode 100644
index 0000000000000000000000000000000000000000..ee1c6704d00ba3791ed261567465016d83a03bf9
--- /dev/null
+++ b/manifests/out_of_date/client/dev.pp
@@ -0,0 +1,10 @@
+# DEPRECATED!
+#
+# Use instead base::out_of_date::client with the parameter 'platform' set
+# to 'development'.
+
+class base::out_of_date::client::dev {
+  class { 'base::out_of_date::client':
+    platform => 'development',
+  }
+}
diff --git a/manifests/out_of_date/client/disabled.pp b/manifests/out_of_date/client/disabled.pp
new file mode 100644
index 0000000000000000000000000000000000000000..13263235c736057fee7a76c94ed073eef15546ce
--- /dev/null
+++ b/manifests/out_of_date/client/disabled.pp
@@ -0,0 +1,16 @@
+# disable ood-client by removing its cron job.
+
+# DEPRECATED!
+#
+# Use instead base::out_of_date::client with the parameter 'ensure' set to
+# absent.
+
+class base::out_of_date::client::disabled {
+  #    File['/etc/cron.hourly/out-of-date'] {
+  #      ensure => absent
+  #  }
+
+  class { 'base::out_of_date::client':
+    ensure => absent,
+  }
+}
diff --git a/files/out-of-date/etc/out-of-date/client.conf b/templates/out_of_date/etc/out-of-date/client.conf.erb
similarity index 72%
rename from files/out-of-date/etc/out-of-date/client.conf
rename to templates/out_of_date/etc/out-of-date/client.conf.erb
index b39e5abc3cdcc3453cb9f2600ced33024321ed24..faba7f3981f26d9ad1278d900a13ffe58cc344cc 100644
--- a/files/out-of-date/etc/out-of-date/client.conf
+++ b/templates/out_of_date/etc/out-of-date/client.conf.erb
@@ -1,11 +1,13 @@
-# Out-of-date Package Management
+##############################################################################
+### Out-Of-Date Package Management
+##############################################################################
 
 # Upper bound of the random number generator; default is 12, you probably
 # won't want to change this too often.
 $RANDOM_HOURS = 12;
 
 # What server is collecting this information?
-$COLLECT_SERVER = 'frankoz2.stanford.edu';
+$COLLECT_SERVER = '<%= @ood_server %>';
 
 # Should we download and locally cache packages to-be-installed, if possible?
 $CACHE_PACKAGES = 0;