diff --git a/support/bin/rtcds.in b/support/bin/rtcds.in
index 982625a316af33b3bd09ef16c4227efc71718212..9650c8a18d9c9ba8132f3bb89210bb322692b734 100755
--- a/support/bin/rtcds.in
+++ b/support/bin/rtcds.in
@@ -1,11 +1,9 @@
 #!/bin/bash -e
 
 RTS_VERSION=${RTS_VERSION:-__VERSION__}
-ENV_FILE=${RTS_ENV:-/etc/advligorts/env}
-RCG_SRC=${RCG_SRC:-/usr/share/advligorts/src}
-RCG_BUILDD=${RCG_BUILDD:-/var/cache/advligorts/rcg-$RTS_VERSION}
-RTS_USER=${RTS_USER:-controls}
 
+# this should define all USER_VARS (see below)
+ENV_FILE=${RTS_ENV:-/etc/advligorts/env}
 source "$ENV_FILE" 2>/dev/null || true
 
 SITE=${SITE^^*}
@@ -13,15 +11,22 @@ site=${SITE,,*}
 IFO=${IFO^^*}
 ifo=${IFO,,*}
 
+RCG_SRC=${RCG_SRC:-/usr/share/advligorts/src}
+RCG_BUILDD=${RCG_BUILDD:-/var/cache/advligorts/rcg-$RTS_VERSION}
+# FIXME: the RCG hard-codes /opt/rtcds as the root
+RCG_TARGET=/opt/rtcds/${site}/${ifo}
+RTS_USER=${RTS_USER:-controls}
+
 # search paths for C source code
 CDS_SRC=${CDS_SRC:-$RCG_LIB_PATH}
 CDS_IFO_SRC=${CDS_IFO_SRC:-$CDS_SRC}
 
 # add RCG module source to lib path
+# FIXME: rename RCG_MOD_PATH
 RCG_LIB_PATH=$RCG_LIB_PATH:${RCG_SRC}/src/epics/simLink/:${RCG_SRC}/src/epics/simLink/lib
 
-USER_VARS=(SITE IFO OPTRTCDS RCG_LIB_PATH)
-LIST_VARS=(RTS_VERSION ${USER_VARS[@]} RCG_SRC RCG_BUILDD RTS_USER)
+USER_VARS=(SITE IFO RCG_LIB_PATH)
+LIST_VARS=(RTS_VERSION ${USER_VARS[@]} RCG_SRC RCG_BUILDD RCG_TARGET RTS_USER)
 EXPORT_VARS=(${USER_VARS[@]} site ifo CDS_SRC CDS_IFO_SRC)
 
 ##################################################
@@ -49,20 +54,40 @@ check_env() {
     done
 }
 
-prep_target(){
-    log "creating OPTRTCDS..."
-    mkdir -p ${OPTRTCDS}/{target,chans}/tmp
-}
-
 prep_buildd() {
-    sudo mkdir -p "$RCG_BUILDD"
-    sudo chown "$RTS_USER" "$RCG_BUILDD"
-    if [ -e "$RCG_BUILDD"/Makefile ] ; then
-	return
+    if [ -d "$RCG_BUILDD" ] ; then
+        return
     fi
-    log "configuring RCG_BUILDD..."
+    log "creating RCG_BUILDD $RCG_BUILDD..."
+    if sudo -u $RTS_USER mkdir -p "$RCG_BUILDD" 2>/dev/null ; then
+        sudo -u $RTS_USER chown $RTS_USER:$RTS_USER "$RCG_BUILDD"
+    elif sudo mkdir -p "$RCG_BUILDD" 2>/dev/null ; then
+        sudo chown $RTS_USER:$RTS_USER "$RCG_BUILDD"
+    else
+        log "Could not create build directory '$RCG_BUILDD' (owner: $RTS_USER:$RTS_USER)."
+        log "Please create manually to continue."
+        exit 1
+    fi
+    log "configuring RCG_BUILDD $RCG_BUILDD..."
     cd "$RCG_BUILDD"
-    "$RCG_SRC"/configure
+    sudo -u $RTS_USER "$RCG_SRC"/configure
+}
+
+prep_target(){
+    if [ -d "$RCG_TARGET" ] ; then
+        return
+    fi
+    log "creating RCG_TARGET $RCG_TARGET..."
+    if sudo -u $RTS_USER mkdir -p "$RCG_TARGET" 2>/dev/null ; then
+        sudo -u $RTS_USER chown $RTS_USER:$RTS_USER "$RCG_TARGET"
+    elif sudo mkdir -p "$RCG_TARGET" 2>/dev/null ; then
+        sudo chown $RTS_USER:$RTS_USER "$RCG_TARGET"
+    else
+        log "Could not create target directory '$RCG_TARGET' (owner: $RTS_USER:$RTS_USER)."
+        log "Please create manually to continue."
+        exit 1
+    fi
+    sudo -u $RTS_USER mkdir -p ${RCG_TARGET}/{target,chans/tmp}
 }
 
 ########
@@ -224,6 +249,7 @@ case $cmd in
 	    exit 2
 	fi
 	check_env
+	prep_target
 	install_sys $@
 	;;
     'start')
diff --git a/support/bin/rts_epics_exec b/support/bin/rts_epics_exec
index 8425af5de5aa51f424cfa8e5999e4fb8bf9a966b..605c6a5bdb2f66e9f111cb9a663f51c8e5cf82dc 100755
--- a/support/bin/rts_epics_exec
+++ b/support/bin/rts_epics_exec
@@ -6,6 +6,7 @@ if [ -z "$sys" ] ; then
     exit 1
 fi
 export EPICS_DB_INCLUDE_PATH=/usr/lib/epics/dbd
-TARGET=${OPTRTCDS}/target/${sys}/${sys}epics
-cd ${TARGET}
-exec ${TARGET}/${sys}epics ${sys}epics${IFO}.cmd
+TARGET=/opt/rtcds/${SITE,,*}/${IFO,,*}
+ETARGET=${TARGET}/target/${sys}/${sys}epics
+cd ${ETARGET}
+exec ./${sys}epics ${sys}epics${IFO}.cmd
diff --git a/support/bin/rts_module_ctrl b/support/bin/rts_module_ctrl
index 25c44ef7de09f01867cc5d7e6ca6c4158ff5181e..e5ad158613af5e30594cda95d2f83cde173448dd 100755
--- a/support/bin/rts_module_ctrl
+++ b/support/bin/rts_module_ctrl
@@ -6,10 +6,10 @@ if [ -z "$sys" ] ; then
     echo "usage: $(basename $0) start|stop <sys>"
     exit 1
 fi
-TARGET=${OPTRTCDS}/target/${sys}
+TARGET=/opt/rtcds/${SITE,,*}/${IFO,,*}
 case $cmd in
     start)
-        /sbin/insmod "$TARGET"/bin/${sys}.ko
+        /sbin/insmod "$TARGET"/target/${sys}/bin/${sys}.ko
         ;;
     stop)
         /sbin/rmmod ${sys}