diff --git a/ansible/compute.yml b/ansible/compute.yml
index 4003b8f769c59c1947b4c4dfbb7a6dac7a8844ae..198454852c2e28cc47ea8661a45fce7fae6f44fb 100644
--- a/ansible/compute.yml
+++ b/ansible/compute.yml
@@ -5,7 +5,7 @@
   roles:
     - { name: 'install_packages', tags: 'install_packages' }
     - { name: 'pam_slurm_adopt', tags: 'pam_slurm_adopt' }
-    - { name: 'lmod_user', tags: 'lmod_user'}
+    - { name: 'install_nhc', tags: 'install_nhc'}
 
 - name: Setup node for use as a virtual cheaha node
   ansible.builtin.import_playbook: cheaha.yml
diff --git a/ansible/files/nux-dextop.repo b/ansible/files/nux-dextop.repo
index dd4a382e43ca145fa82e2fb3b0451ee785410726..475d3d4ce4b2fa171a5df146fa31d650115f0a1b 100644
--- a/ansible/files/nux-dextop.repo
+++ b/ansible/files/nux-dextop.repo
@@ -1,14 +1,14 @@
 [nux-dextop]
 name=Nux.Ro RPMs for general desktop use
-baseurl=http://li.nux.ro/download/nux/dextop/el7/$basearch/ http://mirror.li.nux.ro/li.nux.ro/nux/dextop/el7/$basearch/
+baseurl= http://mirror.li.nux.ro/li.nux.ro/nux/dextop/el7/$basearch/
 enabled=1
 gpgcheck=1
-gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
+gpgkey=http://mirror.li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
 protect=0
 
 [nux-dextop-testing]
 name=Nux.Ro RPMs for general desktop use - testing
-baseurl=http://li.nux.ro/download/nux/dextop-testing/el7/$basearch/
+baseurl=http://mirror.li.nux.ro/download/nux/dextop-testing/el7/$basearch/
 enabled=0
 gpgcheck=1
 gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 665d5cdfccf013d3bc0ac080119ce3c6c56d6591..e55be3c6b5c2ad77a3195681900b9b84a6a25585 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -4,3 +4,9 @@
   yum_repo_files: []
   pkg_list: []
   slurm_version: 18.08.9
+  
+# NHC related
+  nhc_download_url: "https://github.com/mej/nhc/releases/download/1.4.3/lbnl-nhc-1.4.3-1.el7.noarch.rpm"
+  nhc_download_path: "/tmp"
+  nhc_git_repo: "https://gitlab.rc.uab.edu/rc/nhc.git"
+  nhc_git_repo_path: "/tmp/nhc"
diff --git a/ansible/group_vars/base b/ansible/group_vars/base
index 232c36d1debcc6dffa039fd7006f5d43f85519f5..71ce49998bcd7e633858dc53fdd49cc1fbe167ac 100644
--- a/ansible/group_vars/base
+++ b/ansible/group_vars/base
@@ -28,7 +28,6 @@
     - "OpenIPMI-libs"
     - "OpenIPMI-modalias"
     - "PackageKit-glib"
-    - "Red_Hat_Enterprise_Linux-Release_Notes-7-en-US"
     - "SDL"
     - "Thunar"
     - "abattis-cantarell-fonts"
@@ -75,7 +74,6 @@
     - "atkmm"
     - "atlas"
     - "atlas-devel"
-    - "atom"
     - "atril"
     - "atril-caja"
     - "atril-libs"
@@ -183,9 +181,6 @@
     - "cjkuni-uming-fonts"
     - "clucene-contribs-lib"
     - "clucene-core"
-    - "clusterkit"
-    - "clusterkit"
-    - "clusterkit"
     - "clutter"
     - "clutter-gst2"
     - "clutter-gst3"
@@ -277,7 +272,6 @@
     - "dracut-config-rescue"
     - "dracut-network"
     - "dstat"
-    - "dump_pr"
     - "dvd+rw-tools"
     - "dwz"
     - "dyninst"
