diff --git a/Makefile b/Makefile
index 70b94748bd2ddd6d0f81e69339f653f8c9c5d99d..3930f0e1d601a00ecc0bdec862359a06a7ff512c 100644
--- a/Makefile
+++ b/Makefile
@@ -26,3 +26,5 @@ TOP:=$(CURDIR)
 
 include $(TOP)/configure/CONFIG
 include $(TOP)/configure/RULES
+
+-include $(TOP)/test.Makefile
diff --git a/addon.Makefile b/addon.Makefile
index a5cd2a19d23f3e748b53c70d6afe15216079514d..0f1ccb04eb5cfe52c4f1280a2377314383b7e0f6 100644
--- a/addon.Makefile
+++ b/addon.Makefile
@@ -2,22 +2,42 @@
 EXCLUDE_ARCHS += linux-corei7-poky
 EXCLUDE_ARCHS += linux-x86_64-debug
 
-# REDUDANCY
-# db: $(EVG_SUBS) $(EVR_SUBS) $(EVG_TMPS) macropgragma
-
-# macropgragma:
-#	python3 -m macropragma -c $(where_am_I)/../patch/conf.yaml -d $(where_am_I)
-# .PHONY: db $(EVG_SUBS) $(EVR_SUBS) $(EVG_TMPS)
-
-patch_always:
-	#python3 -m pip install --user macropragma==$(PIP_MACROPRAGMA_DEP_VERSION)
-	for i in $(where_am_I)/../patch/*.patch; do \
-		if ! patch -R -p0 -s -f --dry-run -d $(where_am_I)/../ <$$i &>/dev/null; then \
-			patch -p0 -d $(where_am_I)/../ <$$i ; \
-		fi \
-	done
-
-define MACRO_SUBSTITUTION
+# This is a bit of a hack, since this is set in ${CONFIG}/CONFIG_COMMON which isn't loaded by the time we build the `prebuild` target.
+ifeq ($(strip $(PERL)),)
+PERL = perl -CSD
+endif
+
+.PHONY: version_header_file
+version_header_file:
+	@printf "version_header_file applying: %s\n" $(E3_MODULE_VERSION)
+	$(PERL) -I$(EPICS_BASE)/lib/perl $(where_am_I)/$(MRFCOMMON)/genVersionHeader.pl -t "" -V $(E3_MODULE_VERSION) -N MRF_VERSION $(where_am_I)/$(MRFCOMMON)/mrf/version.h
+
+.PHONY: $(PATCH_FILES)
+$(PATCH_FILES):
+	@if ! patch -R -p0 -s -f --dry-run -d $(E3MOD_ROOT)/ <$(@) &>/dev/null; then \
+		printf "PATCH_FILES applying:	%48s \n" "$(@)" ; \
+		patch -p0 -d $(E3MOD_ROOT)/ <$(@) ; \
+	else \
+		printf "PATCH_FILES done:	%48s \n" "$(@)" ; \
+	fi;
+
+
+.PHONY: $(EVG_SUBS) $(EVR_SUBS) $(ESS_SUBS)
+$(EVG_SUBS) $(EVR_SUBS) $(ESS_SUBS):
+	@printf "SUBS inflating: %48s >>> %40s \n" "$@" "$(basename $(@)).db"
+	@rm -f  $(basename $(@)).db.d  $(basename $(@)).db
+	@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db -S $@  > $(basename $(@)).db.d
+	@$(MSI)    $(USR_DBFLAGS) -o $(basename $(@)).db -S $@
+
+.PHONY: $(EVG_TMPS)
+$(EVG_TMPS):
+	@printf "TMPS inflating: %48s >>> %40s \n" "$@" "$(basename $(@)).db"
+	@rm -f  $(basename $(@)).db.d  $(basename $(@)).db
+	@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db $@  > $(basename $(@)).db.d
+	@$(MSI)    $(USR_DBFLAGS) -o $(basename $(@)).db $@
+
+
+define UNIV_REGEX
   /\$$\((SYS|D)\)/{ \
     s/\{\$$\(D\)\}?/$$(D)/g; \
     s/\$$\(D\)-/$$(D)/g; \
@@ -27,19 +47,6 @@ define MACRO_SUBSTITUTION
   }
 endef
 
-MACRO_SUBSTITUTION_FILES = $(EVGMRMAPPDB)/mtca-evm-300.db
-MACRO_SUBSTITUTION_FILES += $(EVGMRMAPPDB)/cpci-evg-300.db
-MACRO_SUBSTITUTION_FILES += $(EVRMRMAPPDB)/evr-mtca-300.db
-MACRO_SUBSTITUTION_FILES += $(EVRMRMAPPDB)/evr-pcie-300dc.db
-
-MACRO_SUBSTITUTION_FILES += $(where_am_I)/../template/community/evrIoMtca.db
-
-define substitute_raw
-	for f in $1; do \
-	  sed -E '$(2)' $$f > $${f%.*}-univ.db; \
-	done
-endef
-
-.PHONY: db_fix_pv_naming_convention
-db_fix_pv_naming_convention: $(MACRO_SUBSTITUTION_FILES)
-	$(call substitute_raw,$^,$(MACRO_SUBSTITUTION))
+$(UNIV_SUBS): %-univ.db : %.db
+	@printf "UNIV_SUBS applying: %48s >>> %s \n" "$<" "$@"
+	@sed -E '$(UNIV_REGEX)' $< > $@
diff --git a/configure/CONFIG_MODULE b/configure/CONFIG_MODULE
index 05f72862a27cce315819f7bbc8f92db3c6186b77..4f38ee6befc8239679bf672909bb67c1c483f83f 100644
--- a/configure/CONFIG_MODULE
+++ b/configure/CONFIG_MODULE
@@ -2,7 +2,7 @@ EPICS_MODULE_NAME:=mrfioc2
 #
 EPICS_MODULE_TAG:=0ce53468b1e35d5a4a801f72b99ab4189786b267
 #
-E3_MODULE_VERSION:=2.3.1+beta.221114
+E3_MODULE_VERSION:=2.3.1+alfa.230404
 #
 DEVLIB2_DEP_VERSION:=2.11.0
 #
diff --git a/configure/RELEASE b/configure/RELEASE
index ada5d9ac9faa07299e94ca6c17af5b3267d267c3..5592a33c81ddf722c62adff4560ac918c12888f4 100644
--- a/configure/RELEASE
+++ b/configure/RELEASE
@@ -1,5 +1,5 @@
-# 
-EPICS_BASE:=/epics/base-7.0.6.1
+#
+EPICS_BASE:=/epics/base-7.0.7-utagrw
 
 E3_REQUIRE_NAME:=require
 E3_REQUIRE_VERSION:=4.0.0
@@ -8,3 +8,4 @@ E3_REQUIRE_VERSION:=4.0.0
 -include $(TOP)/../../RELEASE.local
 -include $(TOP)/../RELEASE.local
 -include $(TOP)/configure/RELEASE.local
+
diff --git a/db/evtEnd.db b/db/evtEnd.db
index a0198f8d3bc6a4609ca2b49ae4a26aa3ec62ec14..d8f6e3095bbdbcf36aebb159702c1af3b5c4bbbd 100644
--- a/db/evtEnd.db
+++ b/db/evtEnd.db
@@ -4,17 +4,20 @@ record(calcout, "$(P)$(Evt)IdEnd-I") {
   field(SCAN, "Passive")
   field(INPA, "$(P)EvtF14HzId-I CPP NMS")
   field(INPB, "$(P)$(Evt)Id-I")
-  field(CALC, "(A-1)==B||A==B?B:0")
+  field(CALC, "(A-1)==B||A==B?B:VAL")
+  #field(CALC, "(A-1)==B?B:0")
   field(EGU,  "trig")
   field(TSEL, "$(P)EvtF14HzId-I.TIME")
   #field(OOPT, "When Non-zero")
-  field(DOPT, "Use OCAL")
-  field(OCAL, "(A-1)==B||A==B?1:0")
+  field(OOPT, "On Change")
+  #field(DOPT, "Use OCAL")
+  #field(OCAL, "(A-1)==B||A==B?1:0")
   field(PHAS, "2")
-  info(Q:group, {
-    "$(P)$(Evt)-Tag":{
-      "":{+type:"meta",+channel:"VAL",+trigger:"*"}
-      #"value.IdEnd":{+type:"plain",+channel:"B",+trigger:"*"}
-    }
-  })
+  # Trigger moved to the Tst managment.
+  # info(Q:group, {
+  #   "$(P)$(Evt)-Tag":{
+  #     #"":{+type:"meta",+channel:"VAL",+trigger:"*"}
+  #     "Evt.IdEnd":{+type:"plain", +channel:"VAL", +trigger:"*"}
+  #   }
+  # })
 }
diff --git a/db/evtFreq.db b/db/evtFreq.db
index 369d21da366925796cd9923299800722bdae6738..959eb5f22e5ffeb4dc3cffdd3066c2fee09f5016 100644
--- a/db/evtFreq.db
+++ b/db/evtFreq.db
@@ -18,7 +18,7 @@ record(calc,"$(P)$(Evt)Freq-I") {
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "value.Freq":{+type:"plain",+channel:"VAL",+trigger:""}
+      "Evt.Freq":{+type:"plain",+channel:"VAL",+trigger:""}
     }
   })
 }
diff --git a/db/evtId.db b/db/evtId.db
index 0742c424b255276b0d37f896d9f7162057e9974b..02baefa79c77e3a77b6ae13ebba32ed308db9f46 100644
--- a/db/evtId.db
+++ b/db/evtId.db
@@ -1,45 +1,48 @@
-# TODO: UTAG is 64 bits but decreased to 32 in order to keep compatibility with userTag
-record(longout, "$(P)$(Evt)DbufCycleId_") 
+
+record(int64out, "$(P)$(Evt)Id_")
 {
   field(DESC, "DbufCycleId forwarder")
+  field(PHAS, "0")
   field(ASG, "private")
   field(SDIS, "$(P)$(Evt)Cnt-I CPP MS")
   field(DISV, "0")
   field(SCAN, "Passive")
   field(OMSL, "closed_loop")
-  field(DOL,  "$(P)DbufCycleId-I")
-  # TODO: uncomment for new epics base # field(OUT,  "$(P)$(Evt)Cnt-I.UTAG")
-  field(OUT,  "$(P)EvtNullId-I") # Just to dump the output.
+  field(DOL,  "$(P)$(EvtId=EvtF14HzId-I)")
+  field(OUT,  "$(P)$(Evt)Cnt-I.UTAG")
+  #field(OUT,  "$(P)EvtNullId-I") # Just to dump the output.
 }
 
-# TODO: int64in changed to longin in order to hack the userTag bug.
-record(longin, "$(P)$(Evt)Id-I")
+record(int64in, "$(P)$(Evt)Id-I")
 {
   field(DESC, "Event $(CODE) + Id + timestamp")
   field(SCAN, "Passive")
-  field(SDIS, "$(P)$(Evt)DbufCycleId_ CPP MS")
-  field(DISV, "0")
-  #field(TSEL, "$(P)$(Evt)Cnt-I.TIME CA")
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   field(EGU,  "id")
-  field(INP, "$(P)DbufCycleId-I")
+  field(INP, "$(P)$(Evt)Id_ CPP MS")
   ###TODO: The placeholder for the future implementation together with the delay pipeline
   alias("$(P)$(Evt)IdAck-I")
 
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "timeStamp.userTag":{+type:"plain",+channel:"VAL",+trigger:""}, # Not necessary if UTAG configured.
-      "value.Id":{+type:"plain",+channel:"VAL",+trigger:""}
+      # Add the timestamp
+      "Evt":{+type:"meta", +channel:"TIME"},
+      # "timeStamp.time":{+type:"plain",+channel:"TIME",+trigger:""},
+      # "timeStamp.userTag":{+type:"plain",+channel:"VAL",+trigger:""},
+      "Evt.Id":{+type:"plain", +channel:"VAL", +trigger:""}
     }
   })
+
+  field(FLNK, "$(P)$(Evt)IdPrev-I")
 }
 
+# int64in and int64out does not work for SDIS field - breaks the link
+# field(SDIS, "$(P)$(Evt)Id_ CPP MS")
+
 record(int64in, "$(P)$(Evt)IdPrev-I")
 {
   field(DESC, "Event $(CODE) + Id + timestamp - previous")
   field(SCAN, "Passive")
-  field(SDIS, "$(P)$(Evt)DbufCycleId_ CPP MS")
-  field(DISV, "0")
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   #field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   #field(TSEL, {pva:{pv:"$(P)$(Evt)Cnt-I.TIME"}})
@@ -49,20 +52,20 @@ record(int64in, "$(P)$(Evt)IdPrev-I")
 
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "value.IdPrev":{+type:"plain",+channel:"VAL",+trigger:""}
+      "Evt.IdPrev":{+type:"plain", +channel:"VAL", +trigger:""}
     }
   })
+
+  field(FLNK, "$(P)$(OBJ=)$(Evt)IdMinor-I")
 }
 
-record(calcout, "$(P)$(OBJ=)$(Evt)IdMinor-I") {
+record(calcout, "$(P)$(OBJ=)$(Evt)IdMinor-I")
+{
   field(DESC, "Event $(CODE) occurrence in cycle")
   field(SCAN, "Passive")
   field(INPA, "$(P)$(OBJ=)$(Evt)Cnt-I")
   field(INPB, "$(P)$(OBJ=)$(Evt)IdMinor-I.LA")
 
-  field(SDIS, "$(P)$(Evt)DbufCycleId_ CPP MS")
-  field(DISV, "0")
-
   field(EGU, "cnt")
   #field(IVOV, "0")
   field(IVOA, "Don't drive outputs")
@@ -73,7 +76,7 @@ record(calcout, "$(P)$(OBJ=)$(Evt)IdMinor-I") {
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "value.IdMinor":{+type:"plain",+channel:"VAL",+trigger:""}
+      "Evt.IdMinor":{+type:"plain", +channel:"VAL", +trigger:""}
     }
   })
 }
diff --git a/db/evtPrd.db b/db/evtPrd.db
index 811b82fb3e04eac538d01480d433da15a02f7cb8..4b1071641998f33a3b203f713fce9ae004365804 100644
--- a/db/evtPrd.db
+++ b/db/evtPrd.db
@@ -14,7 +14,7 @@ record(calcout, "$(P)$(OBJ=)$(Evt)PrdCyc-I") {
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "value.PrdCyc":{+type:"plain",+channel:"VAL",+trigger:""}
+      "Evt.PrdCyc":{+type:"plain",+channel:"VAL",+trigger:""}
     }
   })
 }
@@ -36,7 +36,7 @@ record(calcout, "$(P)$(OBJ=)$(Evt)Prd-I") {
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME")
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "value.Prd":{+type:"plain",+channel:"VAL",+trigger:""}
+      "Evt.Prd":{+type:"plain",+channel:"VAL",+trigger:""}
     }
   })
 }
diff --git a/db/evtTst.db b/db/evtTst.db
index 477cd741ee1b5f121b7041ccf0ecb9a102000fb4..1a078b96fa38930c66f7d52390de30e1f67b0f07 100644
--- a/db/evtTst.db
+++ b/db/evtTst.db
@@ -1,21 +1,56 @@
 
 record(stringin, "$(P)$(Evt)Tst-I") {
   field(DESC, "Event $(CODE) timestamp raw")
+  field(PHAS, "2")
   field(DTYP, "Soft Timestamp")
   field(SCAN, "Passive")
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME CPP MS")
   field(INP,  "@%s.%f")
+  info(Q:group, {
+    "$(P)$(Evt)-Tag":{
+      "Evt.Tst":{+type:"plain", +channel:"VAL"}
+    }
+  })
 }
 
 record(stringin, "$(P)$(Evt)TstTime-I") {
   field(DESC, "Event $(CODE) timestamp time")
+  field(PHAS, "2")
   field(DTYP, "Soft Timestamp")
   field(SCAN, "Passive")
   field(TSEL, "$(P)$(Evt)Cnt-I.TIME CPP MS")
   field(INP,  "@%Y-%m-%dT%H:%M:%S.%06f")
   info(Q:group, {
     "$(P)$(Evt)-Tag":{
-      "value.TstTime":{+type:"plain", +channel:"VAL"}
+      "Evt.TstTime":{+type:"plain", +channel:"VAL"}
+    }
+  })
+}
+
+record(stringin, "$(P)$(Evt)TstIdEnd-I") {
+  field(DESC, "Event $(CODE) timestamp raw")
+  #field(PHAS, "2")
+  field(DTYP, "Soft Timestamp")
+  field(SCAN, "Passive")
+  field(TSEL, "$(P)$(Evt)IdEnd-I.TIME CPP MS")
+  field(INP,  "@%s.%f")
+  info(Q:group, {
+    "$(P)$(Evt)-Tag":{
+      "Evt.TstIdEnd":{+type:"plain", +channel:"VAL",+trigger:"*"}
+    }
+  })
+}
+
+record(stringin, "$(P)$(Evt)TstTimeIdEnd-I") {
+  field(DESC, "Event $(CODE) timestamp - event end")
+  #field(PHAS, "2")
+  field(DTYP, "Soft Timestamp")
+  field(SCAN, "Passive")
+  field(TSEL, "$(P)$(Evt)IdEnd-I.TIME CPP MS")
+  field(INP,  "@%Y-%m-%dT%H:%M:%S.%06f")
+  info(Q:group, {
+    "$(P)$(Evt)-Tag":{
+      "Evt.TstTimeIdEnd":{+type:"plain", +channel:"VAL"}
     }
   })
 }
diff --git a/iocBoot/evrEss.cmd b/iocBoot/evrEss.cmd
index 196d955d0ec323fbf9a070a7d688b97850108777..b30c4ff5760dbbb6b0c44c8a47df020975c875ec 100644
--- a/iocBoot/evrEss.cmd
+++ b/iocBoot/evrEss.cmd
@@ -3,7 +3,7 @@
 # Generic EVR template
 # ====================
 
-require "mrfioc2"
+require "mrfioc2" "$(SwVer=)"
 require "essioc"
 
 # Config
diff --git a/iocsh/base/evgAsyn.iocsh b/iocsh/base/evgAsyn.iocsh
index 6ecfd840367c9e57edc84a64eacfac750bff5649..318d5b3f75563e645de53065e96bde6099c07826 100644
--- a/iocsh/base/evgAsyn.iocsh
+++ b/iocsh/base/evgAsyn.iocsh
@@ -1,6 +1,8 @@
 # Trigger embedded EVR U with the post-mortem upstream input event
 afterInit "dbpf" "$(P)U-DlyGen-0-Evt-Trig0-SP" "$(EvtPMortemSys=41)"
 afterInit "dbpf" "$(P)U-DlyGen-0-Width-SP" "1"
+# TODO: [temp] Assure width with the direct write
+# afterInit "pciwrite" "32 0x3020C 0x00000058"
 afterInit "dbpf" "$(P)U-Out-FP0-Src-Pulse-SP" "Pulser 0"
 # Broadcast the post-mortemevent
 afterInit "dbpf" "$(P)TrigEvt-2-EvtCode-SP" "$(EvtPMortem=40)"
@@ -9,6 +11,8 @@ afterInit "dbpf" "$(P)TrigEvt-2-TrigSrc-Cont-Sel" "Univ8"
 # Trigger embedded EVR U with the data-on-demand upstream input event
 afterInit "dbpf" "$(P)U-DlyGen-1-Evt-Trig0-SP" "$(EvtDoDSys=43)"
 afterInit "dbpf" "$(P)U-DlyGen-1-Width-SP" "1"
+# TODO: [temp] Assure width with the direct write
+# afterinit "pciwrite" "32 0x3021C 0x00000058"
 afterInit "dbpf" "$(P)U-Out-FP1-Src-Pulse-SP" "Pulser 1"
 # Broadcast the data-on-demand event
 afterInit "dbpf" "$(P)TrigEvt-3-EvtCode-SP" "$(EvtDoD=42)"
diff --git a/iocsh/base/evgSeq.iocsh b/iocsh/base/evgSeq.iocsh
index aedb16872150b2bea7189fe0f02572631e51b03a..b50c767d9a56f473dac517bca4833dc538ab26b9 100644
--- a/iocsh/base/evgSeq.iocsh
+++ b/iocsh/base/evgSeq.iocsh
@@ -27,6 +27,8 @@ afterInit "dbpf" "$(P)TrigEvt-0-TrigSrc-Sel" "Mxc0"
 
 # Start the Sequencer0
 afterInit "system" "caput -a $(P)SoftSeq-0-Timestamp-SP 1 1"
+# TODO: This does not work.
+#afterInit "dbpf" "$(P)SoftSeq-0-Timestamp-SP" "1"
 afterInit "system" "caput -a $(P)SoftSeq-0-EvtCode-SP 1 127"
 # TODO: Generates warning: afterInit "dbpf" "$(P)SoftSeq-0-Timestamp-SP" "1"
 afterInit "epicsThreadSleep" "1"
diff --git a/iocsh/devel/evrBPInSniff.r.iocsh b/iocsh/devel/evrBPInSniff.r.iocsh
index 00c9bc486e55bac110fdf790ce62a5d724862de8..5f22c9a1a18aa3afd355b79df947ab2b34ad735b 100644
--- a/iocsh/devel/evrBPInSniff.r.iocsh
+++ b/iocsh/devel/evrBPInSniff.r.iocsh
@@ -1,48 +1,59 @@
 
-dbpf "$(P=$(PEVR)$(S=:))Out-Back0-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back1-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back2-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back3-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back4-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back5-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back6-Src-Scale-SP" "Tri-state"
-dbpf "$(P=$(PEVR)$(S=:))Out-Back7-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back0-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back1-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back2-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back3-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back4-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back5-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back6-Src-Scale-SP" "Tri-state"
+dbpf "$(P)Out-Back7-Src-Scale-SP" "Tri-state"
 
-dbpf "$(P=$(PEVR)$(S=:))BPIn-0-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-1-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-2-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-3-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-4-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-5-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-6-Trig-Ext-Sel" "Edge"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-7-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-0-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-1-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-2-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-3-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-4-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-5-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-6-Trig-Ext-Sel" "Edge"
+dbpf "$(P)BPIn-7-Trig-Ext-Sel" "Edge"
+
+# Disable backward events
+# TODO: To lock access to those PVs
+dbpf "$(P)BPIn-0-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-1-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-2-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-3-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-4-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-5-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-6-Trig-Back-Sel" "Off"
+dbpf "$(P)BPIn-7-Trig-Back-Sel" "Off"
 
 # Local EVR events
-dbpf "$(P=$(PEVR)$(S=:))BPIn-0-Code-Ext-SP" "130"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-1-Code-Ext-SP" "131"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-2-Code-Ext-SP" "132"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-3-Code-Ext-SP" "133"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-4-Code-Ext-SP" "134"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-5-Code-Ext-SP" "135"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-6-Code-Ext-SP" "136"
-dbpf "$(P=$(PEVR)$(S=:))BPIn-7-Code-Ext-SP" "137"
+dbpf "$(P)BPIn-0-Code-Ext-SP" "130"
+dbpf "$(P)BPIn-1-Code-Ext-SP" "131"
+dbpf "$(P)BPIn-2-Code-Ext-SP" "132"
+dbpf "$(P)BPIn-3-Code-Ext-SP" "133"
+dbpf "$(P)BPIn-4-Code-Ext-SP" "134"
+dbpf "$(P)BPIn-5-Code-Ext-SP" "135"
+dbpf "$(P)BPIn-6-Code-Ext-SP" "136"
+dbpf "$(P)BPIn-7-Code-Ext-SP" "137"
 
 # Reset counters
-dbpf "$(P=$(PEVR)$(S=:))EvtACnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtBCnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtCCnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtDCnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtECnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtFCnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtGCnt-I" "0"
-dbpf "$(P=$(PEVR)$(S=:))EvtHCnt-I" "0"
+dbpf "$(P)EvtACnt-I" "0"
+dbpf "$(P)EvtBCnt-I" "0"
+dbpf "$(P)EvtCCnt-I" "0"
+dbpf "$(P)EvtDCnt-I" "0"
+dbpf "$(P)EvtECnt-I" "0"
+dbpf "$(P)EvtFCnt-I" "0"
+dbpf "$(P)EvtGCnt-I" "0"
+dbpf "$(P)EvtHCnt-I" "0"
 
 # Backplane sniffer
-dbpf "$(P=$(PEVR)$(S=:))EvtA-SP.OUT" "@OBJ=$(DEV=EVR),Code=130"
-dbpf "$(P=$(PEVR)$(S=:))EvtB-SP.OUT" "@OBJ=$(DEV=EVR),Code=131"
-dbpf "$(P=$(PEVR)$(S=:))EvtC-SP.OUT" "@OBJ=$(DEV=EVR),Code=132"
-dbpf "$(P=$(PEVR)$(S=:))EvtD-SP.OUT" "@OBJ=$(DEV=EVR),Code=133"
-dbpf "$(P=$(PEVR)$(S=:))EvtE-SP.OUT" "@OBJ=$(DEV=EVR),Code=134"
-dbpf "$(P=$(PEVR)$(S=:))EvtF-SP.OUT" "@OBJ=$(DEV=EVR),Code=135"
-dbpf "$(P=$(PEVR)$(S=:))EvtG-SP.OUT" "@OBJ=$(DEV=EVR),Code=136"
-dbpf "$(P=$(PEVR)$(S=:))EvtH-SP.OUT" "@OBJ=$(DEV=EVR),Code=137"
+dbpf "$(P)EvtA-SP.OUT" "@OBJ=$(DEV=EVR),Code=130"
+dbpf "$(P)EvtB-SP.OUT" "@OBJ=$(DEV=EVR),Code=131"
+dbpf "$(P)EvtC-SP.OUT" "@OBJ=$(DEV=EVR),Code=132"
+dbpf "$(P)EvtD-SP.OUT" "@OBJ=$(DEV=EVR),Code=133"
+dbpf "$(P)EvtE-SP.OUT" "@OBJ=$(DEV=EVR),Code=134"
+dbpf "$(P)EvtF-SP.OUT" "@OBJ=$(DEV=EVR),Code=135"
+dbpf "$(P)EvtG-SP.OUT" "@OBJ=$(DEV=EVR),Code=136"
+dbpf "$(P)EvtH-SP.OUT" "@OBJ=$(DEV=EVR),Code=137"
diff --git a/iocsh/devel/seq0Ess.r.iocsh b/iocsh/devel/seq0Ess.r.iocsh
index 3bc739eed45f93cb5d2522c500c016dec5041721..9c75eae31376f67bbfa2de4c75b0905569a3ce0c 100644
--- a/iocsh/devel/seq0Ess.r.iocsh
+++ b/iocsh/devel/seq0Ess.r.iocsh
@@ -5,32 +5,32 @@ afterInit "epicsThreadSleep" "5"
 epicsEnvSet "EvtSeqEss" "15 $(EvtF14Hz) $(EvtIonMagSt) $(EvtIonMagEnd) $(EvtLebtCpOff) $(EvtLebtCpOn) $(EvtMebtCpHead) $(EvtMebtCpTail) $(EvtBPulseSt) $(EvtBPulseEnd) $(EvtRfSt) $(EvtBiAcqSt) $(EvtBiAcqEnd) $(EvtDBufSent) $(EvtHBeat) $(EvtSeqEnd)"
 epicsEnvSet "TimestampSeqEss" "15 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 71428"
 
-dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-Disable-Cmd" "1"
+dbpf "$(P)SoftSeq-0-Disable-Cmd" "1"
 
 # Set up the evr prescalers that will trigger the sequencer at 14Hz and 1Hz ###
-$(EVR_DIS=)dbpf "$(P=$(PEVR)$(S=:))PS-0-Div-SP" "$(Mxc14Hz=6289464)"
-$(EVR_DIS=)dbpf "$(P=$(PEVR)$(S=:))PS-1-Div-SP" "$(Mxc1Hz=88052496)"
+$(EVR_DIS=)dbpf "$(P)PS-0-Div-SP" "$(Mxc14Hz=6289464)"
+$(EVR_DIS=)dbpf "$(P)PS-1-Div-SP" "$(Mxc1Hz=88052496)"
 # Set up the sequencer
 ## EVR: Set the trigger of the sequencer as Prescaler 0 for 14Hz and Prescaler 1 for 1Hz
 ## EVG: Set Mxc0 for 14Hz or Mxc7 for 1Hz
-$(SEL14=)$(EVR_DIS=)dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-TrigSrc-2-Sel" "Prescaler 0"
-$(SEL1="#")$(EVR_DIS=)dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-TrigSrc-2-Sel" "Prescaler 1"
-$(SEL14=)dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-TrigSrc-Sel" "Mxc0"
-$(SEL1="#")dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-TrigSrc-Sel" "Mxc7"
+$(SEL14=)$(EVR_DIS=)dbpf "$(P)SoftSeq-0-TrigSrc-2-Sel" "Prescaler 0"
+$(SEL1="#")$(EVR_DIS=)dbpf "$(P)SoftSeq-0-TrigSrc-2-Sel" "Prescaler 1"
+$(SEL14=)dbpf "$(P)SoftSeq-0-TrigSrc-Sel" "Mxc0"
+$(SEL1="#")dbpf "$(P)SoftSeq-0-TrigSrc-Sel" "Mxc7"
 
 # Set the engineering units (microseconds)
-dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-TsResolution-Sel" "uSec"
+dbpf "$(P)SoftSeq-0-TsResolution-Sel" "uSec"
 # Set the runmode to normal, so that the sequencer re-arms after it finishes running
-dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-RunMode-Sel" "Normal"
+dbpf "$(P)SoftSeq-0-RunMode-Sel" "Normal"
 
 # Event code 14 (14 Hz), 127 is the end of sequence
-system "caput -a $(P=$(PEVR)$(S=:))SoftSeq-0-EvtCode-SP $(EvtSeqEss)"
+system "caput -a $(P)SoftSeq-0-EvtCode-SP $(EvtSeqEss)"
 # Defining time at which the event codes are sent in us (timestamps)
-system "caput -a $(P=$(PEVR)$(S=:))SoftSeq-0-Timestamp-SP $(TimestampSeqEss)"
+system "caput -a $(P)SoftSeq-0-Timestamp-SP $(TimestampSeqEss)"
 
 # Attach the soft sequence to a specific hardware sequence
-dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-Load-Cmd" "1"
+dbpf "$(P)SoftSeq-0-Load-Cmd" "1"
 # Commit the sequence to HW
-dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-Commit-Cmd" "1"
+dbpf "$(P)SoftSeq-0-Commit-Cmd" "1"
 # Enable the sequencer
-dbpf "$(P=$(PEVR)$(S=:))SoftSeq-0-Enable-Cmd" "1"
+dbpf "$(P)SoftSeq-0-Enable-Cmd" "1"
diff --git a/iocsh/envEss.iocsh b/iocsh/envEss.iocsh
index e5efbd96d6eb0b9560a5318e46e370acc99ea944..4618b392e9427dfac5c6e19dc6206e65c548cf3a 100644
--- a/iocsh/envEss.iocsh
+++ b/iocsh/envEss.iocsh
@@ -71,8 +71,9 @@ epicsEnvSet EvtCode43 43
 epicsEnvSet EvtDoDSys $(EvtCode43)
 
 # [Special purpose events]
-epicsEnvSet EvtName80 EvtF14Hz
-epicsEnvSet EvtCode80 14 # exists by default
+# EvtF14Hz defined directly inside: evtPkg.iocsh
+# epicsEnvSet EvtName80 EvtF14Hz
+# epicsEnvSet EvtCode80 14 # exists by default
 epicsEnvSet EvtF14Hz $(EvtCode80)
 epicsEnvSet EvtName81 EvtDBufSent
 epicsEnvSet EvtCode81 17 # exists by default
diff --git a/iocsh/pkg/evrEvt.iocsh b/iocsh/pkg/evrEvt.iocsh
index 09596d8735a00d6fcdbd144baa646eaeb2e88c1a..f84e527b7aabde612060b475abc492eb10ca63f3 100644
--- a/iocsh/pkg/evrEvt.iocsh
+++ b/iocsh/pkg/evrEvt.iocsh
@@ -1,4 +1,4 @@
 
 $(EvtEnable=)dbLoadRecords "$(mrfioc2_DB)/evt.db" "P=$(P),Evt=$(Evt),CODE=$(CODE=)"
-dbLoadRecords "$(mrfioc2_DB)/evtPkg.db"           "P=$(P),Evt=$(Evt),CODE=$(CODE=)"
+dbLoadRecords "$(mrfioc2_DB)/evtPkg.db"           "P=$(P),Evt=$(Evt),CODE=$(CODE=),EvtId=$(EvtId=EvtF14HzId-I)"
 dbLoadRecords "$(mrfioc2_DB)/evtTstPkg.db"        "P=$(P),Evt=$(Evt),CODE=$(CODE=)"
diff --git a/iocsh/pkg/evtPkg.iocsh b/iocsh/pkg/evtPkg.iocsh
index a0ce0e6b44962f8ddaf6bee48d7714846bafb128..7113afd57e5362ef03a9fe0ff91f0caebe8a9d65 100644
--- a/iocsh/pkg/evtPkg.iocsh
+++ b/iocsh/pkg/evtPkg.iocsh
@@ -27,7 +27,8 @@ iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName43=EvtNull)
 #iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName47=EvtNull),CODE=$(EvtCode47=255)"
 
 # Special purpose events
-iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName80=EvtNull),CODE=$(EvtCode80=255)"
+# EvtF14Hz is a cycle start reference
+iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName80=EvtF14Hz),CODE=$(EvtCode80=14),EvtId=DbufCycleId-I"
 iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName81=EvtNull),CODE=$(EvtCode81=255)"
 iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName82=EvtNull),CODE=$(EvtCode82=255)"
 iocshLoad "$(Path=$(mrfioc2_DIR)/evrEvt.iocsh)" "P=$(P),Evt=$(EvtName83=EvtNull),CODE=$(EvtCode83=255)"
diff --git a/mrfioc2.Makefile b/mrfioc2.Makefile
index 3e109b36639c35dcc68f3b32ae6e5d2dfc31a703..fd8a085e69a92f4b3712c91efd2b9dcbdaff9951 100644
--- a/mrfioc2.Makefile
+++ b/mrfioc2.Makefile
@@ -26,7 +26,7 @@ include ${E3_REQUIRE_TOOLS}/driver.makefile
 include $(E3_REQUIRE_CONFIG)/DECOUPLE_FLAGS
 
 ifneq ($(strip $(DEVLIB2_DEP_VERSION)),)
-devlib2_VERSION=$(DEVLIB2_DEP_VERSION)
+	devlib2_VERSION:=$(DEVLIB2_DEP_VERSION)
 endif
 
 # Exclude architerctures that are not in use
@@ -218,6 +218,7 @@ HEADERS += $(MRFCOMMON)/plx9030.h
 HEADERS += $(MRFCOMMON)/plx9056.h
 HEADERS += $(MRFCOMMON)/latticeEC30.h
 
+HEADERS += $(MRFCOMMON)/mrf/version.h
 
 DBDS    += $(MRFCOMMON)/mrfCommon.dbd
 
@@ -249,26 +250,13 @@ SOURCES += $(MRFCOMMON)/pollirq.cpp
 
 SOURCES += $(MRFCOMMON)/flashiocsh.cpp
 
+# E3MOD_ROOT:=$(where_am_I)/..
+E3MOD_ROOT:=../
 
-
-HEADERS += $(MRFCOMMON)/mrf/version.h
-
-# This is a bit of a hack, since this is set in ${CONFIG}/CONFIG_COMMON which isn't loaded by the time we build the `prebuild` target.
-ifeq ($(strip $(PERL)),)
-PERL = perl -CSD
-endif
-
-prebuild: version_header_file
-
-.PHONY: version_header_file
-version_header_file: 
-	$(PERL) -I$(EPICS_BASE)/lib/perl $(where_am_I)/$(MRFCOMMON)/genVersionHeader.pl -t "" -V $(E3_MODULE_VERSION) -N MRF_VERSION $(where_am_I)/$(MRFCOMMON)/mrf/version.h
-
-
-SCRIPTS += $(wildcard ../iocsh/*.*sh)
-SCRIPTS += $(wildcard ../iocsh/*/*.*sh)
-SCRIPTS += $(wildcard ../iocBoot/*.cmd)
-SCRIPTS += $(wildcard ../bin/*.bash)
+SCRIPTS += $(wildcard $(E3MOD_ROOT)/iocsh/*.*sh)
+SCRIPTS += $(wildcard $(E3MOD_ROOT)/iocsh/*/*.*sh)
+SCRIPTS += $(wildcard $(E3MOD_ROOT)/iocBoot/*.cmd)
+SCRIPTS += $(wildcard $(E3MOD_ROOT)/bin/*.bash)
 
 TEMPLATES += $(wildcard $(MRMSHAREDDB)/*.db)
 TEMPLATES += $(wildcard $(EVRAPPDB)/*.db)
@@ -281,10 +269,10 @@ TEMPLATES += $(wildcard $(EVGMRMAPPDB)/*.template)
 TEMPLATES += $(wildcard $(EVRMRMAPPDB)/*.template)
 
 #TODO: Check TEMPLATES += $(wildcard ../template/evr*.substitutions)
-TEMPLATES += $(wildcard ../template/*.template)
-TEMPLATES += $(wildcard ../db/*.db)
-TEMPLATES += $(wildcard ../template/*.db)
-TEMPLATES += $(wildcard ../template/*/*.db)
+TEMPLATES += $(wildcard $(E3MOD_ROOT)/template/*.template)
+TEMPLATES += $(wildcard $(E3MOD_ROOT)/db/*.db)
+TEMPLATES += $(wildcard $(E3MOD_ROOT)/template/*.db)
+TEMPLATES += $(wildcard $(E3MOD_ROOT)/template/*/*.db)
 
 USR_DBFLAGS += -I . -I ..
 USR_DBFLAGS += -I $(EPICS_BASE)/db
