diff --git a/Golden_Repo/b/Bazel/Bazel-3.4.1-fix-grpc-protoc.patch b/Golden_Repo/b/Bazel/Bazel-3.4.1-fix-grpc-protoc.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ecc4021a049801f6f37470d71e7e635a314bbb09
--- /dev/null
+++ b/Golden_Repo/b/Bazel/Bazel-3.4.1-fix-grpc-protoc.patch
@@ -0,0 +1,27 @@
+From cd3c41eb5a29ca475b7bafc42aa71e94363d46df Mon Sep 17 00:00:00 2001
+From: Alexander Grund <alexander.grund@tu-dresden.de>
+Date: Tue, 28 Jul 2020 19:51:13 +0200
+Subject: [PATCH] Fix environment for protobuf compilation in grpc
+
+Add use_default_shell_env = True to protoc invocation for grpc to mirror
+what the protobuf cc_proto_library & co are doing
+Fixes a failure in invocing protoc when it is build in a non-default
+environment (e.g. with a custom LD_LIBRARY_PATH)
+
+Fixes #11852, fixes #11855
+---
+ third_party/grpc/bazel/generate_cc.bzl | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/third_party/grpc/bazel/generate_cc.bzl b/third_party/grpc/bazel/generate_cc.bzl
+index 38a5b460f90..d5a4e27bc88 100644
+--- a/third_party/grpc/bazel/generate_cc.bzl
++++ b/third_party/grpc/bazel/generate_cc.bzl
+@@ -123,6 +123,7 @@ def generate_cc_impl(ctx):
+         outputs = out_files,
+         executable = ctx.executable.protoc,
+         arguments = arguments,
++        use_default_shell_env = True,
+     )
+ 
+     return struct(files = depset(out_files))
diff --git a/Golden_Repo/b/Bazel/Bazel-3.7.1_fix-protobuf-env.patch b/Golden_Repo/b/Bazel/Bazel-3.7.1_fix-protobuf-env.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0e110a6723ddfcdf2db6035627a65baeda6535fd
--- /dev/null
+++ b/Golden_Repo/b/Bazel/Bazel-3.7.1_fix-protobuf-env.patch
@@ -0,0 +1,20 @@
+diff --git a/third_party/protobuf/3.13.0.patch b/third_party/protobuf/3.13.0.patch
+index bde8684b82..3336ef4024 100644
+--- a/third_party/protobuf/3.13.0.patch
++++ b/third_party/protobuf/3.13.0.patch
+@@ -38,3 +38,15 @@ index cfdb28e2e..3705fdbe3 100644
+ +        "@io_bazel//third_party:gson",
+      ],
+  )
++diff --git a/protobuf.bzl b/protobuf.bzl
++index 050eafc54..12d3edb94 100644
++--- a/protobuf.bzl
+++++ b/protobuf.bzl
++@@ -352,6 +352,7 @@ def _internal_gen_well_known_protos_java_impl(ctx):
++         inputs = descriptors,
++         outputs = [srcjar],
++         arguments = [args],
+++        use_default_shell_env = True,
++     )
++ 
++     return [
diff --git a/Golden_Repo/b/Bazel/Bazel-3.7.2-GCCcore-11.2.0.eb b/Golden_Repo/b/Bazel/Bazel-3.7.2-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..405a1849b9574df36e8d6d0e6086de37ed617a62
--- /dev/null
+++ b/Golden_Repo/b/Bazel/Bazel-3.7.2-GCCcore-11.2.0.eb
@@ -0,0 +1,32 @@
+name = 'Bazel'
+version = '3.7.2'
+
+homepage = 'https://bazel.io/'
+description = """Bazel is a build tool that builds code quickly and reliably.
+It is used to build the majority of Google's software."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    'https://github.com/bazelbuild/%(namelower)s/releases/download/%(version)s']
+sources = ['%(namelower)s-%(version)s-dist.zip']
+patches = [
+    '%(name)s-3.4.1-fix-grpc-protoc.patch',
+    'java15.patch',
+    '%(name)s-3.7.1_fix-protobuf-env.patch',
+    'gcc11-bazel-3.7.2.patch',
+    'gcc11-2-bazel-3.7.2.patch',
+
+]
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('Python', '3.9.6'),
+    ('Zip', '3.0'),
+]
+
+prebuildopts = "export BAZEL_LINKOPTS=-static-libstdc++:-static-libgcc BAZEL_LINKLIBS=-l%:libstdc++.a:-lm && "
+configopts = "--host_jvm_args=--illegal-access=permit"
+dependencies = [('Java', '15', '', True)]
+
+moduleclass = 'devel'
diff --git a/Golden_Repo/b/Bazel/gcc11-2-bazel-3.7.2.patch b/Golden_Repo/b/Bazel/gcc11-2-bazel-3.7.2.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c7ceaa8431896ef16be2ba07dd1872bd236229ca
--- /dev/null
+++ b/Golden_Repo/b/Bazel/gcc11-2-bazel-3.7.2.patch
@@ -0,0 +1,10 @@
+--- src/third_party/ijar/mapped_file.h.orig	2021-11-05 15:56:24.654184777 +0100
++++ src/third_party/ijar/mapped_file.h	2021-11-05 15:56:33.879015290 +0100
+@@ -16,6 +16,7 @@
+ #define INCLUDED_THIRD_PARTY_IJAR_MAPPED_FILE_H
+ 
+ #include "third_party/ijar/common.h"
++#include <limits>
+ 
+ namespace devtools_ijar {
+ 
diff --git a/Golden_Repo/b/Bazel/gcc11-bazel-3.7.2.patch b/Golden_Repo/b/Bazel/gcc11-bazel-3.7.2.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b46eda7383680741f1b2a497704de3b7c303a602
--- /dev/null
+++ b/Golden_Repo/b/Bazel/gcc11-bazel-3.7.2.patch
@@ -0,0 +1,10 @@
+--- src/third_party/ijar/zlib_client.h.orig	2021-11-05 15:39:58.061336981 +0100
++++ src/third_party/ijar/zlib_client.h	2021-11-05 15:40:22.650877105 +0100
+@@ -16,6 +16,7 @@
+ #define THIRD_PARTY_IJAR_ZLIB_CLIENT_H_
+ 
+ #include <limits.h>
++#include <limits>
+ 
+ #include "third_party/ijar/common.h"
+ 
diff --git a/Golden_Repo/b/Bazel/java15.patch b/Golden_Repo/b/Bazel/java15.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6fc6a95634e69a17caa9e08ba524079bedc13c6f
--- /dev/null
+++ b/Golden_Repo/b/Bazel/java15.patch
@@ -0,0 +1,29 @@
+From 0216ee54417fa1f2fef14f6eb14cbc1e8f595821 Mon Sep 17 00:00:00 2001
+From: philwo <philwo@google.com>
+Date: Mon, 8 Feb 2021 10:45:50 -0800
+Subject: [PATCH] Fix Bazel #10214: JDK 13 introduced a source compatibility
+ issue.
+
+Quote from the Java release notes:
+
+The addition of newFileSystem(Path, Map<String, ?>) creates a source (but not binary) compatibility issue for code that has been using the existing 2-arg newFileSystem(Path, ClassLoader) and specifying the class loader as null. [...] To avoid the ambiguous reference, this code needs to be modified to cast the second parameter to java.lang.ClassLoader.
+
+RELNOTES:
+PiperOrigin-RevId: 356301318
+---
+ .../com/google/devtools/build/buildjar/VanillaJavaBuilder.java  | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
+index 327017362626..5edf9ba0cf23 100644
+--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
++++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/VanillaJavaBuilder.java
+@@ -77,7 +77,7 @@
+   private FileSystem getJarFileSystem(Path sourceJar) throws IOException {
+     FileSystem fs = filesystems.get(sourceJar);
+     if (fs == null) {
+-      filesystems.put(sourceJar, fs = FileSystems.newFileSystem(sourceJar, null));
++      filesystems.put(sourceJar, fs = FileSystems.newFileSystem(sourceJar, (ClassLoader) null));
+     }
+     return fs;
+   }
\ No newline at end of file
diff --git a/Golden_Repo/c/CFITSIO/CFITSIO-4.0.0-GCCcore-11.2.0.eb b/Golden_Repo/c/CFITSIO/CFITSIO-4.0.0-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..418a7ab9b3c36952b3b012c0182e57a0841ee65a
--- /dev/null
+++ b/Golden_Repo/c/CFITSIO/CFITSIO-4.0.0-GCCcore-11.2.0.eb
@@ -0,0 +1,38 @@
+easyblock = 'ConfigureMake'
+
+name = 'CFITSIO'
+version = '4.0.0'
+
+homepage = 'http://heasarc.gsfc.nasa.gov/fitsio/'
+description = """CFITSIO is a library of C and Fortran subroutines for reading and writing data files in
+FITS (Flexible Image Transport System) data format.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+toolchainopts = {'pic': True}
+
+source_urls = ['http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/']
+sources = ['%%(namelower)s-%s.tar.gz' % version]
+patches = ['CFITSIO-4.0.0_install_test_data.patch']
+
+dependencies = [('cURL', '7.78.0')]
+
+
+builddependencies = [
+    ('binutils', '2.37'),
+]
+
+# make would create just static libcfitsio.a.
+# Let's create dynamic lib and testprog too.
+buildopts = '&& make shared && make testprog'
+
+sanity_check_paths = {
+    'files': ['lib/libcfitsio.a', 'lib/libcfitsio.%s' % SHLIB_EXT],
+    'dirs': ['include'],
+}
+
+sanity_check_commands = [
+    ('cd %(installdir)s/share && testprog'),
+]
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/c/CFITSIO/CFITSIO-4.0.0_install_test_data.patch b/Golden_Repo/c/CFITSIO/CFITSIO-4.0.0_install_test_data.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7437760d4d28a784837d940a78eafd5b0a5d8077
--- /dev/null
+++ b/Golden_Repo/c/CFITSIO/CFITSIO-4.0.0_install_test_data.patch
@@ -0,0 +1,13 @@
+--- Makefile.in.orig	2021-11-05 17:08:01.927879000 +0100
++++ Makefile.in	2021-11-05 17:08:42.545401000 +0100
+@@ -31,8 +31,9 @@
+ CFITSIO_BIN	= ${DESTDIR}@bindir@
+ CFITSIO_LIB	= ${DESTDIR}@libdir@
+ CFITSIO_INCLUDE	= ${DESTDIR}@includedir@
+-INSTALL_DIRS	= ${DESTDIR}@INSTALL_ROOT@ ${CFITSIO_INCLUDE} ${CFITSIO_LIB} ${CFITSIO_LIB}/pkgconfig
++CFITSIO_DATADIR = ${DESTDIR}@datadir@
+ 
++INSTALL_DIRS	= ${DESTDIR}@INSTALL_ROOT@ ${CFITSIO_INCLUDE} ${CFITSIO_LIB} ${CFITSIO_LIB}/pkgconfig ${CFITSIO_DATADIR}
+ 
+ SHELL =		/bin/sh
+ ARCHIVE =	@ARCHIVE@
diff --git a/Golden_Repo/l/libelf/libelf-0.8.13-GCCcore-11.2.0.eb b/Golden_Repo/l/libelf/libelf-0.8.13-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..27e93f02b05ad70002405aeadbcfdf4cfcb22360
--- /dev/null
+++ b/Golden_Repo/l/libelf/libelf-0.8.13-GCCcore-11.2.0.eb
@@ -0,0 +1,33 @@
+easyblock = 'ConfigureMake'
+
+name = 'libelf'
+version = '0.8.13'
+
+homepage = 'https://web.archive.org/web/20190223180146/http://www.mr511.de/software/english.html'
+# The original existed here http://www.mr511.de/software/english.html'
+# The only available source code is for an earlier version at https://github.com/WolfgangSt/libelf
+description = """libelf is a free ELF object file access library
+"""
+
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    # source is actually a tar named as tar.gz, will fail. Download the source and gzip it
+    'https://web.archive.org/web/20170808201535/http://www.mr511.de/software/',
+    'https://fossies.org/linux/misc/old/'
+]
+sources = [SOURCE_TAR_GZ]
+
+builddependencies = [
+    ('binutils', '2.37')
+]
+
+modextrapaths = {'CPATH': 'include/libelf'}
+
+sanity_check_paths = {
+    'files': ['lib/libelf.a', 'lib/libelf.%s' % SHLIB_EXT, 'lib/libelf.so.0', 'include/libelf/libelf.h'],
+    'dirs': ['lib/pkgconfig']
+}
+
+moduleclass = 'devel'
diff --git a/Golden_Repo/l/libgd/libgd-2.3.1-GCCcore-11.2.0.eb b/Golden_Repo/l/libgd/libgd-2.3.1-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..764d8744e3b76711a698c13374a19304a6c4a67b
--- /dev/null
+++ b/Golden_Repo/l/libgd/libgd-2.3.1-GCCcore-11.2.0.eb
@@ -0,0 +1,34 @@
+easyblock = 'ConfigureMake'
+
+name = 'libgd'
+version = '2.3.1'
+
+homepage = 'https://github.com/libgd'
+description = """GD is an open source code library for the dynamic creation of
+images by programmers.
+"""
+
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    'https://github.com/libgd/libgd/releases/download/gd-%(version)s/']
+sources = [SOURCELOWER_TAR_GZ]
+
+builddependencies = [
+    ('binutils', '2.37'),
+]
+
+dependencies = [
+    ('X11', '20210802'),
+    ('libjpeg-turbo', '2.0.6'),
+    ('libpng', '1.6.37'),
+    ('zlib', '1.2.11'),
+]
+
+sanity_check_paths = {
+    'files': ["lib/libgd.a", "lib/libgd.%s" % SHLIB_EXT],
+    'dirs': ["bin", "include"],
+}
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/l/libgeotiff/libgeotiff-1.7.0-GCCcore-11.2.0.eb b/Golden_Repo/l/libgeotiff/libgeotiff-1.7.0-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..47812a7eb351167b1c9a8fae3b4ce763ac46d44a
--- /dev/null
+++ b/Golden_Repo/l/libgeotiff/libgeotiff-1.7.0-GCCcore-11.2.0.eb
@@ -0,0 +1,40 @@
+easyblock = 'ConfigureMake'
+
+name = 'libgeotiff'
+version = '1.7.0'
+
+homepage = 'https://trac.osgeo.org/geotiff/'
+description = """Library for reading and writing coordinate system information
+ from/to GeoTIFF files"""
+
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://download.osgeo.org/geotiff/libgeotiff']
+sources = [SOURCE_TAR_GZ]
+
+builddependencies = [
+    ('binutils', '2.37'),
+]
+
+dependencies = [
+    ('PROJ', '8.1.0'),
+    ('libjpeg-turbo', '2.0.6'),
+    ('zlib', '1.2.11'),
+    ('SQLite', '3.36'),
+    ('LibTIFF', '4.3.0'),
+    ('cURL', '7.78.0'),
+]
+
+configopts = '--with-libtiff=$EBROOTLIBTIFF'
+configopts += ' --with-proj=$EBROOTPROJ '
+configopts += ' --with-zlib=$EBROOTZLIB'
+configopts += ' --with-jpeg=$EBROOTLIBJPEGMINTURBO'
+
+sanity_check_paths = {
+    'files': ['bin/listgeo', 'lib/libgeotiff.a',
+              'lib/libgeotiff.%s' % SHLIB_EXT],
+    'dirs': ['include', 'share'],
+}
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/l/libsndfile/libsndfile-1.0.31-GCCcore-11.2.0.eb b/Golden_Repo/l/libsndfile/libsndfile-1.0.31-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c4d4764785d7392ef3de3756fb2dbd74d8fc7332
--- /dev/null
+++ b/Golden_Repo/l/libsndfile/libsndfile-1.0.31-GCCcore-11.2.0.eb
@@ -0,0 +1,29 @@
+easyblock = 'ConfigureMake'
+
+name = 'libsndfile'
+version = '1.0.31'
+
+homepage = 'http://www.mega-nerd.com/libsndfile'
+description = """Libsndfile is a C library for reading and writing files
+containing sampled sound (such as MS Windows WAV and the Apple/SGI AIFF format)
+through one standard library interface."""
+
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    'https://github.com/libsndfile/libsndfile/releases/download/%(version)s/']
+sources = [SOURCE_TAR_BZ2]
+checksums = ['a8cfb1c09ea6e90eff4ca87322d4168cdbe5035cb48717b40bf77e751cc02163']
+
+builddependencies = [('binutils', '2.37')]
+
+configopts = '--enable-octave=no'
+
+sanity_check_paths = {
+    'files': ['include/sndfile.h', 'include/sndfile.hh', 'lib/libsndfile.a',
+              'lib/libsndfile.%s' % SHLIB_EXT],
+    'dirs': ['bin'],
+}
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/m/Mercurial/Mercurial-5.8-GCCcore-11.2.0-Python-3.9.6.eb b/Golden_Repo/m/Mercurial/Mercurial-5.8-GCCcore-11.2.0-Python-3.9.6.eb
new file mode 100644
index 0000000000000000000000000000000000000000..fe24d0faf313fd48337b164b90fc88b73845a926
--- /dev/null
+++ b/Golden_Repo/m/Mercurial/Mercurial-5.8-GCCcore-11.2.0-Python-3.9.6.eb
@@ -0,0 +1,30 @@
+easyblock = "PythonPackage"
+
+name = 'Mercurial'
+version = '5.8'
+versionsuffix = "-Python-%(pyver)s"
+
+homepage = 'http://mercurial.selenic.com/'
+description = """Mercurial is a free, distributed source control management tool. It efficiently handles projects
+of any size and offers an easy and intuitive interface.
+"""
+
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+source_urls = ['http://mercurial-scm.org/release/']
+sources = [SOURCELOWER_TAR_GZ]
+
+download_dep_fail = True
+
+builddependencies = [('binutils', '2.37')]
+
+dependencies = [
+    ('Python', '3.9.6')
+]
+
+sanity_check_paths = {
+    'files': ['bin/hg'],
+    'dirs': ['lib/python%(pyshortver)s/site-packages/mercurial'],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/p/PROJ/PROJ-8.1.0-GCCcore-11.2.0.eb b/Golden_Repo/p/PROJ/PROJ-8.1.0-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..aa4bca327cc2a839d97c439859befe5c6921ffab
--- /dev/null
+++ b/Golden_Repo/p/PROJ/PROJ-8.1.0-GCCcore-11.2.0.eb
@@ -0,0 +1,40 @@
+##
+# This file is an EasyBuild reciPY as per https://github.com/hpcugent/easybuild
+#
+# Copyright:: Copyright 2014-2015 The Cyprus Institute
+# Authors:: Thekla Loizou <t.loizou@cyi.ac.cy>
+# License:: MIT/GPL
+#
+##
+easyblock = 'ConfigureMake'
+
+name = 'PROJ'
+version = '8.1.0'
+
+homepage = 'http://trac.osgeo.org/proj/'
+description = """Program proj is a standard Unix filter function which converts
+geographic longitude and latitude coordinates into cartesian coordinates
+"""
+
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+toolchainopts = {'pic': True}
+
+source_urls = ['http://download.osgeo.org/proj/']
+sources = [SOURCELOWER_TAR_GZ]
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('SQLite', '3.36'),
+    ('LibTIFF', '4.3.0'),
+    ('cURL', '7.78.0'),
+    ('pkg-config', '0.29.2'),
+]
+
+sanity_check_paths = {
+    'files': ['bin/cct', 'bin/cs2cs', 'bin/geod', 'bin/gie', 'bin/proj',
+              'bin/projinfo', 'lib/libproj.a', 'lib/libproj.%s' % SHLIB_EXT],
+    'dirs': ['include'],
+}
+
+moduleclass = 'lib'
diff --git a/bin/gcc11ize.py b/bin/gcc11ize.py
index e51b52587daee3897e8a973a6fb540a6c57e5225..1c69f734ad463fb700e4634719b9e557d5e68870 100755
--- a/bin/gcc11ize.py
+++ b/bin/gcc11ize.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-"""Try to change from GCC9 to GCC10
+"""Try to change from GCC10 to GCC11
 
 For it, you need
 
