diff --git a/docs/ui.md b/docs/ui.md
index 28504ff..db6fcf2 100644
--- a/docs/ui.md
+++ b/docs/ui.md
@@ -9,4 +9,6 @@ ssh -J sls-lc -X labrec_b@sls-vserv-bd-hla01-dev.psi.ch
Macro substitution
```
caqtdm -m'TESTAGEBDALH=AGEBD-ALH' A_BD_ServiceManager.ui
-```
\ No newline at end of file
+```
+
+# TODO: remove/delete old autodeployed ui files
\ No newline at end of file
diff --git a/qt/A_BD_ServiceManager.ui b/qt/A_BD_ServiceManager.ui
index 9d8b5ec..c943b72 100644
--- a/qt/A_BD_ServiceManager.ui
+++ b/qt/A_BD_ServiceManager.ui
@@ -138,7 +138,7 @@ caLabel[statusTip="Operation"]{
- IOC=AGEBD-CPCL-DBPM3CURR,service=DBPM3CURR,name=DBPM3Current,panel=1,svc_exist=1,panelcmd=A_BD_DBPM3Current.ui;IOC=AGEBD-CPCL-TAUBPM,service=TAUBPM,name=LifetimeBPM,panel=1,svc_exist=1,panelcmd=A_BD_LifetimeBPM.ui;IOC=AGEBD-CPCL-TAUPCT,service=TAUPCT,name=LifetimePCT,panel=1,svc_exist=1,panelcmd=A_BD_LifetimePCT.ui;IOC=AGEBD-CPCL-TIMING,service=TIMING,name=Timing,panel=1,svc_exist=1,panelcmd=A_BD_Timing.ui;IOC=AGEBD-CPCL-SCRUBBING,service=SCRUBBING,name=Scrubbing,panel=1,svc_exist=1,panelcmd=A_BD_Scrubbing.ui;IOC=AGEBD-CPCL-INJECTIONGUARD,service=INJECTIONGUARD,name=InjectionGuard,panel=1,svc_exist=1,panelcmd=A_BD_InjectionGuard.ui;IOC=AGEBD-CPCL-POSTMORTEMLOG,service=POSTMORTEMLOG,name=PostMortemLog,panel=1,svc_exist=1,panelcmd=A_BD_PostMortemLog.ui;IOC=AGEBD-CPCL-TUNEBUMP,service=TUNEBUMP,name=TuneBump,panel=1,svc_exist=1,panelcmd=A_BD_TuneBump.ui;IOC=AGEBD-CPCL-PLOTS,service=PLOTS,name=Plots,panel=0,svc_exist=1,panelcmd=A_BD_Plots.ui;IOC=AGEBD-CPCL-ORBITBUMP,service=ORBITBUMP,name=OrbitBump,panel=1,svc_exist=0,panelcmd=A_BD_OrbitBump.ui;IOC=AGEBD-CPCL-TUNEFBX,service=TUNEFBX,name=Hor. Tune Feedback,panel=1,svc_exist=1,panelcmd=A_BD_TuneBump.ui;IOC=AGEBD-CPCL-TUNEFBY,service=TUNEFBY,name=Ver. Tune Feedback,panel=1,svc_exist=1,panelcmd=A_BD_TuneBump.ui
+ @required_services.subs
A_BD_ServiceManager_inc.ui
diff --git a/qt/required_services.subs b/qt/required_services.subs
new file mode 100644
index 0000000..c748f12
--- /dev/null
+++ b/qt/required_services.subs
@@ -0,0 +1,17 @@
+# required_services.substitutions
+# Service configurations for caInclude
+
+file A_BD_ServiceManager_inc.ui {
+ { IOC="AGEBD-CPCL-DBPM3CURR", service="DBPM3CURR", name="DBPM3Current", panel="1", svc_exist="1", panelcmd="A_BD_DBPM3Current.ui" }
+ { IOC="AGEBD-CPCL-TAUBPM", service="TAUBPM", name="LifetimeBPM", panel="1", svc_exist="1", panelcmd="A_BD_LifetimeBPM.ui" }
+ { IOC="AGEBD-CPCL-TAUPCT", service="TAUPCT", name="LifetimePCT", panel="1", svc_exist="1", panelcmd="A_BD_LifetimePCT.ui" }
+ { IOC="AGEBD-CPCL-TIMING", service="TIMING", name="Timing", panel="1", svc_exist="1", panelcmd="A_BD_Timing.ui" }
+ { IOC="AGEBD-CPCL-SCRUBBING", service="SCRUBBING", name="Scrubbing", panel="1", svc_exist="1", panelcmd="A_BD_Scrubbing.ui" }
+ { IOC="AGEBD-CPCL-INJECTION*", service="INJECTIONGUARD", name="InjectionGuard", panel="1", svc_exist="1", panelcmd="A_BD_InjectionGuard.ui" }
+ { IOC="AGEBD-CPCL-POSTMORTEM*", service="POSTMORTEMLOG", name="PostMortemLog", panel="1", svc_exist="1", panelcmd="A_BD_PostMortemLog.ui" }
+ { IOC="AGEBD-CPCL-TUNEBUMP", service="TUNEBUMP", name="TuneBump", panel="1", svc_exist="1", panelcmd="A_BD_TuneBump.ui" }
+ { IOC="AGEBD-CPCL-PLOTS", service="PLOTS", name="Plots", panel="0", svc_exist="1", panelcmd="A_BD_Plots.ui" }
+ { IOC="AGEBD-CPCL-ORBITBUMP", service="ORBITBUMP", name="OrbitBump", panel="1", svc_exist="0", panelcmd="A_BD_OrbitBump.ui" }
+ { IOC="AGEBD-CPCL-TUNEFBX", service="TUNEFBX", name="Hor. Tune FB", panel="1", svc_exist="1", panelcmd="A_BD_TuneBump.ui" }
+ { IOC="AGEBD-CPCL-TUNEFBY", service="TUNEFBY", name="Ver. Tune FB", panel="1", svc_exist="1", panelcmd="A_BD_TuneBump.ui" }
+}
\ No newline at end of file