diff --git a/configure/CONFIG b/configure/CONFIG
index 7156ced12982f97d239b5feb839ba9e7792fb2d1..4cb4ce46d6b20bbc5f7d7ecfcc5c59e94472780b 100644
--- a/configure/CONFIG
+++ b/configure/CONFIG
@@ -7,18 +7,46 @@ else
 include $(TOP)/configure/RELEASE
 endif
 
+
 # CONFIG=$(EPICS_BASE)/configure
 # include $(CONFIG)/CONFIG
 
 
-include $(TOP)/configure/CONFIG_REQUIRE
 include $(TOP)/configure/CONFIG_EPICS
 
+# CONFIG_MODULE should be included before CONFIG_REQUIRE
+#
 ifneq (,$(findstring dev,$(MAKECMDGOALS)))
 include $(TOP)/configure/CONFIG_MODULE_DEV
 else
 include $(TOP)/configure/CONFIG_MODULE
 endif
 
+include $(TOP)/configure/CONFIG_REQUIRE
 
 include $(TOP)/configure/CONFIG_E3_MAKEFILE
+
+
+
+# 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    
\ No newline at end of file
diff --git a/configure/CONFIG_E3_MAKEFILE b/configure/CONFIG_E3_MAKEFILE
index 517b603b3464188cede0d37179a57e05e10d041c..c5e95448ff04bb182ee52c6c3756b80742735b7e 100644
--- a/configure/CONFIG_E3_MAKEFILE
+++ b/configure/CONFIG_E3_MAKEFILE
@@ -2,12 +2,8 @@
 # Pass necessary driver.makefile variables through makefile options
 #
 
-# E3_EPICS_VERSION_TEMP:=$(notdir $(EPICS_BASE))
-
-# E3_EPICS_VERSION:=$(E3_EPICS_VERSION_TEMP:base-%=%)
-
-
-E3_MODULES_PATH:=$(E3_REQUIRE_LOCATION)/siteMods
+# 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)
@@ -16,10 +12,12 @@ 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 += MODULE_LOCATION="$(E3_REQUIRE_LOCATION)"
+
+
+E3_MODULE_MAKE_CMDS:=make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS)
 
 
 ## the following variables to display
 
-# VARS_EXCLUDES+=E3_EPICS_VERSION_TEMP
+VARS_EXCLUDES+=E3_REQUIRE_MAKEFILE_INPUT_OPTIONS
 
diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE
index 5bfd5eaeabf12e0428c118b8ebefe20718e80ada..8264e802f8281169ecc6c13ad99120aa093932ff 100644
--- a/configure/CONFIG_MODULE
+++ b/configure/CONFIG_MODULE
@@ -1,10 +1,9 @@
 
-EPICS_MODULE_NAME:=iocStats
-EPICS_MODULE_TAG:=1856ef5
+EPICS_MODULE_NAME:=require
+EPICS_MODULE_TAG:=tags/v2.5.4
 
-
-E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)
+E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)-ess
 E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
 
 E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
-E3_MODULE_VERSION:=1856ef5
+E3_MODULE_VERSION:=2.5.4
diff --git a/configure/CONFIG_MODULE_DEV b/configure/CONFIG_MODULE_DEV
index fcac2dba042fb2d1ad9c2d229f28f52dc16bbc46..72faf908b9a3291e7ae0f13d08a46f8c039cc6be 100644
--- a/configure/CONFIG_MODULE_DEV
+++ b/configure/CONFIG_MODULE_DEV
@@ -1,15 +1,13 @@
-EPICS_MODULE_NAME:=iocStats
-EPICS_MODULE_TAG:=master
 
+EPICS_MODULE_NAME:=require
+EPICS_MODULE_TAG:=target_path_test
 
 E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)-dev
 E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
 
-
 E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
 E3_MODULE_VERSION:=develop
 
