diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..72fb66494d8c28413ee0d6be781de7947dbf9668
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+
+*.local
+*~
+\#*
diff --git a/.gitmodules b/.gitmodules
index f85d767cf64f46f875f9314dc9a568b9aa424fa9..0bc36163eee18c035bd2f0d4b55dc829eb1ffe1e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
-[submodule "e3-env"]
-	path = e3-env
-	url = https://github.com/icshwi/e3-env
-	ignore=dirty
 [submodule "devlib2"]
 	path = devlib2
 	url = https://github.com/epics-modules/devlib2
diff --git a/Makefile b/Makefile
index 508a9ffb70b9cf8929ccd018c1e6741d6c8126b0..12b8c8fe6bdbe45d5a50feeae7faebbdb9a08edf 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
 #
+#  Copyright (c) 2017 - Present  Jeong Han Lee
 #  Copyright (c) 2017 - Present  European Spallation Source ERIC
 #
 #  The program is free software: you can redistribute
@@ -14,163 +15,16 @@
 #  You should have received a copy of the GNU General Public License along with
 #  this program. If not, see https://www.gnu.org/licenses/gpl-2.0.txt
 #
+# 
 # Author  : Jeong Han Lee
-# email   : han.lee@esss.se
-# Date    : Thursday, November 30 21:38:27 CET 2017
-# version : 0.2.1
-#
+# email   : jeonghan.lee@gmail.com
+# Date    : 2018Feb12-1455-29CET
+# version : 0.0.1
 
 
 TOP:=$(CURDIR)
 
 include $(TOP)/configure/CONFIG
 
