diff --git a/iocBoot/iocLinux/st.cmd b/iocBoot/iocLinux/st.cmd
index e2040a1668572a45b4c8bf9be14d47b3b1466877..11d8e7b81b2367e0cfba3b09366e90397a9a7ea7 100644
--- a/iocBoot/iocLinux/st.cmd
+++ b/iocBoot/iocLinux/st.cmd
@@ -14,9 +14,8 @@ epicsEnvSet(STARTUP,$(TOP)/iocBoot/$(IOC))
 errlogInit(20000)
 
 # Specify largest array CA will transport
-# Note for N sscanRecord data points, need (N+1)*8 bytes, else MEDM
-# plot doesn't display
-epicsEnvSet EPICS_CA_MAX_ARRAY_BYTES 64008
+# Note for N doubles, need N*8 bytes
+epicsEnvSet EPICS_CA_MAX_ARRAY_BYTES 64000
 
 ################################################################################
 # Tell EPICS all about the record types, device-support modules, drivers,
@@ -24,22 +23,20 @@ epicsEnvSet EPICS_CA_MAX_ARRAY_BYTES 64008
 dbLoadDatabase("../../dbd/iocxxxLinux.dbd")
 iocxxxLinux_registerRecordDeviceDriver(pdbbase)
 
-< areaDetector.cmd
+### save_restore setup
+< save_restore.cmd
 
-# Autosave info node example
-#dbLoadRecords("$(AUTOSAVE)/asApp/Db/infoExample.db","P=xxx:")
+# Access Security
+dbLoadRecords("$(TOP)/xxxApp/Db/Security_Control.db","P=xxx:")
+asSetFilename("$(TOP)/iocBoot/accessSecurity.acf")
+asSetSubstitutions("P=xxx:")
+# Can modify file and reinit with "asInit"
 
-# Soft function generator
-dbLoadRecords("$(CALC)/calcApp/Db/FuncGen.db","P=xxx:,Q=fgen,OUT=xxx:m7.VAL")
+< areaDetector.cmd
 
 # user-assignable ramp/tweak
 dbLoadRecords("$(STD)/stdApp/Db/ramp_tweak.db","P=xxx:,Q=rt1")
 
-### save_restore setup
-# We presume a suitable initHook routine was compiled into xxx.munch.
-# See also create_monitor_set(), after iocInit() .
-< save_restore.cmd
-
 # serial support
 #< serial.cmd
 
@@ -47,43 +44,53 @@ dbLoadRecords("$(STD)/stdApp/Db/ramp_tweak.db","P=xxx:,Q=rt1")
 #dbLoadTemplate("basic_motor.substitutions")
 #dbLoadTemplate("motor.substitutions")
 dbLoadTemplate("softMotor.substitutions")
-#dbLoadTemplate("pseudoMotor.substitutions")
+dbLoadTemplate("pseudoMotor.substitutions")
 < motorSim.cmd
-
-#< areaDetector.cmd
-
-### Allstop, alldone
+# motorUtil (allstop & alldone)
 dbLoadRecords("$(MOTOR)/db/motorUtil.db", "P=xxx:")
-
-### Insertion-device control
-#dbLoadRecords("$(STD)/stdApp/Db/IDctrl.db","P=xxx:,xx=02us")
+# Run this after iocInit:
+doAfterIocInit("motorUtilInit('xxx:')")
 
 ### Scan-support software
 # crate-resident scan.  This executes 1D, 2D, 3D, and 4D scans, and caches
 # 1D data, but it doesn't store anything to disk.  (See 'saveData' below for that.)
 dbLoadRecords("$(SSCAN)/sscanApp/Db/standardScans.db","P=xxx:,MAXPTS1=1000,MAXPTS2=1000,MAXPTS3=1000,MAXPTS4=1000,MAXPTSH=1000")
 dbLoadRecords("$(SSCAN)/sscanApp/Db/saveData.db","P=xxx:")
+# Run this after iocInit:
+doAfterIocInit("saveData_Init(saveData.req, 'P=xxx:')")
 dbLoadRecords("$(SSCAN)/sscanApp/Db/scanProgress.db","P=xxx:scanProgress:")
-# configMenu example.  See create_manual_set() command after iocInit.
+# Run this after iocInit:
+doAfterIocInit("seq &scanProgress, 'S=xxx:, P=xxx:scanProgress:'")
+
+# configMenu example.
 dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=xxx:,CONFIG=scan1")