@@ -292,43 +280,37 @@ USR_DBFLAGS += -I $(MRMSHAREDDB)
 USR_DBFLAGS += -I $(EVGMRMAPPDB)
 USR_DBFLAGS += -I $(EVRMRMAPPDB)
 USR_DBFLAGS += -I $(EVRAPPDB)
-USR_DBFLAGS += -I $(where_am_I)/../template
-USR_DBFLAGS += -I $(where_am_I)/../db
-USR_DBFLAGS += -I $(where_am_I)/../template/dbuf
-USR_DBFLAGS += -I $(where_am_I)/../template/evt
-USR_DBFLAGS += -I $(where_am_I)/../template/sts
 
-EVG_SUBS = $(wildcard $(EVGMRMAPPDB)/*.substitutions)
-EVG_TMPS = $(wildcard $(EVGMRMAPPDB)/*.template)
-EVR_SUBS = $(wildcard $(EVRMRMAPPDB)/*.substitutions)
+USR_DBFLAGS += -I $(E3MOD_ROOT)/template
+USR_DBFLAGS += -I $(E3MOD_ROOT)/db
+USR_DBFLAGS += -I $(E3MOD_ROOT)/template/dbuf
+USR_DBFLAGS += -I $(E3MOD_ROOT)/template/evt
+USR_DBFLAGS += -I $(E3MOD_ROOT)/template/sts
+
+EVG_SUBS := $(wildcard $(EVGMRMAPPDB)/*.substitutions)
+EVG_TMPS := $(wildcard $(EVGMRMAPPDB)/*.template)
+EVR_SUBS := $(wildcard $(EVRMRMAPPDB)/*.substitutions)
+
+ESS_SUBS := $(wildcard $(E3MOD_ROOT)/template/*.substitutions)
+ESS_SUBS += $(wildcard $(E3MOD_ROOT)/template/*/*.substitutions)
+
+PATCH_FILES := $(wildcard $(E3MOD_ROOT)/patch/*.patch)
 
-ESS_SUBS = $(wildcard ../template/*.substitutions)
-ESS_SUBS += $(wildcard ../template/*/*.substitutions)
+UNIV_SUBS := $(EVGMRMAPPDB)/mtca-evm-300-univ.db
+UNIV_SUBS += $(EVGMRMAPPDB)/cpci-evg-300-univ.db
+UNIV_SUBS += $(EVRMRMAPPDB)/evr-mtca-300-univ.db
+UNIV_SUBS += $(EVRMRMAPPDB)/evr-pcie-300dc-univ.db
+UNIV_SUBS += $(E3MOD_ROOT)/template/community/evrIoMtca-univ.db
 
 .PHONY: db
 db:
 
 .PHONY: prebuild
