diff --git a/Makefile b/Makefile
index 5e554a16d10063819e9c5652357ae0654c3a37aa..bb27ec020834156329d9a28f89372f595209bb4c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,9 @@
 #Makefile at top of application tree
 TOP = .
-include $(TOP)/config/CONFIG_APP
-DIRS += config
-DIRS += $(wildcard *App)
-DIRS += $(wildcard *app)
-DIRS += $(wildcard iocBoot)
-DIRS += $(wildcard iocboot)
-include $(TOP)/config/RULES_TOP
+include $(TOP)/configure/CONFIG
+DIRS := $(DIRS) $(filter-out $(DIRS), configure)
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App))
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *app))
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot))
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocboot))
+include $(TOP)/configure/RULES_TOP
diff --git a/configure/CONFIG b/configure/CONFIG
new file mode 100644
index 0000000000000000000000000000000000000000..bf5e617fc54c085b1d08a99bac6335e5dbc2b6ca
--- /dev/null
+++ b/configure/CONFIG
@@ -0,0 +1,13 @@
+#CONFIG
+include $(TOP)/configure/CONFIG_APP
+# Add any changes to make definitions here
+
+#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040
+
+# Use this when your IOC and the host use different paths
+# to access the application. Typically this will be 
+# used with the Microsoft FTP server or with NFS mounts. Use
+# is indicated by failure of the cdCommands script on
+# vxWorks. You must rebuild in the iocBoot directory 
+# before this takes effect.
+#IOCS_APPL_TOP = <the top of the application as seen by the IOC>
diff --git a/configure/CONFIG_APP b/configure/CONFIG_APP
new file mode 100644
index 0000000000000000000000000000000000000000..3fe2fa134a42e40fa25eaf9a35ab6dfe05b4bf33
--- /dev/null
+++ b/configure/CONFIG_APP
@@ -0,0 +1,17 @@
+# CONFIG_APP
+
+include $(TOP)/configure/RELEASE
+-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH)
+CONFIG=$(EPICS_BASE)/configure
+include $(CONFIG)/CONFIG
+INSTALL_LOCATION = $(TOP)
+ifdef INSTALL_LOCATION_APP
+INSTALL_LOCATION = $(INSTALL_LOCATION_APP)
+endif
+
+ifdef T_A
+-include $(TOP)/configure/O.$(T_A)/CONFIG_APP_INCLUDE
+endif
+
+# dbst based database optimization (default: NO)
+DB_OPT = NO
diff --git a/configure/Makefile b/configure/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..03177469efde9ffa1e5b7bac7b93077101677251
--- /dev/null
+++ b/configure/Makefile
@@ -0,0 +1,15 @@
+# Makefile
+
+TOP=..
+
+include $(TOP)/configure/CONFIG
+
+# Set the following to NO to disable consistency checking of
+# the support applications defined in $(TOP)/configure/RELEASE
+CHECK_RELEASE = YES
+
+TARGETS = $(CONFIG_TARGETS)
+CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS)))
+
+include $(TOP)/configure/RULES
+
diff --git a/configure/RELEASE b/configure/RELEASE
new file mode 100644
index 0000000000000000000000000000000000000000..abdc1f06dffec9e71bf73e154319cd11948cc09b
--- /dev/null
+++ b/configure/RELEASE
@@ -0,0 +1,32 @@
+# RELEASE - Location of external products
+#
+# (Architecture dependent declarations should go into RELEASE.<arch>)
+#
+# Note: This file will be scanned to automatically generate
+#       include path definitions etc.
+#       The order of the following declarations will be retained
+#       within those definitions.
+#
+# Add your declarations here
+
+SUPPORT=/home/oxygen/SLUITER/local/epics/Vx_5-5_R3-14-4/support
+
+include $(SUPPORT)/config/IP_RELEASE
+include $(SUPPORT)/config/IP330_RELEASE
+include $(SUPPORT)/config/CAMAC_RELEASE
+include $(SUPPORT)/config/MCA_RELEASE
+include $(SUPPORT)/config/LOVE_RELEASE
+include $(SUPPORT)/config/IPUNIDIG_RELEASE
+include $(SUPPORT)/config/DAC128V_RELEASE
+include $(SUPPORT)/config/MOTOR_RELEASE
+include $(SUPPORT)/config/STD_RELEASE
+include $(SUPPORT)/config/BITBUS_RELEASE
+include $(SUPPORT)/config/MPFGPIB_RELEASE
+include $(SUPPORT)/config/MPF_RELEASE
+include $(SUPPORT)/config/ALLEN_BRADLEY_RELEASE
+include $(SUPPORT)/config/IPAC_RELEASE
+include $(SUPPORT)/config/SNCSEQ_RELEASE
+include $(SUPPORT)/config/VXSTATS_RELEASE
+include $(SUPPORT)/config/RELEASE
+
+TEMPLATE_TOP=$(EPICS_BASE)/templates/makeBaseApp/top
diff --git a/configure/RULES b/configure/RULES
new file mode 100644
index 0000000000000000000000000000000000000000..ffee54a710fe5f61c2d5d03a5bdff8775a0a8932
--- /dev/null
+++ b/configure/RULES
@@ -0,0 +1,5 @@
+#CONFIG
+include $(EPICS_BASE)/configure/RULES
+
+# Library should be rebuilt because LIBOBJS may have changed.
+$(LIBNAME): ../Makefile
diff --git a/configure/RULES.ioc b/configure/RULES.ioc
new file mode 100644
index 0000000000000000000000000000000000000000..5ba101303ee4820080314a49301fa73d93c4d20a
--- /dev/null
+++ b/configure/RULES.ioc
@@ -0,0 +1,2 @@
+#RULES.ioc
+include $(EPICS_BASE)/configure/RULES.ioc
diff --git a/configure/RULES.iocBoot b/configure/RULES.iocBoot
new file mode 100644
index 0000000000000000000000000000000000000000..7bb3b3b303a9ab34eb282d7846f927da2b18cd87
--- /dev/null
+++ b/configure/RULES.iocBoot
@@ -0,0 +1,4 @@
+#RULES.iocBoot
+DIRS += $(wildcard *ioc*)
+DIRS += $(wildcard as*)
+include $(EPICS_BASE)/configure/RULES_DIRS
diff --git a/configure/RULES_DIRS b/configure/RULES_DIRS
new file mode 100644
index 0000000000000000000000000000000000000000..804faee5e5b4f3770ae47bdb3cff4d6ed5037384
--- /dev/null
+++ b/configure/RULES_DIRS
@@ -0,0 +1,2 @@
+#RULES_DIRS
+include $(EPICS_BASE)/configure/RULES_DIRS
diff --git a/configure/RULES_TOP b/configure/RULES_TOP
new file mode 100644
index 0000000000000000000000000000000000000000..0620f08fb358286024534c08f2c3a7e2b934a920
--- /dev/null
+++ b/configure/RULES_TOP
@@ -0,0 +1,3 @@
+#RULES_TOP
+include $(EPICS_BASE)/configure/RULES_TOP
+
diff --git a/iocBoot/iocxxx/Makefile b/iocBoot/iocxxx/Makefile
index c4ef70be2a4f610bba083d396c3acfd289b23090..942befe2f9d50be78b5256c2924958316852d39a 100644
--- a/iocBoot/iocxxx/Makefile
+++ b/iocBoot/iocxxx/Makefile
@@ -1,4 +1,5 @@
 TOP = ../..