+# Note that the request file MUST be named $(CONFIG)Menu.req
+# If the macro CONFIGMENU is defined with any value, backup (".savB") and
+# sequence files (".savN") will not be written.  We don't want these for configMenu.
+# Run this after iocInit:
+doAfterIocInit("create_manual_set('scan1Menu.req','P=xxx:,CONFIG=scan1,CONFIGMENU=1')")
 # You could make scan configurations read-only:
 #dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=xxx:,CONFIG=scan1,ENABLE_SAVE=0")
 
+# read-only configMenu example.  (Read-only, because we're not calling create_manual_set().)
+#dbLoadRecords("$(AUTOSAVE)/asApp/Db/configMenu.db","P=xxx:,CONFIG=scan2")
+
 # A set of scan parameters for each positioner.  This is a convenience
 # for the user.  It can contain an entry for each scannable thing in the
 # crate.
 dbLoadTemplate("scanParms.substitutions")
 
 ### Slits
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/2slit.db","P=xxx:,SLIT=Slit1V,mXp=m3,mXn=m4")
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/2slit.db","P=xxx:,SLIT=Slit1H,mXp=m5,mXn=m6")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/2slit.db","P=xxx:,SLIT=Slit1V,mXp=m3,mXn=m4")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/2slit.db","P=xxx:,SLIT=Slit1H,mXp=m5,mXn=m6")
 
 # X-ray Instrumentation Associates Huber Slit Controller
 # supported by a customized version of the SNL program written by Pete Jemian
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/xia_slit.db", "P=xxx:, HSC=hsc1:")
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/xia_slit.db", "P=xxx:, HSC=hsc2:")
 #dbLoadRecords("$(IP)/ipApp/Db/generic_serial.db", "P=xxx:,C=0,SERVER=serial7")
-
+# Run this after iocInit:
+#doAfterIocInit("seq  &xia_slit, 'name=hsc1, P=xxx:, HSC=hsc1:, S=xxx:seriala[6]'")
 
 ### 2-post mirror
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/2postMirror.db","P=xxx:,Q=M1,mDn=m1,mUp=m2,LENGTH=0.3")
@@ -94,7 +101,6 @@ dbLoadTemplate("scanParms.substitutions")
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/filterLock.db","P=xxx:,Q=fltr2:,LOCK=fltr_1_2:,LOCK_PV=xxx:DAC1_1.VAL")
 
 ### Optical tables
-#tableRecordDebug=1
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/table.db","P=xxx:,Q=Table1,T=table1,M0X=m1,M0Y=m2,M1Y=m3,M2X=m4,M2Y=m5,M2Z=m6,GEOM=SRI")
 
 # Io calculation
@@ -103,19 +109,27 @@ dbLoadRecords("$(OPTICS)/opticsApp/Db/Io.db","P=xxx:Io:")
 ### Monochromator support ###
 # Kohzu and PSL monochromators: Bragg and theta/Y/Z motors
 # standard geometry (geometry 1)
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m1,M_Y=m2,M_Z=m3,yOffLo=17.4999,yOffHi=17.5001")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m1,M_Y=m2,M_Z=m3,yOffLo=17.4999,yOffHi=17.5001")
+# Run this after iocInit:
+doAfterIocInit("seq &kohzuCtl, 'P=xxx:, M_THETA=m1, M_Y=m2, M_Z=m3, GEOM=1, logfile=kohzuCtl.log'")
 # modified geometry (geometry 2)
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m1,M_Y=m2,M_Z=m2,yOffLo=4,yOffHi=36")
+# Run this after iocInit:
+#doAfterIocInit("seq &kohzuCtl, 'P=xxx:, M_THETA=m1, M_Y=m2, M_Z=m3, GEOM=2, logfile=kohzuCtl.log'")
 
 # Spherical grating monochromator
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/SGM.db","P=xxx:,N=1,M_x=m7,M_rIn=m6,M_rOut=m8,M_g=m9")
 
 # 4-bounce high-resolution monochromator
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/hrSeq.db","P=xxx:,N=1,M_PHI1=m1,M_PHI2=m2")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/hrSeq.db","P=xxx:,N=1,M_PHI1=m4,M_PHI2=m5")
+# Run this after iocInit:
+doAfterIocInit("seq &hrCtl1, 'P=xxx:, N=1, M_PHI1=m4, M_PHI2=m5, logfile=hrCtl1.log'")
 
 ### Orientation matrix, four-circle diffractometer (see seq program 'orient' below)
 #dbLoadRecords("$(OPTICS)/opticsApp/Db/orient.db", "P=xxx:,O=1,PREC=4")
 #dbLoadTemplate("orient_xtals.substitutions")