@@ -399,7 +393,6 @@
     - "geoclue2"
     - "geoclue2-libs"
     - "geocode-glib"
-    - "geoipupdate"
     - "gettext"
     - "gettext-common-devel"
     - "gettext-devel"
@@ -471,16 +464,6 @@
     - "google-noto-emoji-fonts"
     - "gparted"
     - "gperftools-libs"
-    - "gpfs.base"
-    - "gpfs.callhome-ecc-client"
-    - "gpfs.docs"
-    - "gpfs.ext"
-    - "gpfs.gpl"
-    - "gpfs.gskit"
-    - "gpfs.gss.pmsensors"
-    - "gpfs.java"
-    - "gpfs.license.std"
-    - "gpfs.msg.en_US"
     - "gpgme"
     - "gpm-libs"
     - "graphite2"
@@ -590,7 +573,6 @@
     - "ibus-setup"
     - "ibus-table"
     - "ibus-table-chinese"
-    - "ibutils2"
     - "icedax"
     - "icedtea-web"
     - "ilmbase"
@@ -662,7 +644,6 @@
     - "keyutils-libs-devel"
     - "khmeros-base-fonts"
     - "khmeros-fonts-common"
-    - "knem"
     - "kpartx"
     - "kpatch"
     - "krb5-devel"
@@ -1301,7 +1282,6 @@
     - "mtools"
     - "mtr"
     - "mutter"
-    - "mxm"
     - "mythes"
     - "mythes-en"
     - "nano"
@@ -1375,7 +1355,6 @@
     - "opencore-amr"
     - "openjpeg-libs"
     - "openjpeg2"
-    - "openmpi"
     - "openscap"
     - "openscap-scanner"
     - "opensm"
@@ -1686,58 +1665,36 @@
     - "python-warlock"
     - "python-wrapt"
     - "python-yubico"
-    - "python2-adal"
     - "python2-asn1crypto"
-    - "python2-babel"
     - "python2-backports-functools_lru_cache"
     - "python2-blockdev"
     - "python2-boto"
     - "python2-certifi"
-    - "python2-chardet"
-    - "python2-cmd2"
-    - "python2-contextlib2"
     - "python2-crypto"
     - "python2-cryptography"
     - "python2-dateutil"
-    - "python2-extras"
     - "python2-futures"
-    - "python2-gunicorn"
     - "python2-idna"
     - "python2-iso8601"
     - "python2-jmespath"
     - "python2-jsonpatch"
-    - "python2-jsonpointer"
     - "python2-jsonschema"
-    - "python2-jwt"
-    - "python2-ldap"
-    - "python2-markupsafe"
     - "python2-mimeparse"
     - "python2-mock"
-    - "python2-monotonic"
     - "python2-msgpack"
-    - "python2-msrest"
-    - "python2-msrestazure"
-    - "python2-munch"
     - "python2-oauthlib"
     - "python2-olefile"
-    - "python2-os-service-types"
-    - "python2-pexpect"
-    - "python2-pillow"
     - "python2-pip"
     - "python2-ptyprocess"
     - "python2-pyasn1"
     - "python2-pyasn1-modules"
     - "python2-pyatspi"
-    - "python2-pyparsing"
-    - "python2-pyperclip"
     - "python2-pyxdg"
-    - "python2-requests"
     - "python2-rpm-macros"
     - "python2-rsa"
     - "python2-setuptools"
     - "python2-subprocess32"
     - "python2-traceback2"
-    - "python2-unittest2"
     - "python2-urllib3"
     - "python2-wcwidth"
     - "python3"
@@ -1758,9 +1715,6 @@
     - "pyusb"
     - "pyxattr"
     - "qemu-guest-agent"
-    - "qemu-img-ev"
-    - "qemu-kvm-common-ev"
-    - "qemu-kvm-ev"
     - "qpdf-libs"
     - "qrencode-libs"
     - "qt"