-prebuild: patch_always $(EVG_SUBS) $(EVR_SUBS) $(EVG_TMPS) $(ESS_SUBS) db_fix_pv_naming_convention
-
-.PHONY: $(EVG_SUBS) $(EVR_SUBS) $(ESS_SUBS)
-$(EVG_SUBS) $(EVR_SUBS) $(ESS_SUBS):
-	@printf "Inflating database ... %48s >>> %40s \n" "$@" "$(basename $(@)).db"
-	@rm -f  $(basename $(@)).db.d  $(basename $(@)).db
-	@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db -S $@  > $(basename $(@)).db.d
-	@$(MSI)    $(USR_DBFLAGS) -o $(basename $(@)).db -S $@
-
-.PHONY: $(EVG_TMPS)
-$(EVG_TMPS):
-	@printf "Inflating database ... %48s >>> %40s \n" "$@" "$(basename $(@)).db"
-	@rm -f  $(basename $(@)).db.d  $(basename $(@)).db
-	@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db $@  > $(basename $(@)).db.d
-	@$(MSI)    $(USR_DBFLAGS) -o $(basename $(@)).db $@
+prebuild: version_header_file $(PATCH_FILES) $(EVG_SUBS) $(EVR_SUBS) $(ESS_SUBS) $(EVG_TMPS) $(UNIV_SUBS)
 
 #
 .PHONY: vlibs
 vlibs:
 #
 