-#export DEV_GIT_URL:="https://where your git repo"
-E3_MODULE_DEV_GITURL:="https://github.com/epics-modules/iocStats"
+E3_MODULE_DEV_GITURL:="https://github.com/icshwi/require-ess"
 
 
diff --git a/configure/CONFIG_REQUIRE b/configure/CONFIG_REQUIRE
index 6b0c0baedb4621c554d62ceba702fa2fca4e249d..e182e2f00f5a952c29fd627b24baa0df4a3e875e 100644
--- a/configure/CONFIG_REQUIRE
+++ b/configure/CONFIG_REQUIRE
@@ -1,3 +1,13 @@
+# Keep the same convention with other modules,
+# translate them with E3_REQUIRE_NAME or _VERSION Again
+
+E3_REQUIRE_NAME=$(EPICS_MODULE_NAME)
+E3_REQUIRE_VERSION=$(E3_MODULE_VERSION)
+
+
+#
+# The following VARIABLES are the same as other modules ones.
+#
 
 E3_REQUIRE_LOCATION:=$(EPICS_BASE)/$(E3_REQUIRE_NAME)/$(E3_REQUIRE_VERSION)
 
diff --git a/configure/DEFINES_FT b/configure/DEFINES_FT
index 7422071ee32fe38509eb7d5b3f5f935b37d1a607..47e10655e38969314c3592da16dafcbc8fc4d450 100644
--- a/configure/DEFINES_FT
+++ b/configure/DEFINES_FT
@@ -1,6 +1,5 @@
 # Keep always the module up-to-date
 define git_update =
-@git submodule deinit -f $@/
 git submodule deinit -f $@/
 sed -i '/submodule/,24465d'  $(TOP)/.git/config
 rm -rf $(TOP)/.git/modules/$@
diff --git a/configure/RELEASE b/configure/RELEASE
index 3257c8d460a2ee843b37f29f2cf067ee7e014f9e..8de3f2b450bc23a84b389321f9cd4d5876e3a0ce 100644
--- a/configure/RELEASE
+++ b/configure/RELEASE
@@ -1,8 +1 @@
 EPICS_BASE=/testing/epics/base-3.15.5
-
-
-E3_REQUIRE_NAME:=require
-E3_REQUIRE_VERSION:=0.0.1
-
-
-
diff --git a/configure/RELEASE_DEV b/configure/RELEASE_DEV
index f960c8460e4c2d2fcb709594c3a1ea7f7f519663..fee4bcbf7454c25a0be04a3a78d5ebbbfe0ff0c0 100644
--- a/configure/RELEASE_DEV
+++ b/configure/RELEASE_DEV
@@ -1,9 +1,2 @@
-
-
 EPICS_BASE=/testing/epics/base-3.15.5
 
-
-E3_REQUIRE_NAME:=require
-E3_REQUIRE_VERSION:=0.0.1
-
-
diff --git a/configure/RULES b/configure/RULES
index 8b647f943afe814c50309cbc4895fa6d8f02eae2..276cffed51d3864b1de45cb317ff5ff0dd4301c9 100644
--- a/configure/RULES
+++ b/configure/RULES
@@ -1,7 +1,12 @@
-#CONFIG
+# -*- mode: Makefile;-*-
+
+# CONFIG
 # include $(EPICS_BASE)/configure/RULES
 
 include $(TOP)/configure/DEFINES_FT
+
+include $(TOP)/configure/RULES_REQUIRE
+
 include $(TOP)/configure/RULES_E3
 include $(TOP)/configure/RULES_EPICS
 include $(TOP)/configure/RULES_DB
diff --git a/configure/RULES_DB b/configure/RULES_DB
index e56da3edf87cbd6355dfc4544e439ff6180f98b7..f382b5b1269a968bbef1e30f71414b04603147ec 100644
--- a/configure/RULES_DB
+++ b/configure/RULES_DB
@@ -1,9 +1,9 @@
-
+# -*- mode: Makefile;-*-
 
 ## This RULE should be used in case of inflating DB files
 ## 
 
-# .PHONY: db
+.PHONY: db
 
 ### We have to think how to find $(EPICS_BASE) and
 ### $(EPICS_HOST_ARCH) during driver.makefile
@@ -19,5 +19,5 @@
 ### 5) make install 
 ###   ..... 
 
-#db: conf
-#        $(QUIET) make $(M_OPTIONS) db
+db: conf
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) db
diff --git a/configure/RULES_DEV b/configure/RULES_DEV
index 5bba7a078fd31291dfd3087e4888b699d24a5391..e596d5c00e325718331e255ab056cd1083591a88 100644
--- a/configure/RULES_DEV
+++ b/configure/RULES_DEV
@@ -1,18 +1,39 @@
-.PHONY: devvars devenv devinit devbuild devclean devrebuild devuninstall devdistclean
+# -*- mode: Makefile;-*-
+
+.PHONY: devvars devenv devinit devbuild devclean devinstall devrebuild devuninstall devdistclean
 
 devvars: vars
