diff --git a/NEWS b/NEWS
index cc681f249f5308ff62d8addd32213732b2d37e1a..ab881f97442a4a2fc5c8b0d316369f9bef294dcd 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+release/004.023 (2015-02-20)
+
+    [rpm] Added ensures to pull in the Stanford PuppetLabs
+    repo on all RHEL-ish hosts. Also ensure that packages
+    yum-utils and yum-plugin-versionlock are installed to
+    assist in yum configurations such as package locking.
+    'versionlock' file is just stubbed for now, and will
+    be expanded in the future (jlent)
+
 release/004.022 (2015-02-17)
 
     [syslog] Correct template names for the impstats fragments that 
diff --git a/files/rpm/etc/yum/pluginconf.d/versionlock.list b/files/rpm/etc/yum/pluginconf.d/versionlock.list
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/manifests/rpm.pp b/manifests/rpm.pp
index 2cdce2fb4aef5f0bd852e00a9371c8303dd1405d..556b586679d3845e3060da8d8671a3f1693c8be4 100644
--- a/manifests/rpm.pp
+++ b/manifests/rpm.pp
@@ -24,16 +24,23 @@ class base::rpm::openafs {
 class base::rpm {
   include base::rpm::openafs
 
-  case $::operatingsystem {
-    'redhat': {
-      $redhatPackages = [
-        'yum',
-      ]
+  case $::osfamily {
+    'RedHat': {
+      $redhatPackages = $libmajdistrelease ? {
+        '5'     => [ 'yum', 'yum-utils', 'yum-versionlock' ],
+        default => [ 'yum', 'yum-utils', 'yum-plugin-versionlock' ],
+      }
+
       package { $redhatPackages: ensure => present }
+      file { '/etc/yum/pluginconf.d/versionlock.list':
+        ensure => present,
+        source => 'puppet:///modules/base/rpm/etc/yum/pluginconf.d/versionlock.list',
+        require => Package[ $redhatPackages ],
+      }
 
       file { '/etc/yum.repos.d':
         ensure  => directory,
-        mode    => 0755,
+        mode    => '0755',
         recurse => true,
         purge   => true,
       }
@@ -43,6 +50,11 @@ class base::rpm {
       base::rpm::yumrepo { "stanford-priv-EL${::lsbmajdistrelease}.repo": }
       base::rpm::yumrepo { "stanford-rhel${::lsbmajdistrelease}.repo": }
       base::rpm::yumrepo { "stanford-EL${::lsbmajdistrelease}.repo": }
+      # puppetlabs repo now being mirrored on yum.stanford.edu
+      file { '/etc/yum.repos.d/puppet-mirror.repo':
+        ensure  => present,
+        content => template('base/etc/yum.repos.d/puppetlabs-mirror.repo.erb'),
+      }
 
       file {
         # newsyslog config to rotate /var/log/yum.log
diff --git a/templates/etc/yum.repos.d/puppetlabs-mirror.erb b/templates/etc/yum.repos.d/puppetlabs-mirror.erb
new file mode 100644
index 0000000000000000000000000000000000000000..cbbd95f3056514a23a4ecc84287fe7043ed56a39
--- /dev/null
+++ b/templates/etc/yum.repos.d/puppetlabs-mirror.erb
@@ -0,0 +1,18 @@
+# Name: Stanford PuppetLabs Mirror
+# URL: http://yum.stanford.edu/
+[puppetlabs-mirror]
+name = Puppet packages $releasever
+baseurl = http://yum.stanford.edu/mrepo/puppet-EL<%= @lsbmajdistrelease -%>-$basearch/RPMS.updates
+enabled = 1
+protect = 0
+gpgkey = http://yum.stanford.edu/RPM-GPG-KEY-puppetlabs
+gpgcheck = 1
+
+[puppetlabs-mirror-deps]
+name = Puppet dependency packages $releasever
+baseurl = http://yum.stanford.edu/mrepo/puppet-EL<%= @lsbmajdistrelease -%>-$basearch/RPMS.dependencies
+enabled = 1
+protect = 0
+gpgkey = http://yum.stanford.edu/RPM-GPG-KEY-puppetlabs
+gpgcheck = 1
+