-include $(TOP)/config/CONFIG_APP
-ARCH = mv167
-include $(TOP)/config/RULES.ioc
+include $(TOP)/configure/CONFIG
+ARCH = vxWorks-68040
+TARGETS = cdCommands
+include $(TOP)/configure/RULES.ioc
diff --git a/iocBoot/iocxxx/README b/iocBoot/iocxxx/README
new file mode 100644
index 0000000000000000000000000000000000000000..98b48058a456269c471248089a3e40f3a5dac1be
--- /dev/null
+++ b/iocBoot/iocxxx/README
@@ -0,0 +1,8 @@
+Assuming the EPICS_HOST_ARCH environment variable is set correctly,
+start the ioc from this directory by executing the following command.
+
+../../bin/${EPICS_HOST_ARCH}/xxx st.cmd.solaris
+OR,
+../../bin/${EPICS_HOST_ARCH}/xxx st.cmd.linux
+
+
diff --git a/iocBoot/iocxxx/st.cmd.Vx b/iocBoot/iocxxx/st.cmd.Vx
new file mode 100644
index 0000000000000000000000000000000000000000..389844da96faa589f71962f937e5caadea62a71e
--- /dev/null
+++ b/iocBoot/iocxxx/st.cmd.Vx
@@ -0,0 +1,509 @@
+# vxWorks startup script
+
+cd ""
+< ../nfsCommands
+< cdCommands
+#< MPFconfig.cmd
+
+################################################################################
+cd startup
+
+# If the VxWorks kernel was built using the project facility, the following must
+# be added before any C++ code is loaded (see SPR #28980).
+sysCplusEnable=1
+
+### Load EPICS base software
+ld < iocCore
+ld < seq
+ld < mpfLib
+
+### Load custom EPICS software from xxxApp and from share
+ld < xxxLib
+
+#routerInit
+# talk to local IP's
+#localMessageRouterStart(0)
+# talk to IP's on satellite processor
+# (must agree with tcpMessageRouterServerStart in st_proc1.cmd)
+# for IP modules on stand-alone mpf server board
+#tcpMessageRouterClientStart(1, 9900, Remote_IP, 1500, 40)
+
+# for local IP slots
+# Uncomment, as needed.
+#ld < ipLib
+#ld < mpfserialserverLib
+#ld < mpfgpibserverLib
+#ld < dac128VLib
+
+# This IOC configures the MPF server code locally
+#cd startup
+#< st_mpfserver.cmd
+#cd appbin
+
+# This IOC talks to a local GPIB server
+#ld < GpibHideosLocal.o
+
+### dbrestore setup
+# ok to restore a save set that had missing values (no CA connection to PV)?
+sr_restore_incomplete_sets_ok = 1
+# dbrestore saves a copy of the save file it restored.  File name is, e.g.,
+# auto_settings.sav.bu or auto_settings.savYYMMDD-HHMMSS if
+# reboot_restoreDatedBU is nonzero.
+reboot_restoreDatedBU = 1;
+# Currently, the only thing we do in initHooks is call reboot_restore(), which
+# restores positions and settings saved ~continuously while EPICS is alive.
+# See calls to "create_monitor_set()" at the end of this file.  To disable
+# autorestore, comment out the following line.
+ld < initHooks.o
+
+# Bunch clock generator
+#ld < getFilledBuckets.o
+
+# X-ray Instrumentation Associates Huber Slit Controller
+# supported by a customized version of the SNL program written by Pete Jemian
+#ld < xia_slit.o
+
+# override address, interrupt vector, etc. information in module_types.h
+module_types()
+
+# need more entries in wait/scan-record channel-access queue?
+recDynLinkQsize = 1024
+
+cd startup
+################################################################################
+# Tell EPICS all about the record types, device-support modules, drivers,
+# etc. in the software we just loaded (xxxLib)
+dbLoadDatabase("../../dbd/xxxApp.dbd")
+registerRecordDeviceDriver(pdbbase)
+
+# Love Controllers
+#devLoveDebug=1
+#loveServerDebug=1
+#dbLoadRecords("ipApp/Db/love.db", "P=xxx:,Q=Love_0,C=0,PORT=PORT2,ADDR=1", ip);
+
+# interpolation
+#dbLoadRecords("stdApp/Db/interp.db", "P=xxx:", std)
+
+# 4-step measurement
+#dbLoadRecords("stdApp/Db/4step.db", "P=xxx:", std)
+
+# X-ray Instrumentation Associates Huber Slit Controller
+# supported by a customized version of the SNL program written by Pete Jemian
+#dbLoadRecords("stdApp/Db/xia_slit.db", "P=xxx:, HSC=hsc1:", std)
+#dbLoadRecords("stdApp/Db/xia_slit.db", "P=xxx:, HSC=hsc2:", std)
+#dbLoadRecords("ipApp/Db/generic_serial.db", "P=xxx:,C=0,IPSLOT=a,CHAN=6,BAUD=9600,PRTY=None,DBIT=8,SBIT=1", ip)
+
+##### Pico Motors (Ernest Williams MHATT-CAT)
+##### Motors (see picMot.substitutions in same directory as this file) ####
+dbLoadTemplate("picMot.substitutions", ip)
+
+
+################################
+# Sector 2 custom databases
+################################
+
+#M1 mirror stripe change database
+#!dbLoadRecords("sectorApp/Db/stripe_change.db","P=xxx:,M=m21", top)
+
+#M2B 6 position select database
+#bt dbLoadRecords("sectorApp/Db/2motor_position_selector.db","P=xxx:,D=M2B,M1=m29,M2=m30", top)
+
+#M2C 6 position select database
+#bt dbLoadRecords("sectorApp/Db/2motor_position_selector.db","P=xxx:,D=M2C,M1=m28,M2=m27", top)
+################################
+# End Sector 2 Custom databases
+################################
+
+##############################################################################
+
+# Insertion-device control
+dbLoadRecords("stdApp/Db/IDctrl.db","P=xxx:,xx=02us", std)
+dbLoadRecords("stdApp/Db/IDctrl.db","P=xxx:,xx=02ds", std)
+
+# test generic gpib record
+#dbLoadRecords("stdApp/Db/gpib.db","P=xxx:", std)
+# test generic camac record
+#dbLoadRecords("stdApp/Db/camac.db","P=xxx:", std)
+
+# string sequence (sseq) record
+#dbLoadRecords("stdApp/Db/yySseq.db","P=xxx:,S=Sseq1", std)
+#dbLoadRecords("stdApp/Db/yySseq.db","P=xxx:,S=Sseq2", std)
+#dbLoadRecords("stdApp/Db/yySseq.db","P=xxx:,S=Sseq3", std)
+
+###############################################################################
+
+##### Motors (see motors.substitutions in same directory as this file) ####
+#dbLoadTemplate("basic_motor.substitutions", motor)
+dbLoadTemplate("motor.substitutions", motor)
+
+# OMS VME driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 16-byte boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+omsSetup(2, 8, 0xFC00, 180, 5, 10)
+
+# OMS VME58 driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 4k boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+oms58Setup(3, 8, 0x4000, 190, 5, 10)
+
+# Highland V544 driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 4k boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+#v544Setup(0, 4, 0xDD00, 0, 5, 10)
+
+# Newport MM4000 driver setup parameters: 
+#     (1) max. controllers, (2)Unused, (3)polling rate (min=1Hz,max=60Hz) 
+#MM4000Setup(3, 0, 10)
+
+# Newport MM4000 driver configuration parameters: 
+#     (1)controller# being configured,
+#     (2)port type: 0-GPIB_PORT or 1-RS232_PORT,
+#     (3)GPIB link or MPF server location
+#     (4)GPIB address or hideos_task name
+#MM4000Config(0, 1, 1, "a-Serial[0]")
+
+# Newport PM500 driver setup parameters:
+#     (1) maximum number of controllers in system
+#     (2) maximum number of channels on any controller
+#     (3) motor task polling rate (min=1Hz,max=60Hz)
+#PM500Setup(1, 3, 10)
+
+# Newport PM500 configuration parameters:
+#     (1) card being configured
+#     (2) port type (0-GPIB_PORT, 1-RS232_PORT)
+#     (3) link for GPIB or hideos_card for RS-232
+#     (3)GPIB link or MPF server location
+#     (4) GPIB address (int) or mpf serial server name (string)
+#PM500Config(0, 1, 1, "a-Serial[4]")
+
+# 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", std)
+
+###############################################################################
+
+### Scalers: Joerger VSC8/16
+dbLoadRecords("stdApp/Db/Jscaler.db","P=xxx:,S=scaler1,C=0", std)
+# Joerger VSC setup parameters: 
+#     (1)cards, (2)base address(ext, 256-byte boundary), 
+#     (3)interrupt vector (0=disable or  64 - 255)
+VSCSetup(1, 0xD0000000, 200)
+
+### Allstop, alldone
+# This database must agree with the motors and other positioners you've actually loaded.
+# Several versions (e.g., all_com_32.db) are in stdApp/Db
+dbLoadRecords("stdApp/Db/all_com_32.db","P=xxx:", std)
+
+### 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("stdApp/Db/scan.db","P=xxx:,MAXPTS1=2000,MAXPTS2=200,MAXPTS3=10,MAXPTS4=10,MAXPTSH=200", std)
+
+# Slits
+dbLoadRecords("stdApp/Db/2slit.db","P=xxx:,SLIT=Slit1V,mXp=m24,mXn=m26", std)
+dbLoadRecords("stdApp/Db/2slit.db","P=xxx:,SLIT=Slit1H,mXp=m23,mXn=m25", std)
+
+# under development...
+#dbLoadRecords("stdApp/Db/2slit_soft.db","P=xxx:,SLIT=Slit2V,mXp=m13,mXn=m14", std)
+#dbLoadRecords("stdApp/Db/2slit_soft.db","P=xxx:,SLIT=Slit2H,mXp=m15,mXn=m16", std)
+
+# 2-post mirror
+#dbLoadRecords("stdApp/Db/2postMirror.db","P=xxx:,Q=M1,mDn=m18,mUp=m17,LENGTH=0.3", std)
+
+# User filters
+#dbLoadRecords("stdApp/Db/filterMotor.db","P=xxx:,Q=fltr1:,MOTOR=m1,LOCK=fltr_1_2:", std)
+#dbLoadRecords("stdApp/Db/filterMotor.db","P=xxx:,Q=fltr2:,MOTOR=m2,LOCK=fltr_1_2:", std)
+#dbLoadRecords("stdApp/Db/filterLock.db","P=xxx:,Q=fltr2:,LOCK=fltr_1_2:,LOCK_PV=xxx:DAC1_1.VAL", std)
+
+# Optical tables
+#tableRecordDebug=1
+# command line would be too long ( >128 chars). One way to shorten it...
+cd std
+dbLoadRecords("stdApp/Db/table.db","P=xxx:,Q=Table1,T=table1,M0X=m31,M0Y=m12,M1Y=m13,M2X=m32,M2Y=m14,M2Z=m18,GEOM=SRI")
+cd startup
+
+### Monochromator support ###
+# Kohzu and PSL monochromators: Bragg and theta/Y/Z motors
+# standard geometry (geometry 1)
+#dbLoadRecords("stdApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m9,M_Y=m10,M_Z=m11,yOffLo=17.4999,yOffHi=17.5001", std)
+# modified geometry (geometry 2)
+#dbLoadRecords("stdApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m9,M_Y=m10,M_Z=m11,yOffLo=4,yOffHi=36", std)
+
+# Heidenhain ND261 encoder (for PSL monochromator)
+#dbLoadRecords("ipApp/Db/heidND261.db", "P=xxx:,C=0,IPSLOT=a,CHAN=0", ip)
+
+# Heidenhain IK320 VME encoder interpolator
+#dbLoadRecords("stdApp/Db/IK320card.db","P=xxx:,sw2=card0:,axis=1,switches=41344,irq=3", std)
+#dbLoadRecords("stdApp/Db/IK320card.db","P=xxx:,sw2=card0:,axis=2,switches=41344,irq=3", std)
+#dbLoadRecords("stdApp/Db/IK320group.db","P=xxx:,group=5")
+#drvIK320RegErrStr()
+
+# Spherical grating monochromator
+#dbLoadRecords("stdApp/Db/SGM.db","P=xxx:,N=1,M_x=m7,M_rIn=m6,M_rOut=m8,M_g=m9", std)
+
+# 4-bounce high-resolution monochromator
+#dbLoadRecords("stdApp/Db/hrSeq.db","P=xxx:,N=1,M_PHI1=m9,M_PHI2=m10", std)
+#dbLoadRecords("stdApp/Db/hrSeq.db","P=xxx:,N=2,M_PHI1=m11,M_PHI2=m12", std)
+
+# dispersive-monochromator protection
+#dbLoadRecords("stdApp/Db/bprotect.db","P=xxx:,M_BTHETA=m25,M_BTRANS=m26", std)
+
+### Canberra AIM Multichannel Analyzer ###
+#mcaRecordDebug=0
+#devMcaMpfDebug=0
+#mcaAIMServerDebug=0
+#aimDebug=0
+
+# AIMConfig(serverName, int etherAddr, int port, int maxChans, 
+#	int maxSignals, int maxSequences, etherDev, queueSize)
+#
+# serverName:   defined here, must agree with dbLoadRecords command
+# etherAddr:    ethernet address of AIM module
+# port:         Which ADC port of the AIM module does this config involve? [1,2]
+# maxChans:     Histogram bins per signal per sequence.  (If a multiplexor or
+#               MCS module is in use, this must agree with hardware setting.)
+# maxSignals:   How many signals (multiplexed ADC inputs)?  (If a multiplexor
+#               or MCS module is in use, this must agree with hardware setting.)
+# maxSequences: How many sequences (usually, a sequence is a "time slice")?
+# etherDev:     vxWorks device used to communicate over the network to AIM.
+#               Typically "ei0" for mv16x, mv17x; "dc0" for Motorola PowerPC
+# queueSize:    size of MPF message queue for this server (100 should be plenty)
+#AIMConfig("AIM1/2", 0x674, 2, 2048, 1, 1, "ei0", 100)
+
+#dbLoadRecords("mcaApp/Db/mca.db","P=xxx:,M=mca1,INP=#C0 S0 @AIM1/2,DTYPE=MPF MCA,NCHAN=2048", mca)
+
+# Create ICB server for ADC, amplifier and HVPS
+# picbServer = icbConfig(icbServer, maxModules, icbAddress, queueSize)
+# This creates the ICB server and allocates configures the first module, module 0.
+# Additional modules are added to this server with icbAddModule().
+#picbServer = icbConfig("icb/1", 10, "NI674:3", 100)
+
+# In the dbLoadRecords commands CARD=(0,1) for (local/remote), SERVER=icbServer name from
+# icbConfig, ADDR=module number from icbConfig() or icbAddModule().
+#icbAddModule(picbServer, module, icbAddress)
+# Note: ADDR is the module number, not the icb address.  The correspondence between
+# module number and icb address is made in icbConfig (for module number 0) or in
+# icbAddModule.
+#icbAddModule(picbServer, 1, "NI674:2")
+#dbLoadRecords("mcaApp/Db/icb_adc.db","P=xxx:,ADC=icbAdc1,CARD=0,SERVER=icb/1,ADDR=0", mca)
+
+#icbTcaConfig("icbTca/1", 1, "NI674:1", 100)
+#dbLoadRecords("mcaApp/Db/icb_tca.db","P=xxx:,TCA=icbTca1,MCA=mca1,CARD=0,SERVER=icb/1,ADDR=1", mca)
+
+#icbAddModule(picbServer, 2, "NI674:2")
+#dbLoadRecords("mcaApp/Db/icb_hvps.db","P=xxx:,HVPS=icbHvps1,CARD=0,SERVER=icb/1,ADDR=2", mca)
+
+#icbAddModule(picbServer, 3, "NI674:4")
+#dbLoadRecords("mcaApp/Db/icb_amp.db","P=xxx:,AMP=icbAmp1,CARD=0,SERVER=icb/1,ADDR=4", mca)
+
+
+# Load 13 element detector software
+#< 13element.cmd
+
+# Load 3 element detector software
+#< 3element.cmd
+
+### Struck 7201 multichannel scaler (same as SIS 3806 multichannel scaler)
+
+#mcaRecordDebug = 10
+#devSTR7201Debug = 10
+#drvSTR7201Debug = 10
+
+#dbLoadRecords("mcaApp/Db/Struck8.db","P=xxx:mcs:", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca1,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S0 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca2,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S1 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca3,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S2 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca4,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S3 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca5,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S4 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca6,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S5 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca7,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S6 @,CHANS=1000", mca)
+#dbLoadRecords("mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca8,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S7 @,CHANS=1000", mca)
+
+# STR7201Setup(int numCards, int baseAddress, int interruptVector, int interruptLevel)
+#STR7201Setup(2, 0xA0000000, 210, 6)
+# STR7201Config(int card, int maxSignals, int maxChans, int 1=enable internal 25MHZ clock) 
+#STR7201Config(0, 8, 1000, 0) 
+
+### Acromag IP330 in sweep mode ###
+#dbLoadRecords("mcaApp/Db/mca.db", "P=xxx:,M=mADC_1,DTYPE=ip330Sweep,NCHAN=2048,INP=#C0 S0 @d-Ip330Sweep", mca)
+
+### Stand-alone user calculations ###
+dbLoadRecords("stdApp/Db/userCalcs10.db","P=xxx:", std)
+dbLoadRecords("stdApp/Db/userStringCalcs10.db","P=xxx:", std)
+dbLoadRecords("stdApp/Db/userTransforms10.db","P=xxx:", std)
+# extra userCalcs (must also load userCalcs10.db for the enable switch)
+dbLoadRecords("stdApp/Db/userCalcN.db","P=xxx:,N=I_Detector", std)
+
+### serial support ###
+
+# generic serial ports
+#dbLoadRecords("ipApp/Db/generic_serial.db", "P=xxx:,C=0,IPSLOT=a,CHAN=0,BAUD=9600,PRTY=None,DBIT=8,SBIT=1", ip)
+
+# serial O/I block (generic serial record with format and parse string calcs)
+# on epics/mpf processor
+#dbLoadRecords("ipApp/Db/serial_OI_block.db","P=xxx:,N=0_1,C=0,IPSLOT=a,CHAN=4", ip)
+# on stand-alone mpf processor
+#dbLoadRecords("ipApp/Db/serial_OI_block.db","P=xxx:,N=1_1,C=0,IPSLOT=a,CHAN=4", ip)
+
+# Stanford Research Systems SR570 Current Preamplifier
+#dbLoadRecords("ipApp/Db/SR570.db", "P=xxx:,A=A1,C=0,IPSLOT=a,CHAN=0", ip)
+
+# Lakeshore DRC-93CA Temperature Controller
+#dbLoadRecords("ipApp/Db/LakeShoreDRC-93CA.db", "P=xxx:,Q=TC1,C=0,IPSLOT=a,CHAN=3", ip)
+
+# Huber DMC9200 DC Motor Controller
+#dbLoadRecords("ipApp/Db/HuberDMC9200.db", "P=xxx:,Q=DMC1:,C=0,IPSLOT=a,CHAN=5", ip)
+
+# Oriel 18011 Encoder Mike
+#dbLoadRecords("ipApp/Db/eMike.db", "P=xxx:,M=em1,C=0,IPSLOT=a,CHAN=2", ip)
+
+# Keithley 2000 DMM
+dbLoadRecords("ipApp/Db/Keithley2kDMM.db","P=xxx:,Dmm=D1,C=1,IPSLOT=a,CHAN=0", ip)
+
+# Oxford Cyberstar X1000 Scintillation detector and pulse processing unit
+#dbLoadRecords("ipApp/Db/Oxford_X1k.db","P=xxx:,S=s1,C=0,IPSLOT=a,CHAN=3", ip)
+
+# Oxford ILM202 Cryogen Level Meter (Serial)
+#dbLoadRecords("ipApp/Db/Oxford_ILM202.db","P=xxx:,S=s1,C=0,IPSLOT=c,CHAN=2", ip)
+
+### GPIB support ###
+# GPIB O/I block (generic gpib record with format and parse string calcs)
+# See HiDEOSGpibLinkConfig() below.
+#dbLoadRecords("ipApp/Db/GPIB_OI_block.db","P=xxx:,N=1,L=10", ip)
+
+# Heidenhain AWE1024 at GPIB address $(A)
+#dbLoadRecords("ipApp/Db/HeidAWE1024.db", "P=xxx:,L=10,A=6", ip)
+
+# Keithley 199 DMM at GPIB address $(A)
+#dbLoadRecords("stdApp/Db/KeithleyDMM.db", "P=xxx:,L=10,A=26", std)
+
+### Miscellaneous ###
+# Systran DAC database
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=1,S=0,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=2,S=1,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=3,S=2,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=4,S=3,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=5,S=4,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=6,S=5,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=7,S=6,IPSLOT=c", ip)
+#dbLoadRecords("ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=8,S=7,IPSLOT=c", ip)
+
+# vme test record
+#dbLoadRecords("stdApp/Db/vme.db", "P=xxx:,Q=vme1", std)
+
+# Hewlett-Packard 10895A Laser Axis (interferometer)
+#dbLoadRecords("stdApp/Db/HPLaserAxis.db", "P=xxx:,Q=HPLaser1, C=0", std)
+# hardware configuration
+# example: devHP10895LaserAxisConfig(ncards,a16base)
+#devHPLaserAxisConfig(2,0x1000)
+
+# Acromag general purpose Digital I/O
+dbLoadRecords("stdApp/Db/Acromag_16IO.db", "P=xxx:, A=1", std)
+
+# Acromag AVME9440 setup parameters:
+# devAvem9440Config (ncards,a16base,intvecbase)
+devAvme9440Config(1,0x0400,0x78)
+
+# Miscellaneous PV's, such as burtResult
+dbLoadRecords("stdApp/Db/misc.db","P=xxx:", std)
+dbLoadRecords("stdApp/Db/VXstats.db","P=xxx:", std)
+
+# Elcomat autocollimator
+#dbLoadRecords("ipApp/Db/Elcomat.db", "P=xxx:,C=0,IPSLOT=a,CHAN=7", ip)
+
+# Bunch-clock generator
+#dbLoadRecords("stdApp/Db/BunchClkGen.db","P=xxx:", std)
+#dbLoadRecords("stdApp/Db/BunchClkGenA.db", "UNIT=xxx", std)
+# hardware configuration
+# example: BunchClkGenConfigure(intCard, unsigned long CardAddress)
+#BunchClkGenConfigure(0, 0x8c00)
+
+### Queensgate piezo driver
+#dbLoadRecords("stdApp/Db/pzt_3id.db","P=xxx:", std)
+#dbLoadRecords("stdApp/Db/pzt.db","P=xxx:", std)
+
+### GP307 Vacuum Controller
+#dbLoadRecords("stdApp/Db/gp307.db","P=xxx:", std)
+
+### Queensgate Nano2k piezo controller
+#dbLoadRecords("stdApp/Db/Nano2k.db","P=xxx:,S=s1", std)
+
+# Eurotherm temp controller
+#dbLoadRecords("ipApp/Db/Eurotherm.db","P=xxx:,C=0,IPSLOT=a,CHAN=6", ip)
+#devAoEurothermDebug=20
+
+# Analog I/O (Acromag IP330 ADC)
+#dbLoadTemplate("ip330Scan.substitutions", ip330)
+
+# Machine-status board (MRD 100)
+#####################################################
+# dev32VmeConfig(card,a32base,nreg,iVector,iLevel)                 
+#    card    = card number                         
+#    a32base = base address of card               
+#    nreg    = number of A32 registers on this card
+#    iVector = interrupt vector (MRD100 Only !!)
+#    iLevel  = interrupt level  (MRD100 Only !!)
+#  For Example                                     
+#   devA32VmeConfig(0, 0x80000000, 44, 0, 0)             
+#####################################################
+#  Configure the MSL MRD 100 module.....
+#devA32VmeConfig(0, 0xa0000200, 30, 0xa0, 5)
+
+# VVVVVVVVVVVVVVVVVVVVV This doesn't look right (tmm) VVVVVVVVVVVVVVVVVVVVVVVVVVV
+#dbLoadRecords("stdApp/Db/msl_mrd100.db","C=0,S=01,ID1=00,ID2=00us", std)
+
+### Bit Bus configuration
+# BBConfig(Link, LinkType, BaseAddr, IrqVector, IrqLevel)
+# Link: ?
+# LinkType: 0:hosed; 1:xycom; 2:pep
+#BBConfig(3,1,0x2400,0xac,5)
+
+
+###############################################################################
+# Set shell prompt (otherwise it is left at mv167 or mv162)
+shellPromptSet "iocxxx> "
+#reboot_restoreDebug=5
+iocLogDisable=1
+iocInit
+
+### startup State Notation Language programs
+#seq &kohzuCtl, "P=xxx:, M_THETA=m9, M_Y=m10, M_Z=m11, GEOM=1, logfile=kohzuCtl.log"
+#seq &hrCtl, "P=xxx:, N=1, M_PHI1=m9, M_PHI2=m10, logfile=hrCtl1.log"
+#seq &Keithley2kDMM, "P=xxx:, Dmm=D1"
+
+# Bunch clock generator
+#seq &getFillPat, "unit=xxx"
+
+# 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]"
+
+### Start up the autosave task and tell it what to do.
+# The task is actually named "save_restore".
+# (See also, 'initHooks' above, which is the means by which the values that
+# will be saved by the task we're starting here are going to be restored.
+#
+# save positions every five seconds
+create_monitor_set("auto_positions.req",5)
+# save other things every thirty seconds
+create_monitor_set("auto_settings.req",30)
+
+
+### Start the saveData task.
+# saveData_MessagePolicy
+# 0: wait forever for space in message queue, then send message
+# 1: send message only if queue is not full
+# 2: send message only if queue is not full and specified time has passed (SetCptWait()
+#    sets this time.)
+# 3: if specified time has passed, wait for space in queue, then send message
+# else: don't send message
+#debug_saveData = 2
+saveData_MessagePolicy = 2
+saveData_SetCptWait(.1)
+saveData_Init("saveData.req", "P=xxx:")
+#saveData_PrintScanInfo("xxx:scan1")
diff --git a/iocBoot/iocxxx/st.cmd.solaris b/iocBoot/iocxxx/st.cmd.solaris
new file mode 100644
index 0000000000000000000000000000000000000000..30f686996efc1be65bab899851c24b2e3fbb8ec2
--- /dev/null
+++ b/iocBoot/iocxxx/st.cmd.solaris
@@ -0,0 +1,441 @@
+dbLoadDatabase("dbPath.dbd")
+dbLoadDatabase("../../dbd/xxxVx.dbd")
+registerRecordDeviceDriver(pdbbase)
+
+routerInit
+localMessageRouterStart(1)
+
+# Configure the MPF server code. This MUST be configured too!
+< st_mpfserver.cmd.solaris
+
+# Love Controllers
+#devLoveDebug=1
+#loveServerDebug=1
+#dbLoadDatabase("ipApp/Db/love.db", ip, "P=xxx:,Q=Love_0,C=0,PORT=PORT2,ADDR=1");
+
+# interpolation
+#dbLoadDatabase("stdApp/Db/interp.db", std, "P=xxx:")
+
+# 4-step measurement
+#dbLoadDatabase("stdApp/Db/4step.db", std, "P=xxx:")
+
+# X-ray Instrumentation Associates Huber Slit Controller
+# supported by a customized version of the SNL program written by Pete Jemian
+#dbLoadDatabase("stdApp/Db/xia_slit.db", std, "P=xxx:, HSC=hsc1:")
+#dbLoadDatabase("stdApp/Db/xia_slit.db", std, "P=xxx:, HSC=hsc2:")
+#dbLoadDatabase("ipApp/Db/generic_serial.db", ip, "P=xxx:,C=0,IPSLOT=a,CHAN=6,BAUD=9600,PRTY=None,DBIT=8,SBIT=1")
+
+##### Pico Motors (Ernest Williams MHATT-CAT)
+##### Motors (see picMot.substitutions in same directory as this file) ####
+#!AuxdbLoadTemplate("picMot.substitutions", ip)
+
+
+################################
+# Sector 2 custom databases
+################################
+
+#M1 mirror stripe change database
+#dbLoadDatabase("sectorApp/Db/stripe_change.db", top, "P=xxx:,M=m21")
+
+#M2B 6 position select database
+#bt dbLoadDatabase("sectorApp/Db/2motor_position_selector.db", top, "P=xxx:,D=M2B,M1=m29,M2=m30")
+
+#M2C 6 position select database
+#bt dbLoadDatabase("sectorApp/Db/2motor_position_selector.db", top, "P=xxx:,D=M2C,M1=m28,M2=m27")
+################################
+# End Sector 2 Custom databases
+################################
+
+##############################################################################
+
+# Insertion-device control
+dbLoadDatabase("stdApp/Db/IDctrl.db", std, "P=xxx:,xx=02us")
+dbLoadDatabase("stdApp/Db/IDctrl.db", std, "P=xxx:,xx=02ds")
+
+# test generic gpib record
+#dbLoadDatabase("stdApp/Db/gpib.db",  std, "P=xxx:")
+# test generic camac record
+#dbLoadDatabase("stdApp/Db/camac.db", std, "P=xxx:")
+
+# string sequence (sseq) record
+#dbLoadDatabase("stdApp/Db/yySseq.db", std, "P=xxx:,S=Sseq1")
+#dbLoadDatabase("stdApp/Db/yySseq.db", std, "P=xxx:,S=Sseq2")
+#dbLoadDatabase("stdApp/Db/yySseq.db", std, "P=xxx:,S=Sseq3")
+
+###############################################################################
+
+##### Motors (see motors.substitutions in same directory as this file) ####
+#AuxdbLoadTemplate("basic_motor.substitutions", motor)
+AuxdbLoadTemplate("motor.substitutions.rls", motor)
+
+# OMS VME driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 16-byte boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+#omsSetup(2, 8, 0xFC00, 180, 5, 10)
+
+# OMS VME58 driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 4k boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+#oms58Setup(3, 8, 0x3000, 190, 5, 10)
+
+# Highland V544 driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 4k boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+#v544Setup(0, 4, 0xDD00, 0, 5, 10)
+
+# Newport MM4000 driver setup parameters: 
+#     (1) max. controllers, (2)Unused, (3)polling rate (min=1Hz,max=60Hz) 
+MM4000Setup(3, 0, 10)
+
+# Newport MM4000 driver configuration parameters: 
+#     (1)controller# being configured,
+#     (2)port type: 0-GPIB_PORT or 1-RS232_PORT,
+#     (3)GPIB link or MPF server location
+#     (4)GPIB address or hideos_task name
+MM4000Config(0, 1, MPF_Server_Location, "a-Serial[0]")
+
+# Newport PM500 driver setup parameters:
+#     (1) maximum number of controllers in system
+#     (2) maximum number of channels on any controller
+#     (3) motor task polling rate (min=1Hz,max=60Hz)
+#PM500Setup(1, 3, 10)
+
+# Newport PM500 configuration parameters:
+#     (1) card being configured
+#     (2) port type (0-GPIB_PORT, 1-RS232_PORT)
+#     (3) link for GPIB or hideos_card for RS-232
+#     (3)GPIB link or MPF server location
+#     (4) GPIB address (int) or mpf serial server name (string)
+#PM500Config(0, 1, 1, "a-Serial[4]")
+
+# 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.
+AuxdbLoadTemplate("scanParms.substitutions", std)
+
+###############################################################################
+
+### Scalers: Joerger VSC8/16
+dbLoadDatabase("stdApp/Db/Jscaler.db", std, "P=xxx:,S=scaler1,C=0")
+# Joerger VSC setup parameters: 
+#     (1)cards, (2)base address(ext, 256-byte boundary), 
+#     (3)interrupt vector (0=disable or  64 - 255)
+VSCSetup(1, 0xD0000000, 200)
+
+### Allstop, alldone
+# This database must agree with the motors and other positioners you've actually loaded.
+# Several versions (e.g., all_com_32.db) are in stdApp/Db
+dbLoadDatabase("stdApp/Db/all_com_32.db", std, "P=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.)
+dbLoadDatabase("stdApp/Db/scan.db", std, "P=xxx:,MAXPTS1=2000,MAXPTS2=200,MAXPTS3=10,MAXPTS4=10,MAXPTSH=200")
+
+# Slits
+dbLoadDatabase("stdApp/Db/2slit.db", std, "P=xxx:,SLIT=Slit1V,mXp=m24,mXn=m26")
+dbLoadDatabase("stdApp/Db/2slit.db", std, "P=xxx:,SLIT=Slit1H,mXp=m23,mXn=m25")
+
+# under development...
+#dbLoadDatabase("stdApp/Db/2slit_soft.db", std, "P=xxx:,SLIT=Slit2V,mXp=m13,mXn=m14")
+#dbLoadDatabase("stdApp/Db/2slit_soft.db", std, "P=xxx:,SLIT=Slit2H,mXp=m15,mXn=m16")
+
+# 2-post mirror
+#dbLoadDatabase("stdApp/Db/2postMirror.db", std, "P=xxx:,Q=M1,mDn=m18,mUp=m17,LENGTH=0.3")
+
+# User filters
+#dbLoadDatabase("stdApp/Db/filterMotor.db", std, "P=xxx:,Q=fltr1:,MOTOR=m1,LOCK=fltr_1_2:")
+#dbLoadDatabase("stdApp/Db/filterMotor.db", std, "P=xxx:,Q=fltr2:,MOTOR=m2,LOCK=fltr_1_2:")
+#dbLoadDatabase("stdApp/Db/filterLock.db",  std, "P=xxx:,Q=fltr2:,LOCK=fltr_1_2:,LOCK_PV=xxx:DAC1_1.VAL")
+
+# Optical tables
+#tableRecordDebug=1
+# command line would be too long ( >128 chars). One way to shorten it...
+cd std
+dbLoadDatabase("stdApp/Db/table.db", 0, "P=xxx:,Q=Table1,T=table1,M0X=m31,M0Y=m12,M1Y=m13,M2X=m32,M2Y=m14,M2Z=m18,GEOM=SRI")
+cd startup
+
+### Monochromator support ###
+# Kohzu and PSL monochromators: Bragg and theta/Y/Z motors
+# standard geometry (geometry 1)
+#dbLoadDatabase("stdApp/Db/kohzuSeq.db", std, "P=xxx:,M_THETA=m9,M_Y=m10,M_Z=m11,yOffLo=17.4999,yOffHi=17.5001")
+# modified geometry (geometry 2)
+#dbLoadDatabase("stdApp/Db/kohzuSeq.db", std, "P=xxx:,M_THETA=m9,M_Y=m10,M_Z=m11,yOffLo=4,yOffHi=36")
+
+# Heidenhain ND261 encoder (for PSL monochromator)
+#dbLoadDatabase("ipApp/Db/heidND261.db", ip, "P=xxx:,C=0,IPSLOT=a,CHAN=0")
+
+# Heidenhain IK320 VME encoder interpolator
+#dbLoadDatabase("stdApp/Db/IK320card.db", std, "P=xxx:,sw2=card0:,axis=1,switches=41344,irq=3")
+#dbLoadDatabase("stdApp/Db/IK320card.db", std, "P=xxx:,sw2=card0:,axis=2,switches=41344,irq=3")
+#dbLoadDatabase("stdApp/Db/IK320group.db" std, "P=xxx:,group=5")
+#drvIK320RegErrStr()
+
+# Spherical grating monochromator
+#dbLoadDatabase("stdApp/Db/SGM.db", std, "P=xxx:,N=1,M_x=m7,M_rIn=m6,M_rOut=m8,M_g=m9")
+
+# 4-bounce high-resolution monochromator
+#dbLoadDatabase("stdApp/Db/hrSeq.db", std,"P=xxx:,N=1,M_PHI1=m9, M_PHI2=m10")
+#dbLoadDatabase("stdApp/Db/hrSeq.db", std,"P=xxx:,N=2,M_PHI1=m11,M_PHI2=m12")
+
+# dispersive-monochromator protection
+#dbLoadDatabase("stdApp/Db/bprotect.db", std, "P=xxx:,M_BTHETA=m25,M_BTRANS=m26")
+
+### Canberra AIM Multichannel Analyzer ###
+#mcaRecordDebug=0
+#devMcaMpfDebug=0
+#mcaAIMServerDebug=0
+#aimDebug=0
+
+# AIMConfig(serverName, int etherAddr, int port, int maxChans, 
+#	int maxSignals, int maxSequences, etherDev, queueSize)
+#
+# serverName:   defined here, must agree with dbLoadDatabase command
+# etherAddr:    ethernet address of AIM module
+# port:         Which ADC port of the AIM module does this config involve? [1,2]
+# maxChans:     Histogram bins per signal per sequence.  (If a multiplexor or
+#               MCS module is in use, this must agree with hardware setting.)
+# maxSignals:   How many signals (multiplexed ADC inputs)?  (If a multiplexor
+#               or MCS module is in use, this must agree with hardware setting.)
+# maxSequences: How many sequences (usually, a sequence is a "time slice")?
+# etherDev:     vxWorks device used to communicate over the network to AIM.
+#               Typically "ei0" for mv16x, mv17x; "dc0" for Motorola PowerPC
+# queueSize:    size of MPF message queue for this server (100 should be plenty)
+#AIMConfig("AIM1/2", 0x674, 2, 2048, 1, 1, "ei0", 100)
+
+#dbLoadDatabase("mcaApp/Db/mca.db", mca, "P=xxx:,M=mca1,INP=#C0 S0 @AIM1/2,DTYPE=MPF MCA,NCHAN=2048")
+
+# Create ICB server for ADC, amplifier and HVPS
+# picbServer = icbConfig(icbServer, maxModules, icbAddress, queueSize)
+# This creates the ICB server and allocates configures the first module, module 0.
+# Additional modules are added to this server with icbAddModule().
+#picbServer = icbConfig("icb/1", 10, "NI674:3", 100)
+
+# In the dbLoadDatabase commands CARD=(0,1) for (local/remote), SERVER=icbServer name from
+# icbConfig, ADDR=module number from icbConfig() or icbAddModule().
+#icbAddModule(picbServer, module, icbAddress)
+# Note: ADDR is the module number, not the icb address.  The correspondence between
+# module number and icb address is made in icbConfig (for module number 0) or in
+# icbAddModule.
+#icbAddModule(picbServer, 1, "NI674:2")
+#dbLoadDatabase("mcaApp/Db/icb_adc.db", mca, "P=xxx:,ADC=icbAdc1,CARD=0,SERVER=icb/1,ADDR=0")
+
+#icbTcaConfig("icbTca/1", 1, "NI674:1", 100)
+#dbLoadDatabase("mcaApp/Db/icb_tca.db", mca, "P=xxx:,TCA=icbTca1,MCA=mca1,CARD=0,SERVER=icb/1,ADDR=1")
+
+#icbAddModule(picbServer, 2, "NI674:2")
+#dbLoadDatabase("mcaApp/Db/icb_hvps.db",mca, "P=xxx:,HVPS=icbHvps1,CARD=0,SERVER=icb/1,ADDR=2")
+
+#icbAddModule(picbServer, 3, "NI674:4")
+#dbLoadDatabase("mcaApp/Db/icb_amp.db", mca, "P=xxx:,AMP=icbAmp1,CARD=0,SERVER=icb/1,ADDR=4")
+
+
+# Load 13 element detector software
+#< 13element.cmd
+
+# Load 3 element detector software
+#< 3element.cmd
+
+### Struck 7201 multichannel scaler (same as SIS 3806 multichannel scaler)
+
+#mcaRecordDebug = 10
+#devSTR7201Debug = 10
+#drvSTR7201Debug = 10
+
+#dbLoadDatabase("mcaApp/Db/Struck8.db",    mca, "P=xxx:mcs:")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca1,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S0 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca2,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S1 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca3,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S2 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca4,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S3 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca5,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S4 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca6,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S5 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca7,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S6 @,CHANS=1000")
+#dbLoadDatabase("mcaApp/Db/simple_mca.db", mca, "P=xxx:mcs:,M=mca8,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S7 @,CHANS=1000")
+
+# STR7201Setup(int numCards, int baseAddress, int interruptVector, int interruptLevel)
+#STR7201Setup(2, 0xA0000000, 210, 6)
+# STR7201Config(int card, int maxSignals, int maxChans, int 1=enable internal 25MHZ clock) 
+#STR7201Config(0, 8, 1000, 0) 
+
+### Acromag IP330 in sweep mode ###
+#dbLoadDatabase("mcaApp/Db/mca.db", mca, "P=xxx:,M=mADC_1,DTYPE=ip330Sweep,NCHAN=2048,INP=#C0 S0 @d-Ip330Sweep")
+
+### Stand-alone user calculations ###
+dbLoadDatabase("stdApp/Db/userCalcs10.db",       std, "P=xxx:")
+dbLoadDatabase("stdApp/Db/userStringCalcs10.db", std, "P=xxx:")
+dbLoadDatabase("stdApp/Db/userTransforms10.db",  std, "P=xxx:")
+# extra userCalcs (must also load userCalcs10.db for the enable switch)
+dbLoadDatabase("stdApp/Db/userCalcN.db", std, "P=xxx:,N=I_Detector")
+
+### serial support ###
+
+# generic serial ports
+#dbLoadDatabase("ipApp/Db/generic_serial.db", ip, "P=xxx:,C=0,IPSLOT=a,CHAN=0,BAUD=9600,PRTY=None,DBIT=8,SBIT=1")
+
+# serial O/I block (generic serial record with format and parse string calcs)
+# on epics/mpf processor
+#dbLoadDatabase("ipApp/Db/serial_OI_block.db", ip, "P=xxx:,N=0_1,C=0,IPSLOT=a,CHAN=4")
+# on stand-alone mpf processor
+#dbLoadDatabase("ipApp/Db/serial_OI_block.db", ip, "P=xxx:,N=1_1,C=0,IPSLOT=a,CHAN=4")
+
+# Stanford Research Systems SR570 Current Preamplifier
+#dbLoadDatabase("ipApp/Db/SR570.db", ip, "P=xxx:,A=A1,C=0,IPSLOT=a,CHAN=0")
+
+# Lakeshore DRC-93CA Temperature Controller
+#dbLoadDatabase("ipApp/Db/LakeShoreDRC-93CA.db", ip, "P=xxx:,Q=TC1,C=0,IPSLOT=a,CHAN=3")
+
+# Huber DMC9200 DC Motor Controller
+#dbLoadDatabase("ipApp/Db/HuberDMC9200.db", ip, "P=xxx:,Q=DMC1:,C=0,IPSLOT=a,CHAN=5")
+
+# Oriel 18011 Encoder Mike
+#dbLoadDatabase("ipApp/Db/eMike.db", ip, "P=xxx:,M=em1,C=0,IPSLOT=a,CHAN=2")
+
+# Keithley 2000 DMM
+dbLoadDatabase("ipApp/Db/Keithley2kDMM.db", ip, "P=xxx:,Dmm=D1,C=0,IPSLOT=a,CHAN=0")
+
+# Oxford Cyberstar X1000 Scintillation detector and pulse processing unit
+#dbLoadDatabase("ipApp/Db/Oxford_X1k.db", ip, "P=xxx:,S=s1,C=0,IPSLOT=a,CHAN=3")
+
+# Oxford ILM202 Cryogen Level Meter (Serial)
+#dbLoadDatabase("ipApp/Db/Oxford_ILM202.db", ip, "P=xxx:,S=s1,C=0,IPSLOT=c,CHAN=2")
+
+### GPIB support ###
+# GPIB O/I block (generic gpib record with format and parse string calcs)
+# See HiDEOSGpibLinkConfig() below.
+#dbLoadDatabase("ipApp/Db/GPIB_OI_block.db", ip, "P=xxx:,N=1,L=10")
+
+# Heidenhain AWE1024 at GPIB address $(A)
+#dbLoadDatabase("ipApp/Db/HeidAWE1024.db", ip, "P=xxx:,L=10,A=6")
+
+# Keithley 199 DMM at GPIB address $(A)
+#dbLoadDatabase("stdApp/Db/KeithleyDMM.db", std, "P=xxx:,L=10,A=26")
+
+### Miscellaneous ###
+# Systran DAC database
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=1,S=0,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=2,S=1,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=3,S=2,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=4,S=3,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=5,S=4,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=6,S=5,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=7,S=6,IPSLOT=c")
+#dbLoadDatabase("ipApp/Db/DAC.db", ip, "P=xxx:,D=1,C=1,N=8,S=7,IPSLOT=c")
+
+# vme test record
+#dbLoadDatabase("stdApp/Db/vme.db", std, "P=xxx:,Q=vme1")
+
+# Hewlett-Packard 10895A Laser Axis (interferometer)
+#dbLoadDatabase("stdApp/Db/HPLaserAxis.db", std, "P=xxx:,Q=HPLaser1, C=0")
+# hardware configuration
+# example: devHP10895LaserAxisConfig(ncards,a16base)
+#devHPLaserAxisConfig(2,0x1000)
+
+# Acromag general purpose Digital I/O
+#dbLoadDatabase("stdApp/Db/Acromag_16IO.db", std, "P=xxx:, A=1")
+
+# Acromag AVME9440 setup parameters:
+# devAvem9440Config (ncards,a16base,intvecbase)
+#devAvme9440Config(1,0x0400,0x78)
+
+# Miscellaneous PV's, such as burtResult
+dbLoadDatabase("stdApp/Db/misc.db", std, "P=xxx:")
+dbLoadDatabase("stdApp/Db/VXstats.db", std, "P=xxx:")
+
+# Elcomat autocollimator
+#dbLoadDatabase("ipApp/Db/Elcomat.db", ip, "P=xxx:,C=0,IPSLOT=a,CHAN=7")
+
+# Bunch-clock generator
+#dbLoadDatabase("stdApp/Db/BunchClkGen.db",  std, "P=xxx:")
+#dbLoadDatabase("stdApp/Db/BunchClkGenA.db", std, "UNIT=xxx")
+# hardware configuration
+# example: BunchClkGenConfigure(intCard, unsigned long CardAddress)
+#BunchClkGenConfigure(0, 0x8c00)
+
+### Queensgate piezo driver
+#dbLoadDatabase("stdApp/Db/pzt_3id.db", std, "P=xxx:")
+#dbLoadDatabase("stdApp/Db/pzt.db"    , std, "P=xxx:")
+
+### GP307 Vacuum Controller
+#dbLoadDatabase("stdApp/Db/gp307.db", std, "P=xxx:")
+
+### Queensgate Nano2k piezo controller
+#dbLoadDatabase("stdApp/Db/Nano2k.db", std, "P=xxx:,S=s1")
+
+# Eurotherm temp controller
+#dbLoadDatabase("ipApp/Db/Eurotherm.db", ip, "P=xxx:,C=0,IPSLOT=a,CHAN=6")
+#devAoEurothermDebug=20
+
+# Analog I/O (Acromag IP330 ADC)
+#AuxdbLoadTemplate("ip330Scan.substitutions", ip330)
+
+# Machine-status board (MRD 100)
+#####################################################
+# dev32VmeConfig(card,a32base,nreg,iVector,iLevel)                 
+#    card    = card number                         
+#    a32base = base address of card               
+#    nreg    = number of A32 registers on this card
+#    iVector = interrupt vector (MRD100 Only !!)
+#    iLevel  = interrupt level  (MRD100 Only !!)
+#  For Example                                     
+#   devA32VmeConfig(0, 0x80000000, 44, 0, 0)             
+#####################################################
+#  Configure the MSL MRD 100 module.....
+#devA32VmeConfig(0, 0xa0000200, 30, 0xa0, 5)
+
+# VVVVVVVVVVVVVVVVVVVVV This doesn't look right (tmm) VVVVVVVVVVVVVVVVVVVVVVVVVVV
+#dbLoadDatabase("stdApp/Db/msl_mrd100.db", std, "C=0,S=01,ID1=00,ID2=00us")
+
+### Bit Bus configuration
+# BBConfig(Link, LinkType, BaseAddr, IrqVector, IrqLevel)
+# Link: ?
+# LinkType: 0:hosed; 1:xycom; 2:pep
+#BBConfig(3,1,0x2400,0xac,5)
+
+
+###############################################################################
+# Set shell prompt (otherwise it is left at mv167 or mv162)
+shellPromptSet "iocxxx> "
+#reboot_restoreDebug=5
+iocLogDisable=1
+iocInit
+
+### startup State Notation Language programs
+#seq &kohzuCtl, "P=xxx:, M_THETA=m9, M_Y=m10, M_Z=m11, GEOM=1, logfile=kohzuCtl.log"
+#seq &hrCtl, "P=xxx:, N=1, M_PHI1=m9, M_PHI2=m10, logfile=hrCtl1.log"
+#seq &Keithley2kDMM, "P=xxx:, Dmm=D1"
+
+# Bunch clock generator
+#seq &getFillPat, "unit=xxx"
+
+# 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]"
+
+### Start up the autosave task and tell it what to do.
+# The task is actually named "save_restore".
+# (See also, 'initHooks' above, which is the means by which the values that
+# will be saved by the task we're starting here are going to be restored.
+#
+# save positions every five seconds
+create_monitor_set("auto_positions.req",5)
+# save other things every thirty seconds
+create_monitor_set("auto_settings.req",30)
+
+
+### Start the saveData task.
+# saveData_MessagePolicy
+# 0: wait forever for space in message queue, then send message
+# 1: send message only if queue is not full
+# 2: send message only if queue is not full and specified time has passed (SetCptWait()
+#    sets this time.)
+# 3: if specified time has passed, wait for space in queue, then send message
+# else: don't send message
+#debug_saveData = 2
+saveData_MessagePolicy = 2
+saveData_SetCptWait(.1)
+saveData_Init("saveData.req", "P=xxx:")
+#saveData_PrintScanInfo("xxx:scan1")
diff --git a/iocBoot/iocxxx/st_mpfserver.cmd.solaris b/iocBoot/iocxxx/st_mpfserver.cmd.solaris
new file mode 100644
index 0000000000000000000000000000000000000000..92547babebe911918f317e3d16a6ef8627ad4983
--- /dev/null
+++ b/iocBoot/iocxxx/st_mpfserver.cmd.solaris
@@ -0,0 +1,5 @@
+# This configures the MPF server stuff
+
+initTtyPort("port0","/dev/ttyb",9600,"N",1,8,"N",1000)
+initSerialServer("serial0","port0",1000,2,"")
+
diff --git a/iocBoot/iocxxx/st_mpfserver.cmd.vxWorks b/iocBoot/iocxxx/st_mpfserver.cmd.vxWorks
new file mode 100644
index 0000000000000000000000000000000000000000..23d049dbc5e5379a00c65055b112d09ddcd69268
--- /dev/null
+++ b/iocBoot/iocxxx/st_mpfserver.cmd.vxWorks
@@ -0,0 +1,196 @@
+# This configures the MPF server stuff
+
+# slot a: IP-Octal (serial RS-232)
+# slot b: EMPTY
+# slot c: EMPTY
+# slot d: EMPTY
+
+###############################################################################
+# Initialize IP carrier
+# ipacAddCarrier(ipac_carrier_t *pcarrier, char *cardParams)
+#   pcarrier   - pointer to carrier driver structure
+#   cardParams - carrier-specific init parameters
+
+carrier = "ipac"
+ipacAddCarrier(&ipmv162, "A:l=3,3 m=0xe0000000,64;B:l=3,3 m=0xe0010000,64;C:l=3,3 m=0xe0020000,64;D:l=3,3 m=0xe0030000,64")
+# Number of tyGSOctal modules to support:
+tyGSOctalDrv(1)
+taskDelay(10)
+
+# tyGSOctalModuleInit(IP module type, Interrupt number, carrier board [0-n],
+#                     module number on carrier [0-m])
+octalUart0 = tyGSOctalModuleInit("GSIP_OCTAL232", 0x80, 0, 0)
+taskDelay(3)
+
+###############################################################################
+# Initialize GPIB stuff
+
+#initGpibGsTi9914("GS-IP488-0",carrier,"IP_b",104)
+#initGpibServer("GPIB0","GS-IP488-0",1024,1000)
+
+###############################################################################
+# Initialize Octal UART stuff
+
+port0 = tyGSOctalDevCreate("/tyGS/0/0",octalUart0,0,1000,1000)
+port1 = tyGSOctalDevCreate("/tyGS/0/1",octalUart0,1,1000,1000)
+port2 = tyGSOctalDevCreate("/tyGS/0/2",octalUart0,2,1000,1000)
+port3 = tyGSOctalDevCreate("/tyGS/0/3",octalUart0,3,1000,1000)
+port4 = tyGSOctalDevCreate("/tyGS/0/4",octalUart0,4,1000,1000)
+port5 = tyGSOctalDevCreate("/tyGS/0/5",octalUart0,5,1000,1000)
+port6 = tyGSOctalDevCreate("/tyGS/0/6",octalUart0,6,1000,1000)
+port7 = tyGSOctalDevCreate("/tyGS/0/7",octalUart0,7,1000,1000)
+
+tyGSOctalConfig(port0,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port1,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port2,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port3,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port4,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port5,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port6,9600,'N',1,8,'N') /* */
+tyGSOctalConfig(port7,9600,'N',1,8,'N') /* */
+
+initTtyVxPort("UART[0]","/tyGS/0/0",9600,1000)
+initTtyVxPort("UART[1]","/tyGS/0/1",9600,1000)
+initTtyVxPort("UART[2]","/tyGS/0/2",9600,1000)
+initTtyVxPort("UART[3]","/tyGS/0/3",9600,1000)
+initTtyVxPort("UART[4]","/tyGS/0/4",9600,1000)
+initTtyVxPort("UART[5]","/tyGS/0/5",9600,1000)
+initTtyVxPort("UART[6]","/tyGS/0/6",9600,1000)
+initTtyVxPort("UART[7]","/tyGS/0/7",9600,1000)
+
+initSerialServer("a-Serial[0]","UART[0]",1000,20,"\r",1)
+initSerialServer("a-Serial[1]","UART[1]",1000,20,"\r",1)
+initSerialServer("a-Serial[2]","UART[2]",1000,20,"\r",1)
+initSerialServer("a-Serial[3]","UART[3]",1000,20,"\r",1)
+initSerialServer("a-Serial[4]","UART[4]",1000,20,"\r",1)
+initSerialServer("a-Serial[5]","UART[5]",1000,20,"\r",1)
+initSerialServer("a-Serial[6]","UART[6]",1000,20,"\r",1)
+initSerialServer("a-Serial[7]","UART[7]",1000,20,"\r",1)
+
+###############################################################################
+# Initialize Systran DAC
+# initDAC128V(char *serverName, char *carrierName, char *siteName,
+#             int queueSize)
+# serverName  = name to give this server
+# carrierName = name of IPAC carrier from initIpacCarrier above
+# siteName    = name of IP site, e.g. "IP_a"
+# queueSize   = size of output queue for EPICS
+#
+
+#initDAC128V("c-DAC",carrier,"IP_c",20)
+
+###############################################################################
+# Initialize Acromag ADC
+# Ip330 *pIp330 = initIp330(
+#    const char *moduleName, const char *carrierName, const char *siteName,
+#    const char *typeString, const char *rangeString,
+#    int firstChan, int lastChan,
+#    int maxClients, int intVec)
+#
+# pIp330      = pointer to the Ip330 object, needed by configIp330(), and
+#               needed to initialize the application-specific classes
+# moduleName  = name to give this module
+# carrierName = name of IPAC carrier from initIpacCarrier() above
+# siteName    = name of IP site on the carrier, e.g. "IP_a"
+# typeString  = "D" or "S" for differential or single-ended
+# rangeString = "-5to5","-10to10","0to5", or "0to10"
+#               This value must match hardware setting selected
+# firstChan   = first channel to be digitized.  This must be in the range:
+#               0 to 31 (single-ended)
+#               0 to 15 (differential)
+# lastChan    = last channel to be digitized
+# maxClients  = Maximum number of Ip330 tasks which will attach to this
+#               Ip330 module.  For example Ip330Scan, Ip330Sweep, etc.  This
+#               does not refer to the number of EPICS clients.  A value of
+#               10 should certainly be safe.
+# intVec      = Interrupt vector
+
+#pIp330 = initIp330("d-ADC", carrier, "IP_d", "D", "-10to10", 0, 15, 10, 205)
+
+# int configIp330(Ip330 *pIp330, scanModeType scanMode,
+#    const char *triggerString, int microSecondsPerScan,
+#    int secondsBetweenCalibrate)
+#
+# pIp330      = pointer to the Ip330 object, returned by initIp330 above
+# scanMode    = scan mode:
+#               0 = disable
+#               1 = uniformContinuous
+#               2 = uniformSingle
+#               3 = burstContinuous (normally recommended)
+#               4 = burstSingle
+#               5 = convertOnExternalTriggerOnly
+# triggerString = "Input" or "Output". Selects the direction of the external
+#               trigger signal.
+# microSecondsPerScan = repeat interval to digitize all channels
+#               The minimum theoretical time is 15 microseconds times the
+#               number of channels, but a practical limit is probably 100
+#               microseconds.
+# secondsBetweenCalibrate = number of seconds between calibration cycles.
+#               If zero then there will be no periodic calibration, but
+#               one calibration will still be done at initialization.
+
+#configIp330(pIp330, 3, "Input", 1000, 60)
+
+
+# initIp330Scan(Ip330 *pIp330, char *serverName, int firstChan, int lastChan,
+#               int milliSecondsToAverage, int queueSize)
+# pIp330     = pointer returned by initIp330 above
+# serverName = name to give this server
+# firstChan  = first channel to be used by Ip330Scan.  This must be in the 
+#              range firstChan to lastChan specified in initIp330
+# lastChan   = last channel to be used by Ip330Scan.  This must be in the range
+#              firstChan to lastChan specified in initIp330
+# milliSecondsToAverage = number of milliseconds to average for values 
+#              returned to EPICS
+# queueSize  = size of output queue for EPICS
+
+#initIp330Scan(pIp330,"d-Ip330Scan",0,15,100,20)
+
+
+# initIp330Sweep(Ip330 *pIp330, char *serverName, int firstChan, int lastChan,
+#                int maxPoints, int queueSize)
+# pIp330     = pointer returned by initIp330 above
+# serverName = name to give this server
+# firstChan  = first channel to be used by Ip330Sweep.  This must be in the 
+#              range firstChan to lastChan specified in initIp330
+# lastChan   = last channel to be used by Ip330Sweep.  This must be in the 
+#              range firstChan to lastChan specified in initIp330
+# maxPoints  = maximum number of points in a sweep.  The amount of memory
+#              allocated will be maxPoints*(lastChan-firstChan+1)*4 bytes
+# queueSize  = size of output queue for EPICS
+
+#initIp330Sweep(pIp330,"d-Ip330Sweep",0,12,2048,20)
+
+
+# initIp330PID(char *serverName, Ip330 *pIp330, int ADCChan, 
+#              DAC128V *pDAC128V, int DACChan,
+#              double KP, double KI, double KD,
+#              int interval, int feedbackOn, int lowLimit, int highLimit,
+#              int queueSize)
+# serverName = name to give this server
+# pIp330     = pointer returned by initIp330 above
+# ADCChan    = ADC channel to be used by Ip330PID.  This must be in the range
+#              firstChan to lastChan specified in initIp330
+# pDAC128V   = pointer returned by initDAC128V above
+# DACChan    = DAC channel to be used by Ip330PID, in the range 0 to 7
+# KP         = proportional gain, must be a floating point value
+# KI         = integral gain, must be a floating point value
+# KD         = derivative gain, must be a floating point value
+# interval   = number of microseconds per feedback loop
+# feedbackOn = initial state of feedback. 0 = off, 1 = on
+# lowLimit   = lower limit on the DAC output, in the range 0-2047
+# highLimit  = upper limit on the DAC output, in the range 0-2047
+# queueSize  = size of output queue for EPICS
+
+#pIp330PID = initIp330PID("Ip330PID_1", pIp330, 0, pDAC128V, 0, 20)
+#configIp330PID(pIp330PID, .1, 10., 0., 1000, 0, 500, 1500)
+
+###############################################################################
+# Initialize Greenspring IP-Unidig
+
+#initIpUnidig("b-Unidig", carrier, "IP_b", 20)
+
+# Love controllers
+#initOctalUARTPort("UART[7]","octalUart0",7,19200,"N",1,8,"N")
+#initLoveServer("PORT7","UART[7]",112)
+
diff --git a/xxxApp/Db/Makefile b/xxxApp/Db/Makefile
index 0380f4bf802747452290641d3c9bfc91684c7586..983981d401b27c05644f2f2cc19cbf888f053bf3 100644
--- a/xxxApp/Db/Makefile
+++ b/xxxApp/Db/Makefile
@@ -1,3 +1,22 @@
 TOP=../..
-include $(TOP)/config/CONFIG_APP
-include $(TOP)/config/RULES_ARCHS
+include $(TOP)/configure/CONFIG
+#----------------------------------------
+#  ADD MACRO DEFINITIONS AFTER THIS LINE
+
+#----------------------------------------------------
+#  Optimization of db files using dbst (DEFAULT: NO)
+#DB_OPT = YES
+
+#----------------------------------------------------
+# Create and install (or just install) into <top>/db
+# databases, templates, substitutions like this
+#DB += xxx.db
+
+#----------------------------------------------------
+# If <anyname>.db template is not named <anyname>*.template add
+# <anyname>_template = <templatename>
+
+include $(TOP)/configure/RULES
+#----------------------------------------
+#  ADD RULES AFTER THIS LINE
+
diff --git a/xxxApp/Db/Makefile.Host b/xxxApp/Db/Makefile.Host
deleted file mode 100644
index f666bb73cba42a353a5985738ae1ab0e5c3b96ed..0000000000000000000000000000000000000000
--- a/xxxApp/Db/Makefile.Host
+++ /dev/null
@@ -1,30 +0,0 @@
-# Makefile.Host
-TOP = ../../..
-include $(TOP)/config/CONFIG_APP
-#----------------------------------------
-#  ADD MACRO DEFINITIONS AFTER THIS LINE
-
-#----------------------------------------------------
-#  Optimization of DB files using dbst (default: NO)
-#DB_OPT = YES
-
-#----------------------------------------------------
-#  Optimization needs the name of the appropriate
-#  dbd file (compare with ../src/Makefile.Vx)
-#DBDNAME = xxx.dbd
-
-#----------------------------------------------------
-# Add databases, templates, substitutions like this
-#DB += xxx.db
-
-#----------------------------------------------------
-# Declare template files which do not show up in DB
-#USES_TEMPLATE += xxx.template
-
-#----------------------------------------------------
-# The following lines are for local dbd expansion
-#DBDEXPAND = xxxInclude.dbd
-
-include $(TOP)/config/RULES.Db
-#----------------------------------------
-#  ADD RULES AFTER THIS LINE
diff --git a/xxxApp/Makefile b/xxxApp/Makefile
index e26216db6a9a8c0ede6bf857ebf8809746ca22f0..10e0126aabf1452a21384b5ad2ebc00fd9431072 100644
--- a/xxxApp/Makefile
+++ b/xxxApp/Makefile
@@ -1,7 +1,8 @@
 TOP = ..
-include $(TOP)/config/CONFIG_APP
-DIRS += $(wildcard *src*)
-DIRS += $(wildcard *Src*)
-DIRS += $(wildcard *db*)
-DIRS += $(wildcard *Db*)
-include $(TOP)/config/RULES_DIRS
+include $(TOP)/configure/CONFIG
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*))
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*))
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*))
+DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*))
+include $(TOP)/configure/RULES_DIRS
+
diff --git a/xxxApp/src/Makefile b/xxxApp/src/Makefile
index 0380f4bf802747452290641d3c9bfc91684c7586..3794b42c7859cae95cf5fd9adc2da635b425fd01 100644
--- a/xxxApp/src/Makefile
+++ b/xxxApp/src/Makefile
@@ -1,3 +1,72 @@
+# Makefile
 TOP=../..