-devenv: devvars
 
+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)
-        
+	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)
+	$(QUIET)echo "Removing $(E3_MODULE_SRC_PATH) ......... "
+	rm -rf $(E3_MODULE_SRC_PATH)
+endif
diff --git a/configure/RULES_E3 b/configure/RULES_E3
index d458a0e438f69ece979d561e6d124b694b71ead6..b8cbacdbaba8fe6b207994f697e3d526b3df4d64 100644
--- a/configure/RULES_E3
+++ b/configure/RULES_E3
@@ -1,41 +1,46 @@
+# -*- mode: Makefile;-*-
+
+
 .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:  
+	$(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 : $(E3_MODULE_NAME)
-install: uninstall
-        $(QUIET) sudo -E bash -c 'make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) install'
+install: uninstall requireconf
+	$(QUIET) $(SUDOBASH) '$(E3_MODULE_MAKE_CMDS) install'
 
 ## Uninstall : $(E3_MODULE_NAME)
 uninstall: conf
-        $(QUIET) sudo -E bash -c 'make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) uninstall'
+	$(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) make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) build
+build: conf checkout 
+	$(QUIET) $(E3_MODULE_MAKE_CMDS) build
 
 
 ## Clean, build, and install the EPICS Module : $(E3_MODULE_NAME)
@@ -44,31 +49,29 @@ rebuild: clean build install
 
 ## Clean : $(E3_MODULE_NAME)
 clean: conf
-        $(QUIET) make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) clean
+	$(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)/
+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) 
+init: git-submodule-sync $(E3_MODULE_SRC_PATH)  checkout 
 
 git-submodule-sync:
-        $(QUIET) git submodule sync
+	$(QUIET) git submodule sync
 
 
 $(E3_MODULE_SRC_PATH): 
-        $(QUIET) $(git_update)
-        cd $@ && git checkout $(EPICS_MODULE_TAG)
-
+	$(QUIET) $(git_update)
 
 checkout: 
-        cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
+	cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
 
 
 
@@ -79,4 +82,4 @@ checkout:
 
 # ## Show driver.makefile help
 # help2:
-#       $(QUIET) make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) help
+#       $(QUIET) $(E3_MODULE_MAKE_CMD) help
diff --git a/configure/RULES_EPICS b/configure/RULES_EPICS
index bf947c981a50a43575f1db39fd41354c7886b3b2..608df6b05ec2c3803a3ec8f377ec80aa2987b91a 100644
--- a/configure/RULES_EPICS
+++ b/configure/RULES_EPICS
@@ -1,13 +1,15 @@
+# -*- mode: Makefile;-*-
+
 # 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)/$(EPICS_MODULE_SRC_PATH)/configure/RELEASE
-#        $(QUIET)echo "INSTALL_LOCATION=$(M_IOCSTATS)" > $(TOP)/$(EPICS_MODULE_SRC_PATH)/configure/CONFIG_SITE   
-#        sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH)"
+#        $(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   
+#        $(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH)"
 
 #epics-clean:
-#        sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH) clean"
+#        $(SUDOBASH) "$(MAKE) -C $(E3_MODULE_SRC_PATH) clean"
 