@@ -7,38 +7,43 @@ For it, you need
 """
 
 import argparse
-oldGCC = '10.3.0'
-newGCC = '11.2.0'
-oldMKL = '2021.2.0'
-newMKL = '2021.4.0'
-oldgomkl = '2021'
-newgomkl = '2022'
-oldgpsmpi = '2021'
-newgpsmpi = '2022'
-oldBinutils = '2.36.1'
-newBinutils = '2.37'
-oldBison = '3.7.6'
-newBison = '3.7.6'
-oldLibDRM = '2.4.106'
-newLibDRM = '2.4.107'
-oldJava = '15'
-newJava = '15'
-oldCMake = "('CMake', '3.18.0')"
-newCMake = "('CMake', '3.21.1', '', SYSTEM)"
-oldCUDA = '11.3'
-newCUDA = '11.5'
-oldcuDNN = '8.2.1.32'
-newcuDNN = '8.2.2.26'
-oldScikit = '2021'
-newScikit = '2022'
-oldSciPy = '2021'
-newSciPy = '2022'
-oldprotobuf = '3.14.0'
-newprotobuf = '3.17.3'
-oldLibxc = '5.1.5'
-newLibxc = '5.1.6'
-oldPython = '3.8.5'
-newPython = '3.9.6'
+
+releases = {
+    'GCC':              ['10.3.0',      '11.2.0'],
+    'CMake':            ['3.18.0',      '31.21.1'],
+    'imkl':              ['2021.2.0',    '2021.4.0'],
+    'gomkl':            ['2021',        '2022'],
+    'gpsmpi':           ['2021',        '2022'],
+    'binutils':         ['2.36.1',      '2.37'],
+    'Bison':            ['3.7.6',       '3.7.6'],
+    'libdrm':           ['2.4.106',     '2.4.107'],
+    'Java':             ['15',          '15'],
+    'CUDA':             ['11.3',        '11.5'],
+    'cuDNN':            ['8.2.1.32',    '8.2.2.26'],
+    'Scikit':           ['2021',        '2022'],
+    'SciPy':            ['2021',        '2022'],
+    'protobuf':         ['3.14.0',      '3.17.3'],
+    'libxc':            ['5.1.5',       '5.1.6'],
+    'Python':           ['3.8.5',       '3.9.6'],
+    'cURL':             ['7.71.1',      '7.78.0'],
+    'PCRE':             ['8.44',        '8.45'],
+    'PCRE2':            ['10.34',       '10.37'],
+    'Qt5':              ['5.14.2',      '5.15.2'],
+    'Ninja':            ['1.10.0',      '1.10.2'],
+    're2c':             ['1.3',         '2.2'],
+    'GLib':             ['2.64.4',      '2.69.1'],
+    'X11':              ['20200222',    '20210802'],
+    'fontconfig':       ['2.13.92',     '2.13.94'],
+    'DBus':             ['1.12.20',     '1.13.18'],
+    'libjpeg-turbo':    ['2.0.5',       '2.0.6'],
+    'NSS':              ['3.51',        '3.69'],
+    'JasPer':           ['2.0.19',      '2.0.33'],
+    'snappy':           ['1.1.8',       '1.1.9'],
+    'PROJ':             ['7.1.0',       '8.1.0'],
+    'SQLite':           ['3.32.3',      '3.36'],
+    'LibTIFF':          ['4.1.0',       '4.3.0'],
+    'libgd':            ['2.3.0',       '2.3.1'],
+}
 
 
 def parse_arguments():
@@ -50,24 +55,29 @@ def parse_arguments():
                         help='Current version of given software to be replaced')
     parser.add_argument('-n', metavar='LATESTRELEASE', default="", type=str,
                         help='Most recent version of given software')
-    parser.add_argument('-s', metavar='SITECONTACTS', default="", type=str,
-                        help='Update site contacts')
 
     return parser.parse_args()
 
 
 def updateFileName(fileName, current, latest):
+    """Tries to bring filename automatically to the latest toolchain"""
     if current and latest:
         fileName = fileName.replace(current, latest, 1)
     if fileName:
-        fileName = fileName.replace(oldGCC, newGCC, 1)
-        fileName = fileName.replace(oldMKL, newMKL, 1)
-        fileName = fileName.replace(oldgomkl, newgomkl, 1)
-        fileName = fileName.replace(oldgpsmpi, newgpsmpi, 1)
+        fileName = fileName.replace(releases['GCC'][0], releases['GCC'][1], 1)
+        fileName = fileName.replace(
+            releases['imkl'][0], releases['imkl'][1], 1)
+        fileName = fileName.replace(
+            releases['gomkl'][0], releases['gomkl'][1], 1)
+        fileName = fileName.replace(
+            releases['gpsmpi'][0], releases['gpsmpi'][1], 1)
+        fileName = fileName.replace(
+            releases['Python'][0], releases['Python'][1], 1)
     return fileName
 
 
-def updateFile(oldName, newName, current, latest, siteContact):
+def updateFile(oldName, newName, current, latest):
+    """Replaces toolchain, cleans up site_contacts and goes through the list of releases with the new one"""
     if newName is not oldName:
         newFile = open(newName, 'w')
         with open(oldName) as file:
@@ -78,53 +88,23 @@ def updateFile(oldName, newName, current, latest, siteContact):
                         line = line.replace(current, latest, 1)
                 if line.startswith('toolchain'):
                     print("Fixing toolchain...")
-                    line = line.replace(oldGCC, newGCC, 1)
-                    line = line.replace(oldMKL, newMKL, 1)
-                    line = line.replace(oldgomkl, newgomkl, 1)
-                if siteContact:
-                    if line.startswith('site_contacts'):
-                        print("Replacing site contacts...")
-                        line = "site_contacts = '%s'" % siteContact
-                if "binutils" in line:
-                    print("Fixing binutils...")
-                    line = line.replace(oldBinutils, newBinutils)
-                if "Bison" in line:
-                    print("Fixing Bison...")
-                    line = line.replace(oldBison, newBison)
-                if "libdrm" in line:
-                    print("Fixing libdrm...")
-                    line = line.replace(oldLibDRM, newLibDRM)
-                if "Java" in line:
-                    print("Fixing Java...")
-                    line = line.replace(oldJava, newJava)
-                if "CMake" in line:
-                    print("Fixing Cmake...")
-                    line = line.replace(oldCMake, newCMake)
-                if "cuda" in line.lower():  # There's cudaver, etc
-                    print("Fixing CUDA...")
-                    line = line.replace(oldCUDA, newCUDA)
-                if "cuDNN" in line:
-                    print("Fixing cuDNN...")
-                    line = line.replace(oldcuDNN, newcuDNN)
-                if "scikit" in line:
-                    print("Fixing scikit...")
-                    line = line.replace(oldScikit, newScikit)
-                if "gcccoremkl" in line:
-                    print("Fixing gcccoremkl")
-                    line = line.replace(oldGCC, newGCC)
-                    line = line.replace(oldMKL, newMKL)
-                if "SciPy-Stack" in line:
-                    print("Fixing SciPy-Stack")
-                    line = line.replace(oldSciPy, newSciPy)
-                if "protobuf" in line:
-                    print("Fixing protobuf")
-                    line = line.replace(oldprotobuf, newprotobuf)
-                if "libxc" in line:
-                    print("Fixing libxc")
-                    line = line.replace(oldLibxc, newLibxc)
-                if "Python" in line:
-                    print("Fixing Python")
-                    line = line.replace(oldPython, newPython)
+                    line = line.replace(
+                        releases['GCC'][0], releases['GCC'][1], 1)
+                    line = line.replace(
+                        releases['imkl'][0], releases['imkl'][1], 1)
+                    line = line.replace(
+                        releases['gomkl'][0], releases['gomkl'][1], 1)
+                    line = line.replace(
+                        releases['gpsmpi'][0], releases['gpsmpi'][1], 1)
+                if line.startswith('site_contacts'):
+                    print("Removing site_contacts")
+                    line = ""
+                for key in releases:
+                    if key in line:
+                        print("Changing", key, "from",
+                              releases[key][0], "to", releases[key][1])
+                        line = line.replace(
+                            releases[key][0], releases[key][1], 1)
                 newFile.write(line)
         newFile.close()
         return True
@@ -136,6 +116,7 @@ def updateFile(oldName, newName, current, latest, siteContact):
 if __name__ == "__main__":
     args = parse_arguments()
     newFile = updateFileName(args.i, args.o, args.n)
-    if updateFile(args.i, newFile, args.o, args.n, args.s):
-        print("Updated", args.i, ' to GCC', newGCC, 'and to version', args.n)
+    if updateFile(args.i, newFile, args.o, args.n):
+        print("Updated", args.i, ' to GCC',
+              releases['GCC'][1], 'and to version', args.n)
         print("Run: \n\neb -l %s" % newFile)