diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile
index bf7c6a6cf4b523de3ff2bb79ad3c2471e1789e16..dd0ec706d7f242bf7f16485264e853f297272091 100644
--- a/require-ess/tools/driver.makefile
+++ b/require-ess/tools/driver.makefile
@@ -247,6 +247,10 @@ SCR = $(if ${SCRIPTS},$(filter-out -none-,${SCRIPTS}),$(wildcard *.cmd *.iocsh))
 SCR += ${SCRIPTS_${EPICSVERSION}}
 export SCR
 
+CFGS = ${CONFIGS}
+CFGS += ${CONFIGS_${EPICSVERSION}}
+export CFGS
+
 # Filter architectures to build using EXCLUDE_ARCHS and ARCH_FILTER.
 ALL_ARCHS = ${EPICS_HOST_ARCH} ${CROSS_COMPILER_TARGET_ARCHS}
 BUILD_ARCHS = $(filter-out $(addprefix %,${EXCLUDE_ARCHS}),$(filter-out $(addsuffix %,${EXCLUDE_ARCHS}),\
@@ -287,6 +291,8 @@ debug::
 	@echo "ARCH_FILTER = ${ARCH_FILTER}"
 	@echo "EXCLUDE_ARCHS = ${EXCLUDE_ARCHS}"
 	@echo "LIBVERSION = ${LIBVERSION}"
+	@echo "E3_SITEMODS_PATH = ${E3_SITEMODS_PATH}"
+	@echo "EPICS_MODULES = ${EPICS_MODULES}"
 
 # Create e.g. build-$(T_A) rules for each architecture, so that we can just do
 #   build: build-arch1 build-arch2
@@ -422,8 +428,6 @@ export BINS
 VLIBS = $(VENDOR_LIBS) $(foreach x,$(VAR_EXTENSIONS),$(VENDOR_LIBS_$x))
 export VLIBS
 
-export CFG
-
 # These variables are written into a .yaml file in the installed module directory to keep track of
 # metadata for which module was compiled.
 
@@ -468,7 +472,7 @@ INSTALL_VLIB    = ${INSTALL_REV}/lib/$(T_A)/vendor
 INSTALL_INCLUDE = ${INSTALL_REV}/include
 INSTALL_DBD     = ${INSTALL_REV}/dbd
 INSTALL_DB      = ${INSTALL_REV}/db
-INSTALL_CFG     = ${INSTALL_REV}/cfg
+INSTALL_CONFIG  = ${INSTALL_REV}/cfg
 INSTALL_DOC     = ${MODULE_LOCATION}/doc
 INSTALL_SCR     = ${INSTALL_REV}
 
@@ -518,10 +522,6 @@ DBDFILES += $(patsubst %.stt,%_snl.dbd,$(notdir $(filter %.stt,${SRCS})))
 # Create dbd file for GPIB code.
 DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS})))
 
-# snc location
-SNCALL=$(shell ls  -dv $(E3_SITEMODS_PATH)/sequencer/$(sequencer_VERSION)/bin/$(EPICS_HOST_ARCH) 2> /dev/null)
-SNC=$(lastword $(SNCALL))/snc
-
 ifneq (,$(strip $(VLIBS)))
 USR_LDFLAGS_$(T_A) += $(foreach l,$(VLIBS),-L../$(dir $(l)))
 USR_LDFLAGS_$(T_A) += -Wl,-rpath,"\$$ORIGIN/vendor"
@@ -536,6 +536,10 @@ ifneq ($(MODULELIB),)
 LIBOBJS += $(addsuffix $(OBJ),$(basename ${VERSIONFILE}))
 endif # MODULELIB
 
+MODULE_RULES = ${CFGS:%=../%}
+MODULE_RULES += $(foreach m,$(REQ),$(wildcard $(E3_SITEMODS_PATH)/$m/$($(m)_VERSION)/cfg/RULES*))
+MODULE_RULES += $(foreach m,$(REQ),$(wildcard $(EPICS_MODULES)/$m/$($(m)_VERSION)/cfg/RULES*))
+
 debug::
 	@echo "===================== Pass 3: Build directory ====================="
 	@echo "BUILDCLASSES = ${BUILDCLASSES}"
@@ -550,6 +554,7 @@ debug::
 	@echo "SOURCES_${OS_CLASS} = ${SOURCES_${OS_CLASS}}"
 	@echo "SRCS = ${SRCS}"
 	@echo "REQ = ${REQ}"
+	@echo "CFGS = ${CFGS}"
 	@echo "LIBOBJS = ${LIBOBJS}"
 	@echo "DBDS = ${DBDS}"
 	@echo "DBDS_${OS_CLASS} = ${DBDS_${OS_CLASS}}"
@@ -558,6 +563,7 @@ debug::
 	@echo "TEMPLS = ${TEMPLS}"
 	@echo "LIBVERSION = ${LIBVERSION}"
 	@echo "MODULE_LOCATION = ${MODULE_LOCATION}"
+	@echo "MODULE_RULES = ${MODULE_RULES}"
 
 build: MODULEINFOS
 build: ${MODULEDBD}
@@ -571,7 +577,10 @@ INSTALL_LOADABLE_SHRLIBS=
 # We ony want to include ${BASERULES} from EPICS base if we are /not/ in debug
 # mode. Including this causes all of the source files to be compiled!
 ifeq (,$(findstring debug,${MAKECMDGOALS}))
-include ${BASERULES}
+  include ${BASERULES}
+  ifneq ($(strip $(MODULE_RULES)),)
+    include $(MODULE_RULES)
+  endif
 endif
 
 # Fix incompatible release rules.