+# Run this after iocInit:
+#doAfterIocInit("seq &orient, 'P=xxx:orient1:,PM=xxx:,mTTH=m9,mTH=m10,mCHI=m11,mPHI=m12'")
 
 # Load single element Canberra AIM MCA and ICB modules
 #< canberra_1.cmd
@@ -127,31 +141,14 @@ dbLoadRecords("$(OPTICS)/opticsApp/Db/Io.db","P=xxx:Io:")
 #< canberra_3.cmd
 
 ### Stuff for user programming ###
-dbLoadRecords("$(CALC)/calcApp/Db/userCalcs10.db","P=xxx:")
-dbLoadRecords("$(CALC)/calcApp/Db/userCalcOuts10.db","P=xxx:")
-dbLoadRecords("$(CALC)/calcApp/Db/userStringCalcs10.db","P=xxx:")
-dbLoadRecords("$(CALC)/calcApp/Db/userArrayCalcs10.db","P=xxx:,N=2000")
-dbLoadRecords("$(CALC)/calcApp/Db/userTransforms10.db","P=xxx:")
-dbLoadRecords("$(CALC)/calcApp/Db/userAve10.db","P=xxx:")
-# string sequence (sseq) records
-dbLoadRecords("$(CALC)/calcApp/Db/userStringSeqs10.db","P=xxx:")
+< calc.cmd
+
 # 4-step measurement
-dbLoadRecords("$(STD)/stdApp/Db/4step.db", "P=xxx:")
-# interpolation
-dbLoadRecords("$(CALC)/calcApp/Db/interp.db", "P=xxx:,N=2000")
-dbLoadRecords("$(CALC)/calcApp/Db/interpNew.db", "P=xxx:,Q=1,N=2000")
-# array test
-dbLoadRecords("$(CALC)/calcApp/Db/arrayTest.db", "P=xxx:,N=2000")
-# pvHistory (in-crate archive of up to three PV's)
-dbLoadRecords("$(STD)/stdApp/Db/pvHistory.db","P=xxx:,N=1,MAXSAMPLES=1440")
-# busy record
-dbLoadRecords("$(BUSY)/busyApp/Db/busyRecord.db", "P=xxx:,R=mybusy")
+dbLoadRecords("$(STD)/stdApp/Db/4step.db", "P=xxx:,Q=4step:")
 
 # Slow feedback
 dbLoadTemplate "pid_slow.substitutions"
 dbLoadTemplate "async_pid_slow.substitutions"
-
-# PID-based feedback
 #dbLoadTemplate "fb_epid.substitutions"
 
 # Miscellaneous PV's, such as burtResult
@@ -161,19 +158,28 @@ dbLoadRecords("$(STD)/stdApp/Db/misc.db","P=xxx:")
 dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db","IOC=xxx")
 
 ### Queensgate piezo driver
-#dbLoadRecords("$(IP)/ipApp/Db/pzt_3id.db","P=xxx:")
 #dbLoadRecords("$(IP)/ipApp/Db/pzt.db","P=xxx:")
 
 ### Queensgate Nano2k piezo controller
 #dbLoadRecords("$(STD)/stdApp/Db/Nano2k.db","P=xxx:,S=s1")
 
 ### Load database records for Femto amplifiers