@@ -1798,7 +1752,6 @@
     - "redhat-lsb-submod-multimedia"
     - "redhat-lsb-submod-security"
     - "redhat-menus"
-    - "redhat-release-server"
     - "redhat-rpm-config"
     - "redhat-support-lib-python"
     - "redhat-support-tool"
@@ -1876,7 +1829,6 @@
     - "sgpio"
     - "shadow-utils"
     - "shared-mime-info"
-    - "sharp"
     - "shim-x64"
     - "sil-abyssinica-fonts"
     - "sil-nuosu-fonts"
@@ -2660,7 +2612,6 @@
     - "ttmkfdir"
     - "tumbler"
     - "tuned"
-    - "turbovnc"
     - "twolame-libs"
     - "tzdata"
     - "tzdata-java"
diff --git a/ansible/group_vars/compute b/ansible/group_vars/compute
index eb73c7f148b4642cb047a7491859cf1f96c1b23f..98bd90e5f3e59ec37ec1879b352357e19f2ea3de 100644
--- a/ansible/group_vars/compute
+++ b/ansible/group_vars/compute
@@ -3,7 +3,7 @@
     - TurboVNC.repo
     - cm.repo
   pkg_list:
-    - "Lmod"
+    - "Lmod-7.8.11"
     - "atftp-server"
     - "cluster-tools-dell"
     - "cluster-tools-slave"
@@ -36,7 +36,6 @@
     - "cm-libprometheus"
     - "cm-lua"
     - "cm-mariadb-libs"
-    - "cm-modules-init-client"
     - "cm-openssl"
     - "cm-python2"
     - "cm-python36"
@@ -47,7 +46,6 @@
     - "cmdaemon"
     - "cmdaemon-remotecm"
     - "confuse"
-    - "env-modules"
     - "gcc-recent"
     - "gdb-recent"
     - "lshw"
@@ -61,43 +59,22 @@
     - "net-snmp-recent"
     - "node-installer-slave"
     - "openvpn"
-    - "pbspro-ce-client"
-    - "pbspro-client"
     - "perl-Config-IniFiles"
-    - "python-azure-sdk"
     - "python-dogpile-cache"
     - "python-isodate"
     - "python-netaddr"
     - "python-netifaces"
-    - "python-oslo-i18n-lang"
-    - "python-oslo-utils-lang"
     - "python-setuptools_scm"
     - "python-testtools"
-    - "python-vcrpy"
     - "python-websockify"
-    - "python2-cffi"
-    - "python2-cinderclient"
     - "python2-cliff"
     - "python2-debtcollector"
     - "python2-deprecation"
     - "python2-fixtures"
     - "python2-funcsigs"
-    - "python2-glanceclient"
-    - "python2-heatclient"
     - "python2-ipaddress"
-    - "python2-keystoneauth1"
-    - "python2-keystoneclient"
-    - "python2-novaclient"
-    - "python2-openstacksdk"
-    - "python2-os-client-config"
-    - "python2-osc-lib"
-    - "python2-oslo-config"
-    - "python2-oslo-i18n"
-    - "python2-oslo-serialization"
-    - "python2-oslo-utils"
     - "python2-pbr"
     - "python2-positional"
-    - "python2-pyOpenSSL"
     - "python2-pysocks"
     - "python2-pyyaml"
     - "python2-requests-oauthlib"
@@ -105,10 +82,7 @@
     - "python2-rfc3986"
     - "python2-six"
     - "python2-stevedore"
-    - "python2-swiftclient"
     - "sdparm"
-    - "sge-client"
-    - "shorewall"
     - "sshpass"
     - "swig"
-    - "turbovnc"
+    - "turbovnc-2.2.6*"
diff --git a/ansible/roles/cuda_driver/tasks/main.yml b/ansible/roles/cuda_driver/tasks/main.yml
index fde04c1edb6cfb0ddb825e352a0d0f9c63e98641..d411731c6593a8f550217ff15190f4aafd1288c9 100644
--- a/ansible/roles/cuda_driver/tasks/main.yml
+++ b/ansible/roles/cuda_driver/tasks/main.yml
@@ -16,11 +16,11 @@
       - cuda-dcgm.x86_64
       - cuda-dcgm-libs
       - cuda-dcgm-devel