@@ -582,7 +591,7 @@ RELEASE_INCLUDES += -I${EPICS_BASE}/include/compiler/${CMPLR_CLASS}
 RELEASE_INCLUDES += -I${EPICS_BASE}/include/os/${OS_CLASS}
 
 # Find all sources and set vpath accordingly.
-$(foreach file, ${SRCS} ${TEMPLS} ${DBDINSTALLS} ${SCR}, $(eval vpath $(notdir ${file}) ../$(dir ${file})))
+$(foreach file, ${SRCS} ${TEMPLS} ${DBDINSTALLS} ${SCR} ${CFGS}, $(eval vpath $(notdir ${file}) ../$(dir ${file})))
 $(foreach file,${VLIBS},$(eval vpath $(notdir ${file}) ../$(dir ${file})))
 
 # Do not treat %.dbd the same way because it creates a circular dependency
@@ -627,7 +636,7 @@ endif
 INSTALL_DBS  = $(addprefix ${INSTALL_DB}/,$(notdir ${TEMPLS}))
 INSTALL_SCRS = $(addprefix ${INSTALL_SCR}/,$(notdir ${SCR}))
 INSTALL_BINS = $(addprefix ${INSTALL_BIN}/,$(notdir ${BINS}))
-INSTALL_CFGS = $(CFG:%=${INSTALL_CFG}/%)
+INSTALL_CONFIGS = $(addprefix ${INSTALL_CONFIG}/,$(notdir ${CFGS}))
 
 debug::
 	@echo "INSTALL_LIB = $(INSTALL_LIB)"
@@ -643,8 +652,8 @@ debug::
 	@echo "INSTALL_DBS = $(INSTALL_DBS)"
 	@echo "INSTALL_SCR = $(INSTALL_SCR)"
 	@echo "INSTALL_SCRS = $(INSTALL_SCRS)"
-	@echo "INSTALL_CFG = $(INSTALL_CFG)"
-	@echo "INSTALL_CFGS = $(INSTALL_CFGS)"
+	@echo "INSTALL_CONFIG = $(INSTALL_CONFIG)"
+	@echo "INSTALL_CONFIGS = $(INSTALL_CONFIGS)"
 	@echo "INSTALL_BIN = $(INSTALL_BIN)"
 	@echo "INSTALL_BINS = $(INSTALL_BINS)"
 	@echo "HDR_SUBDIRS = $(HDR_SUBDIRS)"
@@ -661,7 +670,7 @@ debug::
 endef
 $(foreach d,$(HDR_SUBDIRS),$(eval $(call install_subdirs,$d)))
 
-INSTALLS += ${INSTALL_CFGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_VLIBS} ${INSTALL_BINS} ${INSTALL_DEPS} ${INSTALL_META}
+INSTALLS += ${INSTALL_CONFIGS} ${INSTALL_SCRS} ${INSTALL_HDRS} ${INSTALL_DBDS} ${INSTALL_DBS} ${INSTALL_LIBS} ${INSTALL_VLIBS} ${INSTALL_BINS} ${INSTALL_DEPS} ${INSTALL_META}
 
 install: ${INSTALLS}
 
@@ -693,7 +702,7 @@ ${INSTALL_SCRS}: $(notdir ${SCR})
 	@echo "Installing scripts $^ to $(@D)"
 	$(INSTALL) -d -m$(BIN_PERMISSIONS) $^ $(@D)
 
-${INSTALL_CFGS}: ${CFGS}
+${INSTALL_CONFIGS}: $(notdir ${INSTALL_CONFIGS})
 	@echo "Installing configuration files $^ to $(@D)"
 	$(INSTALL) -d -m$(INSTALL_PERMISSIONS) $^ $(@D)
 
@@ -701,39 +710,6 @@ ${INSTALL_BINS}: $(addprefix ../,$(filter-out /%,${BINS})) $(filter /%,${BINS})
 	@echo "Installing binaries $^ to $(@D)"
 	$(INSTALL) -d -m$(BIN_PERMISSIONS) $^ $(@D)
 
-# Create SNL code from st/stt file.
-# Important to have %.o: %.st and %.o: %.stt rule before %.o: %.c rule!
-
-CPPSNCFLAGS1  = $(filter -D%, ${OP_SYS_CFLAGS})
-CPPSNCFLAGS1 += $(filter-out ${OP_SYS_INCLUDE_CPPFLAGS} ,${CPPFLAGS}) ${CPPSNCFLAGS}
-CPPSNCFLAGS1 += -I $(dir $(SNC))../../include
-SNCFLAGS += -r
-
-%.i: %.st
-	@echo ">> Preprocessing $(<F)"
-	$(CPP) ${CPPSNCFLAGS1} $< > $(*F).i
-
-%.c: %.i
-	@echo ""
-	@echo ">> SNC building process .... "
-	@echo ">> SNC                  : $(SNC)"
-	@echo ">> SNC_VERSION          : $(sequencer_VERSION)"
-	@echo ">> SNC is defined as $(SNC)"
-	$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $(*F).i -o $(*F).c
-
-%_snl.dbd: %.c
-	@echo ">> Building $(*F)_snl.dbd"
-	awk -F [\(\)]  '/epicsExportRegistrar/ { print "registrar (" $$2 ")"}' $(*F).c > $(*F)_snl.dbd
-
-%.c: %.stt
-	@echo ""
-	@echo ">> SNC building process .... "
-	@echo ">> SNC                  : $(SNC)"
-	@echo ">> SNC_VERSION          : $(sequencer_VERSION)"
-	@echo ">> SNC is defined as $(SNC)"
-	$(SNC) $(TARGET_SNCFLAGS) $(SNCFLAGS) $< -o $(*F).c
-
-
 # Create GPIB code from *.gt file.
 %.c %.dbd %.list: %.gt
 	@echo "Converting $*.gt"