diff --git a/.gitignore b/.gitignore
index 990fb90878cff913f1bddc2f0e934d3f3bb1997d..73d283f54728d3f913dd73f1653169f8603b98bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@ e3.cfg
 tools/ess-env.conf
 .vscode
 require-ess/require.Makefile
+require-ess/Db/*.db
+require-ess/Db/*.d
\ No newline at end of file
diff --git a/configure/modules/DECOUPLE_FLAGS b/configure/modules/DECOUPLE_FLAGS
index a2eae503d14d155d1ce8857528009152bdaa1bdf..6904d96ac104cc3b875253cdd02c3739d5d04f5a 100644
--- a/configure/modules/DECOUPLE_FLAGS
+++ b/configure/modules/DECOUPLE_FLAGS
@@ -3,10 +3,10 @@
 # The only way to exclude header files is to set $(module)_VERSION to a blank.
 
 # We first collect all installed modules from $(E3_SITEMODS_PATH) ...
-$(foreach dir,$(patsubst $(E3_SITEMODS_PATH)/%,%,$(wildcard $(E3_SITEMODS_PATH)/*)),$(eval DECOUPLE_MODULES += $(dir)))
+#$(foreach dir,$(patsubst $(E3_SITEMODS_PATH)/%,%,$(wildcard $(E3_SITEMODS_PATH)/*)),$(eval DECOUPLE_MODULES += $(dir)))
 
 # ... except that we don't want to overwrite the versions from required modules, so keep those.
-$(foreach mod,$(filter-out $(REQ),$(DECOUPLE_MODULES)),$(eval $(mod)_VERSION =))
+#$(foreach mod,$(filter-out $(REQ),$(DECOUPLE_MODULES)),$(eval $(mod)_VERSION =))
 
 # In addition to decouple the existent e3 module,
 # We use this opportunatiy in order to apply global configuration
diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile
index 977895d882eb445f7d6785f65640a6bd396f014c..32333d7aae68df0e14ece50bad1f8936c4d90eca 100644
--- a/require-ess/tools/driver.makefile
+++ b/require-ess/tools/driver.makefile
@@ -547,24 +547,31 @@ EPICS_INCLUDES =
 # endef
 # $(eval $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${EPICS_MODULES}/*))),$(call ADD_FOREIGN_INCLUDES,$m)))
 
+# Note: Due to the addition of build numbers, we have to be somewhat more careful here.
+#       If module A depends on module B version 3.1.0, then it should record the current build number and save
+#       that. Otherwise we can end up in a situation where a new module being installed can cause dependencies
+#       to fail to load correctly. The goal of the below is to explicitly add the latest build number, if none 
+#       is specified. It works as follows:
+#       $(if $(shell [[ "$($1_VERSION)" =~ ^[0-9]+\.[0-9]+\.[0-9]+$$ ]] && echo match),                             ## We test that the module version is of the form x.y.z exactly. In that case...
+#           $(notdir $(firstword $(shell ls -dvr $(E3_SITEMODS_PATH)/$1/$($1_VERSION)?(-+([0-9])) 2> /dev/null ))), ## ...find the highest build number with the given version...
+#           $($1_VERSION))                                                                                          ## ... else preserve the module number as is.
+
 define ADD_SITEMODS_INCLUDES
-$(eval $(1)_VERSION := $(patsubst ${E3_SITEMODS_PATH}/$(1)/%/include,%,$(firstword $(shell ls -dvr ${E3_SITEMODS_PATH}/$(1)/$(VERSIONGLOB)/include 2>/dev/null))))
-INSTALL_INCLUDES += $$(patsubst %,-I${E3_SITEMODS_PATH}/$(1)/%/include,$$($(1)_VERSION))
+INSTALL_INCLUDES += $$(patsubst %,-I$(E3_SITEMODS_PATH)/$1/%/include,$$(if $$(shell [[ "$$($1_VERSION)" =~ ^[0-9]+\.[0-9]+\.[0-9]+$$$$ ]] && echo match),$$(notdir $$(firstword $$(shell ls -dvr $(E3_SITEMODS_PATH)/$1/$$($1_VERSION)?(-+([0-9])) 2> /dev/null ))),$$($1_VERSION)))
 endef
 $(eval $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${E3_SITEMODS_PATH}/*))),$(call ADD_SITEMODS_INCLUDES,$m)))
 
 define ADD_SITEAPPS_INCLUDES
-$(eval $(1)_VERSION := $(patsubst ${E3_SITEAPPS_PATH}/$(1)/%/include,%,$(firstword $(shell ls -dvr ${E3_SITEAPPS_PATH}/$(1)/$(VERSIONGLOB)/include 2>/dev/null))))
-INSTALL_INCLUDES += $$(patsubst %,-I${E3_SITEAPPS_PATH}/$(1)/%/include,$$($(1)_VERSION))
+INSTALL_INCLUDES += $$(patsubst %,-I$(E3_SITEAPPS_PATH)/$1/%/include,$$(if $$(shell [[ "$$($1_VERSION)" =~ ^[0-9]+\.[0-9]+\.[0-9]+$$$$ ]] && echo match),$$(notdir $$(firstword $$(shell ls -dvr $(E3_SITEAPPS_PATH)/$1/$$($1_VERSION)?(-+([0-9])) 2> /dev/null ))),$$($1_VERSION)))
 endef
 $(eval $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${E3_SITEAPPS_PATH}/*))),$(call ADD_SITEAPPS_INCLUDES,$m)))
 
 
 # Manually required modules.
 define ADD_MANUAL_DEPENDENCIES
-$(eval $(1)_VERSION := $(patsubst ${E3_SITEMODS_PATH}/$(1)/%,%,$(firstword $(shell ls -dvr ${E3_SITEMODS_PATH}/$(1)/$(VERSIONGLOB) 2>/dev/null))))
+$1_VERSION_BUILD = $$(if $$(shell [[ "$$($1_VERSION)" =~ ^[0-9]+\.[0-9]+\.[0-9]+$$$$ ]] && echo match),$$(notdir $$(firstword $$(shell ls -dvr $(E3_SITEMODS_PATH)/$1/$$($1_VERSION)?(-+([0-9])) 2> /dev/null ))),$$($1_VERSION))
 endef
-$(eval $(foreach m,${REQ},$(call ADD_MANUAL_DEPENDENCIES,$m)))
+$(foreach m,${REQ},$(eval $(call ADD_MANUAL_DEPENDENCIES,$m)))
 
 BASERULES=${EPICS_BASE}/configure/RULES
 
@@ -1016,7 +1023,7 @@ ${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE)
 	cat *.d 2>/dev/null | sed 's/ /\n/g' | sed -n '$(DEP_PARSER)' | grep -v "include" | sort -u >> $@
 ifneq ($(strip ${REQ}),)
 # Manully added dependencies: ${REQ}
-	@$(foreach m,${REQ},echo "$m $(or ${$m_VERSION},$(and $(wildcard ${E3_SITEMODS_PATH}/$m),$(error REQUIRED module $m has no numbered version. Set $m_VERSION)),$(warning REQUIRED module $m not found for ${T_A}.))" >> $@;)
+	@$(foreach m,${REQ},echo "$m $(or ${$m_VERSION_BUILD},$(and $(wildcard ${E3_SITEMODS_PATH}/$m),$(error REQUIRED module $m has no numbered version. Set $m_VERSION)),$(warning REQUIRED module $m not found for ${T_A}.))" >> $@;)
 endif
 # Update the version numbers to ensure that the build number is included
 	sed -i 's/^\([a-z_][a-z0-9_]*\) \([0-9]\+\.[0-9]\+\.[0-9]\+\)$$/\1 \2-0/' $@