-    state: present
+    state: latest
 
 - name: start cuda-driver service
   ansible.builtin.systemd:
-    name: cuda-driver
+    name: "{{ item }}"
     state: started
     enabled: yes
   loop:
diff --git a/ansible/roles/install_nhc/tasks/main.yml b/ansible/roles/install_nhc/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4e9d90a60de3090bb58fcdf77a7f14b9ea8ff1be
--- /dev/null
+++ b/ansible/roles/install_nhc/tasks/main.yml
@@ -0,0 +1,28 @@
+---
+- name: Download the rpm
+  ansible.builtin.get_url:
+    url: "{{ nhc_download_url }}"
+    dest: "{{ nhc_download_path }}"
+
+- name: Clone the NHC config repo
+  ansible.builtin.git:
+    repo: "{{ nhc_git_repo }}"
+    dest: "{{ nhc_git_repo_path }}"
+
+- name: Install NHC
+  ansible.builtin.yum:
+    name: "{{ nhc_download_url }}"
+    state: latest
+
+- name: Copy config files
+  ansible.builtin.copy:
+    src: "{{ nhc_git_repo_path }}/{{ item.src }}" 
+    dest: "{{ item.dest }}"
+    owner: root
+    group: root
+    mode: '0644'
+    remote_src: true
+  loop:
+    - { src: 'nhc.conf' , dest: '/etc/nhc/' }
+    - { src: 'nhc.etc.sysconfig', dest: '/etc/sysconfig/nhc/' }
+
diff --git a/ansible/roles/lmod_user/tasks/main.yaml b/ansible/roles/lmod_user/tasks/main.yaml
deleted file mode 100644
index 825538ead9d8024b1256bb3dcf09255f9b804046..0000000000000000000000000000000000000000
--- a/ansible/roles/lmod_user/tasks/main.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-- name: Setup rsyslog
-  template:
-    src: rsyslog.j2
-    dest: /etc/rsyslog.d/moduleTracking-client.conf
-
-- name: Restart rsyslog
-  service:
-    name: rsyslog
-    state: restarted
diff --git a/ansible/roles/lmod_user/templates/rsyslog.j2 b/ansible/roles/lmod_user/templates/rsyslog.j2
deleted file mode 100644
index 537711acbc8c253a11fe540cde9cdd7655620f34..0000000000000000000000000000000000000000
--- a/ansible/roles/lmod_user/templates/rsyslog.j2
+++ /dev/null
@@ -1,2 +0,0 @@
-if $programname contains 'ModuleUsageTracking' then @{{ lmod_db_host_machine }}
-&~
diff --git a/ansible/roles/pam_slurm_adopt/tasks/main.yml b/ansible/roles/pam_slurm_adopt/tasks/main.yml
index 4f027f2df5c96a8094dd3303660dc04c3ba88a9d..1493946c6a6746483093301aefbf227ece8f0076 100644
--- a/ansible/roles/pam_slurm_adopt/tasks/main.yml
+++ b/ansible/roles/pam_slurm_adopt/tasks/main.yml
@@ -1,4 +1,12 @@
 ---
+- name: Install slurm-client packages
+  ansible.builtin.yum:
+    name: "{{ item }}"
+    state: present
+  loop:
+    - munge
+    - "slurm-client-{{ slurm_version }}"
+
 # restrict user access to nodes
 - name: Get version and release for slurm-pam pkg
   shell: rpm -q --qf "%{VERSION}-%{RELEASE}\n" slurm-client
@@ -41,6 +49,6 @@
 - name: Update secure access config for the node
   lineinfile:
     dest: /etc/security/access.conf
-    line: "-:ALL EXCEPT root mhanby_ cmcclung_ (sysadmins) (atlab):ALL"
+    line: "-:ALL EXCEPT root mhanby_ cmcclung_ centos (sysadmins) (atlab):ALL"
     owner: root
     mode: 0644