--include $(TOP)/$(E3_ENV_NAME)/$(E3_ENV_NAME)
--include $(TOP)/$(E3_ENV_NAME)/epics-community-env
-
-
-# Keep always the module up-to-date
-define git_update =
-@git submodule deinit -f $@/
-git submodule deinit -f $@/
-sed -i '/submodule/,$$d'  $(TOP)/.git/config
-rm -rf $(TOP)/.git/modules/$@
-git submodule init $@/
-git submodule update --init --recursive --recursive $@/.
-git submodule update --remote --merge $@/
-endef
-
-ifndef VERBOSE
-  QUIET := @
-endif
-
-ifdef DEBUG_SHELL
-  SHELL = /bin/sh -x
-endif
-
-
-# Pass necessary driver.makefile variables through makefile options
-#
-M_OPTIONS := -C $(EPICS_MODULE_SRC_PATH)
-M_OPTIONS += -f $(ESS_MODULE_MAKEFILE)
-M_OPTIONS += LIBVERSION="$(LIBVERSION)"
-M_OPTIONS += PROJECT="$(EPICS_MODULE_NAME)"
-M_OPTIONS += EPICS_MODULES="$(EPICS_MODULES)"
-M_OPTIONS += EPICS_LOCATION="$(EPICS_LOCATION)"
-M_OPTIONS += DEFAULT_EPICS_VERSIONS="$(DEFAULT_EPICS_VERSIONS)"
-M_OPTIONS += BUILDCLASSES="Linux"
-
-
-# # 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:	
-
-
-
-default: help
-
-
-
-
-install: uninstall
-	$(QUIET) sudo -E bash -c 'make $(M_OPTIONS) install'
-
-## Uninstall "Require" Module in order not to use it
-uninstall: conf
-	$(QUIET) sudo -E bash -c 'make $(M_OPTIONS) uninstall'
-
-
-
-## Build the EPICS Module
-build: conf
-	$(QUIET) make $(M_OPTIONS) build
-
-## clean, build, and install again.
-rebuild: clean build install
-
-## Clean the EPICS Module
-clean: conf
-	$(QUIET) make $(M_OPTIONS) clean
-
-## Show driver.makefile help
-help2:
-	$(QUIET) make $(M_OPTIONS) help
-
-#
-## Initialize EPICS BASE and E3 ENVIRONMENT Module
-init: git-submodule-sync $(EPICS_MODULE_SRC_PATH) $(E3_ENV_NAME)
-
-git-submodule-sync:
-	$(QUIET) git submodule sync
-
-
-$(EPICS_MODULE_SRC_PATH): 
-	$(QUIET) $(git_update)
-	cd $@ && git checkout $(EPICS_MODULE_TAG)
-
-checkout: 
-	cd $(EPICS_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
-
-
-$(E3_ENV_NAME): 
-	$(QUIET) $(git_update)
-
-
-## Print EPICS and ESS EPICS Environment variables
-env:
-	$(QUIET) echo ""
-
-	$(QUIET) echo "EPICS_MODULE_SRC_PATH       : "$(EPICS_MODULE_SRC_PATH)
-	$(QUIET) echo "ESS_MODULE_MAKEFILE         : "$(ESS_MODULE_MAKEFILE)
-	$(QUIET) echo "EPICS_MODULE_TAG            : "$(EPICS_MODULE_TAG)
-	$(QUIET) echo "LIBVERSION                  : "$(LIBVERSION)
-	$(QUIET) echo "PROJECT                     : "$(PROJECT)
-
-	$(QUIET) echo ""
-	$(QUIET) echo "----- >>>> EPICS BASE Information <<<< -----"
-	$(QUIET) echo ""
-	$(QUIET) echo "EPICS_BASE_TAG              : "$(EPICS_BASE_TAG)
-#	$(QUIET) echo "CROSS_COMPILER_TARGET_ARCHS : "$(CROSS_COMPILER_TARGET_ARCHS)
-	$(QUIET) echo ""
-	$(QUIET) echo "----- >>>> ESS EPICS Environment  <<<< -----"
-	$(QUIET) echo ""
-	$(QUIET) echo "EPICS_LOCATION              : "$(EPICS_LOCATION)
-	$(QUIET) echo "EPICS_MODULES               : "$(EPICS_MODULES)
-	$(QUIET) echo "DEFAULT_EPICS_VERSIONS      : "$(DEFAULT_EPICS_VERSIONS)
-	$(QUIET) echo "BASE_INSTALL_LOCATIONS      : "$(BASE_INSTALL_LOCATIONS)
-	$(QUIET) echo "REQUIRE_VERSION             : "$(REQUIRE_VERSION)
-	$(QUIET) echo "REQUIRE_PATH                : "$(REQUIRE_PATH)
-	$(QUIET) echo "REQUIRE_TOOLS               : "$(REQUIRE_TOOLS)
-	$(QUIET) echo "REQUIRE_BIN                 : "$(REQUIRE_BIN)
-	$(QUIET) echo ""
-
-conf:
-	$(QUIET) install -m 644 $(TOP)/$(ESS_MODULE_MAKEFILE)  $(EPICS_MODULE_SRC_PATH)/
-
-
-
-epics:
-	$(QUIET)echo "EPICS_BASE=$(COMMUNITY_EPICS_BASE)"  > $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/RELEASE.local
-	$(QUIET)echo "INSTALL_LOCATION=$(M_DEVLIB2)"       > $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/CONFIG_SITE	
-	sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH)"
-
-
-epics-clean:
-	sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH) clean"
-
+include $(TOP)/configure/RULES
 