diff --git a/configure/RULES_REQUIRE b/configure/RULES_REQUIRE
new file mode 100644
index 0000000000000000000000000000000000000000..90e996ce1f805dad1dee73ff721f322fa2fbe38b
--- /dev/null
+++ b/configure/RULES_REQUIRE
@@ -0,0 +1,17 @@
+# -*- mode: Makefile;-*-
+
+.PHONY: requireconf
+
+requireconf: 
+	$(QUIET) $(SUDO) install -d -m 755 $(E3_REQUIRE_TOOLS)
+	$(QUIET) $(SUDO) install -d -m 755 $(E3_REQUIRE_BIN)
+	$(QUIET) $(SUDO) install    -m 644 $(E3_MODULE_SRC_PATH)/App/tools/driver.makefile $(E3_REQUIRE_TOOLS)/
+	$(QUIET) $(SUDO) install    -m 755 $(E3_MODULE_SRC_PATH)/App/tools/*.tcl           $(E3_REQUIRE_TOOLS)/
+	$(QUIET) $(SUDO) install    -m 755 $(TOP)/tools/iocsh.bash       $(E3_REQUIRE_BIN)/
+	$(QUIET) $(SUDO) install    -m 644 $(TOP)/tools/ess-env.conf     $(E3_REQUIRE_BIN)/
+	$(QUIET) $(SUDO) install    -m 644 $(TOP)/tools/iocsh_functions  $(E3_REQUIRE_BIN)/
+	$(QUIET) $(SUDO) install    -m 644 $(TOP)/tools/setE3Env.bash    $(E3_REQUIRE_BIN)/
+#	$(QUIET) sed -i 's/^IOCSH_HASH_VERSION=.*/IOCSH_HASH_VERSION=$(IOCSH_HASH_VERSION)/g' $(TOP)/ess-env.conf
+
+
+
diff --git a/configure/RULES_VARS b/configure/RULES_VARS
index f9c9c4719501c200b8fbeaf158a076f25b2300fd..4b21508f0584031df0d07280ddfa6419103f6eac 100644
--- a/configure/RULES_VARS
+++ b/configure/RULES_VARS
@@ -1,3 +1,4 @@
+# -*- mode: Makefile;-*-
 
 E3_MODULES_VARIABLES:=$(sort $(filter-out $(VARS_EXCLUDES) VARS_EXCLUDES,$(.VARIABLES)))
 
