diff --git a/.gitmodules b/.gitmodules
index 106ef3c8c5cdb5296751fe7f91fd08a4bc691a27..e3ae9eae67e9aa60e65d448cc11bc6b9503ebc3a 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 "require"]
 	path = require
 	url = https://github.com/paulscherrerinstitute/require
diff --git a/Makefile b/Makefile
index 62ec722a47c3374ad26c4834a70ae7ac21b74d20..7f78a8d2e7ade68ab71b41783efb4c559fbaef0f 100644
--- a/Makefile
+++ b/Makefile
@@ -22,30 +22,7 @@
 
 TOP:=$(CURDIR)
 
--include $(TOP)/e3-env/E3_ENV_CONF
-
-ifneq (,$(findstring dev,$(MAKECMDGOALS)))
-include $(TOP)/configure/CONFIG_DEV
-else
 include $(TOP)/configure/CONFIG
-endif
-
-
-include $(TOP)/configure/MK_DEFINES
-
-include $(TOP)/configure/BUILD_REQUIRE
-
-include $(TOP)/configure/BUILD_E3
-
-include $(TOP)/configure/BUILD_DB
-
-# Build Rule for Community EPICS Building
-include $(TOP)/configure/BUILD_EPICS
-
-# Build Rule for Development Mode
-ifneq (,$(findstring dev,$(MAKECMDGOALS)))
-include $(TOP)/configure/BUILD_DEV
-endif
-
 
+include $(TOP)/configure/RULES
 