-#dbLoadRecords("$(STD)/stdApp/Db/femto.db","P=xxx:,H=fem01:,F=seq01:")
+dbLoadRecords("$(STD)/stdApp/Db/femto.db","P=xxx:,H=fem01:,F=seq01:")
+# Run this after iocInit:
+doAfterIocInit("seq femto,'name=fem1,P=xxx:,H=fem01:,F=seq01:,G1=xxx:Unidig1Bo6,G2=xxx:Unidig1Bo7,G3=xxx:Unidig1Bo8,NO=xxx:Unidig1Bo10'")
 
 ### Load database records for dual PF4 filters
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4common.db","P=xxx:,H=pf4:,A=A,B=B")
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4bank.db","P=xxx:,H=pf4:,B=A")
-#dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4bank.db","P=xxx:,H=pf4:,B=B")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4common.db","P=xxx:,H=pf4:,A=A,B=B")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4bank.db","P=xxx:,H=pf4:,B=A")
+dbLoadRecords("$(OPTICS)/opticsApp/Db/pf4bank.db","P=xxx:,H=pf4:,B=B")
+# Run this after iocInit:
+doAfterIocInit("seq pf4,'name=pf1,P=xxx:,H=pf4:,B=A,M=xxx:userTran10.I,B1=xxx:userTran10.A,B2=xxx:userTran10.B,B3=xxx:userTran10.C,B4=xxx:userTran10.D'")
+doAfterIocInit("seq pf4,'name=pf2,P=xxx:,H=pf4:,B=B,M=xxx:userTran10.I,B1=xxx:userTran10.E,B2=xxx:userTran10.F,B3=xxx:userTran10.G,B4=xxx:userTran10.H'")
+
+### Load database records for alternative PF4-filter support
+dbLoadTemplate "filter.substitutions"
+# Run this after iocInit:
+doAfterIocInit("seq filterDrive,'NAME=filterDrive,P=xxx:,R=filter:,NUM_FILTERS=16'")
 
 ###############################################################################
 iocInit
@@ -182,58 +188,8 @@ iocInit
 # write all the PV names to a local file
 dbl > dbl-all.txt
 
-### startup State Notation Language programs
-#seq &kohzuCtl, "P=xxx:, M_THETA=m1, M_Y=m2, M_Z=m3, GEOM=1, logfile=kohzuCtl.log"
-#seq &hrCtl, "P=xxx:, N=1, M_PHI1=m1, M_PHI2=m2, logfile=hrCtl1.log"
-
-# Keithley 2000 series DMM
-# channels: 10, 20, or 22;  model: 2000 or 2700
-#seq &Keithley2kDMM,("P=xxx:, Dmm=D1, channels=22, model=2700")
-
-# X-ray Instrumentation Associates Huber Slit Controller
-# supported by a SNL program written by Pete Jemian and modified (TMM) for use with the
-# sscan record
-#seq  &xia_slit, "name=hsc1, P=xxx:, HSC=hsc1:, S=xxx:seriala[6]"
-
-# Orientation-matrix
-#seq &orient, "P=xxx:orient1:,PM=xxx:,mTTH=m9,mTH=m10,mCHI=m11,mPHI=m12"
-
-# Start PF4 filter sequence program
-#seq pf4,"name=pf1,P=xxx:,H=pf4:,B=A,M=xxx:userTran10.I,B1=xxx:userTran10.A,B2=xxx:userTran10.B,B3=xxx:userTran10.C,B4=xxx:userTran10.D"
-#seq pf4,"name=pf2,P=xxx:,H=pf4:,B=B,M=xxx:userTran10.I,B1=xxx:userTran10.E,B2=xxx:userTran10.F,B3=xxx:userTran10.G,B4=xxx:userTran10.H"
-
-# Alternative pf4 filter seq program
-#seq filterDrive,"NAME=filterDrive,P=xxx:,R=filter:,NUM_FILTERS=16"
-
-# Start Femto amplifier sequence programs
-#seq femto,"name=fem1,P=xxx:,H=fem01:,F=seq01:,G1=xxx:Unidig1Bo6,G2=xxx:Unidig1Bo7,G3=xxx:Unidig1Bo8,NO=xxx:Unidig1Bo10"
-
-seq &scanProgress, "S=xxx:, P=xxx:scanProgress:"
-
-### Start up the autosave task and tell it what to do.
-# The task is actually named "save_restore".
-# Note that you can reload these sets after creating them: e.g., 
-# reload_monitor_set("auto_settings.req",30,"P=xxx:")
-#save_restoreDebug=20
-#
-# save positions every five seconds
-create_monitor_set("auto_positions.req",5,"P=xxx:")
-# save other things every thirty seconds
-create_monitor_set("auto_settings.req",30,"P=xxx:")
-
-# configMenu example
-# Note that auto_settings.req includes scan1MenuNames.req, so the names of
-# configurations will be saved and restored.  
-# Also note that the request file MUST be named $(CONFIG)Menu.req
-create_manual_set("scan1Menu.req","P=xxx:,CONFIG=scan1")
-
-### Start the saveData task.
-saveData_Init("saveData.req", "P=xxx:")
-
-dbcar(0,1)
-
-# motorUtil (allstop & alldone)
-motorUtilInit("xxx:")
+# Report  states of database CA links
+dbcar(*,1)
 
 # print the time our boot was finished
 date