diff --git a/configure/CONFIG b/configure/CONFIG
index a6f25bee68a64f6b4bc7c32f608b4758bf66d283..5487f77846cc36317c6fd4c76ae2643bc787ae92 100644
--- a/configure/CONFIG
+++ b/configure/CONFIG
@@ -18,15 +18,17 @@ include $(TOP)/configure/CONFIG_MODULE
 endif
 
 
+E3_MODULES_PATH:=$(EPICS_BASE)
+REQUIRE_CONFIG:=$(TOP)/configure/E3
 
 include $(EPICS_BASE)/configure/CONFIG_BASE_VERSION
-include $(TOP)/configure/E3/CONFIG_REQUIRE
-include $(TOP)/configure/E3/CONFIG_SHELL
-include $(TOP)/configure/E3/CONFIG_E3_PATH
-include $(TOP)/configure/E3/CONFIG_E3_MAKEFILE
-include $(TOP)/configure/E3/CONFIG_EPICS
-include $(TOP)/configure/E3/CONFIG_EXPORT
-include $(TOP)/configure/E3/CONFIG_TEST
+include $(REQUIRE_CONFIG)/CONFIG_REQUIRE
+include $(REQUIRE_CONFIG)/CONFIG_SHELL
+include $(REQUIRE_CONFIG)/CONFIG_E3_PATH
+include $(REQUIRE_CONFIG)/CONFIG_E3_MAKEFILE
+include $(REQUIRE_CONFIG)/CONFIG_TEST
+include $(REQUIRE_CONFIG)/CONFIG_EPICS
+include $(REQUIRE_CONFIG)/CONFIG_EXPORT
 
 
 VARS_EXCLUDES+=BASE_3_14
diff --git a/configure/modules/CONFIG b/configure/E3/CONFIG
similarity index 95%
rename from configure/modules/CONFIG
rename to configure/E3/CONFIG
index 377f34b3e52ddbdfb0d5fb137525db105957652a..d8dac693e96d7a17b63a328c31736be6a36da429 100644
--- a/configure/modules/CONFIG
+++ b/configure/E3/CONFIG
@@ -3,6 +3,8 @@
 # Update the module version (for numeric versions) with a build number of 0 if none is specified
 E3_MODULE_VERSION:=$(E3_MODULE_VERSION)$(shell [[ "$(E3_MODULE_VERSION)" =~ ^[0-9]+\.[0-9]+\.[0-9]+$$ ]] && echo +0)
 
+E3_MODULES_PATH?=$(E3_REQUIRE_LOCATION)/siteMods
+
 include $(EPICS_BASE)/configure/CONFIG_BASE_VERSION
 include $(REQUIRE_CONFIG)/CONFIG_REQUIRE
 include $(REQUIRE_CONFIG)/CONFIG_SHELL
diff --git a/configure/modules/CONFIG_CELL b/configure/E3/CONFIG_CELL
similarity index 100%
rename from configure/modules/CONFIG_CELL
rename to configure/E3/CONFIG_CELL
diff --git a/configure/modules/CONFIG_DKMS b/configure/E3/CONFIG_DKMS
similarity index 100%
rename from configure/modules/CONFIG_DKMS
rename to configure/E3/CONFIG_DKMS
diff --git a/configure/E3/CONFIG_E3_MAKEFILE b/configure/E3/CONFIG_E3_MAKEFILE
index 1e8aad839c5229ca23ea24a1651d6231afecb138..f3d6ba4b6dc5230b20519468f7d7bf27325ed657 100644
--- a/configure/E3/CONFIG_E3_MAKEFILE
+++ b/configure/E3/CONFIG_E3_MAKEFILE
@@ -1,9 +1,6 @@
 # Pass necessary driver.makefile variables through makefile options
 #
 
-# Here, E3_MODULES_PATH is the same as E3_REQUIRE_LOCATION
-E3_MODULES_PATH:=$(EPICS_BASE)
-
 E3_REQUIRE_MAKEFILE_INPUT_OPTIONS := -C $(E3_MODULE_SRC_PATH)
 E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += -f $(E3_MODULE_MAKEFILE)
 E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += LIBVERSION="$(E3_MODULE_VERSION)"
diff --git a/configure/E3/CONFIG_E3_PATH b/configure/E3/CONFIG_E3_PATH
index ec621bda6661ae6aa7beabeb1d46f8b6499483ee..43e724ec3742ad84de80b6225c4ee2e1fa0bafba 100644
--- a/configure/E3/CONFIG_E3_PATH
+++ b/configure/E3/CONFIG_E3_PATH
@@ -3,3 +3,12 @@
 E3_SITEMODS_PATH:=$(E3_REQUIRE_LOCATION)/siteMods
 E3_SITELIBS_PATH:=$(E3_REQUIRE_LOCATION)/siteLibs
 E3_SITEAPPS_PATH:=$(E3_REQUIRE_LOCATION)/siteApps
+
+E3_MODULES_INSTALL_LOCATION:=$(E3_MODULES_PATH)/$(E3_MODULE_NAME)/$(E3_MODULE_VERSION)
+
+E3_MODULES_INSTALL_LOCATION_INC:=$(E3_MODULES_INSTALL_LOCATION)/include
+E3_MODULES_INSTALL_LOCATION_DB:=$(E3_MODULES_INSTALL_LOCATION)/db
+E3_MODULES_INSTALL_LOCATION_BIN:=$(E3_MODULES_INSTALL_LOCATION)/bin
+E3_MODULES_INSTALL_LOCATION_LIB:=$(E3_MODULES_INSTALL_LOCATION)/lib
+
+EXPORT_VARS+=E3_MODULES_INSTALL_LOCATION_LIB
diff --git a/configure/E3/CONFIG_EPICS b/configure/E3/CONFIG_EPICS
index 320b00b92643843e967449d05453104cc4ac7fb2..20902b72e24e085407cd3e1dad7a2d79636312d5 100644
--- a/configure/E3/CONFIG_EPICS
+++ b/configure/E3/CONFIG_EPICS
@@ -42,6 +42,10 @@ export M_ADSUPPORT
 export M_ADCORE
 export M_OPCUA
 
+## This is needed since the target "epics" (in configure/RULES_MODULE in most modules)
+## uses SUDOBASH to run the make process
+SUDOBASH := bash -c
+
 ### Exclude the following variables to display
 VARS_EXCLUDES+=COMMUNITY_EPICS_MODULES
 VARS_EXCLUDES+=M_AUTOSAVE
@@ -63,3 +67,5 @@ VARS_EXCLUDES+=M_IPAC
 VARS_EXCLUDES+=M_ADSUPPORT
 VARS_EXCLUDES+=M_ADCORE
 VARS_EXCLUDES+=M_OPCUA
+
+VARS_EXCLUDES+=SUDOBASH
diff --git a/configure/E3/CONFIG_EXPORT b/configure/E3/CONFIG_EXPORT
index 6aeb4e9b4da846de22e6e29cd2d5f2239ec80475..6d5b66093de4e210d1c539f72b5e2ea155d3a2f9 100644
--- a/configure/E3/CONFIG_EXPORT
+++ b/configure/E3/CONFIG_EXPORT
@@ -7,6 +7,7 @@ MSI:=$(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)/msi
 EXPORT_VARS+=EPICS_HOST_ARCH
 EXPORT_VARS+=EPICS_BASE
 EXPORT_VARS+=MSI
+EXPORT_VARS+=E3_MODULE_NAME
 EXPORT_VARS+=E3_MODULE_VERSION
 EXPORT_VARS+=E3_SITEMODS_PATH
 EXPORT_VARS+=E3_SITEAPPS_PATH
@@ -16,6 +17,7 @@ EXPORT_VARS+=$(filter E3_REQUIRE_%,$(.VARIABLES))
 EXPORT_VARS+=QUIET
 EXPORT_VARS+=$(filter %_DEP_VERSION,$(.VARIABLES))
 EXPORT_VARS+=$(filter WITH_%,$(.VARIABLES))
+EXPORT_VARS+=$(filter %_EXTERNAL,$(.VARIABLES))
 
 export_version=$(eval export $1)
 $(eval $(foreach v,$(EXPORT_VARS),$(call export_version,$v)))
