diff --git a/manifests/site.pp b/manifests/site.pp
index 7ddd850c3f..f972f3199b 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -162,6 +162,13 @@ node 'etherpad.openstack.org' {
   }
 }
 
+node 'etherpad-dev.openstack.org' {
+  class { 'openstack_project::etherpad_dev':
+    database_password       => hiera('etherpad-dev_db_password'),
+    sysadmins               => hiera('sysadmins'),
+  }
+}
+
 node 'wiki.openstack.org' {
   class { 'openstack_project::wiki':
     mysql_root_password => hiera('wiki_db_password'),
diff --git a/modules/etherpad_lite/manifests/init.pp b/modules/etherpad_lite/manifests/init.pp
index 1a6da2cde4..df44cf5233 100644
--- a/modules/etherpad_lite/manifests/init.pp
+++ b/modules/etherpad_lite/manifests/init.pp
@@ -45,7 +45,9 @@ define buildsource(
 class etherpad_lite (
   $ep_user          = 'eplite',
   $base_log_dir     = '/var/log',
-  $base_install_dir = '/opt/etherpad-lite'
+  $base_install_dir = '/opt/etherpad-lite',
+  $nodejs_version   = 'v0.6.16',
+  $eplite_version   = '',
 ) {
 
   user { $ep_user:
@@ -69,11 +71,11 @@ class etherpad_lite (
   }
 
   vcsrepo { "${base_install_dir}/nodejs":
-    ensure => present,
+    ensure   => present,
     provider => git,
-    source => 'https://github.com/joyent/node.git',
-    revision => 'v0.6.16',
-    require    => Package['git']
+    source   => 'https://github.com/joyent/node.git',
+    revision => $nodejs_version,
+    require  => Package['git']
   }
 
   package { ['gzip',
@@ -101,12 +103,25 @@ class etherpad_lite (
                 Vcsrepo["${base_install_dir}/nodejs"]]
   }
 
-  vcsrepo { "${base_install_dir}/etherpad-lite":
-    ensure => present,
-    provider => git,
-    source => "https://github.com/Pita/etherpad-lite.git",
-    owner => $ep_user,
-    require    => Package['git'],
+  # Allow existing install to exist without modifying its git repo.
+  # But give the option to specify versions for new installs.
+  if $eplite_version != '' {
+    vcsrepo { "${base_install_dir}/etherpad-lite":
+      ensure   => present,
+      provider => git,
+      source   => 'https://github.com/Pita/etherpad-lite.git',
+      owner    => $ep_user,
+      revision => $eplite_version,
+      require  => Package['git'],
+    }
+  } else {
+    vcsrepo { "${base_install_dir}/etherpad-lite":
+      ensure   => present,
+      provider => git,
+      source   => 'https://github.com/Pita/etherpad-lite.git',
+      owner    => $ep_user,
+      require  => Package['git'],
+    }
   }
 
   exec { 'install_etherpad_dependencies':
diff --git a/modules/openstack_project/manifests/etherpad_dev.pp b/modules/openstack_project/manifests/etherpad_dev.pp
new file mode 100644
index 0000000000..07199d2584
--- /dev/null
+++ b/modules/openstack_project/manifests/etherpad_dev.pp
@@ -0,0 +1,38 @@
+class openstack_project::etherpad_dev (
+  $database_password,
+  $sysadmins = []
+) {
+  class { 'openstack_project::server':
+    iptables_public_tcp_ports => [22, 80, 443],
+    sysadmins                 => $sysadmins
+  }
+
+  class { 'etherpad_lite':
+    # Use the version running on the prod server.
+    eplite_version => '4195e11a41c5992bc555cef71246800bceaf1915',
+    # Use the version running on the prod server.
+    nodejs_version => 'v0.6.16',
+    # Once dev install is working replace the above parameters with
+    # the following to test automated upgrade by puppet.
+    # eplite_version => '1.1.4',
+    # nodejs_version => 'v0.8.14',
+  }
+
+  include etherpad_lite::backup
+
+  class { 'etherpad_lite::apache':
+    ssl_cert_file => '/etc/ssl/certs/ssl-cert-snakeoil.pem',
+    ssl_key_file => '/etc/ssl/private/ssl-cert-snakeoil.key',
+    ssl_chain_file => '',
+  }
+
+  class { 'etherpad_lite::site':
+    database_password => $database_password,
+  }
+
+  class { 'etherpad_lite::mysql':
+    database_password => $database_password,
+  }
+}
+
+# vim:sw=2:ts=2:expandtab:textwidth=79