@@ -5,12 +6,13 @@ E3_MODULES_VARIABLES:=$(sort $(filter-out $(VARS_EXCLUDES) VARS_EXCLUDES,$(.VARI
 
 
 vars: header
-        $(foreach v, $(E3_MODULES_VARIABLES), $(info $(v) = $($(v)))) @#noop
-         
+	$(foreach v, $(E3_MODULES_VARIABLES), $(info $(v) = $($(v)))) @#noop
+
 env: vars
 
 header:
-        @echo ""
-        @echo "-------------------------------------------------"
-        @echo "   Current EPICS and E3 Envrionment Variables "
-        @echo "-------------------------------------------------"
+	$(QUIET)echo ""
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ">>>>     Current EPICS and E3 Envrionment Variables     <<<<"
+	$(QUIET)echo "------------------------------------------------------------"
+	$(QUIET)echo ""
diff --git a/require.Makefile b/require.Makefile
index 60f618b114f9b961a43360e4b11c4bb41121e01c..2607e668318f3d28482988464dcef99b601355e7 100644
--- a/require.Makefile
+++ b/require.Makefile
@@ -5,7 +5,11 @@
 #
 where_am_I := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
 
-include ${where_am_I}/App/tools/driver.makefile
+# It is easy to maintain RULES_E3 if we use the "repository" makefile
+# instead of the installed makefile.
+include $(where_am_I)/App/tools/driver.makefile
+
+#include $(E3_REQUIRE_TOOLS)/driver.makefile
 
 BUILDCLASSES += Linux
 
@@ -18,9 +22,10 @@ SOURCES += dbLoadTemplate.y
 DBDS    += dbLoadTemplate.dbd
 
 SOURCES_T2 += strdup.c
-SOURCES_vxWorks   += asprintf.c
+SOURCES_vxWorks += asprintf.c
 HEADERS += strdup.h asprintf.h
 HEADERS += require.h
+
 #HEADERS += require_env.h
 
 # We need to find the Linux link.h before the EPICS link.h
diff --git a/ess-env.conf b/tools/ess-env.conf
similarity index 100%
rename from ess-env.conf
rename to tools/ess-env.conf
diff --git a/iocsh.bash b/tools/iocsh.bash
similarity index 96%
rename from iocsh.bash
rename to tools/iocsh.bash
index 262abb1787a0f358965755d31491008a8c20ad47..5e706408f3fcc957d2623db71cb87d7eaa623135 100755
--- a/iocsh.bash
+++ b/tools/iocsh.bash
@@ -65,8 +65,8 @@ trap "softIoc_end ${IOC_STARTUP}" EXIT HUP INT TERM
     loadFiles "$@";
 
     printf "epicsEnvSet IOCSH_PS1 \"$IOCSH_PS1\"\n";
-    printf "epicsEnvShow T_A\n";
-    printf "epicsEnvShow EPICS_HOST_ARCH\n";
+#    printf "epicsEnvShow T_A\n";
+#    printf "epicsEnvShow EPICS_HOST_ARCH\n";
     #    printf "var requireDebug 1\n";
 
     if [ "$init" != NO ]; then
diff --git a/iocsh_functions b/tools/iocsh_functions
similarity index 89%
rename from iocsh_functions
rename to tools/iocsh_functions
index 795a09c79d5e63a00ce82af3ca3f495a6b2de367..75c36f4c5b8869e1f45abd5711cc1a736dff26f1 100644
--- a/iocsh_functions
+++ b/tools/iocsh_functions
@@ -122,14 +122,14 @@ function printIocEnv
     var_list+=(LOGNAME);
     var_list+=(EPICS_HOST_ARCH);
     var_list+=(EPICS_BASE);
-    var_list+=(EPICS_LOCATION);
-    var_list+=(EPICS);
-    var_list+=(ESS_EPICS_PATH);
-    var_list+=(REQUIRE);
-    var_list+=(REQUIRE_VERSION);
-    var_list+=(REQUIRE_BIN);
-    var_list+=(REQUIRE_LIB);
-    var_list+=(REQUIRE_DBD);
+#    var_list+=(EPICS_LOCATION);
+#    var_list+=(EPICS);
+#    var_list+=(ESS_EPICS_PATH);
+    var_list+=(E3_REQUIRE);
+    var_list+=(E3_REQUIRE_VERSION);
+    var_list+=(E3_REQUIRE_BIN);
+    var_list+=(E3_REQUIRE_LIB);
+    var_list+=(E3_REQUIRE_DBD);
     var_list+=(EPICS_CA_AUTO_ADDR_LIST);
     var_list+=(EPICS_CA_ADDR_LIST);
     var_list+=(PATH);
@@ -204,10 +204,10 @@ function loadRequire
 {
     local libPrefix=lib
     local libPostfix=.so
-    local libName=${libPrefix}${REQUIRE}${libPostfix}
+    local libName=${libPrefix}${E3_REQUIRE}${libPostfix}
     
-    local require_lib=${REQUIRE_LIB}/${EPICS_HOST_ARCH}/${libName}
-    local require_dbd=${REQUIRE_DBD}/${REQUIRE}.dbd
+    local require_lib=${E3_REQUIRE_LIB}/${EPICS_HOST_ARCH}/${libName}
+    local require_dbd=${E3_REQUIRE_DBD}/${E3_REQUIRE}.dbd
     
     local load_cmd="dlload"
 
@@ -215,7 +215,7 @@ function loadRequire
     printf "# \n";
     printf "${load_cmd} ${require_lib}\n";
     printf "dbLoadDatabase ${require_dbd}\n"
-    printf "${REQUIRE%-*}_registerRecordDeviceDriver\n\n"
+    printf "${E3_REQUIRE%-*}_registerRecordDeviceDriver\n\n"
     printf "# \n";
     printf "# \n";
  
@@ -227,15 +227,15 @@ function check_mandatory_env_settings
 {
     declare -a var_list=();
     var_list+=(EPICS_HOST_ARCH);
-    var_list+=(ESS_EPICS_PATH);
-    var_list+=(EPICS);
+#    var_list+=(ESS_EPICS_PATH);
+#    var_list+=(EPICS);
 #    var_list+=(EPICS_MODULES);
     var_list+=(EPICS_BASE);
-    var_list+=(REQUIRE);
-    var_list+=(REQUIRE_BIN);
-    var_list+=(REQUIRE_LIB);
-    var_list+=(REQUIRE_DBD);
-    var_list+=(REQUIRE_VERSION);
+    var_list+=(E3_REQUIRE);
+    var_list+=(E3_REQUIRE_BIN);
+    var_list+=(E3_REQUIRE_LIB);
+    var_list+=(E3_REQUIRE_DBD);
+    var_list+=(E3_REQUIRE_VERSION);
     for var in ${var_list[@]};  do
 	if [[ $(checkIfVar ${!var}) -eq "$NON_EXIST" ]]; then
 	    die 1 " $var is not defined!. Please source e3-env/setE3Env.bash."
diff --git a/tools/setE3Env.bash b/tools/setE3Env.bash
new file mode 100755
index 0000000000000000000000000000000000000000..04dcadbefc661b94dff9756d488ae9205e3c9482
--- /dev/null
+++ b/tools/setE3Env.bash
@@ -0,0 +1,113 @@
+#  Copyright (c) 2016 - Present  Jeong Han Lee
+#  Copyright (c) 2016            European Spallation Source ERIC
+#
+#  The program is free software: you can redistribute
+#  it and/or modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation, either version 2 of the
+#  License, or any newer version.
+#
+#  This program is distributed in the hope that it will be useful, but WITHOUT
+#  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+#  more details.
+#
+#  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
+# 
+#   Shell   : setE3Env.bash
+#   Author  : Jeong Han Lee
+#   email   : jeonghan.lee@gmail.com
+#   date    : Monday, December  4 13:25:21 CET 2017
+#
+#   version : 0.0.2
+
+
+unset ESS_ETHERLAB_LIB
+unset ESS_ETHERLAB_BIN
+unset ESS_ETHERLAB_SBIN
+
+
+unset ESS_LIBS
+
+unset ESS_OPCUA
+unset ESS_OPCUA_LIB
+unset ESS_OPCUA_BIN
+unset ESS_OPCUA_INC
+
+unset EPICS_DRIVER_PATH
+unset EPICS_BASE
+unset EPICS_HOST_ARCH
+
+unset E3_REQUIRE
+unset E3_REQUIRE_VERSION
+unset E3_REQUIRE_LOCATION
+unset E3_REQUIRE_BIN
+unset E3_REQUIRE_LIB
+unset E3_REQUIRE_DBD
+
+unset PATH
+unset LD_LIBRARY_PATH
+
+
+
+base_ver=$1
+require_ver=$2
+
+if [ -z "$require_ver" ]; then
+    require_ver="0.0.1"
+fi
+
+if [ -z "$base_ver" ]; then
+    base_ver="3.15.5"
+fi
+
+
+
+export EPICS_BASE=/testing/epics/base-3.15.5
+
+
+#ESS_LIBS=/opt/ess
+#ESS_ETHERLAB=/opt/etherlab
+#ESS_OPCUA=${ESS_LIBS}/opcUa
+#ESS_ETHERLAB=${ESS_LIBS}/etherlab
+
+#export ESS_OPCUA_LIB=${ESS_OPCUA}/lib
+#export ESS_OPCUA_INC=${ESS_OPCUA}/include
+#export ESS_OPCUA_BIN=${ESS_OPCUA}/bin
+
+
+# export ESS_ETHERLAB_LIB=${ESS_ETHERLAB}/lib
+# export ESS_ETHERLAB_BIN=${ESS_ETHERLAB}/bin
+# export ESS_ETHERLAB_SBIN=${ESS_ETHERLAB}/sbin
+
+
+# shared libs seach directory by require.c
+#
+# EPICS_DRIVER_PATH
+#export EPICS_DRIVER_PATH=${EPICS_MODULES}:${ESS_ETHERLAB_LIB}
+#export EPICS_BASE=${EPICS}/base-${base_ver}
+
+
+
+# export EPICS_LOCATION=${ESS_EPICS_PATH}/bases
+# export EPICS_MODULES=${ESS_EPICS_PATH}/modules
+
+
+
+EPICS_HOST_ARCH=$("${EPICS_BASE}/startup/EpicsHostArch.pl")
+export EPICS_HOST_ARCH
+
+# Select REQUIRE Environment Variables
+
+export E3_REQUIRE=require
+export E3_REQUIRE_VERSION=${require_ver}
+export E3_REQUIRE_LOCATION=${EPICS_BASE}/${E3_REQUIRE}/${E3_REQUIRE_VERSION}
+
+export E3_REQUIRE_BIN=${E3_REQUIRE_LOCATION}/bin
+export E3_REQUIRE_LIB=${E3_REQUIRE_LOCATION}/lib
+export E3_REQUIRE_DBD=${E3_REQUIRE_LOCATION}/dbd
+
+export PATH=${E3_REQUIRE_BIN}:${EPICS_BASE}/bin/${EPICS_HOST_ARCH}:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:${HOME}/bin
+
+export LD_LIBRARY_PATH=${EPICS_BASE}/lib/${EPICS_HOST_ARCH}:${E3_REQUIRE_LIB}/${EPICS_HOST_ARCH}:/usr/local/lib:${HOME}/lib
+