diff --git a/configure/E3/CONFIG_REQUIRE b/configure/E3/CONFIG_REQUIRE
index 6cdf4a4089b37f17ac2b0525c1915e8b3bb4d724..045f42b54ef166f16c597e6cd6a34b3af31a235c 100644
--- a/configure/E3/CONFIG_REQUIRE
+++ b/configure/E3/CONFIG_REQUIRE
@@ -4,7 +4,6 @@
 
 E3_REQUIRE_LOCATION:=$(EPICS_BASE)/$(E3_REQUIRE_NAME)/$(E3_REQUIRE_VERSION)
 
-
 E3_REQUIRE_TOOLS:=$(E3_REQUIRE_LOCATION)/tools
 E3_REQUIRE_BIN:=$(E3_REQUIRE_LOCATION)/bin
 E3_REQUIRE_LIB:=$(E3_REQUIRE_LOCATION)/lib
@@ -12,6 +11,3 @@ E3_REQUIRE_DB:=$(E3_REQUIRE_LOCATION)/db
 E3_REQUIRE_DBD:=$(E3_REQUIRE_LOCATION)/dbd
 E3_REQUIRE_INC:=$(E3_REQUIRE_LOCATION)/include
 E3_REQUIRE_CONFIG:=$(E3_REQUIRE_LOCATION)/configure
-
-
-EXPORT_VARS+=$(filter E3_REQUIRE_%,$(.VARIABLES))
diff --git a/configure/E3/CONFIG_SHELL b/configure/E3/CONFIG_SHELL
index 931904edaf5119b60722ca97ef2a69ebd7ad2f70..b35126f3d81d2ac2200ce10c844ce1f0973cc0eb 100644
--- a/configure/E3/CONFIG_SHELL
+++ b/configure/E3/CONFIG_SHELL
@@ -5,4 +5,4 @@ else
   SHELL = /usr/bin/bash
 endif
 
-VARS_EXCLUDES += SHELL
+VARS_EXCLUDES+=SHELL
diff --git a/configure/E3/CONFIG_TEST b/configure/E3/CONFIG_TEST
index 90d167277d6cdbfc117cdfb1c4319fd193f1bbef..d9792f20aa9dcede18a97366c77c25df8997eccd 100644
--- a/configure/E3/CONFIG_TEST
+++ b/configure/E3/CONFIG_TEST
@@ -1,3 +1,11 @@
 TEST_DIR:=$(TOP)/tests
 
+RUN_IOCSH_TEST_COMMAND = run-iocsh --name "${EPICS_BASE}/require/${E3_REQUIRE_VERSION}/bin/iocsh.bash" -r "$(E3_MODULE_NAME),$(E3_MODULE_VERSION)" -l $(TEMP_CELL_PATH)
+TEMP_CELL_PATH := $(TOP)/testMods-$(shell date +"%y%m%d%H%M%S")
+RMDIR = $(RM) -rf
+
+EXPORT_VARS+=TEMP_CELL_PATH
+
 VARS_EXCLUDES+=TEST_DIR
+VARS_EXCLUDES+=RMDIR
+VARS_EXCLUDES+=TEMP_CELL_PATH
diff --git a/configure/E3/DECOUPLE_FLAGS b/configure/E3/DECOUPLE_FLAGS
new file mode 100644
index 0000000000000000000000000000000000000000..befe8edba9bb76f94f1ee1c8b853f5e0f5744068
--- /dev/null
+++ b/configure/E3/DECOUPLE_FLAGS
@@ -0,0 +1 @@
+# Legacy file. Needed since <module>.Makefiles include this.
diff --git a/configure/E3/DEFINES_FT b/configure/E3/DEFINES_FT
index 840ac0cf00e81e483d677e375ff2afb94a96f4e3..b88cb9c47ffa8e0015d0aadf793869476466539e 100644
--- a/configure/E3/DEFINES_FT
+++ b/configure/E3/DEFINES_FT
@@ -13,17 +13,27 @@ git submodule update --remote --merge $@/
 endef
 
 define patch_site