diff --git a/openstack-compute/nodeimage.pkr.hcl b/openstack-compute/nodeimage.pkr.hcl
index e6f39d8a3e93dbb83f95e0f57e4ded5a08e32aed..cccebc3a4bebf6dd5a5a53bbee5c26d5afd4818f 100644
--- a/openstack-compute/nodeimage.pkr.hcl
+++ b/openstack-compute/nodeimage.pkr.hcl
@@ -25,18 +25,19 @@ build {
   provisioner "ansible" {
     groups = ["compute"]
     playbook_file = "./ansible/compute.yml"
+    ansible_env_vars = [
+      "ANSIBLE_SSH_ARGS='-oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedKeyTypes=ssh-rsa'",
+      "ANSIBLE_HOST_KEY_CHECKING=False"
+    ]
     roles_path = "./ansible/roles"
     extra_arguments = [
+      "--scp-extra-args", "'-O'",
       "--extra-vars", "root_ssh_key='${var.root_ssh_key}'"
     ]
   }
   provisioner "ansible" {
     use_proxy =  false
-    ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False"]
-    playbook_file = "../CRI_XCBC/ood-packer.yaml"
-    extra_arguments = [
-      "-t enable_lmod",
-      "-t lmod_user",
-    ]
+    groups = ["compute"]
+    playbook_file = "./CRI_XCBC/compute-packer.yaml"
   }
 }
diff --git a/openstack-gpu/nodeimage.pkr.hcl b/openstack-gpu/nodeimage.pkr.hcl
index 02720c2d434a2c6a70a79deae9fb37716869c171..7d3ed258d138b3ad3605b9b11e56bb7d2eef4b9a 100644
--- a/openstack-gpu/nodeimage.pkr.hcl
+++ b/openstack-gpu/nodeimage.pkr.hcl
@@ -21,8 +21,13 @@ build {
   provisioner "ansible" {
     groups = ["gpu"]
     playbook_file = "./ansible/gpu.yml"
+    ansible_env_vars = [
+      "ANSIBLE_SSH_ARGS='-oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedKeyTypes=ssh-rsa'",
+      "ANSIBLE_HOST_KEY_CHECKING=False"
+    ]
     roles_path = "./ansible/roles"
     extra_arguments = [
+      "--scp-extra-args", "'-O'",
       "--extra-vars", "root_ssh_key='${var.root_ssh_key}'"
     ]
   }
diff --git a/openstack/nodeimage.pkr.hcl b/openstack/nodeimage.pkr.hcl
index 509ae3cde0684fd1a02a913ae760d8ae737c419e..7988088e8fba1b6dd664a5b12b4d3bd557e4cb1a 100644
--- a/openstack/nodeimage.pkr.hcl
+++ b/openstack/nodeimage.pkr.hcl
@@ -26,8 +26,13 @@ build {
     user = var.ssh_username
     groups = ["base"]
     playbook_file = "./ansible/base.yml"
+    ansible_env_vars = [
+      "ANSIBLE_SSH_ARGS='-oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedKeyTypes=ssh-rsa'",
+      "ANSIBLE_HOST_KEY_CHECKING=False"
+    ]
     roles_path = "./ansible/roles"
     extra_arguments = [
+      "--scp-extra-args", "'-O'",
       "--extra-vars", "root_ssh_key='${var.root_ssh_key}'"
     ]
   }
diff --git a/openstack/variables.pkr.hcl b/openstack/variables.pkr.hcl
index 09827195aba2322d506e5a2b57e1f16092e4738b..aa810592db45127232fb61d07a9df8a63359658f 100644
--- a/openstack/variables.pkr.hcl
+++ b/openstack/variables.pkr.hcl
@@ -67,7 +67,7 @@ variable "security_groups" {
 
 variable "build_instance_name" {
   type = string
-  default = "compute"
+  default = "base"
   description = "A name of build instance used for image build"
 }