-.PHONY: env $(E3_ENV_NAME) $(EPICS_MODULE_SRC_PATH) git-submodule-sync init help help2 build clean install uninstall conf rebuild epics epics-clean checkout
diff --git a/configure/CONFIG b/configure/CONFIG
index 17ba8e54449844f2153100dfe8e117d2a03a6429..6e516fd47a910bee85d857d9587ea8fd1f1efabc 100644
--- a/configure/CONFIG
+++ b/configure/CONFIG
@@ -1,60 +1,38 @@
-# (EPICS) EPICS_MODULE_NAME 
-# The EPICS community MODULE name. 
-# For example, https://github.com/epics-module/devlib2
-# devlib2 is EPICS_MODULE_NAME
-# 
-EPICS_MODULE_NAME:=devlib2
-
-
-# (EPICS) EPICS_MODULE_TAG
-# The EPICS community tag number, which we would like to install
-# within ESS EPICS Environment (ESS)
-# export EPICS_MODULE_TAG:=tags/2.5.1
-export EPICS_MODULE_TAG:=tags/2.9
-
-
-# (LOCAL) EPICS_MODULE_PATH
-# Usually, it is the directory in $(TOP), after cloning the repository
-# However, some modules from ESS have the weird directory structure. 
-# If one use the cloned directory, one should define the proper source
-# directory path in $(ESS_MODULE_MAKEFILE)
-export EPICS_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)
-
-
-# (LOCAL) ESS_MODULE_MAKEFILE 
-# The very strange and additional Makefile for EPICS_MODULE_NAME, which
-# should be maintained according to main repository evolving.
-# some export variables in CONFIG file 
-# in order to build and install for EEE
-ESS_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
-
-
-# (E3) PROJECT 
-# it is the jargon of E3, from EEE and PSI EPICS Environment,
-# the E3 generic makefile (driver.makefile) uses it as the installation
-# directory, and it will be used in the iocsh script (aka iocsh.bash)
-# with the require commands, for    example
-# require $(PROJECT) $(LIBVERSION)
-export PROJECT:=$(EPICS_MODULE_NAME)
-
-
-# (E3) LIBVERSION
-# it is the jargon of E3, from EEE and PSI EPICS Environment,
-# the E3 generic makefile (driver.makefile) uses it as the installation
-# directory, and it will be used in the iocsh script (aka iocsh.bash)
-# with the require commands, for    example
-# require $(PROJECT) $(LIBVERSION)
-export LIBVERSION:=2.9.0
-
-
-# It may be the sole reason why we have so many troubles related with
-# module version mismatch within the current E3
-# 
-# export USR_DEPENDENCIES += devlib2,2.9.0
-
-
-# E3_ENV_NAME
-# It is the global E3 environment repository
-# 
-export E3_ENV_NAME:=e3-env
-#export E3_ENV_TAG:=v0.1
+VARS_EXCLUDES := $(.VARIABLES)
+
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/RELEASE_DEV
+else
+include $(TOP)/configure/RELEASE
+endif
+
+# CONFIG=$(EPICS_BASE)/configure
+# include $(CONFIG)/CONFIG
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/CONFIG_MODULE_DEV
+else
+include $(TOP)/configure/CONFIG_MODULE
+endif
+
+# The definitions shown below can also be placed in an untracked RELEASE.local
+-include $(TOP)/../RELEASE.local
+-include $(TOP)/configure/RELEASE.local
+-include $(TOP)/../CONFIG_MODULE.local
+-include $(TOP)/configure/CONFIG_MODULE.local
+
+
+## Asyn, ADSupport may needs to define other variables
+
+-include $(TOP)/configure/CONFIG_OPTIONS
+
+## It is not necessary to modify the following files in most case.
+## Order is matter
+
+include $(TOP)/configure/E3/CONFIG_REQUIRE
+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_SUDO
+include $(TOP)/configure/E3/CONFIG_EXPORT
diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE
new file mode 100644
index 0000000000000000000000000000000000000000..baef8ea08ebf3d65b77f04eca7bceb3833611a39
--- /dev/null
+++ b/configure/CONFIG_MODULE
@@ -0,0 +1,20 @@
+#
+EPICS_MODULE_NAME:=devlib2
+EPICS_MODULE_TAG:=tags/2.9
+#
+E3_MODULE_VERSION:=2.9.0
+
+
+# ONLY IF this module has the sequencer dependency. However,
+# in most case, we don't need to enable the following line,
+# the default - latest version will be used
+#E3_SEQUENCER_NAME:=sequencer
+#E3_SEQUENCER_VERSION:=2.1.21
+#
+# In most case, we don't need to touch the following variables.
+#
+
+E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
+E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)
+E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
+
diff --git a/configure/CONFIG_MODULE_DEV b/configure/CONFIG_MODULE_DEV
new file mode 100644
index 0000000000000000000000000000000000000000..563423b133042dcfe2577d9756f57688dddf5233
--- /dev/null
+++ b/configure/CONFIG_MODULE_DEV
@@ -0,0 +1,21 @@
+#
+EPICS_MODULE_NAME:=devlib2
+EPICS_MODULE_TAG:=master
+#
+E3_MODULE_VERSION:=develop
+
+# ONLY IF this module has the sequencer dependency. However,
+# in most case, we don't need to enable the following line,
+# the default - latest version will be used
+#E3_SEQUENCER_NAME:=sequencer
+#E3_SEQUENCER_VERSION:=2.1.21
+#
+# In most case, we don't need to touch the following variables.
+#
+E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
+E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)-dev
+E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
+
+#export DEV_GIT_URL:="https://where your git repo"
+E3_MODULE_DEV_GITURL:="https://github.com/epics-modules/devlib2"
+
diff --git a/configure/E3/CONFIG_E3_MAKEFILE b/configure/E3/CONFIG_E3_MAKEFILE
new file mode 100644
index 0000000000000000000000000000000000000000..b3a1c37097c2216d4d29eebe057369394a918fb1
--- /dev/null
+++ b/configure/E3/CONFIG_E3_MAKEFILE
@@ -0,0 +1,21 @@
+# 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)"
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SEQUENCER_NAME="$(E3_SEQUENCER_NAME)"
+E3_REQUIRE_MAKEFILE_INPUT_OPTIONS += E3_SEQUENCER_VERSION="$(E3_SEQUENCER_VERSION)"
+
+E3_MODULE_MAKE_CMDS:=make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS)
+
+
+VARS_EXCLUDES+=E3_REQUIRE_MAKEFILE_INPUT_OPTIONS
+
diff --git a/configure/E3/CONFIG_E3_PATH b/configure/E3/CONFIG_E3_PATH
new file mode 100644
index 0000000000000000000000000000000000000000..d188961c6e6c0b986f08c9ab3268b4ee6fbcc6e0
--- /dev/null
+++ b/configure/E3/CONFIG_E3_PATH
@@ -0,0 +1,38 @@
+E3_MODULES_PATH:=$(E3_REQUIRE_LOCATION)/siteMods
+E3_SITEMODS_PATH:=$(E3_MODULES_PATH)
+E3_SITELIBS_PATH:=$(E3_REQUIRE_LOCATION)/siteLibs
+E3_SITEAPPS_PATH:=$(E3_REQUIRE_LOCATION)/siteApps
+
+
+E3_MODULES_INSTALL_LOCATION:=$(E3_SITEMODS_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_INC_LINK:=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME)_$(E3_MODULE_VERSION)_include
+E3_MODULES_INSTALL_LOCATION_DB_LINK :=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME)_$(E3_MODULE_VERSION)_db
+E3_MODULES_INSTALL_LOCATION_BIN_LINK:=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME)_$(E3_MODULE_VERSION)_bin
+
+
+E3_MODULES_INSTALL_LOCATION_DBD:=$(E3_MODULES_INSTALL_LOCATION)/dbd/$(E3_MODULE_NAME).dbd
+E3_MODULES_INSTALL_LOCATION_DBD_LINK:=$(E3_SITELIBS_PATH)/$(E3_MODULE_NAME).dbd.$(E3_MODULE_VERSION)
+
+
+
+# It is a bit weird, it would be better to implement within driver.makefile later
+# Assumption : we are using the same lib name from driver.makefile 
+E3_MODULES_LIBNAME:=lib$(E3_MODULE_NAME).so
+
+INSTALLED_EPICS_BASE_ARCHS_PATHS=$(sort $(dir $(wildcard $(EPICS_BASE)/bin/*/)))
+TEMP_INSTALLED_EPICS_BASE_ARCHS=$(INSTALLED_EPICS_BASE_ARCHS_PATHS:$(EPICS_BASE)/bin/%=%)
+INSTALLED_EPICS_BASE_ARCHS=$(TEMP_INSTALLED_EPICS_BASE_ARCHS:/=)
+
+
+
+### Exclude the following variables to display 
+VARS_EXCLUDES+=TEMP_INSTALLED_EPICS_BASE_ARCHS
+VARS_EXCLUDES+=INSTALLED_EPICS_BASE_ARCHS_PATHS
+
diff --git a/configure/E3/CONFIG_EPICS b/configure/E3/CONFIG_EPICS
new file mode 100644
index 0000000000000000000000000000000000000000..61ef087135976941aa1f5fcf9e4829fbfb418612
--- /dev/null
+++ b/configure/E3/CONFIG_EPICS
@@ -0,0 +1,64 @@
+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)/sequencer
+M_IP:=$(COMMUNITY_EPICS_MODULES)/ip
+M_IPAC:=$(COMMUNITY_EPICS_MODULES)/ipac
+M_ADSUPPORT:=$(COMMUNITY_EPICS_MODULES)/adsupport
+M_ADCORE:=$(COMMUNITY_EPICS_MODULES)/adcore
+
+
+
+
+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
+
+### 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
+
diff --git a/configure/E3/CONFIG_EXPORT b/configure/E3/CONFIG_EXPORT
new file mode 100644
index 0000000000000000000000000000000000000000..e538bc17c4d15da2ad916f2756c17e037d6d81cd
--- /dev/null
+++ b/configure/E3/CONFIG_EXPORT
@@ -0,0 +1,14 @@
+# Variables should be transferred to module_name.makefile
+
+EPICS_HOST_ARCH:=$(shell $(EPICS_BASE)/startup/EpicsHostArch.pl)
+
+export EPICS_BASE
+export EPICS_HOST_ARCH
+export E3_REQUIRE_TOOLS
+export E3_MODULE_VERSION
+#export E3_SITEMODS_PATH
+#export E3_SITEAPPS_PATH
+#export E3_SITELIBS_PATH
+#export E3_SEQUENCER_NAME
+#export E3_SEQUENCER_VERSION
+
diff --git a/configure/E3/CONFIG_REQUIRE b/configure/E3/CONFIG_REQUIRE
new file mode 100644
index 0000000000000000000000000000000000000000..46265159274c03bba3f104250571bc6b85e1a72b
--- /dev/null
+++ b/configure/E3/CONFIG_REQUIRE
@@ -0,0 +1,9 @@
+E3_REQUIRE_LOCATION:=$(EPICS_BASE)/$(E3_REQUIRE_NAME)/$(E3_REQUIRE_VERSION)
+
+E3_REQUIRE_BIN:=$(E3_REQUIRE_LOCATION)/bin
+E3_REQUIRE_TOOLS:=$(E3_REQUIRE_LOCATION)/tools
+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
+
diff --git a/configure/E3/CONFIG_SUDO b/configure/E3/CONFIG_SUDO
new file mode 100644
index 0000000000000000000000000000000000000000..f4d2cb7c8d6efa98f6fb14cfd9a41c8ec082a1fb
--- /dev/null
+++ b/configure/E3/CONFIG_SUDO
@@ -0,0 +1,23 @@
+# IF EPICS_BASE is not WRITABLE, SUDO and SUDOBASH should be used 
+# SUDO_INFO 1 : SUDO is needed (NOT writable)
+# SUDO_INFO 0 : SUDO is not needed
+SUDO_INFO := $(shell test -w $(EPICS_BASE) 1>&2 2> /dev/null; echo $$?)
+
+ifeq "$(SUDO_INFO)" "1"
+SUDO := sudo
+SUDOBASH = $(SUDO)
+SUDOBASH += -E
+SUDOBASH += bash -c
+endif    
+
+
+# Valid for only Development Mode, because we clone/remove them
+# See RULES_DEV
+# E3_MODULE_SRC_PATH_INFO 1 : the directory is not there
+# E3_MODULE_SRC_PATH_INFO 0 : the directory is there
+E3_MODULE_SRC_PATH_INFO := $(shell test -d $(E3_MODULE_SRC_PATH) 1>&2 2> /dev/null; echo $$?)
+
+ifeq "$(E3_MODULE_SRC_PATH_INFO)" "1"
+INIT_E3_MODULE_SRC = 1
+endif    
+
diff --git a/configure/E3/DEFINES_FT b/configure/E3/DEFINES_FT
new file mode 100644
index 0000000000000000000000000000000000000000..5c0ccbb48c6931b04a1b5e183b0b9fd6c90b32cd
--- /dev/null
+++ b/configure/E3/DEFINES_FT
@@ -0,0 +1,24 @@
+# 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
+
+ifndef VERBOSE
+  QUIET := @
+endif
+
+ifdef DEBUG_SHELL
+  SHELL = /bin/sh -x
+endif
+
+
+### Exclude the following variables to display 
+VARS_EXCLUDES+=git_update
+VARS_EXCLUDES+=QUIET
+VARS_EXCLUDES+=SHELL
+
diff --git a/configure/E3/RULES_DB b/configure/E3/RULES_DB
new file mode 100644
index 0000000000000000000000000000000000000000..6251c25bef3db900b706d652309cd0482fc7c434
--- /dev/null
+++ b/configure/E3/RULES_DB
@@ -0,0 +1,16 @@
+
+## This RULE should be used in case of inflating DB files
+## In this case, one should add db: rule in $(EPICS_MODULE_NAME).makefile
+## And add db in RULES_E3 also as follows:
+## install_module: uninstall db
+
+
+.PHONY: db
+
+###   ..... 
+
+db: conf
+	#install -m 644 $(TOP)/template/cpci-evg230-ess.substitutions   $(E3_MODULE_SRC_PATH)/evgMrmApp/Db/
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) db
+
+
diff --git a/configure/E3/RULES_DEV b/configure/E3/RULES_DEV
new file mode 100644
index 0000000000000000000000000000000000000000..41f21d4085f424810785e7d532180434aab45de5
--- /dev/null
+++ b/configure/E3/RULES_DEV
@@ -0,0 +1,41 @@
+# -*- mode: Makefile;-*-
+
+.PHONY: devvars devenv devinit devbuild devclean devinstall devrebuild devuninstall devdistclean
+
+devvars: vars
+
+devenv: devvars
+
+devinit: git-submodule-sync
+	git clone $(E3_MODULE_DEV_GITURL) $(E3_MODULE_SRC_PATH)
+	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
+
+
+ifeq "$(INIT_E3_MODULE_SRC)" "1"
+
+devbuild: nonexists
+devclean: nonexists
+devinstall: nonexists
+devrebuild: nonexists
+devuninstall: nonexists
+devdistclean: 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
+
+devbuild: build
+devclean: clean
+devinstall: install
+devrebuild: rebuild
+devuninstall: uninstall
+devdistclean: clean
+	$(QUIET)echo "Removing $(E3_MODULE_SRC_PATH) ......... "
+	rm -rf $(E3_MODULE_SRC_PATH)
+endif
+
+
diff --git a/configure/E3/RULES_E3 b/configure/E3/RULES_E3
new file mode 100644
index 0000000000000000000000000000000000000000..44553059797cf44432f8ee3bb489525a9683706b
--- /dev/null
+++ b/configure/E3/RULES_E3
@@ -0,0 +1,91 @@
+
+.PHONY: help default install uninstall build rebuild clean conf
+
+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 : $(E3_MODULE_NAME)
+install: install_module install_links
+
+#install_module: uninstall 
+install_module: uninstall db
+	$(QUIET) $(SUDOBASH) '$(E3_MODULE_MAKE_CMDS) install'
+
+## Uninstall : $(E3_MODULE_NAME)
+uninstall: conf
+	$(QUIET) $(SUDOBASH) '$(E3_MODULE_MAKE_CMDS) uninstall'
+
+## Build the EPICS Module : $(E3_MODULE_NAME)
+# Build always the Module with the EPICS_MODULES_TAG
+build: conf checkout
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) build
+
+
+## Clean, build, and install the EPICS Module : $(E3_MODULE_NAME)
+rebuild: clean build install
+
+
+## Clean : $(E3_MODULE_NAME)
+clean: conf
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) clean
+
+
+## Copy $(E3_MODULE_MAKEFILE) into $(E3_MODULE_SRC_PATH)
+conf: 
+	$(QUIET) install -m 644 $(TOP)/$(E3_MODULE_MAKEFILE)  $(E3_MODULE_SRC_PATH)/
+
+
+.PHONY: init git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout
+
+## Initialize : $(E3_MODULE_SRC_PATH) 
+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)
+
+
+
+# Create symbolic links in siteLibs
+
+.PHONY: install_links $(INSTALLED_EPICS_BASE_ARCHS)
+
+
+install_links: $(INSTALLED_EPICS_BASE_ARCHS)
+	$(SUDO) ln -snf $(E3_MODULES_INSTALL_LOCATION_INC) $(E3_MODULES_INSTALL_LOCATION_INC_LINK)
+	$(SUDO) ln -snf $(E3_MODULES_INSTALL_LOCATION_DB)  $(E3_MODULES_INSTALL_LOCATION_DB_LINK)
+	$(SUDO) ln -snf $(E3_MODULES_INSTALL_LOCATION_BIN) $(E3_MODULES_INSTALL_LOCATION_BIN_LINK)
+	$(SUDO) ln -sf  $(E3_MODULES_INSTALL_LOCATION_DBD) $(E3_MODULES_INSTALL_LOCATION_DBD_LINK)
+
+
+$(INSTALLED_EPICS_BASE_ARCHS):
+	$(SUDO) mkdir -p $(E3_SITELIBS_PATH)/$@
+	$(SUDO) ln -sf $(E3_MODULES_INSTALL_LOCATION)/lib/$@/$(E3_MODULES_LIBNAME) $(E3_SITELIBS_PATH)/$@/$(E3_MODULE_NAME).lib.$(E3_MODULE_VERSION)
+
+
diff --git a/configure/E3/RULES_EPICS b/configure/E3/RULES_EPICS
new file mode 100644
index 0000000000000000000000000000000000000000..e5ae6b2b99ed5f18e8d74749fbcc0dcfda624b5f
--- /dev/null
+++ b/configure/E3/RULES_EPICS
@@ -0,0 +1,14 @@
+# One should define the any dependency modules and EPICS base path
+# in the following directory
+
+.PHONY: epics epics-clean
+
+epics:
+	$(QUIET)echo "EPICS_BASE=$(EPICS_BASE)"       > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/RELEASE.local
+	$(QUIET)echo "INSTALL_LOCATION=$(M_DEVLIB2)"  > $(TOP)/$(E3_MODULE_SRC_PATH)/configure/CONFIG_SITE
+	$(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH)"
+
+epics-clean:
+	$(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH) clean"
+
+
diff --git a/configure/E3/RULES_VARS b/configure/E3/RULES_VARS
new file mode 100644
index 0000000000000000000000000000000000000000..e388285c46495327e98e39e6ffce55555bbb37c7
--- /dev/null
+++ b/configure/E3/RULES_VARS
@@ -0,0 +1,20 @@
+
+E3_MODULES_VARIABLES:=$(sort $(filter-out $(VARS_EXCLUDES) VARS_EXCLUDES,$(.VARIABLES)))
+
+.PHONY : env vars header
+
+
+## Print interesting VARIABLES
+env: vars
+
+vars: header
+	$(foreach v, $(E3_MODULES_VARIABLES), $(info $(v) = $($(v)))) @#noop
+
+header:
+	$(QUIET)echo ""
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ">>>>     Current EPICS and E3 Envrionment Variables     <<<<"
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ""
+
+
diff --git a/configure/RELEASE b/configure/RELEASE
new file mode 100644
index 0000000000000000000000000000000000000000..eb6981d03f6f089ccd9139a4209a935ba48d84a3
--- /dev/null
+++ b/configure/RELEASE
@@ -0,0 +1,5 @@
+EPICS_BASE=/testing/epics/base-3.15.5
+
+E3_REQUIRE_NAME:=require
+E3_REQUIRE_VERSION:=0.0.0
+
diff --git a/configure/RELEASE_DEV b/configure/RELEASE_DEV
new file mode 100644
index 0000000000000000000000000000000000000000..eb6981d03f6f089ccd9139a4209a935ba48d84a3
--- /dev/null
+++ b/configure/RELEASE_DEV
@@ -0,0 +1,5 @@
+EPICS_BASE=/testing/epics/base-3.15.5
+
+E3_REQUIRE_NAME:=require
+E3_REQUIRE_VERSION:=0.0.0
+
diff --git a/configure/RULES b/configure/RULES
new file mode 100644
index 0000000000000000000000000000000000000000..d3cd59ffbbe66580dd4a9df2fee02a9087a985a9
--- /dev/null
+++ b/configure/RULES
@@ -0,0 +1,16 @@
+#CONFIG
+# include $(EPICS_BASE)/configure/RULES
+
+include $(TOP)/configure/E3/DEFINES_FT
+include $(TOP)/configure/E3/RULES_E3
+include $(TOP)/configure/E3/RULES_EPICS
+
+include $(TOP)/configure/E3/RULES_DB
+include $(TOP)/configure/E3/RULES_VARS
+
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/E3/RULES_DEV
+endif
+
+
diff --git a/devlib2.Makefile b/devlib2.Makefile
index 61a4c73af3baf52c6c97c5a9adcc499d37faf3cb..3f3cc3a2a2f1bbdc3e150201f13b0a2354c70a5c 100644
--- a/devlib2.Makefile
+++ b/devlib2.Makefile
@@ -1,5 +1,5 @@
 
-include ${REQUIRE_TOOLS}/driver.makefile
+include ${E3_REQUIRE_TOOLS}/driver.makefile
 
 
 COMMON:= common
@@ -49,3 +49,7 @@ SOURCES += $(VMEAPP)/devlib_compat.c
 DBDS += $(VMEAPP)/epicsvme.dbd
 
 
+
+# db rule is the default in RULES_E3, so add the empty one
+
+db:
diff --git a/e3-env b/e3-env
deleted file mode 160000
index 4eed6fe3babcad62b88c5efe105c5b047845c171..0000000000000000000000000000000000000000
--- a/e3-env
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4eed6fe3babcad62b88c5efe105c5b047845c171