diff --git a/configure/CONFIG b/configure/CONFIG
deleted file mode 120000
index dad4f848c59ff3b8570947ec7b584cc3cf4efe17..0000000000000000000000000000000000000000
--- a/configure/CONFIG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ESS
\ No newline at end of file
diff --git a/configure/CONFIG b/configure/CONFIG
new file mode 100644
index 0000000000000000000000000000000000000000..7156ced12982f97d239b5feb839ba9e7792fb2d1
--- /dev/null
+++ b/configure/CONFIG
@@ -0,0 +1,24 @@
+
+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
+
+
+include $(TOP)/configure/CONFIG_REQUIRE
+include $(TOP)/configure/CONFIG_EPICS
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/CONFIG_MODULE_DEV
+else
+include $(TOP)/configure/CONFIG_MODULE
+endif
+
+
+include $(TOP)/configure/CONFIG_E3_MAKEFILE
diff --git a/configure/CONFIG_E3_MAKEFILE b/configure/CONFIG_E3_MAKEFILE
new file mode 100644
index 0000000000000000000000000000000000000000..517b603b3464188cede0d37179a57e05e10d041c
--- /dev/null
+++ b/configure/CONFIG_E3_MAKEFILE
@@ -0,0 +1,25 @@
+
+# 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
+
+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 += MODULE_LOCATION="$(E3_REQUIRE_LOCATION)"
+
+
+## the following variables to display
+
+# VARS_EXCLUDES+=E3_EPICS_VERSION_TEMP
+
diff --git a/configure/CONFIG_EPICS b/configure/CONFIG_EPICS
new file mode 100644
index 0000000000000000000000000000000000000000..c799aa63a8374088080a93181faaf6f631774b90
--- /dev/null
+++ b/configure/CONFIG_EPICS
@@ -0,0 +1,57 @@
+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
+
+
+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
+
+
+
+### 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
diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE
new file mode 100644
index 0000000000000000000000000000000000000000..5bfd5eaeabf12e0428c118b8ebefe20718e80ada
--- /dev/null
+++ b/configure/CONFIG_MODULE
@@ -0,0 +1,10 @@
+
+EPICS_MODULE_NAME:=iocStats
+EPICS_MODULE_TAG:=1856ef5
+
+
+E3_MODULE_SRC_PATH:=$(EPICS_MODULE_NAME)
+E3_MODULE_MAKEFILE:=$(EPICS_MODULE_NAME).Makefile
+
+E3_MODULE_NAME:=$(EPICS_MODULE_NAME)
+E3_MODULE_VERSION:=1856ef5
diff --git a/configure/CONFIG_MODULE_DEV b/configure/CONFIG_MODULE_DEV
new file mode 100644
index 0000000000000000000000000000000000000000..fcac2dba042fb2d1ad9c2d229f28f52dc16bbc46
--- /dev/null
+++ b/configure/CONFIG_MODULE_DEV
@@ -0,0 +1,15 @@
+EPICS_MODULE_NAME:=iocStats
+EPICS_MODULE_TAG:=master
+
+
+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"
+
+
diff --git a/configure/CONFIG_REQUIRE b/configure/CONFIG_REQUIRE
new file mode 100644
index 0000000000000000000000000000000000000000..6b0c0baedb4621c554d62ceba702fa2fca4e249d
--- /dev/null
+++ b/configure/CONFIG_REQUIRE
@@ -0,0 +1,13 @@
+
+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
+
+
+export E3_REQUIRE_TOOLS
+
diff --git a/configure/DEFINES_FT b/configure/DEFINES_FT
new file mode 100644
index 0000000000000000000000000000000000000000..7422071ee32fe38509eb7d5b3f5f935b37d1a607
--- /dev/null
+++ b/configure/DEFINES_FT
@@ -0,0 +1,24 @@
+# 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/$@
+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/RELEASE b/configure/RELEASE
new file mode 100644
index 0000000000000000000000000000000000000000..3257c8d460a2ee843b37f29f2cf067ee7e014f9e
--- /dev/null
+++ b/configure/RELEASE
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 0000000000000000000000000000000000000000..f960c8460e4c2d2fcb709594c3a1ea7f7f519663
--- /dev/null
+++ b/configure/RELEASE_DEV
@@ -0,0 +1,9 @@
+
+
+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
new file mode 100644
index 0000000000000000000000000000000000000000..8b647f943afe814c50309cbc4895fa6d8f02eae2
--- /dev/null
+++ b/configure/RULES
@@ -0,0 +1,13 @@
+#CONFIG
+# include $(EPICS_BASE)/configure/RULES
+
+include $(TOP)/configure/DEFINES_FT
+include $(TOP)/configure/RULES_E3
+include $(TOP)/configure/RULES_EPICS
+include $(TOP)/configure/RULES_DB
+include $(TOP)/configure/RULES_VARS
+
+
+ifneq (,$(findstring dev,$(MAKECMDGOALS)))
+include $(TOP)/configure/RULES_DEV
+endif
diff --git a/configure/RULES_DB b/configure/RULES_DB
new file mode 100644
index 0000000000000000000000000000000000000000..e56da3edf87cbd6355dfc4544e439ff6180f98b7
--- /dev/null
+++ b/configure/RULES_DB
@@ -0,0 +1,23 @@
+
+
+## This RULE should be used in case of inflating DB files
+## 
+
+# .PHONY: db
+
+### We have to think how to find $(EPICS_BASE) and
+### $(EPICS_HOST_ARCH) during driver.makefile
+### Friday, November  3 16:44:55 CET 2017, jhlee
+### Currently feasible solutoin without touching driver.makefile
+### is the following:
+###
+### 0) source setE3Env.bash 3.15.4
+### 1) make db
+### 2) make install
+### 3) source setE3Env.bash 3.15.5
+### 4) make db
+### 5) make install 
+###   ..... 
+
+#db: conf
+#        $(QUIET) make $(M_OPTIONS) db
diff --git a/configure/RULES_DEV b/configure/RULES_DEV
new file mode 100644
index 0000000000000000000000000000000000000000..5bba7a078fd31291dfd3087e4888b699d24a5391
--- /dev/null
+++ b/configure/RULES_DEV
@@ -0,0 +1,18 @@
+.PHONY: devvars devenv devinit devbuild devclean 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)
+        
+
+devbuild: build
+devclean: clean
+devrebuild: rebuild
+devuninstall: uninstall
+devdistclean: clean
+        $(QUIET)echo "Removing $(E3_MODULE_SRC_PATH) ......... "
+        rm -rf $(E3_MODULE_SRC_PATH)
diff --git a/configure/RULES_E3 b/configure/RULES_E3
new file mode 100644
index 0000000000000000000000000000000000000000..d458a0e438f69ece979d561e6d124b694b71ead6
--- /dev/null
+++ b/configure/RULES_E3
@@ -0,0 +1,82 @@
+.PHONY: help default install uninstall build rebuild clean conf
+
+
+# # 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 : $(E3_MODULE_NAME)
+install: uninstall
+        $(QUIET) sudo -E bash -c 'make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) install'
+
+## Uninstall : $(E3_MODULE_NAME)
+uninstall: conf
+        $(QUIET) sudo -E bash -c 'make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) 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
+
+
+## Clean, build, and install the EPICS Module : $(E3_MODULE_NAME)
+rebuild: clean build install
+
+
+## Clean : $(E3_MODULE_NAME)
+clean: conf
+        $(QUIET) make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) 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) 
+
+git-submodule-sync:
+        $(QUIET) git submodule sync
+
+
+$(E3_MODULE_SRC_PATH): 
+        $(QUIET) $(git_update)
+        cd $@ && git checkout $(EPICS_MODULE_TAG)
+
+
+checkout: 
+        cd $(E3_MODULE_SRC_PATH) && git checkout $(EPICS_MODULE_TAG)
+
+
+
+
+
+
+# .PHONY: help2
+
+# ## Show driver.makefile help
+# help2:
+#       $(QUIET) make $(E3_REQUIRE_MAKEFILE_INPUT_OPTIONS) help
diff --git a/configure/RULES_EPICS b/configure/RULES_EPICS
new file mode 100644
index 0000000000000000000000000000000000000000..bf947c981a50a43575f1db39fd41354c7886b3b2
--- /dev/null
+++ b/configure/RULES_EPICS
@@ -0,0 +1,13 @@
+# 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)"
+
+#epics-clean:
+#        sudo -E bash -c "$(MAKE) -C $(EPICS_MODULE_SRC_PATH) clean"
+
diff --git a/configure/RULES_VARS b/configure/RULES_VARS
new file mode 100644
index 0000000000000000000000000000000000000000..f9c9c4719501c200b8fbeaf158a076f25b2300fd
--- /dev/null
+++ b/configure/RULES_VARS
@@ -0,0 +1,16 @@
+
+E3_MODULES_VARIABLES:=$(sort $(filter-out $(VARS_EXCLUDES) VARS_EXCLUDES,$(.VARIABLES)))
+
+.PHONY : vars env header
+
+
+vars: header
+        $(foreach v, $(E3_MODULES_VARIABLES), $(info $(v) = $($(v)))) @#noop
+         
+env: vars
+
+header:
+        @echo ""
+        @echo "-------------------------------------------------"
+        @echo "   Current EPICS and E3 Envrionment Variables "
+        @echo "-------------------------------------------------"
diff --git a/configure/BUILD_DB b/configure/old_config/BUILD_DB
similarity index 100%
rename from configure/BUILD_DB
rename to configure/old_config/BUILD_DB
diff --git a/configure/BUILD_DEV b/configure/old_config/BUILD_DEV
similarity index 100%
rename from configure/BUILD_DEV
rename to configure/old_config/BUILD_DEV
diff --git a/configure/BUILD_E3 b/configure/old_config/BUILD_E3
similarity index 100%
rename from configure/BUILD_E3
rename to configure/old_config/BUILD_E3
diff --git a/configure/BUILD_EPICS b/configure/old_config/BUILD_EPICS
similarity index 100%
rename from configure/BUILD_EPICS
rename to configure/old_config/BUILD_EPICS
diff --git a/configure/BUILD_REQUIRE b/configure/old_config/BUILD_REQUIRE
similarity index 100%
rename from configure/BUILD_REQUIRE
rename to configure/old_config/BUILD_REQUIRE
diff --git a/configure/CONFIG_DEV b/configure/old_config/CONFIG_DEV
similarity index 100%
rename from configure/CONFIG_DEV
rename to configure/old_config/CONFIG_DEV
diff --git a/configure/CONFIG_ESS b/configure/old_config/CONFIG_ESS
similarity index 100%
rename from configure/CONFIG_ESS
rename to configure/old_config/CONFIG_ESS
diff --git a/configure/CONFIG_PSI b/configure/old_config/CONFIG_PSI
similarity index 100%
rename from configure/CONFIG_PSI
rename to configure/old_config/CONFIG_PSI
diff --git a/configure/MK_DEFINES b/configure/old_config/MK_DEFINES
similarity index 100%
rename from configure/MK_DEFINES
rename to configure/old_config/MK_DEFINES
diff --git a/configure/driver_makefile_conf.m4 b/configure/old_config/driver_makefile_conf.m4
similarity index 100%
rename from configure/driver_makefile_conf.m4
rename to configure/old_config/driver_makefile_conf.m4
diff --git a/e3-env b/e3-env
deleted file mode 160000
index 2f8e5e989ae17eb2241ad693ebfdbb9ceac5df51..0000000000000000000000000000000000000000
--- a/e3-env
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 2f8e5e989ae17eb2241ad693ebfdbb9ceac5df51
diff --git a/removing_e3-env.log b/removing_e3-env.log
new file mode 100644
index 0000000000000000000000000000000000000000..03de366cf553095db7a9f286a70ff32cb5127e7c
--- /dev/null
+++ b/removing_e3-env.log
@@ -0,0 +1,6 @@
+How to remove e3-env
+
+
+git submodule deinit -f -- e3-env
+rm -rf .git/modules/e3-env
+git rm -f e3-env