-include $(TOP)/config/CONFIG_APP
-include $(TOP)/config/RULES_ARCHS
+include $(TOP)/configure/CONFIG
+#----------------------------------------
+#  ADD MACRO DEFINITIONS AFTER THIS LINE
+#=============================
+
+DBD += xxx.dbd
+DBD += xxxVx.dbd
+
+PROD_IOC_DEFAULT = xxx
+PROD_IOC_vxWorks = xxxVx
+
+xxx_SRCS   += xxx_registerRecordDeviceDriver.cpp
+xxxVx_SRCS += xxxVx_registerRecordDeviceDriver.cpp
+xxx_SRCS_DEFAULT += xxxMain.cpp
+
+#The following adds support from base/src/vxWorks
+xxxVx_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary
+
+# Support from ipac
+xxxVx_LDOBJS_vxWorks += $(IPAC_BIN)/ipacLib
+xxxVx_OBJS_vxWorks   += $(IPAC_BIN)/tyGSOctal
+
+# MCA libraries
+xxxVx_LIBS += mcaSIS
+xxxVx_LIBS += mcaCanberra
+xxxVx_LIBS += mca
+
+# IP libraries.
+xxxVx_LIBS += ip
+
+# IP330 libraries
+xxxVx_LIBS += ip330
+xxxVx_LIBS += devIp330
+
+# STD libraries
+xxx_LIBS   += std
+xxxVx_LIBS += std
+#xxxVx_OBJS_vxWorks += $(STD_BIN)/module_types.o
+
+# MOTOR libraries
+xxx_LIBS   += Newport softMotor motorCOM_mpf motor
+xxxVx_LIBS += oms Newport softMotor motorCOM_mpf motor
+
+# LOVE libraries
+xxxVx_LIBS += love
+
+# IPUNIDIG libraries
+xxxVx_LIBS += ipUnidig
+
+# DAC128V libraries
+xxxVx_LIBS += dac128V
+
+# MPF libraries.
+xxx_LIBS   += mpfSerial mpfEpics mpf
+xxxVx_LIBS += mpfSerial mpfEpics mpf
+
+# SNCSEQ libraries.
+xxx_LIBS   += seq pv
+xxxVx_LIBS += seq pv
+
+# Support from vxStats
+xxxVx_OBJS_vxWorks   += $(VXSTATS_BIN)/devVXStats
+
+xxx_LIBS   += $(EPICS_BASE_IOC_LIBS)
+xxxVx_LIBS += $(EPICS_BASE_IOC_LIBS)
+
+include $(TOP)/configure/RULES
+#----------------------------------------
+#  ADD RULES AFTER THIS LINE
+
diff --git a/xxxApp/src/Makefile.Host b/xxxApp/src/Makefile.Host
deleted file mode 100644
index 9e3f779c86b96f3015ad18821ff2347c3163d1fa..0000000000000000000000000000000000000000
--- a/xxxApp/src/Makefile.Host
+++ /dev/null
@@ -1,12 +0,0 @@
-# Makefile.Host
-TOP = ../../..
-include $(TOP)/config/CONFIG_APP
-#----------------------------------------
-#  ADD MACRO DEFINITIONS AFTER THIS LINE
-
-DBDEXPAND = xxxInclude.dbd
-DBDNAME = xxxApp.dbd
-
-include $(TOP)/config/RULES.Host
-#----------------------------------------
-#  ADD RULES AFTER THIS LINE
diff --git a/xxxApp/src/Makefile.Vx b/xxxApp/src/Makefile.Vx
deleted file mode 100644
index ab06410ece11f65ce00a385c1e49cc3c62cd15c2..0000000000000000000000000000000000000000
--- a/xxxApp/src/Makefile.Vx
+++ /dev/null
@@ -1,121 +0,0 @@
-# FILENAME... Makefile.Vx
-#
-# NOTE: Some software (STD and IP) can be loaded by either uncommenting two
-# lines like the following,
-#	include $(MOD)/modApp/src/modLIBOBJS
-#	LIBOBJS += $(MODLIBOBJS)
-# or, uncommenting one line that links an already made library like the
-# following,
-#	LIBOBJS += $(MOD_BIN)/modLib
-# But don't do both!  Either method should yield equivalent results.
-# Customization can be done by making a local copy of a
-# $(MOD)/modApp/src/modLIBOBJS file in the <ioc>App/src directory, and changing
-# the "include $(MOD)/modApp/src/modLIBOBJS" line to,
-#	include ../modLIBOBJS
-
-TOP = ../../..
-include $(TOP)/config/CONFIG_APP
-#----------------------------------------
-#  ADD MACRO DEFINITIONS AFTER THIS LINE
-
-# Objects from STD
-# ----------------
-#include $(STD)/stdApp/src/baseLIBOBJS
-#LIBOBJS += $(BASELIBOBJS)
-LIBOBJS  += $(STD_BIN)/baseLib
-#include $(STD)/stdApp/src/stdLIBOBJS
-#LIBOBJS += $(STDLIBOBJS)
-LIBOBJS  += $(STD_BIN)/stdLib
-BIN_INSTALLS += $(STD_BIN)/getFilledBuckets.o
-BIN_INSTALLS += $(STD_BIN)/initHooks.o
-BIN_INSTALLS += $(STD_BIN)/xiahsc.o
-BIN_INSTALLS += $(STD_BIN)/xia_slit.o
-
-# Objects from MPF
-# ----------------
-LIBOBJS      += $(MPF_BIN)/DevMpf.o
-BIN_INSTALLS += $(MPF_BIN)/mpfLib
-BIN_INSTALLS += $(MPF_BIN)/ipLib
-
-# Objects from MPF_GPIB
-# ---------------------
-BIN_INSTALLS += $(MPF_GPIB_BIN)/GpibHideosRemote.o
-BIN_INSTALLS += $(MPF_GPIB_BIN)/GpibHideosLocal.o
-BIN_INSTALLS += $(MPF_GPIB_BIN)/mpfgpibserverLib
-
-# Objects from MPF_SERIAL
-# -----------------------
-LIBOBJS      += $(MPF_SERIAL_BIN)/devStringMpf.o
-BIN_INSTALLS += $(MPF_SERIAL_BIN)/mpfserialserverLib
-
-# Objects from DAC128V
-# --------------------
-LIBOBJS      += $(DAC128V_BIN)/devAoDAC128V.o
-BIN_INSTALLS += $(DAC128V_BIN)/dac128VLib
-
-# Objects from IP330
-# ------------------
-LIBOBJS      += $(IP330_BIN)/devAiIp330Scan.o
-LIBOBJS      += $(IP330_BIN)/devLoIp330Config.o
-LIBOBJS      += $(IP330_BIN)/devEpidIp330.o
-BIN_INSTALLS += $(IP330_BIN)/ip330Lib
-BIN_INSTALLS += $(IP330_BIN)/ip330ServLib
-
-# Objects from IPUNIDIG
-# ---------------------
-LIBOBJS      += $(IPUNIDIG_BIN)/devIpUnidig.o
-BIN_INSTALLS += $(IPUNIDIG_BIN)/ipUnidigLib
-
-# Objects from LOVE
-# -----------------
-LIBOBJS      += $(LOVE_BIN)/devLove.o
-BIN_INSTALLS += $(LOVE_BIN)/loveServer.o
-
-# Objects from MCA
-# ----------------
-#include $(MCA)/mcaApp/src/mcaLIBOBJS
-#LIBOBJS += $(MCALIBOBJS)
-#include $(MCA)/mcaApp/src/mcaMpfServerLIBOBJS
-#LIBOBJS += $(MCAMPFSERVERLIBOBJS)
-LIBOBJS += $(MCA_BIN)/mcaLib
-
-# Objects from IP
-# ----------------
-#include $(IP)/ipApp/src/ipLIBOBJS
-#LIBOBJS += $(IPLIBOBJS)
-LIBOBJS      += $(IP_BIN)/ipLib
-BIN_INSTALLS += $(IP_BIN)/mpcServer.o
-
-# Allen Bradley objects.  Local copy of file to edit in needed routines
-#include ../allenBradleyLIBOBJS
-
-# Objects from MOTOR
-# ------------------
-LIBOBJS += $(MOTOR_BIN)/motorLib
-LIBOBJS += $(MOTOR_BIN)/softMotorLib 
-#LIBOBJS += $(MOTOR_BIN)/motorCOM_mpf
-LIBOBJS += $(MOTOR_BIN)/omsLib 
-#LIBOBJS += $(MOTOR_BIN)/V544Lib
-#LIBOBJS += $(MOTOR_BIN)/newportLib
-#LIBOBJS += $(MOTOR_BIN)/pm500Lib
-
-# CAMAC libraries
-#LIBOBJS += $(CAMAC_BIN)/camacLib
-#LIBOBJS += $(CAMAC_BIN)/devCamacLib
-#LIBOBJS += $(CAMAC_BIN)/dxpCamacLib
-
-# Local source files.
-#SRCS.c  += ../myProg.c
-#SRCS.cc += ../myProg.cc
-#LIBOBJS += myProg.o
-
-LIBNAME = xxxLib
-
-BIN_INSTALLS += $(EPICS_BASE_BIN)/iocCore $(EPICS_BASE_BIN)/seq
-
-#Note that the command line that builds the
-#library $(LIBNAME) may be HUGE (>3kB)
-#
-include $(TOP)/config/RULES.Vx
-#----------------------------------------
-#  ADD RULES AFTER THIS LINE
diff --git a/xxxApp/src/base.dbd b/xxxApp/src/base.dbd
deleted file mode 100644
index 5e228bc602c7c3924a8c624cd8d732c985cb9d46..0000000000000000000000000000000000000000
--- a/xxxApp/src/base.dbd
+++ /dev/null
@@ -1,241 +0,0 @@
-include "menuGlobal.dbd"
-include "menuConvert.dbd"
-include "aiRecord.dbd"
-#include "aaiRecord.dbd"
-include "aoRecord.dbd"
-#include "aaoRecord.dbd"
-include "biRecord.dbd"
-include "boRecord.dbd"
-include "calcRecord.dbd"
-include "calcoutRecord.dbd"
-include "compressRecord.dbd"
-include "dfanoutRecord.dbd"
-#include "egRecord.dbd"
-#include "egeventRecord.dbd"
-#include "erRecord.dbd"
-#include "ereventRecord.dbd"
-include "eventRecord.dbd"
-include "fanoutRecord.dbd"
-#include "histogramRecord.dbd"
-include "longinRecord.dbd"
-include "longoutRecord.dbd"
-include "mbbiRecord.dbd"
-include "mbbiDirectRecord.dbd"
-include "mbboRecord.dbd"
-include "mbboDirectRecord.dbd"
-include "permissiveRecord.dbd"
-include "pidRecord.dbd"
-#include "pulseCounterRecord.dbd"
-#include "pulseDelayRecord.dbd"
-#include "pulseTrainRecord.dbd"
-#include "scanRecord.dbd"
-include "selRecord.dbd"
-include "seqRecord.dbd"
-include "stateRecord.dbd"
-#include "steppermotorRecord.dbd"
-include "stringinRecord.dbd"
-include "stringoutRecord.dbd"
-include "subRecord.dbd"
-#include "gsubRecord.dbd"
-#include "palRecord.dbd"
-include "subArrayRecord.dbd"
-#include "timerRecord.dbd"
-#include "waitRecord.dbd"
-include "waveformRecord.dbd"
-device(ai,CONSTANT,devAiSoft,"Soft Channel")
-device(ai,CONSTANT,devAiSoftRaw,"Raw Soft Channel")
-#device(ai,VME_IO,devAiXy566Se,"XYCOM-566 SE Scanned")
-#device(ai,VME_IO,devAiXy566Di,"XYCOM-566 Dif Scanned")
-#device(ai,VME_IO,devAiXy566DiL,"XYCOM-566 Dif Latched")
-device(ai,VME_IO,devAiDvx2502,"DVX-2502")
-#device(ai,CONSTANT,devAiTestAsyn,"Test Asyn")
-#device(ai,AB_IO,devAiAb1771Il,"AB-1771IL-Analog In")
-#device(ai,AB_IO,devAiAb1771Ife,"AB-1771IFE")
-#device(ai,AB_IO,devAiAb1771Ixe,"AB-1771IXE-Millivolt In")
-#device(ai,AB_IO,devAiAb1771IfeSe,"AB-1771IFE-SE")
-#device(ai,AB_IO,devAiAb1771IfeMa,"AB-1771IFE-4to20MA")
-#device(ai,AB_IO,devAiAb1771Ife0to5V,"AB-1771IFE-0to5Volt")
-#device(ai,AB_IO,devAiAb1771IrPlatinum,"AB-1771RTD-Platinum")
-#device(ai,AB_IO,devAiAb1771IrCopper,"AB-1771RTD-Copper")
-#device(ai,CAMAC_IO,devAiCamac,"Camac")
-#device(ai,VME_IO,devAiAt5Vxi,"VXI-AT5-AI")
-#device(ai,GPIB_IO,devAiK486Gpib,"Keithley-486")
-#device(ai,VME_IO,devAiKscV215,"KSC-V215")
-device(ai,INST_IO,devAiVXStats,"VX stats")
-#device(aai,CAMAC_IO,devAaiCamac,"Camac")
-device(ao,CONSTANT,devAoSoft,"Soft Channel")
-device(ao,CONSTANT,devAoSoftRaw,"Raw Soft Channel")
-#device(ao,VME_IO,devAoVmiVme4100,"VMIVME-4100")
-#device(ao,CONSTANT,devAoTestAsyn,"Test Asyn")
-#device(ao,AB_IO,devAoAb1771Ofe,"AB-1771OFE")
-#device(ao,CAMAC_IO,devAoCamac,"Camac")
-#device(ao,VME_IO,devAoAt5Vxi,"VXI-AT5-AO")
-device(ao,INST_IO,devAoVXStats,"VX stats")
-device(bi,CONSTANT,devBiSoft,"Soft Channel")
-device(bi,CONSTANT,devBiSoftRaw,"Raw Soft Channel")
-#device(bi,VME_IO,devBiMpv910,"MPV-910")
-#device(bi,VME_IO,devBiXVme210,"XVME-210")
-#device(bi,CONSTANT,devBiTestAsyn,"Test Asyn")
-#device(bi,AB_IO,devBiAb,"AB-Binary Input")
-#device(bi,AB_IO,devBiAb16,"AB-16 bit BI")
-#device(bi,AB_IO,devBiAb32,"AB-32 bit BI")
-#device(bi,CAMAC_IO,devBiCamac,"Camac")
-#device(bi,VME_IO,devBiAt5Vxi,"VXI-AT5-BI")
-#device(bi,VME_IO,devBiXy240,"XYCOM-240")
-#device(bi,VME_IO,devBiHpe1368a,"VXI-HPE1368-VS")
-#device(bi,VME_IO,devBiAt8Fp,"AT8-FP10S")
-device(bi,VME_IO,devBiAvme9440,"AVME9440 I")
-device(bo,CONSTANT,devBoSoft,"Soft Channel")
-device(bo,CONSTANT,devBoSoftRaw,"Raw Soft Channel")
-#device(bo,VME_IO,devBoMpv902,"MPV-902")
-#device(bo,VME_IO,devBoXVme220,"XVME-220")
-#device(bo,CONSTANT,devBoTestAsyn,"Test Asyn")
-#device(bo,AB_IO,devBoAb,"AB-Binary Output")
-#device(bo,AB_IO,devBoAb16,"AB-16 bit BO")
-#device(bo,AB_IO,devBoAb32,"AB-32 bit BO")
-#device(bo,CAMAC_IO,devBoCamac,"Camac")
-#device(bo,VME_IO,devBoAt5Vxi,"VXI-AT5-BO")
-#device(bo,GPIB_IO,devBoK486Gpib,"Keithley-486")
-#device(bo,VME_IO,devBoXy240,"XYCOM-240")
-#device(bo,VME_IO,devBoHpe1368a,"VXI-HPE1368-VS")
-#device(bo,VME_IO,devBoAt8Fp,"AT8-FP10S")
-device(bo,VME_IO,devBoAvme9440,"AVME9440 O")
-device(event,CONSTANT,devEventSoft,"Soft Channel")
-#device(event,VME_IO,devEventMz8310,"Mizar-8310")
-#device(event,CONSTANT,devEventTestIoEvent,"Test IoEvent")
-#device(event,VME_IO,devErEpicsEvent,"APS event receiver")
-#device(histogram,CONSTANT,devHistogramSoft,"Soft Channel")
-#device(histogram,CONSTANT,devHistogramTestAsyn,"Test Asyn")
-device(longin,CONSTANT,devLiSoft,"Soft Channel")
-#device(longin,CAMAC_IO,devLiCamac,"Camac")
-device(longout,CONSTANT,devLoSoft,"Soft Channel")
-#device(longout,CAMAC_IO,devLoCamac,"Camac")
-device(mbbi,CONSTANT,devMbbiSoft,"Soft Channel")
-device(mbbi,CONSTANT,devMbbiSoftRaw,"Raw Soft Channel")
-#device(mbbi,VME_IO,devMbbiMpv910,"MPV-910")
-#device(mbbi,VME_IO,devMbbiXVme210,"XVME-210")
-#device(mbbi,CONSTANT,devMbbiTestAsyn,"Test Asyn")
-#device(mbbi,AB_IO,devMbbiAb,"AB-Binary Input")
-#device(mbbi,AB_IO,devMbbiAb16,"AB-16 bit BI")
-#device(mbbi,AB_IO,devMbbiAb32,"AB-32 bit BI")
-#device(mbbi,AB_IO,devMbbiAbAdapterStat,"AB-Adapter Status")
-#device(mbbi,AB_IO,devMbbiAbCardStat,"AB-Card Status")
-#device(mbbi,CAMAC_IO,devMbbiCamac,"Camac")
-#device(mbbi,VME_IO,devMbbiAt5Vxi,"VXI-AT5-BI")
-#device(mbbi,VME_IO,devMbbiXy240,"XYCOM-240")
-#device(mbbi,VME_IO,devMbbiHpe1368a,"VXI-HPE1368-VS")
-#device(mbbi,VME_IO,devMbbiAt8Fp,"AT8-FP10S")
-device(mbbi,VME_IO,devMbbiAvme9440,"AVME9440 I")
-device(mbbiDirect,CONSTANT,devMbbiDirectSoft,"Soft Channel")
-device(mbbiDirect,CONSTANT,devMbbiDirectSoftRaw,"Raw Soft Channel")
-#device(mbbiDirect,VME_IO,devMbbiDirectMpv910,"MPV-910")
-#device(mbbiDirect,VME_IO,devMbbiDirectXVme210,"XVME-210")
-#device(mbbiDirect,AB_IO,devMbbiDirectAb,"AB-Binary Input")
-#device(mbbiDirect,AB_IO,devMbbiDirectAb16,"AB-16 bit BI")
-#device(mbbiDirect,AB_IO,devMbbiDirectAb32,"AB-32 bit BI")
-#device(mbbiDirect,CAMAC_IO,devMbbiDirectCamac,"Camac")
-#device(mbbiDirect,VME_IO,devMbbiDirectAt5Vxi,"VXI-AT5-BI")
-device(mbbo,CONSTANT,devMbboSoft,"Soft Channel")
-device(mbbo,CONSTANT,devMbboSoftRaw,"Raw Soft Channel")
-#device(mbbo,VME_IO,devMbboMpv902,"MPV-902")
-#device(mbbo,VME_IO,devMbboXVme220,"XVME-220")
-#device(mbbo,CONSTANT,devMbboTestAsyn,"Test Asyn")
-#device(mbbo,AB_IO,devMbboAb,"AB-Binary Output")
-#device(mbbo,AB_IO,devMbboAb16,"AB-16 bit BO")
-#device(mbbo,AB_IO,devMbboAb32,"AB-32 bit BO")
-#device(mbbo,VME_IO,devMbboAt5Vxi,"VXI-AT5-BO")
-#device(mbbo,GPIB_IO,devMbboK486Gpib,"Keithley-486")
-#device(mbbo,VME_IO,devMbboXy240,"XYCOM-240")
-#device(mbbo,VME_IO,devMbboHpe1368a,"VXI-HPE1368-VS")
-#device(mbbo,VME_IO,devMbboAt8Fp,"AT8-FP10S")
-device(mbbo,VME_IO,devMbboAvme9440,"AVME9440 O")
-device(mbboDirect,CONSTANT,devMbboDirectSoft,"Soft Channel")
-device(mbboDirect,CONSTANT,devMbboDirectSoftRaw,"Raw Soft Channel")
-#device(mbboDirect,VME_IO,devMbboDirectMpv902,"MPV-902")
-#device(mbboDirect,VME_IO,devMbboDirectXVme220,"XVME-220")
-#device(mbboDirect,AB_IO,devMbboDirectAb,"AB-Binary Output")
-#device(mbboDirect,AB_IO,devMbboDirectAb16,"AB-16 bit BO")
-#device(mbboDirect,AB_IO,devMbboDirectAb32,"AB-32 bit BO")
-#device(mbboDirect,CAMAC_IO,devMbboDirectCamac,"Camac")
-#device(mbboDirect,VME_IO,devMbboDirectAt5Vxi,"VXI-AT5-BO")
-#device(pulseCounter,VME_IO,devPcMz8310,"Mizar-8310")
-#device(pulseDelay,VME_IO,devPdMz8310,"Mizar-8310")
-#device(pulseTrain,CONSTANT,devPtSoft,"Soft Channel")
-#device(pulseTrain,VME_IO,devPtMz8310,"Mizar-8310")
-#device(steppermotor,VME_IO,devSmCompumotor1830,"Compumotor 1830")
-#device(steppermotor,VME_IO,devSmOms6Axis,"OMS 6-Axis")
-#device(steppermotor,AB_IO,devSmAB1746Hstp1,"Allen Bradley 1746-HTSP1")
-device(stringin,CONSTANT,devSiSoft,"Soft Channel")
-#device(stringin,CONSTANT,devSiTestAsyn,"Test Asyn")
-device(stringout,CONSTANT,devSoSoft,"Soft Channel")
-#device(stringout,CONSTANT,devSoTestAsyn,"Test Asyn")
-device(subArray,CONSTANT,devSASoft,"Soft Channel")
-#device(timer,VME_IO,devTmMizar8310,"Mizar-8310")
-#device(timer,VME_IO,devTmDg535,"DG 535")
-#device(timer,VME_IO,devTmAt5Vxi,"VXI-AT5-TIME")
-device(waveform,CONSTANT,devWfSoft,"Soft Channel")
-#device(waveform,VME_IO,devWfXy566Sc,"XYCOM-566 Single Channel")
-#device(waveform,VME_IO,devWfComet,"Comet Digitizer")
-#device(waveform,VME_IO,devWfJoergerVtr1,"Joerger Digitizer")
-#device(waveform,CONSTANT,devWfTestAsyn,"Test Asyn")
-#device(waveform,VME_IO,devWfDvx2502,"DVX-2502")
-#device(waveform,VME_IO,devWfPentek4261,"Pentek 4261")
-#device(waveform,CAMAC_IO,devWfCamac,"Camac")
-#device(waveform,VME_IO,devWfJoergerVtr1,"Joerger-VTR1")
-#device(waveform,VME_IO,devWfComet,"Omnibyte-COMET")
-#device(eg,VME_IO,devEg,"APS event generator G")
-#device(egevent,VME_IO,devEgEvent,"APS event generator E")
-#device(er,VME_IO,devEr,"APS event receiver")
-#device(erevent,VME_IO,devErevent,"APS event receiver")
-#device(wait,CONSTANT,devWaitIoEvent,"Soft Channel")
-#device(ai,INST_IO,devAiCan,"CANbus")
-#device(ao,INST_IO,devAoCan,"CANbus")
-#device(bi,INST_IO,devBiCan,"CANbus")
-#device(bo,INST_IO,devBoCan,"CANbus")
-#device(mbbi,INST_IO,devMbbiCan,"CANbus")
-#device(mbbo,INST_IO,devMbboCan,"CANbus")
-#device(mbbiDirect,INST_IO,devMbbiDirectCan,"CANbus")
-#device(mbboDirect,INST_IO,devMbboDirectCan,"CANbus")
-#device(bi,VME_IO,devBiVmic2534,"Vmic2534")
-#device(bo,VME_IO,devBoVmic2534,"Vmic2534")
-#device(mbbi,VME_IO,devMbbiVmic2534,"Vmic2534")
-#device(mbbo,VME_IO,devMbboVmic2534,"Vmic2534")
-
-include "symb.dbd"
-
-#device(ai,AB_IO,devAiAbSlcDcm,"AB-SLC500DCM")
-#device(ai,AB_IO,devAiAbSlcDcmSigned,"AB-SLC500DCM-Signed")
-#device(ao,AB_IO,devAoAbSlcDcm,"AB-SLC500DCM")
-#device(longin,AB_IO,devLiAbSlcDcm,"AB-SLC500DCM")
-#device(longout,AB_IO,devLoAbSlcDcm,"AB-SLC500DCM")
-
-#driver(drvXy010)
-#driver(drvVxi)
-driver(drvGpib)
-driver(drvBitBus)
-#driver(drvBb910)
-#driver(drvXy210)
-#driver(drvBb902)
-#driver(drvXy220)
-#driver(drvXy566)
-driver(drvDvx)
-#driver(drvVmi4100)
-driver(drvAb)
-#driver(drvAt5Vxi)
-#driver(drvCompuSm)
-#driver(drvOms)
-#driver(drvMz8310)
-#driver(drvHpe1368a)
-#driver(drvXy240)
-#driver(drvKscV215)
-#driver(drvComet)
-#driver(drvJgvtr1)
-#driver(drvFp)
-#driver(drvFpm)
-#driver(drvIpac)
-#driver(drvTip810)
-#driver(drvVmi2534)
-#include "bptTypeJdegC.dbd"
-#include "bptTypeJdegF.dbd"
-#include "bptTypeKdegC.dbd"
-#include "bptTypeKdegF.dbd"
diff --git a/xxxApp/src/baseLIBOBJS b/xxxApp/src/baseLIBOBJS
deleted file mode 100644
index cd962ba951fa21cb11b0d3361cc2928644bd45ea..0000000000000000000000000000000000000000
--- a/xxxApp/src/baseLIBOBJS
+++ /dev/null
@@ -1,216 +0,0 @@
-#LIBOBJS += $(EPICS_BASE_BIN)/aaiRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/aaoRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/aiRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/aoRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/biRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/boRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/calcRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/calcoutRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/compressRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/dfanoutRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/egRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/egeventRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/erRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/ereventRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/eventRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/fanoutRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/gsubRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/histogramRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/longinRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/longoutRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/mbbiRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/mbbiDirectRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/mbboRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/mbboDirectRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/palRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/permissiveRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/pulseCounterRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/pulseDelayRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/pulseTrainRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/recWaitCa.o
-#LIBOBJS += $(EPICS_BASE_BIN)/recDynLink.o
-#LIBOBJS += $(EPICS_BASE_BIN)/recDynLinkTest.o
-#LIBOBJS += $(EPICS_BASE_BIN)/scanRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/selRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/seqRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/stateRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/steppermotorRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/stringinRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/stringoutRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/subRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/subArrayRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/timerRecord.o
-#LIBOBJS += $(EPICS_BASE_BIN)/waitRecord.o
-LIBOBJS += $(EPICS_BASE_BIN)/waveformRecord.o
-#
-# Device Support
-#
-#LIBOBJS += $(EPICS_BASE_BIN)/devAaiCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAiCamac.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAiDvx2502.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAiKscV215.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAiSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAiSoftRaw.o
-LIBOBJS += $(EPICS_BASE_BIN)/devVXStats.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAiTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAiXy566Di.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAiXy566DiL.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAiXy566Se.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAaoCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAoCamac.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAoSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAoSoftRaw.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAoTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAoVmiVme4100.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devApsEg.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devApsEr.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAt5Vxi.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAt8Fp.o
-LIBOBJS += $(EPICS_BASE_BIN)/devAvme9440.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBiCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBiMpv910.o
-LIBOBJS += $(EPICS_BASE_BIN)/devBiSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devBiSoftRaw.o
-LIBOBJS += $(EPICS_BASE_BIN)/devBiTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBiXVme210.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBoCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBoMpv902.o
-LIBOBJS += $(EPICS_BASE_BIN)/devBoSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devBoSoftRaw.o
-LIBOBJS += $(EPICS_BASE_BIN)/devBoTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBoXVme220.o
-LIBOBJS += $(EPICS_BASE_BIN)/devCommonGpib.o
-LIBOBJS += $(EPICS_BASE_BIN)/devEventSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devEventTestIoEvent.o
-LIBOBJS += $(EPICS_BASE_BIN)/devHistogramSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devHistogramTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devHpe1368a.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devLiCamac.o
-LIBOBJS += $(EPICS_BASE_BIN)/devLiSoft.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devLoCamac.o
-LIBOBJS += $(EPICS_BASE_BIN)/devLoSoft.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectMpv910.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectSoftRaw.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectXVme210.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiMpv910.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbbiSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbbiSoftRaw.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbbiTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiXVme210.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectMpv902.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectSoftRaw.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectXVme220.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboMpv902.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbboSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbboSoftRaw.o
-LIBOBJS += $(EPICS_BASE_BIN)/devMbboTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboXVme220.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMz8310.o
-LIBOBJS += $(EPICS_BASE_BIN)/devPtSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devSASoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devSiSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devSiTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devSmCompumotor1830.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devSmOms6Axis.o
-LIBOBJS += $(EPICS_BASE_BIN)/devSoSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devSoTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devTimerMz8310.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devWfCamac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devWfComet.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devWfDvx2502.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devWfJoergerVtr1.o
-LIBOBJS += $(EPICS_BASE_BIN)/devWfSoft.o
-LIBOBJS += $(EPICS_BASE_BIN)/devWfTestAsyn.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devWfXy566Sc.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devWfPentek4261.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXy240.o
-
-#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IFE.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IL.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IR.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IXE.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771OFE.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devABSLCDCM.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devABBINARY.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devABStatus.o
-
-#LIBOBJS += $(EPICS_BASE_BIN)/devAiCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devAoCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBiCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBoCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectCan.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devVmic2534.o
-
-LIBOBJS += $(EPICS_BASE_BIN)/symb
-
-#
-# Driver support ANSI
-#
-#LIBOBJS += $(EPICS_BASE_BIN)/drvAb.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvAt5Vxi.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvEpvxi.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvEpvxiMsg.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvHp1404a.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvHpe1368a.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvHpe1445a.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvKscV215.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvMz8310.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvStc.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvTime.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvCaenV265.o
-
-#LIBOBJS += $(EPICS_BASE_BIN)/drvVipc310.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvVipc610.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvIpMv162.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvIpac.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvTip810.o
-#
-# Driver support  NON ANSI
-#
-#LIBOBJS += $(EPICS_BASE_BIN)/module_types.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvBB232.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvBb902.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvBb910.o
-LIBOBJS += $(EPICS_BASE_BIN)/drvBitBus.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvComet.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvCompuSm.o
-LIBOBJS += $(EPICS_BASE_BIN)/drvDvx.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvFp.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvFpm.o
-LIBOBJS += $(EPICS_BASE_BIN)/drvGpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvJgvtr1.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvMsg.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvOms.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvTranServ.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvVmi4100.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvXy010.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvXy210.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvXy220.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvXy240.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvXy566.o
-#LIBOBJS += $(EPICS_BASE_BIN)/drvVmic2534.o
-#
-#from src/devOpt
-#
-#LIBOBJS += $(EPICS_BASE_BIN)/devAnalytekGpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devBBInteract.o
-LIBOBJS += $(EPICS_BASE_BIN)/devGpibInteract.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devK486Gpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devLibOpt.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXxDc5009Gpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXxDg535Gpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXxK196Gpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXxK263Gpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXxSkeletonGpib.o
-#LIBOBJS += $(EPICS_BASE_BIN)/devXxSr620Gpib.o
-
diff --git a/xxxApp/src/xxxInclude.dbd b/xxxApp/src/xxxInclude.dbd
index 28f0a308f0b1860dced64881b2a163cc2aaee49e..6d053a151a98180e4eb98483ab097caf251f15ce 100644
--- a/xxxApp/src/xxxInclude.dbd
+++ b/xxxApp/src/xxxInclude.dbd
@@ -1,25 +1,16 @@
-include "shareBase.dbd"
-include "stdShare.dbd"
-
-include "mcaShare.dbd"
-include "ipShare.dbd"
-include "devIpUnidig.dbd"
-include "devAoDAC128V.dbd"
-
-include "devEpidIp330.dbd"
-include "devAiIp330.dbd"
+include "base.dbd"
+include "std.dbd"
+include "mpfSerial.dbd"
 
 include "motorRecord.dbd"
 include "devSoftMotor.dbd"
