diff --git a/iocsh.bash b/iocsh.bash
old mode 100755
new mode 100644
index 174f3761e48b17d60ee3ad9c9bad7c04039f9ec7..b68b90ff1aeb3222074b9fa24d58bc6d0b2d97b2
--- a/iocsh.bash
+++ b/iocsh.bash
@@ -1,6 +1,5 @@
 #!/bin/bash
 
-
 declare -gr SC_SCRIPT="$(realpath "$0")"
 declare -gr SC_SCRIPTNAME=${0##*/}
 declare -gr SC_TOP="$(dirname "$SC_SCRIPT")"
@@ -14,7 +13,6 @@ set +a
 . ${SC_TOP}/iocsh_functions
 
 
-
 case $1 in
     ( -h | "-?" | -help | --help )
     help
@@ -29,64 +27,34 @@ case $1 in
     ;;
 esac
 
-# Default, use the default EPICS_BASE in env setup script
-# echo ${EPICS_BASE}
-# What about EPICS_BASE exists, however, require doesn't compile with that base...?
-
-
 if [[ $(checkIfDir ${EPICS_BASE}) -eq "$NON_EXIST" ]]; then
 
-    printf "${EPICS_BASE} is defined to use. \n";
-    printf "HOWEVER, ${SC_SCRIPTNAME} cannot find the real directory at EPICS_BASE at ${EPICS_BASE}\n";
+    printf "EPICS_BASE is defined to use. \n";
     printf "Please check your environment!\n";
     exit;
 fi
 
 declare -g RUNNING_EPICS_BASE_VER=${EPICS_BASE##*/*-}
-declare -g RUNNING_REQUIRE_PATH=${EPICS_MODULES}/${REQUIRE}/${REQUIRE_VERSION}/R${RUNNING_EPICS_BASE_VER}
-
-declare -g SOFTIOC_CMD="softIoc"
-declare -g SOFTIOC_ARGS="-D ${EPICS_BASE}/dbd/softIoc.dbd"
+declare -g RUNNING_REQUIRE_PATH=${REQUIRE_PATH}/R${RUNNING_EPICS_BASE_VER}
 
 STARTUP=/tmp/${SC_SCRIPTNAME}_${IOC}_startup.$BASHPID
 
+declare -a ioc_env=(PWD EPICS_HOST_ARCH  REQUIRE_PATH EPICS_CA_ADDR_LIST);
+
 trap "softIoc_end" EXIT SIGTERM
 
 {
-    echo "# date=\"$(date)\""
-    echo "# user=\"${USER:-$(whoami)}\""
-    
-    for var in PWD EPICS_HOST_ARCH  REQUIRE_PATH EPICS_CA_ADDR_LIST
-    do
-	echo "# $var=\"${!var}\""
-    done
-
+    printIocEnv "${ioc_env}"
 
-    LIBPREFIX=lib
-    LIBPOSTFIX=.so
+    loadRequire 
+    loadFiles   "$@"
 
-    REQUIRE_LIB=${RUNNING_REQUIRE_PATH}/lib/${EPICS_HOST_ARCH}/${LIBPREFIX}${REQUIRE}${LIBPOSTFIX}
-    REQUIRE_DBD=${REQUIRE_LIB%/lib/*}/dbd/${REQUIRE}.dbd
-
-    LDCMD="dlload"
-
-    echo "$LDCMD $REQUIRE_LIB"
-    echo "dbLoadDatabase $REQUIRE_DBD"
-    echo "${REQUIRE%-*}_registerRecordDeviceDriver"
-
-    loadFiles "$@"
-
-    if [ "$init" != NO ]
-    then
+    if [ "$init" != NO ]; then
 	echo "iocInit"
     fi
 
     
-} > ${STARTUP}
+}  > ${STARTUP}
 
-
-    
-command='${SOFTIOC_CMD} ${SOFTIOC_ARGS} "${STARTUP}"'
 ulimit -c unlimited
-eval "${command}" 2>&1
-
+softIoc -D ${EPICS_BASE}/dbd/softIoc.dbd "${STARTUP}" 2>&1
diff --git a/iocsh_functions b/iocsh_functions
index cd2b6914a2a45fce2daf38bcba92818155e00bd9..58ccaf69831f93c451fccd9792792657e5fd4d73 100644
--- a/iocsh_functions
+++ b/iocsh_functions
@@ -120,6 +120,40 @@ function subst () {
     echo ${subst#,}
 }
 
+
+function printIocEnv() {
+
+    local var="";
+    
+    printf "# date=\"$(date)\"\n"
+    printf "# user=\"${USER:-$(whoami)}\"\n"
+    
+    for var in PWD EPICS_HOST_ARCH  REQUIRE_PATH EPICS_CA_ADDR_LIST
+    do
+	printf "# $var=\"${!var}\"\n"
+    done
+    printf "\n";
+    
+}
+
+function loadRequire() {
+    
+    local libPrefix=lib
+    local libPostfix=.so
+    local libName=${libPrefix}${REQUIRE}${libPostfix}
+    
+    local require_lib=${RUNNING_REQUIRE_PATH}/lib/${EPICS_HOST_ARCH}/${libName}
+    local require_dbd=${RUNNING_REQUIRE_PATH}/dbd/${REQUIRE}.dbd
+
+    
+    local load_cmd="dlload"
+
+    printf "${load_cmd} ${require_lib}\n";
+    printf "dbLoadDatabase ${require_dbd}\n"
+    printf "${REQUIRE%-*}_registerRecordDeviceDriver\n\n"
+    
+}
+
 function loadFiles () {
     while [ "$#" -gt 0 ]
     do
diff --git a/iocsh_v1.bash b/iocsh_v1.bash
new file mode 100755
index 0000000000000000000000000000000000000000..174f3761e48b17d60ee3ad9c9bad7c04039f9ec7
--- /dev/null
+++ b/iocsh_v1.bash
@@ -0,0 +1,92 @@
+#!/bin/bash
+
+
+declare -gr SC_SCRIPT="$(realpath "$0")"
+declare -gr SC_SCRIPTNAME=${0##*/}
+declare -gr SC_TOP="$(dirname "$SC_SCRIPT")"
+declare -g  STARTUP=""
+
+
+set -a
+. ${SC_TOP}/ess-env.conf
+set +a
+
+. ${SC_TOP}/iocsh_functions
+
+
+
+case $1 in
+    ( -h | "-?" | -help | --help )
+    help
+    ;;
+    ( -v | -ver | --ver | -version | --version )
+    version
+    ;;
+    ( -3.* )
+    unset EPICS_BASE;
+    EPICS_BASE=$(select_epics_base "$1");
+    shift
+    ;;
+esac
+
+# Default, use the default EPICS_BASE in env setup script
+# echo ${EPICS_BASE}
+# What about EPICS_BASE exists, however, require doesn't compile with that base...?
+
+
+if [[ $(checkIfDir ${EPICS_BASE}) -eq "$NON_EXIST" ]]; then
+
+    printf "${EPICS_BASE} is defined to use. \n";
+    printf "HOWEVER, ${SC_SCRIPTNAME} cannot find the real directory at EPICS_BASE at ${EPICS_BASE}\n";
+    printf "Please check your environment!\n";
+    exit;
+fi
+
+declare -g RUNNING_EPICS_BASE_VER=${EPICS_BASE##*/*-}
+declare -g RUNNING_REQUIRE_PATH=${EPICS_MODULES}/${REQUIRE}/${REQUIRE_VERSION}/R${RUNNING_EPICS_BASE_VER}
+
+declare -g SOFTIOC_CMD="softIoc"
+declare -g SOFTIOC_ARGS="-D ${EPICS_BASE}/dbd/softIoc.dbd"
+
+STARTUP=/tmp/${SC_SCRIPTNAME}_${IOC}_startup.$BASHPID
+
+trap "softIoc_end" EXIT SIGTERM
+
+{
+    echo "# date=\"$(date)\""
+    echo "# user=\"${USER:-$(whoami)}\""
+    
+    for var in PWD EPICS_HOST_ARCH  REQUIRE_PATH EPICS_CA_ADDR_LIST
+    do
+	echo "# $var=\"${!var}\""
+    done
+
+
+    LIBPREFIX=lib
+    LIBPOSTFIX=.so
+
+    REQUIRE_LIB=${RUNNING_REQUIRE_PATH}/lib/${EPICS_HOST_ARCH}/${LIBPREFIX}${REQUIRE}${LIBPOSTFIX}
+    REQUIRE_DBD=${REQUIRE_LIB%/lib/*}/dbd/${REQUIRE}.dbd
+
+    LDCMD="dlload"
+
+    echo "$LDCMD $REQUIRE_LIB"
+    echo "dbLoadDatabase $REQUIRE_DBD"
+    echo "${REQUIRE%-*}_registerRecordDeviceDriver"
+
+    loadFiles "$@"
+
+    if [ "$init" != NO ]
+    then
+	echo "iocInit"
+    fi
+
+    
+} > ${STARTUP}
+
+
+    
+command='${SOFTIOC_CMD} ${SOFTIOC_ARGS} "${STARTUP}"'
+ulimit -c unlimited
+eval "${command}" 2>&1
+