-# User addon
-include $(where_am_I)/../addon.Makefile
+-include $(where_am_I)/../addon.Makefile
diff --git a/template/dbuf/dbufEnum.template b/template/dbuf/dbufEnum.template
index 7c3a99b4e5843a23fa0cc74dc92dcd6e5c58b1b9..c2bbe10254dcab242ec4e4287daf1084a3f89a7c 100644
--- a/template/dbuf/dbufEnum.template
+++ b/template/dbuf/dbufEnum.template
@@ -21,6 +21,12 @@ record(mbbi, "$(P)$(GR)BStateName-I") {
   field(FTSV, "INVALID")
   field(FFSV, "INVALID")
   field(UNSV, "INVALID")
+
+  info(Q:group, {
+    "$(P)$(GR)-Tag":{
+      "Dbuf.BStateName":{+type:"plain", +channel:"VAL"}
+    }
+  })
 }
 
 record(mbbi, "$(P)$(GR)BPresentName-I") {
@@ -45,6 +51,12 @@ record(mbbi, "$(P)$(GR)BPresentName-I") {
   field(FTSV, "INVALID")
   field(FFSV, "INVALID")
   field(UNSV, "INVALID")
+
+  info(Q:group, {
+    "$(P)$(GR)-Tag":{
+      "Dbuf.BPresentName":{+type:"plain", +channel:"VAL"}
+    }
+  })
 }
 
 record(mbbi, "$(P)$(GR)BDestName-I") {
@@ -74,6 +86,12 @@ record(mbbi, "$(P)$(GR)BDestName-I") {
   field(FTSV, "INVALID")
   field(FFSV, "INVALID")
   field(UNSV, "INVALID")
+
+  info(Q:group, {
+    "$(P)$(GR)-Tag":{
+      "Dbuf.BDestName":{+type:"plain", +channel:"VAL"}
+    }
+  })
 }
 
 record(mbbi, "$(P)$(GR)BModName-I") {
@@ -107,4 +125,10 @@ record(mbbi, "$(P)$(GR)BModName-I") {
   field(FTSV, "INVALID")
   field(FFSV, "INVALID")
   field(UNSV, "INVALID")
+
+  info(Q:group, {
+    "$(P)$(GR)-Tag":{
+      "Dbuf.BModName":{+type:"plain", +channel:"VAL"}
+    }
+  })
 }
diff --git a/template/dbuf/meta.template b/template/dbuf/meta.template
index 73072ad8b0afc537733270217e3c8b661e094ee3..3b99b85e1f959ff32f355b613c702d9ab37bc605 100644
--- a/template/dbuf/meta.template
+++ b/template/dbuf/meta.template
@@ -3,9 +3,38 @@ record("*", "$(P)$(GR)$(PV)-I")
   field(PHAS, "2")
   info(Q:group, {
     "$(P)$(GR)-Tag":{
-      #"":{+type:"meta",+channel:"VAL"},
-      "timeStamp.userTag":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"},
-      "value.$(PV)":{+type:"plain",+channel:"VAL"}
+      "Dbuf":{+type:"meta",+channel:"TIME"},
+      "Dbuf.timeStamp.userTag":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"},
+      "Dbuf.$(PV)":{+type:"plain",+channel:"VAL",+trigger:""}
     }
   })
 }
+
+# TODO: To make the databuffer following the event structure but inside
+# record(stringin, "$(P)DbufTst-I")
+# {
+#   field(DESC, "Data buffer timestamp raw")
+#   field(DTYP, "Soft Timestamp")
+#   field(SCAN, "Passive")
+#   field(TSEL, "$(P)$(GR)$(PV)-I.TIME CPP MS")
+#   field(INP,  "@%s.%f")
+#   info(Q:group, {
+#     "$(P)$(GR)-Tag":{
+#       "Dbuf.Tst":{+type:"plain", +channel:"VAL"}
+#     }
+#   })
+# }
+
+# record(stringin, "$(P)$(Evt)DbufTstTime-I")
+# {
+#   field(DESC, "Data buffer timestamp time")
+#   field(DTYP, "Soft Timestamp")
+#   field(SCAN, "Passive")
+#   field(TSEL, "$(P)$(GR)$(PV)-I.TIME CPP MS")
+#   field(INP,  "@%Y-%m-%dT%H:%M:%S.%06f")
+#   info(Q:group, {
+#     "$(P)$(GR)-Tag":{
+#       "Dbuf.TstTime":{+type:"plain", +channel:"VAL"}
+#     }
+#   })
+# }
diff --git a/template/dbuf/subArrInt32.template b/template/dbuf/subArrInt32.template
index 8b264fe21801d46784207d5fd792f47747573314..4a8bf3d3eaaff9f657e62a1467774f081e6b4990 100644
--- a/template/dbuf/subArrInt32.template
+++ b/template/dbuf/subArrInt32.template
@@ -6,5 +6,5 @@ record(longin, "$(P)$(GR)$(PV)-I") {
   field(INP, "$(P)$(GR)Idx$(INDEX)-subA_ CPP")
   field(EGU, "$(EGU=)")
 
-  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"value.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
+  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"Dbuf.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
 }
diff --git a/template/dbuf/subArrInt64.template b/template/dbuf/subArrInt64.template
index 99e8290933b388e564d382095af56705eca4b0e6..782ab855f3ce549f1633add0f869f772cd0d55c6 100644
--- a/template/dbuf/subArrInt64.template
+++ b/template/dbuf/subArrInt64.template
@@ -13,5 +13,5 @@ record(int64in, "$(P)$(GR)$(PV)-I") {
   field(INP, "$(P)$(GR)$(PV)-calc CPP MS")
   field(SCAN, "Passive")
 
-  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"value.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
+  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"Dbuf.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
 }
diff --git a/template/dbuf/subArrUint32.template b/template/dbuf/subArrUint32.template
index 63377494061ea57661d7b9c420844a622c8beed4..6542da2f5735447b704084e441e8847a5d569d82 100644
--- a/template/dbuf/subArrUint32.template
+++ b/template/dbuf/subArrUint32.template
@@ -8,5 +8,5 @@ record(waveform, "$(P)$(GR)$(PV)-I") {
   field(NELM, "1")
   field(FTVL, "ULONG")
 
-  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"value.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
+  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"Dbuf.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
 }
diff --git a/template/dbuf/subArrUint8.template b/template/dbuf/subArrUint8.template
index 6ae740b308ad03d304c92887fc75df45f3be3201..a096c7d30c16bdda2e7ab9900ee9873df67d7190 100644
--- a/template/dbuf/subArrUint8.template
+++ b/template/dbuf/subArrUint8.template
@@ -15,5 +15,5 @@ record(waveform, "$(P)$(GR)$(PV)-I") {
   field(NELM, "1")
   field(FTVL, "UCHAR")
 
-  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"value.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
+  $(INFO=)info(Q:group,{"$(P)$(GR)-Tag":{"Dbuf.$(PV)":{+type:"plain",+channel:"VAL",+trigger:"$(TR=)"}}})
 }
diff --git a/template/evt/evtPkg.substitutions b/template/evt/evtPkg.substitutions
index b7be878e4f8f292c5915384c8617d1bea4a016bf..e9633263b69d80f0c291ddf88ca6e25b5e2868f0 100644
--- a/template/evt/evtPkg.substitutions
+++ b/template/evt/evtPkg.substitutions
@@ -1,4 +1,4 @@
-global {P=$(P),Evt=\$(Evt),CODE=\$(CODE=)}
+global {P=$(P),Evt=\$(Evt),CODE=\$(CODE=),EvtId=\$(EvtId)}
 
 file "evtId.db"
 {pattern
diff --git a/test.Makefile b/test.Makefile
index 44d445f5b70e443e5a5724b5d7ffd83c7100a7e7..4e2b84cbb8397fedc7e004ecf818bf374ca8a743 100755
--- a/test.Makefile
+++ b/test.Makefile
@@ -1,51 +1,43 @@
-TOP:=$(CURDIR)
-PACKAGE_MANAGER:=command -v yum dnf apt
 
-include $(TOP)/configure/CONFIG
-include $(TOP)/configure/RULES
-where_am_I:=$(CURDIR)/$(EPICS_MODULE_NAME)
+define target_meta
+	@echo "============================================================================="
+	@echo $(lastword $(MAKEFILE_LIST))	"Building target: $@"
+	@echo "============================================================================="
+endef
 
-epics_auto:
-	$(info $$TOP is [${TOP}])
-	source ${EPICS_BASE}/require/${E3_REQUIRE_VERSION}/bin/setE3Env.bash
-
-build_full: epics_auto
-	make clean
-	make -f test.Makefile dbclean
-	make init
+.PHONY: mrfioc2_build
+mrfioc2_build: mrfioc2_clean
 	make build
+	$(target_meta)
 
-build_fast: epics_auto
-	make -f test.Makefile dbclean
-	make build
+.PHONY: mrfioc2_build_test
+mrfioc2_build_test: build
+	$(target_meta)
+
+.PHONY: mrfioc2_clean
+mrfioc2_clean: clean mrfioc2_dbclean init
+	$(target_meta)
 
-installation:
-	make uninstall
-	make install
+.PHONY: mrfioc2_build_fast
+mrfioc2_build_fast: mrfioc2_dbclean build
+	$(target_meta)
 
-full: build_full installation
+.PHONY: mrfioc2_install
+mrfioc2_install: uninstall install
+	$(target_meta)
 
-fast: build_fast installation
+.PHONY: mrfioc2_full
+mrfioc2_full: mrfioc2_build mrfioc2_install
+	$(target_meta)
 
-dbclean:
+.PHONY: mrfioc2_fast
+mrfioc2_fast: mrfioc2_build_fast mrfioc2_install
+	$(target_meta)
+
+.PHONY: mrfioc2_dbclean
+mrfioc2_dbclean:
+	$(target_meta)
 	rm template/*.db* || true
 	rm $(TOP)/mrfioc2/*_Common/* || true
 	rm $(TOP)/template/*.db template/*.db.d || true
 	rm $(TOP)/template/*/*.db template/*/*.db.d || true
-
-# make -f test.Makefile patch_always
-
-# main:
-# 	make uninstall
-# 	make init patch build
-# 	make install
-
-pragma:
-	python3 -m macropragma -v
-	python3 -m macropragma -c $(where_am_I)/../patch/conf.yaml -d $(where_am_I)/
-
-prepare:
-	sudo $(PACKAGE_MANAGER) install python3 python3-pip
-	python3 -m pip install --user macropragma==$(PIP_MACROPRAGMA_DEP_VERSION)
-
-include addon.Makefile