-for i in $(wildcard $(TOP)/patch/Site/$(E3_MODULE_VERSION)-*.p0.patch); do\
-	printf "\nPatching %s with the file : %s\n" "$(E3_MODULE_SRC_PATH)" "$$i"; \
-	git apply --directory=$(E3_MODULE_SRC_PATH) --ignore-whitespace -p0 $$i;\
-done
+patches=$$(ls $(TOP)/patch/Site/$(E3_MODULE_VERSION)/*.p0.patch 2> /dev/null); \
+if [ -n "$$patches" ]; then \
+  for i in $$patches; do \
+    printf "\nPatching %s with the file : %s\n" "$(E3_MODULE_SRC_PATH)" "$$i"; \
+    git apply --directory=$(E3_MODULE_SRC_PATH) --ignore-whitespace -p0 $$i; \
+  done; \
+else \
+  echo ">>> No patches to apply" >&2; \
+fi
 endef
 
 define patch_revert_site
-for i in $(wildcard $(TOP)/patch/Site/$(E3_MODULE_VERSION)-*.p0.patch); do\
-	printf "\nReverting applied patch %s with the file : %s\n" "$(E3_MODULE_SRC_PATH)" "$$i"; \
-	git apply -R --directory=$(E3_MODULE_SRC_PATH) --ignore-whitespace -p0 $$i;\
-done
+patches=$$(ls $(TOP)/patch/Site/$(E3_MODULE_VERSION)/*.p0.patch 2> /dev/null); \
+if [ -n "$$patches" ]; then \
+  for i in $$patches; do\
+    printf "\nReverting applied patch %s with the file : %s\n" "$(E3_MODULE_SRC_PATH)" "$$i"; \
+    git apply -R --directory=$(E3_MODULE_SRC_PATH) --ignore-whitespace -p0 $$i;\
+  done \
+else \
+  echo ">>> No patches to revert" >&2; \
+fi
 endef
 
 ifndef VERBOSE
diff --git a/configure/modules/RULES_CELL b/configure/E3/RULES_CELL
similarity index 100%
rename from configure/modules/RULES_CELL
rename to configure/E3/RULES_CELL
diff --git a/configure/modules/RULES_CHECKS b/configure/E3/RULES_CHECKS
similarity index 88%
rename from configure/modules/RULES_CHECKS
rename to configure/E3/RULES_CHECKS
index b8992b7d9160a8ecbb057c3cc1b45cd9c49331e1..875a02a72a62c53ba14bb05de241dbe521e8ba39 100644
--- a/configure/modules/RULES_CHECKS
+++ b/configure/E3/RULES_CHECKS
@@ -1,5 +1,9 @@
 .PHONY: consistency_checks
-consistency_checks: module_name_check sitemods_check loc-check
+consistency_checks: module_name_check loc-check
+
+ifneq (require,$(E3_MODULE_NAME))
+consistency_checks: sitemods_check
+endif
 
 # Check that the module name satisfies a few conditions before we go on.
 module_name_check:
diff --git a/configure/E3/RULES_DB b/configure/E3/RULES_DB
deleted file mode 100644
index 9c751131d4076db1cf1c94f4dbd986867d1142e4..0000000000000000000000000000000000000000
--- a/configure/E3/RULES_DB
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- mode: Makefile;-*-
-## This RULE should be used in case of inflating DB files
-##
-
-.PHONY: db
-
-
-db: conf
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) db
diff --git a/configure/E3/RULES_DEV b/configure/E3/RULES_DEV
index a3887729024304421154706fcaa0d28a63eba05f..2c7e9a9ff1cc71b052b00178c0658dd0b1dc1c5f 100644
--- a/configure/E3/RULES_DEV
+++ b/configure/E3/RULES_DEV
@@ -1,11 +1,12 @@
 # -*- mode: Makefile;-*-
 
-.PHONY: devvars devenv devinit devbuild devclean devinstall devrebuild devuninstall devdistclean devconf devrequireconf
+.PHONY: devvars devenv devinit devbuild devclean devinstall devrebuild devuninstall devdistclean devconf devepics devepics-clean devepics-distclean devpatch devpatchrevert devexistent devdep devvers
 
 devvars: vars
 
 devenv: devvars
 
+## Initializes a dev setup, defined with configure/CONFIG_MODULE_DEV and configure/RELEASE_DEV
 devinit: git-submodule-sync
 	git clone $(E3_MODULE_DEV_GITURL) $(E3_MODULE_SRC_PATH)
 	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
@@ -24,8 +25,14 @@ devrebuild: nonexists
 devuninstall: nonexists
 devdistclean: nonexists
 devconf: nonexists
-devrequireconf: nonexists
+devepics: nonexists
+devepics-clean: nonexists
+devepics-distclean: nonexists
+devpatch: nonexists
+devpatchrevert: nonexists
 devexistent: nonexists
+devdep: nonexists
+devvers: nonexists
 nonexists:
 	$(QUIET)echo ""
 	$(QUIET)echo "------------------------------------------------------------"
@@ -35,15 +42,31 @@ nonexists:
 	$(QUIET)echo ""
 else
 
+## Displays information about the build process (development mode)
+devdebug: debug
+
+## Build current module (development mode)
 devbuild: build
+
+## Deletes temporary build files (development mode)
 devclean: clean
+
+## Install the current module (development mode)
 devinstall: install
 devrebuild: rebuild
+
+## Uninstall the current module (development mode)
 devuninstall: uninstall
 devconf: conf
-devrequireconf: requireconf
 devdistclean: clean
 	$(QUIET)echo "Removing $(E3_MODULE_SRC_PATH) ......... "
 	rm -rf $(E3_MODULE_SRC_PATH)
+devepics: epics
+devepics-clean: epics-clean
+devepics-distclean: epics-distclean
+devpatch: patch
+devpatchrevert: patchrevert
 devexistent: existent
+devdep: dep
+devvers: vers
 endif
diff --git a/configure/modules/RULES_DKMS b/configure/E3/RULES_DKMS
similarity index 100%
rename from configure/modules/RULES_DKMS
rename to configure/E3/RULES_DKMS
diff --git a/configure/E3/RULES_E3 b/configure/E3/RULES_E3
index 8a2dfdb214b4084cf211e3cd503390368e415394..82dda913018ff81daa51db99c748c44f9287f3cb 100644
--- a/configure/E3/RULES_E3
+++ b/configure/E3/RULES_E3
@@ -3,7 +3,7 @@
 
 .DEFAULT_GOAL := help
 
-.PHONY: help default install uninstall build rebuild clean conf all
+.PHONY: help default install uninstall build rebuild clean conf all prebuild
 
 default: help
 
@@ -28,33 +28,43 @@ help:
 
 
 
-## Install require to $(EPICS_BASE)/require/$(E3_MODULE_VERSION)
-install: requireconf install_module
+## Install module to $(E3_MODULES_INSTALL_LOCATION)
+install: install_module hdrs
 
-install_module: build db
+.PHONY: db
+db: err_no_db_rule
+
+.PHONY: err_no_db_rule
+err_no_db_rule:
+	$(error The 'db' target has been discontinued. If you have custom database expansion rule to use, please contact the e3 team)
+
+.PHONY: install_module
+install_module: build db_internal
 	$(QUIET) $(E3_MODULE_MAKE_CMDS) install
 
-## Uninstall the current module
-uninstall: conf
-ifeq (,$(strip $(wildcard $(E3_SITEMODS_PATH)/*)))
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) uninstall
-else
-	$(error Cannot run 'make uninstall': please manually uninstall everything in $(E3_SITEMODS_PATH))
-endif
+.PHONY: check_uninstall
+check_uninstall:
 
-# We should be able to force an uninstall of require if we need to; this should not be done without some care and thought, however!
-## Uninstall, including deleting siteMods directory.
-forceuninstall: conf
+## Uninstall the current module
+uninstall: check_uninstall conf
 	$(QUIET) $(E3_MODULE_MAKE_CMDS) uninstall
 
-## Build current module.
-build: conf
+## Build current module
+build: conf checkout prebuild
 	$(QUIET) $(E3_MODULE_MAKE_CMDS) build
 
+## Run module-specific commands before building
+prebuild: conf
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) prebuild
+
 ## Displays information about the build process
 debug: conf
 	$(QUIET) $(E3_MODULE_MAKE_CMDS) debug
 
+.PHONY: db_internal
+db_internal: conf
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) db_internal
+
 ## Clean, build, and install the current module
 rebuild: clean build install
 
@@ -62,10 +72,42 @@ rebuild: clean build install
 clean: conf
 	$(QUIET) $(E3_MODULE_MAKE_CMDS) clean
 
+## Initializes, patches, builds, and installs
 all: init patch rebuild
 
 # Copy $(E3_MODULE_MAKEFILE) into $(E3_MODULE_SRC_PATH)
-conf:
-	$(QUIET) install -m 644 $(TOP)/$(E3_MODULE_MAKEFILE)  $(E3_MODULE_SRC_PATH)/
+include $(REQUIRE_CONFIG)/RULES_CHECKS
+conf: consistency_checks
+	$(QUIET) install -p -m 644 $(TOP)/$(E3_MODULE_MAKEFILE)  $(E3_MODULE_SRC_PATH)/
+
+.PHONY: init git-submodule-sync $(E3_MODULE_SRC_PATH) checkout
+
+ifeq (,$(strip $(EPICS_MODULE_TAG)))
+E3_LOCAL_SOURCE:=1
+endif
 
+ifeq ($(E3_LOCAL_SOURCE),1)
 init:
+	$(QUIET) echo ">> You are in the local source mode."
+	$(QUIET) echo ">> Nothing happens."
+
+checkout:
+
+else
+## Syncs and checks out the tag $(EPICS_MODULE_TAG) for the submodule
+init: git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout
+
+
+git-submodule-sync:
+	$(QUIET) git submodule sync
+
+
+$(E3_MODULE_SRC_PATH):
+	$(QUIET) $(git_update)
+
+
+checkout:
+	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
+
+
+endif
diff --git a/configure/E3/RULES_EPICS b/configure/E3/RULES_EPICS
index c62191404fab080b999845183425c7ba362dbeee..f7dac66e307723441d0be314c998d09d346f31dd 100644
--- a/configure/E3/RULES_EPICS
+++ b/configure/E3/RULES_EPICS
@@ -1,14 +1,10 @@
-# -*- mode: Makefile;-*-
-
 # One should define the any dependency modules and EPICS base path
 # in the following directory
 
-# .PHONY: epics epics-clean
+.PHONY: epics-clean epics-distclean
 
-# epics:
-#        $(QUIET)echo "EPICS_BASE=$(EPICS_BASE)"       > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/RELEASE
-#        $(QUIET)echo "INSTALL_LOCATION=$(M_IOCSTATS)" > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/CONFIG_SITE
-#        $(MAKE) -C $(E3_MODULE_SRC_PATH)
+epics-clean:
+	$(MAKE) -C $(E3_MODULE_SRC_PATH) clean
 
-#epics-clean:
-#        $(MAKE) -C $(E3_MODULE_SRC_PATH) clean
+epics-distclean:
+	$(MAKE) -C $(E3_MODULE_SRC_PATH) distclean
diff --git a/configure/E3/RULES_PATCH b/configure/E3/RULES_PATCH
index fb3d8ada42821b29b23c4c56a66c691798f8a51f..d2a6d0f6613be31117328fd8f01c4ba5b3fad9e8 100644
--- a/configure/E3/RULES_PATCH
+++ b/configure/E3/RULES_PATCH
@@ -1,11 +1,15 @@
 
 .PHONY: patch patchrevert
 
+.PHONY: check_for_old_patches
+check_for_old_patches:
+	$(if $(wildcard $(TOP)/patch/Site/$(patsubst %+0,%,$(E3_MODULE_VERSION))*.p0.patch),$(warning Warning: old-style patches detected. Please move them to patch/Site/$$E3_MODULE_VERSION/.))
+
 
 ## Apply Patch Files
-patch:
+patch: check_for_old_patches
 	$(QUIET) $(call patch_site)
 
 ## Revert Patch Files
-patchrevert:
+patchrevert: check_for_old_patches
 	$(QUIET) $(call patch_revert_site)
diff --git a/configure/modules/RULES_SITEMODS b/configure/E3/RULES_SITEMODS
similarity index 67%
rename from configure/modules/RULES_SITEMODS
rename to configure/E3/RULES_SITEMODS
index 73ac0c3a2e947da5b2a4e1b6762357ed5141e754..3313189aedb9970021c3760aedf0c44f88ffb5b8 100644
--- a/configure/modules/RULES_SITEMODS
+++ b/configure/E3/RULES_SITEMODS
@@ -4,13 +4,9 @@ include $(REQUIRE_CONFIG)/RULES_E3
 include $(REQUIRE_CONFIG)/RULES_CELL
 include $(REQUIRE_CONFIG)/DEFINES_FT
 include $(REQUIRE_CONFIG)/RULES_PATCH
-include $(REQUIRE_CONFIG)/RULES_E3_SITELIBS
 include $(REQUIRE_CONFIG)/RULES_TEST
 
-include $(REQUIRE_CONFIG)/RULES_VLIBS
 include $(REQUIRE_CONFIG)/RULES_DKMS
-include $(REQUIRE_CONFIG)/RULES_PROD
 include $(REQUIRE_CONFIG)/RULES_VARS
-#include $(REQUIRE_CONFIG)/RULES_EPICS
 
 include $(REQUIRE_CONFIG)/RULES_DEV
diff --git a/configure/E3/RULES_TEST b/configure/E3/RULES_TEST
index 5a6e2b8473f663b14bfa544ef6867e3f46f1b39e..f542ecb693592fb72d2be104a9af22ee88f25880 100644
--- a/configure/E3/RULES_TEST
+++ b/configure/E3/RULES_TEST
@@ -1,4 +1,29 @@
 .PHONY: test
+## Tests the current build
+test:
+
+ifeq ($(shell command -v run-iocsh > /dev/null 2>&1 ; echo $$?),0)
+
+test: temp_install run_test module_tests cleanup_test
+
+.PHONY: temp_install
+temp_install:
+	$(MAKE) cellinstall E3_CELL_PATH=$(TEMP_CELL_PATH)
+
+.PHONY: run_test
+run_test:
+	$(RUN_IOCSH_TEST_COMMAND)
+
+.PHONY: module_tests
+module_tests:
+
+.PHONY: cleanup_test
+cleanup_test:
+	$(RMDIR) $(TEMP_CELL_PATH)
+
+else  # if the if-run-iocsh-exists test fails
 
 test:
-	pytest $(TEST_DIR) -v
+	$(error run-iocsh must be installed to use the test capability. Please install run-iocsh from PyPI.)
+
+endif
diff --git a/configure/E3/RULES_VARS b/configure/E3/RULES_VARS
index e1e0221a197f0d1d724effbc5e16a61f8abe8b1e..fa5c1a92e7fe8178627e6d3523bdbb8bdf7ede38 100644
--- a/configure/E3/RULES_VARS
+++ b/configure/E3/RULES_VARS
@@ -6,13 +6,13 @@ DEP_MODULES:=$(filter %_DEP_VERSION, $(E3_MODULES_VARIABLES))
 
 LEVEL?=2
 
-## Print relevant environment variables
-.PHONY: env
-env: vars
+GENERATED_DEP_FILE:=$(E3_MODULES_INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)/$(E3_MODULE_NAME).dep
 
+## Print relevant environment variables
 .PHONY: vars
 vars: header
-	$(foreach v, $(E3_MODULES_VARIABLES), $(info $(v) = $($(v)))) @#noop
+	$(foreach v, $(filter-out %_DEP_VERSION,$(E3_MODULES_VARIABLES)), $(info $(v) = $($(v)))) @#noop
+	$(foreach v, $(filter %_DEP_VERSION,$(E3_MODULES_VARIABLES)), $(info $(v) = $($(v)))) @#noop
 
 .PHONY: header
 header:
@@ -31,11 +31,16 @@ else
 	$(QUIET)tree -L $(LEVEL) $(E3_MODULES_PATH)/$(E3_MODULE_NAME)
 endif
 
+## Displays dependency information, both configured and generated
 .PHONY: dep
 dep:
 	$(QUIET)echo "require $(E3_MODULE_NAME),$(E3_MODULE_VERSION)"
 	$(QUIET)echo "< configured ..."
 	$(foreach v, $(DEP_MODULES), $(info $(v) = $($(v)))) @#noop
+ifneq ("$(wildcard $(GENERATED_DEP_FILE))","")
+	$(QUIET)echo "> generated ..."
+	$(QUIET)tail -n+2 $(GENERATED_DEP_FILE)
+endif
 
 .PHONY: vers
 vers:
diff --git a/configure/RULES b/configure/RULES
index e35fe641f195cbab110fa222817a460d3d67819c..01475baa5aa2094e4c0fd34920beb7b8ca6d55cd 100644
--- a/configure/RULES
+++ b/configure/RULES
@@ -1,22 +1,21 @@
 # -*- mode: Makefile;-*-
 # include $(EPICS_BASE)/configure/RULES
 
-include $(TOP)/configure/E3/DEFINES_FT
+include $(REQUIRE_CONFIG)/DEFINES_FT
 #
 # We cannot use file operation in CentOS7.4,
 # because Makefile version is 3.8.
-include $(TOP)/configure/E3/RULES_E3
-include $(TOP)/configure/E3/RULES_EPICS
+include $(REQUIRE_CONFIG)/RULES_E3
+include $(REQUIRE_CONFIG)/RULES_EPICS
 
 
-include $(TOP)/configure/E3/RULES_REQUIRE
+include $(TOP)/configure/module/RULES_REQUIRE
 
-include $(TOP)/configure/E3/RULES_PATCH
-include $(TOP)/configure/E3/RULES_DB
-include $(TOP)/configure/E3/RULES_VARS
-include $(TOP)/configure/E3/RULES_TEST
+include $(REQUIRE_CONFIG)/RULES_PATCH
+include $(REQUIRE_CONFIG)/RULES_VARS
+include $(TOP)/configure/module/RULES_TEST
 
 
 ifneq (,$(findstring dev,$(MAKECMDGOALS)))
-include $(TOP)/configure/E3/RULES_DEV
+include $(REQUIRE_CONFIG)/RULES_DEV
 endif
diff --git a/configure/E3/RULES_REQUIRE b/configure/module/RULES_REQUIRE
similarity index 67%
rename from configure/E3/RULES_REQUIRE
rename to configure/module/RULES_REQUIRE
index f1c66a4dead18f09fb87319f4ac3be7d3a72f65d..5b56c10929357e453129358409ad43af3fd635fb 100644
--- a/configure/E3/RULES_REQUIRE
+++ b/configure/module/RULES_REQUIRE
@@ -10,11 +10,17 @@ E3_TEST_SCRIPT    := $(TOP)/tools/test_installed_modules.sh
 E3_SHELL_FILES    := $(wildcard $(E3_MODULE_SRC_PATH)/tools/iocsh*.bash)
 E3_IOC_CFG_FILES  += $(E3_MODULE_SRC_PATH)/tools/setE3Env.bash
 E3_IOC_CFG_FILES  += $(E3_MODULE_SRC_PATH)/tools/promptE3Env.bash
-E3_REQUIRE_CONF_FILES := $(filter-out $(FILE_FILTER), $(wildcard $(TOP)/configure/modules/*))
+E3_REQUIRE_CONF_FILES := $(filter-out $(FILE_FILTER), $(wildcard $(TOP)/configure/E3/*))
 
+check_uninstall:
+ifneq (,$(strip $(wildcard $(E3_SITEMODS_PATH)/*)))
+	$(error Cannot run 'make uninstall': please manually uninstall everything in $(E3_SITEMODS_PATH))
+endif
 
 .PHONY: e3-site-path requireconf
 
+install: requireconf
+
 requireconf: e3-site-path e3-require-path
 	$(QUIET) install    -m 755 $(wildcard $(E3_MODULE_SRC_PATH)/tools/*.tcl)  $(E3_REQUIRE_TOOLS)/
 	$(QUIET) install    -m 644 $(E3_MODULE_SRC_PATH)/tools/driver.makefile    $(E3_REQUIRE_TOOLS)/
@@ -35,6 +41,21 @@ e3-site-path:
 	$(QUIET) install -d -m 755 $(E3_SITEMODS_PATH)
 	$(QUIET) install -d -m 755 $(E3_SITEAPPS_PATH)
 
+.PHONY: epics
+epics:
+	$(QUIET)echo "EPICS_BASE=$(EPICS_BASE)"        > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/RELEASE
+	$(QUIET)echo "CHECK_RELEASE = YES"             > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/CONFIG_SITE
+	$(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH)"
+
+# We should be able to force an uninstall of require if we need to; this should not be done without some care and thought, however!
+## Uninstall, including deleting siteMods directory.
+forceuninstall: conf
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) uninstall
+
+consistency_checks:
+
+.PHONY: hdrs
+hdrs:
 
 VARS_EXCLUDES+=FILE_FILTER
 VARS_EXCLUDES+=E3_SHELL_FILES
diff --git a/configure/module/RULES_TEST b/configure/module/RULES_TEST
new file mode 100644
index 0000000000000000000000000000000000000000..9e424cd44c0d6561c7e0ba2cd711142815073757
--- /dev/null
+++ b/configure/module/RULES_TEST
@@ -0,0 +1,3 @@
+.PHONY: test
+test:
+	pytest $(TEST_DIR) -v
diff --git a/configure/modules/CONFIG_E3_MAKEFILE b/configure/modules/CONFIG_E3_MAKEFILE
deleted file mode 100644
index f3d6ba4b6dc5230b20519468f7d7bf27325ed657..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_E3_MAKEFILE
+++ /dev/null
@@ -1,34 +0,0 @@
-# Pass necessary driver.makefile variables through makefile options
-#
-
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS := -C $(E3_MODULE_SRC_PATH)
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += -f $(E3_MODULE_MAKEFILE)
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += LIBVERSION="$(E3_MODULE_VERSION)"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += PROJECT="$(E3_MODULE_NAME)"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += EPICS_MODULES="$(E3_MODULES_PATH)"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += EPICS_LOCATION="$(EPICS_BASE)"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += BUILDCLASSES="Linux"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SITEMODS_PATH="$(E3_SITEMODS_PATH)"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SITEAPPS_PATH="$(E3_SITEAPPS_PATH)"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SITELIBS_PATH="$(E3_SITELIBS_PATH)"
-
-ifeq ($(shell git status > /dev/null 2>&1; echo $$?),0)
-GIT_REMOTE_NAME := $(shell git remote | head -n 1)
-
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += $(E3_MODULE_NAME)_E3_GIT_DESC="$(shell git describe --tags 2> /dev/null || git rev-parse HEAD 2> /dev/null || echo 'Not a git repository')"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += $(E3_MODULE_NAME)_E3_GIT_STATUS="[ $(shell git status --porcelain | sed 's/^/\\\\\\\"/' | sed 's/$$/\\\\\\\", /')]"
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += $(E3_MODULE_NAME)_E3_GIT_URL="$(shell git config --get remote.$(GIT_REMOTE_NAME).url 2> /dev/null | sed 's%^https://[^@]*@%https://%')"
-else
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += $(E3_MODULE_NAME)_E3_GIT_DESC=
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += $(E3_MODULE_NAME)_E3_GIT_STATUS=
-E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += $(E3_MODULE_NAME)_E3_GIT_URL=
-endif
-
-
-E3_MODULE_MAKE_CMDS:=make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS)
-
-
-## the following variables to display
-
-VARS_EXCLUDES+=E3_REQUIRE_MAKEFILE_INPUT_OPTIONS
-VARS_EXCLUDES+=GIT_REMOTE_NAME
diff --git a/configure/modules/CONFIG_E3_PATH b/configure/modules/CONFIG_E3_PATH
deleted file mode 100644
index 41abeb90ed2467b83efb4c43475032f29a9fdeb7..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_E3_PATH
+++ /dev/null
@@ -1,22 +0,0 @@
-## If E3_MODULES_PATH is not defined, we will use the
-## siteMods as the module path. This is valid for the
-## EPICS or E3 Modules
-## E3 Application should define in its own
-## E3_MODULES_PATH := $(E3_REQUIRE_LOCATION)/siteApps
-## in configure/CONFIG
-
-E3_MODULES_PATH?=$(E3_REQUIRE_LOCATION)/siteMods
-
-
-E3_SITEMODS_PATH:=$(E3_REQUIRE_LOCATION)/siteMods
-E3_SITELIBS_PATH:=$(E3_REQUIRE_LOCATION)/siteLibs
-E3_SITEAPPS_PATH:=$(E3_REQUIRE_LOCATION)/siteApps
-
-E3_MODULES_INSTALL_LOCATION:=$(E3_MODULES_PATH)/$(E3_MODULE_NAME)/$(E3_MODULE_VERSION)
-
-E3_MODULES_INSTALL_LOCATION_INC:=$(E3_MODULES_INSTALL_LOCATION)/include
-E3_MODULES_INSTALL_LOCATION_DB:=$(E3_MODULES_INSTALL_LOCATION)/db
-E3_MODULES_INSTALL_LOCATION_BIN:=$(E3_MODULES_INSTALL_LOCATION)/bin
-E3_MODULES_INSTALL_LOCATION_LIB:=$(E3_MODULES_INSTALL_LOCATION)/lib
-
-EXPORT_VARS+=E3_MODULES_INSTALL_LOCATION_LIB
diff --git a/configure/modules/CONFIG_EPICS b/configure/modules/CONFIG_EPICS
deleted file mode 100644
index 432e0d3fdebe3f1c49d216f5000723c2b19c32e7..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_EPICS
+++ /dev/null
@@ -1,81 +0,0 @@
-COMMUNITY_EPICS_MODULES:=$(EPICS_BASE)/epics-modules
-
-M_AUTOSAVE:=$(COMMUNITY_EPICS_MODULES)/autosave
-M_DEVLIB2:=$(COMMUNITY_EPICS_MODULES)/devlib2
-M_IOCSTATS:=$(COMMUNITY_EPICS_MODULES)/iocStats
-M_ASYN:=$(COMMUNITY_EPICS_MODULES)/asyn
-M_BUSY:=$(COMMUNITY_EPICS_MODULES)/busy
-M_MODBUS:=$(COMMUNITY_EPICS_MODULES)/modbus
-M_MRFIOC2:=$(COMMUNITY_EPICS_MODULES)/mrfioc2
-M_LUA:=$(COMMUNITY_EPICS_MODULES)/lua
-M_IPMICOMM:=$(COMMUNITY_EPICS_MODULES)/ipmiComm
-M_STREAM:=$(COMMUNITY_EPICS_MODULES)/stream
-M_CALC:=$(COMMUNITY_EPICS_MODULES)/calc
-M_MOTOR:=$(COMMUNITY_EPICS_MODULES)/motor
-M_SSCAN:=$(COMMUNITY_EPICS_MODULES)/sscan
-M_SNCSEQ:=$(COMMUNITY_EPICS_MODULES)/seq
-M_IP:=$(COMMUNITY_EPICS_MODULES)/ip
-M_IPAC:=$(COMMUNITY_EPICS_MODULES)/ipac
-M_ADSUPPORT:=$(COMMUNITY_EPICS_MODULES)/adsupport
-M_ADCORE:=$(COMMUNITY_EPICS_MODULES)/adcore
-M_OPCUA:=$(COMMUNITY_EPICS_MODULES)/opcua
-
-
-
-export M_AUTOSAVE
-export M_DEVLIB2
-export M_IOCSTATS
-export M_ASYN
-export M_BUSY
-export M_MODBUS
-export M_MRFIOC2
-export M_LUA
-export M_IPMICOMM
-export M_STREAM
-export M_CALC
-export M_MOTOR
-export M_SSCAN
-export M_SNCSEQ
-export M_IP
-export M_IPAC
-export M_ADSUPPORT
-export M_ADCORE
-export M_OPCUA
-
-## This is needed since the target "epics" (in configure/RULES_MODULE in most modules)
-## uses SUDOBASH to run the make process:
-#
-#.PHONY: epics
-#epics:
-#	$(QUIET)echo "EPICS_BASE:=$(EPICS_BASE)"        > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/RELEASE
-#	$(QUIET)echo "ASYN:=$(M_ASYN)"                  > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/RELEASE
-#	$(QUIET)echo "CHECK_RELEASE:=YES"             > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/CONFIG_SITE
-#	$(QUIET)echo "INSTALL_LOCATION:=$(M_DEVLIB2)"  >> $(TOP)/$(E3_MODULE_SRC_PATH)/configure/CONFIG_SITE
-#	$(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH)"
-#
-## And so that last line will only run if SUDOBASH is defined to be "bash -c"
-SUDOBASH := bash -c
-
-### Exclude the following variables to display
-VARS_EXCLUDES+=COMMUNITY_EPICS_MODULES
-VARS_EXCLUDES+=M_AUTOSAVE
-VARS_EXCLUDES+=M_DEVLIB2
-VARS_EXCLUDES+=M_IOCSTATS
-VARS_EXCLUDES+=M_ASYN
-VARS_EXCLUDES+=M_BUSY
-VARS_EXCLUDES+=M_MODBUS
-VARS_EXCLUDES+=M_MRFIOC2
-VARS_EXCLUDES+=M_LUA
-VARS_EXCLUDES+=M_IPMICOMM
-VARS_EXCLUDES+=M_STREAM
-VARS_EXCLUDES+=M_CALC
-VARS_EXCLUDES+=M_MOTOR
-VARS_EXCLUDES+=M_SSCAN
-VARS_EXCLUDES+=M_SNCSEQ
-VARS_EXCLUDES+=M_IP
-VARS_EXCLUDES+=M_IPAC
-VARS_EXCLUDES+=M_ADSUPPORT
-VARS_EXCLUDES+=M_ADCORE
-VARS_EXCLUDES+=M_OPCUA
-
-VARS_EXCLUDES+=SUDOBASH
diff --git a/configure/modules/CONFIG_EXPORT b/configure/modules/CONFIG_EXPORT
deleted file mode 100644
index 6d5b66093de4e210d1c539f72b5e2ea155d3a2f9..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_EXPORT
+++ /dev/null
@@ -1,25 +0,0 @@
-# Variables should be transferred to module_name.makefile
-
-EPICS_HOST_ARCH:=$(shell perl $(EPICS_BASE)/lib/perl/EpicsHostArch.pl 2> /dev/null)
-
-MSI:=$(EPICS_BASE)/bin/$(EPICS_HOST_ARCH)/msi
-
-EXPORT_VARS+=EPICS_HOST_ARCH
-EXPORT_VARS+=EPICS_BASE
-EXPORT_VARS+=MSI
-EXPORT_VARS+=E3_MODULE_NAME
-EXPORT_VARS+=E3_MODULE_VERSION
-EXPORT_VARS+=E3_SITEMODS_PATH
-EXPORT_VARS+=E3_SITEAPPS_PATH
-EXPORT_VARS+=E3_SITELIBS_PATH
-EXPORT_VARS+=$(filter E3_REQUIRE_%,$(.VARIABLES))
-
-EXPORT_VARS+=QUIET
-EXPORT_VARS+=$(filter %_DEP_VERSION,$(.VARIABLES))
-EXPORT_VARS+=$(filter WITH_%,$(.VARIABLES))
-EXPORT_VARS+=$(filter %_EXTERNAL,$(.VARIABLES))
-
-export_version=$(eval export $1)
-$(eval $(foreach v,$(EXPORT_VARS),$(call export_version,$v)))
-
-VARS_EXCLUDES+=export_version
diff --git a/configure/modules/CONFIG_REQUIRE b/configure/modules/CONFIG_REQUIRE
deleted file mode 100644
index 871948ef4afc5f49ef88d1b7b369fdc44244343f..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_REQUIRE
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# The following VARIABLES are the same as other modules ones.
-#
-
-E3_REQUIRE_TOOLS:=$(E3_REQUIRE_LOCATION)/tools
-E3_REQUIRE_BIN:=$(E3_REQUIRE_LOCATION)/bin
-E3_REQUIRE_LIB:=$(E3_REQUIRE_LOCATION)/lib
-E3_REQUIRE_DB:=$(E3_REQUIRE_LOCATION)/db
-E3_REQUIRE_DBD:=$(E3_REQUIRE_LOCATION)/dbd
-E3_REQUIRE_INC:=$(E3_REQUIRE_LOCATION)/include
-E3_REQUIRE_CONFIG:=$(E3_REQUIRE_LOCATION)/configure
diff --git a/configure/modules/CONFIG_SHELL b/configure/modules/CONFIG_SHELL
deleted file mode 100644
index b35126f3d81d2ac2200ce10c844ce1f0973cc0eb..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_SHELL
+++ /dev/null
@@ -1,8 +0,0 @@
-
-ifdef DEBUG_SHELL
-  SHELL = /bin/sh -x
-else
-  SHELL = /usr/bin/bash
-endif
-
-VARS_EXCLUDES+=SHELL
diff --git a/configure/modules/CONFIG_TEST b/configure/modules/CONFIG_TEST
deleted file mode 100644
index 9ef0ba0d780faa337e7b74769ef4cdf6b014dd1c..0000000000000000000000000000000000000000
--- a/configure/modules/CONFIG_TEST
+++ /dev/null
@@ -1,9 +0,0 @@
-
-RUN_IOCSH_TEST_COMMAND = run-iocsh --name "${EPICS_BASE}/require/${E3_REQUIRE_VERSION}/bin/iocsh.bash" -r "$(E3_MODULE_NAME),$(E3_MODULE_VERSION)" -l $(TEMP_CELL_PATH)
-TEMP_CELL_PATH := $(TOP)/testMods-$(shell date +"%y%m%d%H%M%S")
-RMDIR = $(RM) -rf
-
-EXPORT_VARS += TEMP_CELL_PATH
-
-VARS_EXCLUDES += RMDIR
-VARS_EXCLUDES += TEMP_CELL_PATH
diff --git a/configure/modules/DECOUPLE_FLAGS b/configure/modules/DECOUPLE_FLAGS
deleted file mode 100644
index 6904d96ac104cc3b875253cdd02c3739d5d04f5a..0000000000000000000000000000000000000000
--- a/configure/modules/DECOUPLE_FLAGS
+++ /dev/null
@@ -1,17 +0,0 @@
-# *** ISSUES
-# driver.makefile recursively read all include directories which were installed.
-# 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)))
-
-# ... 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 =))
-
-# In addition to decouple the existent e3 module,
-# We use this opportunatiy in order to apply global configuration
-# space. For example, common compiler options
-#
-#ifeq ($(T_A),linux-x86_64)
-#USR_LDFLAGS += -Wl,--compress-debug-sections=zlib
-#endif
diff --git a/configure/modules/DEFINES_FT b/configure/modules/DEFINES_FT
deleted file mode 100644
index a91260bb8c94f3e7b2c74b8a413eae05e50cb0cd..0000000000000000000000000000000000000000
--- a/configure/modules/DEFINES_FT
+++ /dev/null
@@ -1,51 +0,0 @@
-
-# Keep always the module up-to-date
-define git_update =
-git submodule deinit -f $@/
-sed -i '/submodule/,24465d'  $(TOP)/.git/config
-rm -rf $(TOP)/.git/modules/$@
-git submodule init $@/
-git submodule update --init --recursive $@/.
-git submodule update --remote --merge $@/
-endef
-
-define git_module_init_update =
-git submodule update --init --recursive $@/.
-git submodule update --remote --merge $@/
-endef
-
-define patch_site
-patches=$$(ls $(TOP)/patch/Site/$(E3_MODULE_VERSION)/*.p0.patch 2> /dev/null); \
-if [ -n "$$patches" ]; then \
-  for i in $$patches; do \
-    printf "\nPatching %s with the file : %s\n" "$(E3_MODULE_SRC_PATH)" "$$i"; \
-    git apply --directory=$(E3_MODULE_SRC_PATH) --ignore-whitespace -p0 $$i; \
-  done; \
-else \
-  echo ">>> No patches to apply" >&2; \
-fi
-endef
-
-define patch_revert_site
-patches=$$(ls $(TOP)/patch/Site/$(E3_MODULE_VERSION)/*.p0.patch 2> /dev/null); \
-if [ -n "$$patches" ]; then \
-  for i in $$patches; do\
-    printf "\nReverting applied patch %s with the file : %s\n" "$(E3_MODULE_SRC_PATH)" "$$i"; \
-    git apply -R --directory=$(E3_MODULE_SRC_PATH) --ignore-whitespace -p0 $$i;\
-  done \
-else \
-  echo ">>> No patches to revert" >&2; \
-fi
-endef
-
-ifndef VERBOSE
-  QUIET := @
-endif
-
-### Exclude the following variables to display
-VARS_EXCLUDES+=git_update
-VARS_EXCLUDES+=git_module_init_update
-VARS_EXCLUDES+=patch_site
-VARS_EXCLUDES+=patch_revert_site
-VARS_EXCLUDES+=QUIET
-VARS_EXCLUDES+=SHELL
diff --git a/configure/modules/RULES_DEV b/configure/modules/RULES_DEV
deleted file mode 100644
index 02e2df964500f3d5ab384220dca794dfe14a27e0..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_DEV
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- mode: Makefile;-*-
-
-.PHONY: devvars devenv devinit devbuild devclean devinstall devrebuild devuninstall devdistclean devepics devepics-clean devepics-distclean devpatch devpatchrevert devexistent devdep devvers
-
-devvars: vars
-
-devenv: devvars
-
-## Initializes a dev setup, defined with configure/CONFIG_MODULE_DEV and configure/RELEASE_DEV
-devinit: git-submodule-sync
-	git clone $(E3_MODULE_DEV_GITURL) $(E3_MODULE_SRC_PATH)
-	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
-
-# E3_MODULE_SRC_PATH_FLAG 1 : the directory is not there
-# E3_MODULE_SRC_PATH_FLAG 0 : the directory is there
-E3_MODULE_SRC_PATH_FLAG := $(shell test -d $(E3_MODULE_SRC_PATH) 1>&2 2> /dev/null; echo $$?)
-
-# Note that this is re-defined in CONFIG_MODULE_DEV, which is included if you do a `make dev*`.
-ifeq "$(E3_MODULE_SRC_PATH_FLAG)" "1"
-
-devbuild: nonexists
-devclean: nonexists
-devinstall: nonexists
-devrebuild: nonexists
-devuninstall: nonexists
-devdistclean: nonexists
-devepics: nonexists
-devepics-clean: nonexists
-devepics-distclean: nonexists
-devpatch: nonexists
-devpatchrevert: nonexists
-devexistent: nonexists
-devdep: nonexists
-devvers: nonexists
-nonexists:
-	$(QUIET)echo ""
-	$(QUIET)echo "------------------------------------------------------------"
-	$(QUIET)echo "          Could not find $(E3_MODULE_SRC_PATH) "
-	$(QUIET)echo "          Please make devinit first !          "
-	$(QUIET)echo "------------------------------------------------------------"
-	$(QUIET)echo ""
-else
-
-## Displays information about the build process (development mode)
-devdebug: debug
-
-## Build current module (development mode)
-devbuild: build
-
-## Deletes temporary build files (development mode)
-devclean: clean
-
-## Install the current module (development mode)
-devinstall: install
-devrebuild: rebuild
-
-## Uninstall the current module (development mode)
-devuninstall: uninstall
-devdistclean: clean
-	$(QUIET)echo "Removing $(E3_MODULE_SRC_PATH) ......... "
-	rm -rf $(E3_MODULE_SRC_PATH)
-devepics: epics
-devepics-clean: epics-clean
-devepics-distclean: epics-distclean
-devpatch: patch
-devpatchrevert: patchrevert
-devexistent: existent
-devdep: dep
-devvers: vers
-endif
diff --git a/configure/modules/RULES_E3 b/configure/modules/RULES_E3
deleted file mode 100644
index d473c3dc9873d836e25d56a48823df90a792f43d..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_E3
+++ /dev/null
@@ -1,110 +0,0 @@
-# -*- mode: Makefile;-*-
-.NOTPARALLEL:
-
-.DEFAULT_GOAL := help
-
-.PHONY: help default install uninstall build rebuild clean conf all prebuild
-
-default: help
-
-# # help is defined in
-# # https://gist.github.com/rcmachado/af3db315e31383502660
-help:
-	$(info --------------------------------------- )
-	$(info Available targets)
-	$(info --------------------------------------- )
-	$(QUIET) awk '/^[a-zA-Z\-\_0-9]+:/ {            \
-	  nb = sub( /^## /, "", helpMsg );              \
-	  if(nb == 0) {                                 \
-	    helpMsg = $$0;                              \
-	    nb = sub( /^[^:]*:.* ## /, "", helpMsg );   \
-	  }                                             \
-	  if (nb)                                       \
-	    print  $$1 "\t" helpMsg;                    \
-	}                                               \
-	{ helpMsg = $$0 }'                              \
-	$(MAKEFILE_LIST) | column -ts:
-
-
-
-
-## Install current module to $(EPICS_BASE)/require/$(E3_REQUIRE_VERSION)/siteMods
-install: install_module install_links
-
-.PHONY: db
-db: err_no_db_rule
-
-.PHONY: err_no_db_rule
-err_no_db_rule:
-	$(error The 'db' target has been discontinued. If you have custom database expansion rule to use, please contact the e3 team)
-
-.PHONY: install_module
-install_module: build db_internal
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) install
-
-## Uninstall the current module
-uninstall: conf
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) uninstall
-
-## Build current module
-build: conf checkout prebuild
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) build
-
-## Run module-specific commands before building
-prebuild: conf
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) prebuild
-
-## Displays information about the build process
-debug: conf
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) debug
-
-.PHONY: db_internal
-db_internal: conf
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) db_internal
-
-## Clean, build, and install the current module
-rebuild: clean build install
-
-## Deletes temporary build files
-clean: conf
-	$(QUIET) $(E3_MODULE_MAKE_CMDS) clean
-
-## Initializes, patches, builds, and installs
-all: init patch rebuild
-
-# Copy $(E3_MODULE_MAKEFILE) into $(E3_MODULE_SRC_PATH)
-include $(REQUIRE_CONFIG)/RULES_CHECKS
-conf: consistency_checks
-	$(QUIET) install -p -m 644 $(TOP)/$(E3_MODULE_MAKEFILE)  $(E3_MODULE_SRC_PATH)/
-
-.PHONY: init git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout
-
-ifeq (,$(strip $(EPICS_MODULE_TAG)))
-E3_LOCAL_SOURCE:=1
-endif
-
-ifeq ($(E3_LOCAL_SOURCE),1)
-init:
-	$(QUIET) echo ">> You are in the local source mode."
-	$(QUIET) echo ">> Nothing happens."
-
-checkout:
-
-else
-## Syncs and checks out the tag $(EPICS_MODULE_TAG) for the submodule
-init: git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout
-
-
-git-submodule-sync:
-	$(QUIET) git submodule sync
-
-
-$(E3_MODULE_SRC_PATH):
-	$(QUIET) $(git_update)
-
-
-checkout:
-	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
-
-
-endif
diff --git a/configure/modules/RULES_E3_SITEAPPS b/configure/modules/RULES_E3_SITEAPPS
deleted file mode 100644
index fbab8d1a7e213db87d48ae9c75d124ef9df1bbf1..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_E3_SITEAPPS
+++ /dev/null
@@ -1,7 +0,0 @@
-
-# Create symbolic links in siteLibs
-
-.PHONY: install_links
-
-# GNU find
-install_links: hdrs
diff --git a/configure/modules/RULES_E3_SITELIBS b/configure/modules/RULES_E3_SITELIBS
deleted file mode 100644
index 436d526507b0940b2391921243385707dd07c226..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_E3_SITELIBS
+++ /dev/null
@@ -1,18 +0,0 @@
-
-# Create symbolic links in siteLibs
-
-.PHONY: install_links $(INSTALLED_EPICS_BASE_ARCHS)
-
-# GNU find
-install_links: $(INSTALLED_EPICS_BASE_ARCHS) hdrs
-#	ln -snf $(E3_MODULES_INSTALL_LOCATION_INC) $(E3_MODULES_INSTALL_LOCATION_INC_LINK)
-#	ln -snf $(E3_MODULES_INSTALL_LOCATION_DB)  $(E3_MODULES_INSTALL_LOCATION_DB_LINK)
-#	ln -snf $(E3_MODULES_INSTALL_LOCATION_BIN) $(E3_MODULES_INSTALL_LOCATION_BIN_LINK)
-#	ln -snf $(E3_MODULES_INSTALL_LOCATION_LIB) $(E3_MODULES_INSTALL_LOCATION_LIB_LINK)
-#	ln -sf  $(E3_MODULES_INSTALL_LOCATION_DBD) $(E3_MODULES_INSTALL_LOCATION_DBD_LINK)
-#	find $(E3_SITELIBS_PATH) -xtype l -delete
-
-
-$(INSTALLED_EPICS_BASE_ARCHS):
-#	mkdir -p $(E3_SITELIBS_PATH)/$@
-#	ln -sf $(E3_MODULES_INSTALL_LOCATION)/lib/$@/$(E3_MODULES_LIBNAME) $(E3_SITELIBS_PATH)/$@/$(E3_MODULES_LIBLINKNAME)
diff --git a/configure/modules/RULES_EPICS b/configure/modules/RULES_EPICS
deleted file mode 100644
index f7dac66e307723441d0be314c998d09d346f31dd..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_EPICS
+++ /dev/null
@@ -1,10 +0,0 @@
-# One should define the any dependency modules and EPICS base path
-# in the following directory
-
-.PHONY: epics-clean epics-distclean
-
-epics-clean:
-	$(MAKE) -C $(E3_MODULE_SRC_PATH) clean
-
-epics-distclean:
-	$(MAKE) -C $(E3_MODULE_SRC_PATH) distclean
diff --git a/configure/modules/RULES_PATCH b/configure/modules/RULES_PATCH
deleted file mode 100644
index d2a6d0f6613be31117328fd8f01c4ba5b3fad9e8..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_PATCH
+++ /dev/null
@@ -1,15 +0,0 @@
-
-.PHONY: patch patchrevert
-
-.PHONY: check_for_old_patches
-check_for_old_patches:
-	$(if $(wildcard $(TOP)/patch/Site/$(patsubst %+0,%,$(E3_MODULE_VERSION))*.p0.patch),$(warning Warning: old-style patches detected. Please move them to patch/Site/$$E3_MODULE_VERSION/.))
-
-
-## Apply Patch Files
-patch: check_for_old_patches
-	$(QUIET) $(call patch_site)
-
-## Revert Patch Files
-patchrevert: check_for_old_patches
-	$(QUIET) $(call patch_revert_site)
diff --git a/configure/modules/RULES_PROD b/configure/modules/RULES_PROD
deleted file mode 100644
index 8181c49051151fe82a81f3311cf7f9ad3c72caae..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_PROD
+++ /dev/null
@@ -1,8 +0,0 @@
-PROD_BIN_PATH:=$(E3_MODULES_INSTALL_LOCATION_BIN)/$(EPICS_HOST_ARCH)
-
-.PHONY: prod_env
-
-prod_env:
-	$(QUIET) echo " -------- In most case, you can run the following export in a terminal --------"
-	$(QUIET) echo "export PATH=$(PROD_BIN_PATH):$${PATH}"
-	$(QUIET) echo " ------------------------------------------------------------------------------"
diff --git a/configure/modules/RULES_SITEAPPS b/configure/modules/RULES_SITEAPPS
deleted file mode 100644
index e2e71258ec8e05063a415a7bd33358074a76f930..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_SITEAPPS
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- mode: Makefile;-*-
-
-include $(REQUIRE_CONFIG)/RULES_E3
-include $(REQUIRE_CONFIG)/DEFINES_FT
-include $(REQUIRE_CONFIG)/RULES_PATCH
-include $(REQUIRE_CONFIG)/RULES_E3_SITEAPPS
-
-include $(REQUIRE_CONFIG)/RULES_VLIBS
-include $(REQUIRE_CONFIG)/RULES_DKMS
-include $(REQUIRE_CONFIG)/RULES_PROD
-include $(REQUIRE_CONFIG)/RULES_VARS
-#include $(REQUIRE_CONFIG)/RULES_EPICS
-
-ifneq (,$(findstring dev,$(MAKECMDGOALS)))
--include $(REQUIRE_CONFIG)/RULES_DEV
-endif
diff --git a/configure/modules/RULES_TEST b/configure/modules/RULES_TEST
deleted file mode 100644
index f542ecb693592fb72d2be104a9af22ee88f25880..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_TEST
+++ /dev/null
@@ -1,29 +0,0 @@
-.PHONY: test
-## Tests the current build
-test:
-
-ifeq ($(shell command -v run-iocsh > /dev/null 2>&1 ; echo $$?),0)
-
-test: temp_install run_test module_tests cleanup_test
-
-.PHONY: temp_install
-temp_install:
-	$(MAKE) cellinstall E3_CELL_PATH=$(TEMP_CELL_PATH)
-
-.PHONY: run_test
-run_test:
-	$(RUN_IOCSH_TEST_COMMAND)
-
-.PHONY: module_tests
-module_tests:
-
-.PHONY: cleanup_test
-cleanup_test:
-	$(RMDIR) $(TEMP_CELL_PATH)
-
-else  # if the if-run-iocsh-exists test fails
-
-test:
-	$(error run-iocsh must be installed to use the test capability. Please install run-iocsh from PyPI.)
-
-endif
diff --git a/configure/modules/RULES_VARS b/configure/modules/RULES_VARS
deleted file mode 100644
index 518a325665104e09f2f9965fe0a72b9f68953cbb..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_VARS
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- mode: Makefile;-*-
-
-E3_MODULES_VARIABLES:=$(sort $(filter-out $(VARS_EXCLUDES) VARS_EXCLUDES,$(.VARIABLES)))
-
-DEP_MODULES:=$(filter %_DEP_VERSION, $(E3_MODULES_VARIABLES))
-
-LEVEL?=2
-
-GENERATED_DEP_FILE:=$(E3_MODULES_INSTALL_LOCATION_LIB)/$(EPICS_HOST_ARCH)/$(E3_MODULE_NAME).dep
-
-## Print relevant environment variables
-.PHONY: vars
-vars: header
-	$(foreach v, $(filter-out %_DEP_VERSION,$(E3_MODULES_VARIABLES)), $(info $(v) = $($(v)))) @#noop
-	$(foreach v, $(filter %_DEP_VERSION,$(E3_MODULES_VARIABLES)), $(info $(v) = $($(v)))) @#noop
-
-.PHONY: header
-header:
-	$(QUIET)echo ""
-	$(QUIET)echo "------------------------------------------------------------"
-	$(QUIET)echo ">>>>     Current EPICS and E3 Environment Variables     <<<<"
-	$(QUIET)echo "------------------------------------------------------------"
-	$(QUIET)echo ""
-
-## Show installed versions of the current module
-existent:
-ifeq (,$(shell which tree))
-	$(QUIET)ls -d $(E3_MODULES_PATH)/$(E3_MODULE_NAME)
-	$(QUIET)find $(E3_MODULES_PATH)/$(E3_MODULE_NAME)/ -maxdepth $(LEVEL) | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/:---\1/"
-else
-	$(QUIET)tree -L $(LEVEL) $(E3_MODULES_PATH)/$(E3_MODULE_NAME)
-endif
-
-## Displays dependency information, both configured and generated
-.PHONY: dep
-dep:
-	$(QUIET)echo "require $(E3_MODULE_NAME),$(E3_MODULE_VERSION)"
-	$(QUIET)echo "< configured ..."
-	$(foreach v, $(DEP_MODULES), $(info $(v) = $($(v)))) @#noop
-ifneq ("$(wildcard $(GENERATED_DEP_FILE))","")
-	$(QUIET)echo "> generated ..."
-	$(QUIET)tail -n+2 $(GENERATED_DEP_FILE)
-endif
-
-.PHONY: vers
-vers:
-	$(QUIET)echo "EPICS_MODULE_TAG:=$(EPICS_MODULE_TAG), origin : $(origin EPICS_MODULE_TAG)"
-	$(QUIET)echo "E3_MODULE_VERSION:=$(E3_MODULE_VERSION), origin : $(origin E3_MODULE_VERSION)"
-
-# https://www.cmcrossroads.com/article/printing-value-makefile-variable
-PRINT.%:
-	$(QUIET)echo $* = $($*)
-	$(QUIET)echo $*\'s origin is $(origin $*)
-
-print-%:
-	$(QUIET)echo $* = $($*)
-	$(QUIET)echo $*\'s origin is $(origin $*)
-
-FORCE:
diff --git a/configure/modules/RULES_VLIBS b/configure/modules/RULES_VLIBS
deleted file mode 100644
index 4fd909975f74756b4d6f93526c5e7fe986f21f49..0000000000000000000000000000000000000000
--- a/configure/modules/RULES_VLIBS
+++ /dev/null
@@ -1,6 +0,0 @@
-
-#.PHONY: vlibs
-
-## Install vendor libraries
-#vlibs: conf
-#	$(QUIET) $(E3_MODULE_MAKE_CMDS) vlibs
diff --git a/require.Makefile b/require.Makefile
index 01b8594e2a1ae0cd5531d8ab5fc83689bb50058c..94c29e10c7ae1a0039f7d88f739174ede6bf5055 100644
--- a/require.Makefile
+++ b/require.Makefile
@@ -97,11 +97,11 @@ USR_DBFLAGS += -I . -I ..
 USR_DBFLAGS += -I$(EPICS_BASE)/db
 
 
-TEMS = $(wildcard $(APPDB)/*.template)
+TMPS = $(wildcard $(APPDB)/*.template)
 
-db: $(TEMS)
+db: $(TMPS)
 
-$(TEMS):
+$(TMPS):
 	@printf "Inflating database ... %44s >>> %40s \n" "$@" "$(basename $(@)).db"
 	@rm -f  $(basename $(@)).db.d  $(basename $(@)).db
 	@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db $@  > $(basename $(@)).db.d
@@ -110,4 +110,4 @@ $(TEMS):
 
 
 
-.PHONY: db $(TEMS)
+.PHONY: db $(TMPS)