-include "devOms.dbd"
 #include "devAcsMotor.dbd"
 #include "devImsMotor.dbd"
 #include "devMclennanMotor.dbd"
-#include "devNewport.dbd"
+include "devNewport.dbd"
 
 #include "camacShare.dbd"
 #include "devCamacShare.dbd"
 #include "dxpCamacShare.dbd"
 #include "allenBradley.dbd"
-include "devLove.dbd"
 
diff --git a/xxxApp/src/xxxMain.c b/xxxApp/src/xxxMain.c
new file mode 100644
index 0000000000000000000000000000000000000000..8bd5df669118edbf8d4cb6e367e454bd25737428
--- /dev/null
+++ b/xxxApp/src/xxxMain.c
@@ -0,0 +1,21 @@
+/* xxxMain.c */
+/* Author:  Ron Sluiter */
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "epicsThread.h"
+#include "iocsh.h"
+
+int main(int argc,char *argv[])
+{
+    if(argc>=2) {    
+        iocsh(argv[1]);
+        epicsThreadSleep(.2);
+    }
+    iocsh(NULL);
+    return(0);
+}
diff --git a/xxxApp/src/xxxVxInclude.dbd b/xxxApp/src/xxxVxInclude.dbd
new file mode 100644
index 0000000000000000000000000000000000000000..dca75a13ee0e0ba4b4a8825434a9c1f146e7a27f
--- /dev/null
+++ b/xxxApp/src/xxxVxInclude.dbd
@@ -0,0 +1,28 @@
+include "base.dbd"
+include "stdVX.dbd"
+include "mpfSerialVx.dbd"
+
+include "vxStats.dbd"
+include "mcaSupport.dbd"
+include "ipShare.dbd"
+include "devIpUnidig.dbd"
+include "devAoDAC128V.dbd"
+
+include "devIp330.dbd"
+
+include "motorRecord.dbd"
+include "devSoftMotor.dbd"
+include "devOms.dbd"
+#include "devAcsMotor.dbd"
+#include "devImsMotor.dbd"
+#include "devMclennanMotor.dbd"
+include "devNewport.dbd"
+
+#include "camacShare.dbd"
+#include "devCamacShare.dbd"
+#include "dxpCamacShare.dbd"
+#include "allenBradley.dbd"
+include "devLove.dbd"
+
+registrar(stdRegister)
+