diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js
index a16f422..aaa1a91 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/030-select/30-selectOneRadio/Radio.test.js
@@ -22,7 +22,7 @@
   let number1Fn = querySelectorAllFn("#page\\:mainForm\\:selectNum1 input");
   let number2Fn = querySelectorAllFn("#page\\:mainForm\\:selectNum2 input");
   let submitAddFn = querySelectorFn("#page\\:mainForm\\:submitAdd");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput tobago-out");
 
   const test = new JasmineTestTool(done);
   test.do(() => number1Fn().item(0).checked = false);
@@ -40,7 +40,7 @@
   let number1Fn = querySelectorAllFn("#page\\:mainForm\\:selectNum1 input");
   let number2Fn = querySelectorAllFn("#page\\:mainForm\\:selectNum2 input");
   let submitSubFn = querySelectorFn("#page\\:mainForm\\:submitSub");
-  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput span");
+  let outputFn = querySelectorFn("#page\\:mainForm\\:resultOutput tobago-out");
 
   const test = new JasmineTestTool(done);
   test.do(() => number1Fn().item(0).checked = false);
@@ -57,7 +57,7 @@
   const earthFn = elementByIdFn("page:mainForm:selectPlanet::0");
   const marsFn = elementByIdFn("page:mainForm:selectPlanet::1");
   const jupiterFn = elementByIdFn("page:mainForm:selectPlanet::2");
-  const moonsFn = querySelectorAllFn("#page\\:mainForm\\:moonradio .custom-control-label");
+  const moonsFn = querySelectorAllFn("#page\\:mainForm\\:moonradio .form-check-label");
 
   const test = new JasmineTestTool(done);
   test.do(() => earthFn().checked = false);
@@ -73,7 +73,7 @@
   const earthFn = elementByIdFn("page:mainForm:selectPlanet::0");
   const marsFn = elementByIdFn("page:mainForm:selectPlanet::1");
   const jupiterFn = elementByIdFn("page:mainForm:selectPlanet::2");
-  const moonsFn = querySelectorAllFn("#page\\:mainForm\\:moonradio .custom-control-label");
+  const moonsFn = querySelectorAllFn("#page\\:mainForm\\:moonradio .form-check-label");
 
   const test = new JasmineTestTool(done);
   test.do(() => earthFn().checked = false);
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/10-sort/Sheet_Sorting.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/10-sort/Sheet_Sorting.test.js
index 7afdb69..921b36a 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/10-sort/Sheet_Sorting.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/080-sheet/10-sort/Sheet_Sorting.test.js
@@ -28,7 +28,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Earth",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Earth",
       () => {
         leftPagingFn().value = "22";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -69,7 +69,7 @@
       () => colPeriodFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colPeriodFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Rosalind",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Rosalind",
       () => {
         leftPagingFn().value = "29";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -110,7 +110,7 @@
       () => colYearFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colYearFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Amalthea",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Amalthea",
       () => {
         leftPagingFn().value = "22";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -119,17 +119,17 @@
   test.do(() => expect(colYearFn().classList.contains("tobago-sheet-header-markup-ascending")).toBe(true));
   test.do(() => expect(colYearFn().classList.contains("tobago-sheet-header-markup-descending")).not.toBe(true));
   test.event("click", colYearFn,
-      () => rowsFn() && rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent === "1999");
-  test.do(() => expect(rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent).toBe("1999"));
-  test.do(() => expect(rowsFn()[1].querySelectorAll(".tobago-out")[2].textContent).toBe("1999"));
-  test.do(() => expect(rowsFn()[2].querySelectorAll(".tobago-out")[2].textContent).toBe("1997"));
-  test.do(() => expect(rowsFn()[3].querySelectorAll(".tobago-out")[2].textContent).toBe("1997"));
+      () => rowsFn() && rowsFn()[0].querySelectorAll("tobago-out")[2].textContent === "1999");
+  test.do(() => expect(rowsFn()[0].querySelectorAll("tobago-out")[2].textContent).toBe("1999"));
+  test.do(() => expect(rowsFn()[1].querySelectorAll("tobago-out")[2].textContent).toBe("1999"));
+  test.do(() => expect(rowsFn()[2].querySelectorAll("tobago-out")[2].textContent).toBe("1997"));
+  test.do(() => expect(rowsFn()[3].querySelectorAll("tobago-out")[2].textContent).toBe("1997"));
   test.event("click", colYearFn,
-      () => rowsFn() && rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent === "1892");
-  test.do(() => expect(rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent).toBe("1892"));
-  test.do(() => expect(rowsFn()[1].querySelectorAll(".tobago-out")[2].textContent).toBe("1898"));
-  test.do(() => expect(rowsFn()[2].querySelectorAll(".tobago-out")[2].textContent).toBe("1904"));
-  test.do(() => expect(rowsFn()[3].querySelectorAll(".tobago-out")[2].textContent).toBe("1905"));
+      () => rowsFn() && rowsFn()[0].querySelectorAll("tobago-out")[2].textContent === "1892");
+  test.do(() => expect(rowsFn()[0].querySelectorAll("tobago-out")[2].textContent).toBe("1892"));
+  test.do(() => expect(rowsFn()[1].querySelectorAll("tobago-out")[2].textContent).toBe("1898"));
+  test.do(() => expect(rowsFn()[2].querySelectorAll("tobago-out")[2].textContent).toBe("1904"));
+  test.do(() => expect(rowsFn()[3].querySelectorAll("tobago-out")[2].textContent).toBe("1905"));
   test.start();
 });
 
@@ -147,7 +147,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "1986U10",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "1986U10",
       () => {
         leftPagingFn().value = "1";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -198,7 +198,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "1986U10",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "1986U10",
       () => {
         leftPagingFn().value = "1";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -261,7 +261,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Earth",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Earth",
       () => {
         leftPagingFn().value = "22";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -333,7 +333,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Earth",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Earth",
       () => {
         leftPagingFn().value = "22";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -374,7 +374,7 @@
       () => colPeriodFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colPeriodFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Mimas",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Mimas",
       () => {
         leftPagingFn().value = "29";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -415,7 +415,7 @@
       () => colYearFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colYearFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent === "1789",
+      () => rowsFn()[0].querySelectorAll("tobago-out")[2].textContent === "1789",
       () => {
         leftPagingFn().value = "22";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -424,17 +424,17 @@
   test.do(() => expect(colYearFn().classList.contains("tobago-sheet-header-markup-ascending")).toBe(true));
   test.do(() => expect(colYearFn().classList.contains("tobago-sheet-header-markup-descending")).not.toBe(true));
   test.event("click", colYearFn,
-      () => rowsFn() && rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent === "1989");
-  test.do(() => expect(rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent).toBe("1989"));
-  test.do(() => expect(rowsFn()[1].querySelectorAll(".tobago-out")[2].textContent).toBe("1989"));
-  test.do(() => expect(rowsFn()[2].querySelectorAll(".tobago-out")[2].textContent).toBe("1989"));
-  test.do(() => expect(rowsFn()[3].querySelectorAll(".tobago-out")[2].textContent).toBe("1986"));
+      () => rowsFn() && rowsFn()[0].querySelectorAll("tobago-out")[2].textContent === "1989");
+  test.do(() => expect(rowsFn()[0].querySelectorAll("tobago-out")[2].textContent).toBe("1989"));
+  test.do(() => expect(rowsFn()[1].querySelectorAll("tobago-out")[2].textContent).toBe("1989"));
+  test.do(() => expect(rowsFn()[2].querySelectorAll("tobago-out")[2].textContent).toBe("1989"));
+  test.do(() => expect(rowsFn()[3].querySelectorAll("tobago-out")[2].textContent).toBe("1986"));
   test.event("click", colYearFn,
-      () => rowsFn() && rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent === "1789");
-  test.do(() => expect(rowsFn()[0].querySelectorAll(".tobago-out")[2].textContent).toBe("1789"));
-  test.do(() => expect(rowsFn()[1].querySelectorAll(".tobago-out")[2].textContent).toBe("1846"));
-  test.do(() => expect(rowsFn()[2].querySelectorAll(".tobago-out")[2].textContent).toBe("1846"));
-  test.do(() => expect(rowsFn()[3].querySelectorAll(".tobago-out")[2].textContent).toBe("1848"));
+      () => rowsFn() && rowsFn()[0].querySelectorAll("tobago-out")[2].textContent === "1789");
+  test.do(() => expect(rowsFn()[0].querySelectorAll("tobago-out")[2].textContent).toBe("1789"));
+  test.do(() => expect(rowsFn()[1].querySelectorAll("tobago-out")[2].textContent).toBe("1846"));
+  test.do(() => expect(rowsFn()[2].querySelectorAll("tobago-out")[2].textContent).toBe("1846"));
+  test.do(() => expect(rowsFn()[3].querySelectorAll("tobago-out")[2].textContent).toBe("1848"));
   test.start();
 });
 
@@ -452,7 +452,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "1986U10",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "1986U10",
       () => {
         leftPagingFn().value = "1";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -503,7 +503,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "1986U10",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "1986U10",
       () => {
         leftPagingFn().value = "1";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
@@ -566,7 +566,7 @@
       () => colNameFn().classList.contains("tobago-sheet-header-markup-ascending"),
       () => colNameFn().dispatchEvent(new Event("click", {bubbles: true})));
   test.setup(
-      () => rowsFn()[0].querySelector(".tobago-out").textContent === "Earth",
+      () => rowsFn()[0].querySelector("tobago-out").textContent === "Earth",
       () => {
         leftPagingFn().value = "22";
         leftPagingFn().dispatchEvent(new Event("blur", {bubbles: true}));
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/04-listbox/Tree_Listbox.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/04-listbox/Tree_Listbox.test.js
index e507905..f318fbd 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/04-listbox/Tree_Listbox.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/20-component/090-tree/04-listbox/Tree_Listbox.test.js
@@ -21,7 +21,7 @@
 it("Select 2,2,0 and submit", function (done) {
   const hiddenInput = elementByIdFn("page:mainForm:listbox::selected");
   const submit = elementByIdFn("page:mainForm:submit");
-  const output = querySelectorFn("#page\\:mainForm\\:output span");
+  const output = querySelectorFn("#page\\:mainForm\\:output tobago-out");
   const node1 = elementByIdFn("page:mainForm:listbox:1:node");
   const node3 = elementByIdFn("page:mainForm:listbox:3:node"); // 2
   const node6 = elementByIdFn("page:mainForm:listbox:6:node"); // 2,2
@@ -90,7 +90,7 @@
 it("Select 3 and submit", function (done) {
   const hiddenInput = elementByIdFn("page:mainForm:listbox::selected");
   const submit = elementByIdFn("page:mainForm:submit");
-  const output = querySelectorFn("#page\\:mainForm\\:output span");
+  const output = querySelectorFn("#page\\:mainForm\\:output tobago-out");
   const node1 = elementByIdFn("page:mainForm:listbox:1:node");
   const node9 = elementByIdFn("page:mainForm:listbox:9:node"); // 3
 
@@ -127,7 +127,7 @@
 it("Select 4,2,1,1 and submit", function (done) {
   const hiddenInput = elementByIdFn("page:mainForm:listbox::selected");
   const submit = elementByIdFn("page:mainForm:submit");
-  const output = querySelectorFn("#page\\:mainForm\\:output span");
+  const output = querySelectorFn("#page\\:mainForm\\:output tobago-out");
   const node1 = elementByIdFn("page:mainForm:listbox:1:node");
   const node10 = elementByIdFn("page:mainForm:listbox:10:node"); // 4
   const node15 = elementByIdFn("page:mainForm:listbox:15:node"); // 4,2
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/06-validation/30-messages/Messages.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/06-validation/30-messages/Messages.test.js
index 613453d..603e24d 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/06-validation/30-messages/Messages.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/06-validation/30-messages/Messages.test.js
@@ -21,7 +21,7 @@
 it("Press '7 Messages' Button and close the first, the last and the fourth", function (done) {
   const tab = querySelectorFn("#page\\:mainForm\\:woAttr > .nav-link");
   const alerts = querySelectorAllFn("#page\\:mainForm\\:woAttr\\:woAttrMessage .alert");
-  const closeButtons = querySelectorAllFn("#page\\:mainForm\\:woAttr\\:woAttrMessage .alert .close");
+  const closeButtons = querySelectorAllFn("#page\\:mainForm\\:woAttr\\:woAttrMessage .alert .btn-close");
   const alertLabels = querySelectorAllFn("#page\\:mainForm\\:woAttr\\:woAttrMessage .alert label");
   const messagesButton = elementByIdFn("page:mainForm:add7messages");
 
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/10-required/Required.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/10-required/Required.test.js
index 6f80716..8843562 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/10-required/Required.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/10-required/Required.test.js
@@ -19,150 +19,210 @@
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
 
 it("submit inner form 1 without violations", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:in1\\:\\:field");
-  let form1SubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:submit1");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:out1 span");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:out1 tobago-out");
+  let form1SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:submit1");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Alice");
-  test.do(() => form1SubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Alice");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Alice"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe("Alice"));
+  test.setup(() => form1OutputFn().textContent !== "Alice",
+      () => {
+        form1InputFn().value = "Bob";
+        form1SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+      });
+  test.do(() => form1InputFn().value = "Alice");
+  test.event("click", form1SubmitFn, () => form1OutputFn().textContent === "Alice")
+  test.do(() => expect(form1InputFn().value).toBe("Alice"));
+  test.do(() => expect(form1OutputFn().textContent).toBe("Alice"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
 
 it("submit inner form 2, violate required field", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
-  let form2SubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:submit2");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 span");
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 tobago-out");
+  let form2SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:submit2");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
+  let form2OutputValue = form2OutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => form2SubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "");
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
+  test.setup(() => form2AlertFn() === null,
+      () => {
+        form2InputFn().value = "Bob";
+        form2SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form2OutputValue = "Bob";
+      });
+  test.do(() => form2InputFn().value = "");
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.event("click", form2SubmitFn, () => form2AlertFn() !== null)
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit inner form 2 without violations", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
-  let form2SubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:submit2");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 span");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 tobago-out");
+  let form2SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:submit2");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "Bob");
-  test.do(() => expect(form2InputFieldFn().value).toBe("Bob"));
-  test.do(() => form2SubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "Bob");
-  test.do(() => expect(form2InputFieldFn().value).toBe("Bob"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe("Bob"));
+  test.setup(() => form2OutputFn().textContent !== "Bob",
+      () => {
+        form2InputFn().value = "Charlie";
+        form2SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+      });
+  test.do(() => form2InputFn().value = "Bob");
+  test.event("click", form2SubmitFn, () => form2OutputFn().textContent === "Bob");
+  test.do(() => expect(form2InputFn().value).toBe("Bob"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe("Bob"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
 
 it("submit outer form, violate both required fields", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormSubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 span");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => outerFormInputFieldFn().value = "");
-  test.do(() => outerFormSubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "");
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe(""));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form2AlertFn() === null && outerFormAlertFn() === null,
+      () => {
+        form2InputFn().value = "Charlie";
+        outerFormInputFn().value = "Dave";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form2OutputValue = "Charlie";
+        outerFormOutputValue = "Dave"
+      });
+  test.do(() => form2InputFn().value = "");
+  test.do(() => outerFormInputFn().value = "");
+  test.event("click", outerFormSubmitFn, () => form2AlertFn() !== null && outerFormAlertFn() !== null);
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe(""));
+  test.do(() => expect(outerFormAlertFn()).not.toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(2));
   test.start();
 });
 
 it("submit outer form, violate required field in form 2", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormSubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 span");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 tobago-out");
+  let form2SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:submit2");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => outerFormInputFieldFn().value = "Charlie");
-  test.do(() => outerFormSubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "");
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe("Charlie"));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form2AlertFn() === null,
+      () => {
+        form2InputFn().value = "Dave";
+        form2SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form2OutputValue = "Dave";
+      });
+  test.do(() => form2InputFn().value = "");
+  test.do(() => outerFormInputFn().value = "Eve");
+  test.event("click", outerFormSubmitFn, () => form2AlertFn() !== null && outerFormAlertFn() === null);
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe("Eve"));
+  test.do(() => expect(outerFormAlertFn()).toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit outer form, violate required field in outer form", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormSubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 span");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "Dave");
-  test.do(() => outerFormInputFieldFn().value = "");
-  test.do(() => outerFormSubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "Dave");
-  test.do(() => expect(form2InputFieldFn().value).toBe("Dave"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe(""));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => outerFormAlertFn() === null,
+      () => {
+        form2InputFn().value = "Frank"
+        outerFormInputFn().value = "Eve";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}))
+        form2OutputValue = "Frank"
+        outerFormOutputValue = "Eve";
+      });
+  test.do(() => form2InputFn().value = "Frank");
+  test.do(() => outerFormInputFn().value = "");
+  test.event("click", outerFormSubmitFn, () => outerFormAlertFn() !== null);
+  test.do(() => expect(form2InputFn().value).toBe("Frank"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe(""));
+  test.do(() => expect(outerFormAlertFn()).not.toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit outer form without violations", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:in1\\:\\:field");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormSubmitButtonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:out1 span");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 span");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:innerForm2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Eve");
-  test.do(() => form2InputFieldFn().value = "Frank");
-  test.do(() => outerFormInputFieldFn().value = "Grace");
-  test.do(() => outerFormSubmitButtonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Eve");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Eve"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe("Eve"));
-  test.do(() => expect(form2InputFieldFn().value).toBe("Frank"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe("Frank"));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe("Grace"));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe("Grace"));
+  test.setup(() => form1OutputFn().textContent !== "Frank"
+      && form2OutputFn().textContent !== "Eve"
+      && outerFormOutputFn().textContent !== "Grace",
+      () => {
+        form1InputFn().value = "Alice";
+        form2InputFn().value = "Bob";
+        outerFormInputFn().value = "Charlie";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}))
+      });
+  test.do(() => form1InputFn().value = "Frank");
+  test.do(() => form2InputFn().value = "Eve");
+  test.do(() => outerFormInputFn().value = "Grace");
+  test.event("click", outerFormSubmitFn,
+      () => form1OutputFn().textContent === "Frank"
+          && form2OutputFn().textContent === "Eve"
+          && outerFormOutputFn().textContent === "Grace")
+  test.do(() => expect(form1InputFn().value).toBe("Frank"));
+  test.do(() => expect(form1OutputFn().textContent).toBe("Frank"));
+  test.do(() => expect(form2InputFn().value).toBe("Eve"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe("Eve"));
+  test.do(() => expect(outerFormInputFn().value).toBe("Grace"));
+  test.do(() => expect(outerFormAlertFn()).toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe("Grace"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.test.js b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.test.js
index 2f619b9..6851ce1 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.test.js
@@ -19,284 +19,402 @@
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
 
 it("submit inner form 1 without violations", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:submit1");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form1SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:submit1");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Alice");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Alice");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Alice"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe("Alice"));
+  test.setup(() => form1OutputFn().textContent !== "Alice",
+      () => {
+        form1InputFn().value = "Bob";
+        form1SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+      });
+  test.do(() => form1InputFn().value = "Alice");
+  test.event("click", form1SubmitFn, () => form1OutputFn().textContent === "Alice");
+  test.do(() => expect(form1InputFn().value).toBe("Alice"));
+  test.do(() => expect(form1OutputFn().textContent).toBe("Alice"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
 
 it("submit inner form 2, violate required field", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:submit2");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let form2SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:submit2");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "");
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
+  test.setup(() => form2AlertFn() === null,
+      () => {
+        form2InputFn().value = "Bob";
+        form2SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form2OutputValue = "Bob";
+      });
+  test.do(() => form2InputFn().value = "");
+  test.event("click", form2SubmitFn, () => form2AlertFn() !== null);
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit inner form 2 without violations", function (done) {
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:submit2");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let form2SubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:submit2");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
   let test = new JasmineTestTool(done);
-  test.do(() => form2InputFieldFn().value = "Bob");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form2InputFieldFn() && form2InputFieldFn().value === "Bob");
-  test.do(() => expect(form2InputFieldFn().value).toBe("Bob"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe("Bob"));
+  test.setup(() => form2OutputFn().textContent !== "Bob",
+      () => {
+        form2InputFn().value = "Alice";
+        form2SubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+      });
+  test.do(() => form2InputFn().value = "Bob");
+  test.event("click", form2SubmitFn, () => form2OutputFn().textContent === "Bob");
+  test.do(() => expect(form2InputFn().value).toBe("Bob"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe("Bob"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
 
 it("submit outer form, violate both required fields", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form1OutputFieldValue = form1OutputFieldFn().textContent;
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form1OutputValue = form1OutputFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Charlie");
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => outerFormInputFieldFn().value = "");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Charlie");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Charlie"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe(form1OutputFieldValue));
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe(""));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form1OutputFn().textContent !== "Dave"
+      && form2AlertFn() === null && outerFormAlertFn() === null,
+      () => {
+        form1InputFn().value = "Alice";
+        form2InputFn().value = "Bob";
+        outerFormInputFn().value = "Charlie";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form1OutputValue = "Alice"
+        form2OutputValue = "Bob";
+        outerFormOutputValue = "Charlie"
+      });
+  test.do(() => form1InputFn().value = "Dave");
+  test.do(() => form2InputFn().value = "");
+  test.do(() => outerFormInputFn().value = "");
+  test.event("click", outerFormSubmitFn, () => form2AlertFn() !== null && outerFormAlertFn() !== null);
+  test.do(() => expect(form1InputFn().value).toBe("Dave"));
+  test.do(() => expect(form1OutputFn().textContent).toBe(form1OutputValue));
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe(""));
+  test.do(() => expect(outerFormAlertFn()).not.toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(2));
   test.start();
 });
 
 it("submit outer form, violate required field in form 2", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form1OutputFieldValue = form1OutputFieldFn().textContent;
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form1OutputValue = form1OutputFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Dave");
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => outerFormInputFieldFn().value = "Eve");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Dave");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Dave"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe(form1OutputFieldValue));
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe("Eve"));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form1OutputFn().textContent !== "Charlie" && form2AlertFn() === null,
+      () => {
+        form1InputFn().value = "Alice";
+        form2InputFn().value = "Bob";
+        outerFormInputFn().value = "Charlie";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form1OutputValue = "Alice"
+        form2OutputValue = "Bob";
+        outerFormOutputValue = "Charlie"
+      });
+  test.do(() => form1InputFn().value = "Charlie");
+  test.do(() => form2InputFn().value = "");
+  test.do(() => outerFormInputFn().value = "Dave");
+  test.event("click", outerFormSubmitFn, () => form2AlertFn() !== null);
+  test.do(() => expect(form1InputFn().value).toBe("Charlie"));
+  test.do(() => expect(form1OutputFn().textContent).toBe(form1OutputValue));
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe("Dave"));
+  test.do(() => expect(outerFormAlertFn()).toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit outer form, violate required field in outer form", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form1OutputFieldValue = form1OutputFieldFn().textContent;
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form1OutputValue = form1OutputFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Frank");
-  test.do(() => form2InputFieldFn().value = "Grace");
-  test.do(() => outerFormInputFieldFn().value = "");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Frank");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Frank"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe(form1OutputFieldValue));
-  test.do(() => expect(form2InputFieldFn().value).toBe("Grace"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe(""));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => outerFormAlertFn() === null,
+      () => {
+        form1InputFn().value = "Dave"
+        form2InputFn().value = "Eve"
+        outerFormInputFn().value = "Frank";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}))
+        form1OutputValue = "Dave"
+        form2OutputValue = "Eve"
+        outerFormOutputValue = "Frank";
+      });
+  test.do(() => form1InputFn().value = "Eve");
+  test.do(() => form2InputFn().value = "Frank");
+  test.do(() => outerFormInputFn().value = "");
+  test.event("click", outerFormSubmitFn, () => outerFormAlertFn() !== null);
+  test.do(() => expect(form1InputFn().value).toBe("Eve"));
+  test.do(() => expect(form1OutputFn().textContent).toBe(form1OutputValue));
+  test.do(() => expect(form2InputFn().value).toBe("Frank"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe(""));
+  test.do(() => expect(outerFormAlertFn()).not.toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit outer form without violations", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Hank");
-  test.do(() => form2InputFieldFn().value = "Irene");
-  test.do(() => outerFormInputFieldFn().value = "John");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Hank");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Hank"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe("Hank"));
-  test.do(() => expect(form2InputFieldFn().value).toBe("Irene"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe("Irene"));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe("John"));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe("John"));
+  test.setup(() => form1OutputFn().textContent !== "Hank"
+      && form2OutputFn().textContent !== "Irene"
+      && outerFormOutputFn().textContent !== "John",
+      () => {
+        form1InputFn().value = "Eve";
+        form2InputFn().value = "Frank";
+        outerFormInputFn().value = "Grace";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}))
+      });
+  test.do(() => form1InputFn().value = "Hank");
+  test.do(() => form2InputFn().value = "Irene");
+  test.do(() => outerFormInputFn().value = "John");
+  test.event("click", outerFormSubmitFn, () => form1OutputFn().textContent === "Hank"
+      && form2OutputFn().textContent === "Irene" && outerFormOutputFn().textContent === "John");
+  test.do(() => expect(form1InputFn().value).toBe("Hank"));
+  test.do(() => expect(form1OutputFn().textContent).toBe("Hank"));
+  test.do(() => expect(form2InputFn().value).toBe("Irene"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe("Irene"));
+  test.do(() => expect(outerFormInputFn().value).toBe("John"));
+  test.do(() => expect(outerFormAlertFn()).toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe("John"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
 
 it("submit inner forms, violate required field in form 2", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitInnerForms");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let submitInnerForms = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitInnerForms");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
 
-  let form1OutputFieldValue = form1OutputFieldFn().textContent;
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form1OutputValue = form1OutputFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Kate");
-  test.do(() => form2InputFieldFn().value = "");
-  test.do(() => outerFormInputFieldFn().value = "Leonard");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Kate");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Kate"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe(form1OutputFieldValue));
-  test.do(() => expect(form2InputFieldFn().value).toBe(""));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe("Leonard"));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form1OutputFn().textContent !== "Kate" && form2AlertFn() === null,
+      () => {
+        form1InputFn().value = "Alice";
+        form2InputFn().value = "Bob";
+        outerFormInputFn().value = "Charlie"
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form1OutputValue = "Alice"
+        form2OutputValue = "Bob";
+        outerFormOutputValue = "Charlie";
+      });
+  test.do(() => form1InputFn().value = "Kate");
+  test.do(() => form2InputFn().value = "");
+  test.do(() => outerFormInputFn().value = "Leonard");
+  test.event("click", submitInnerForms, () => form2AlertFn() !== null);
+  test.do(() => expect(form1InputFn().value).toBe("Kate"));
+  test.do(() => expect(form1OutputFn().textContent).toBe(form1OutputValue));
+  test.do(() => expect(form2InputFn().value).toBe(""));
+  test.do(() => expect(form2AlertFn()).not.toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe("Leonard"));
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit inner forms without violations", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitInnerForms");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let submitInnerForms = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitInnerForms");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Mike");
-  test.do(() => form2InputFieldFn().value = "Neil");
-  test.do(() => outerFormInputFieldFn().value = "");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Mike");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Mike"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe("Mike"));
-  test.do(() => expect(form2InputFieldFn().value).toBe("Neil"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe("Neil"));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe(""));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form1OutputFn().textContent !== "Mike"
+      && form2OutputFn().textContent !== "Neil"
+      && outerFormAlertFn() === null,
+      () => {
+        form1InputFn().value = "Kate";
+        form2InputFn().value = "Mike";
+        outerFormInputFn().value = "Leonard";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        outerFormOutputValue = "Leonard";
+      });
+  test.do(() => form1InputFn().value = "Mike");
+  test.do(() => form2InputFn().value = "Neil");
+  test.do(() => outerFormInputFn().value = "");
+  test.event("click", submitInnerForms,
+      () => form1OutputFn().textContent === "Mike" && form2OutputFn().textContent === "Neil");
+  test.do(() => expect(form1InputFn().value).toBe("Mike"));
+  test.do(() => expect(form1OutputFn().textContent).toBe("Mike"));
+  test.do(() => expect(form2InputFn().value).toBe("Neil"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe("Neil"));
+  test.do(() => expect(outerFormInputFn().value).toBe(""));
+  test.do(() => expect(outerFormAlertFn()).toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
 
 it("submit outer value, violate required field", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitOuterValue");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let submitOuterValue = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitOuterValue");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form1OutputFieldValue = form1OutputFieldFn().textContent;
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
-  let outerFormOutputFieldValue = outerFormOutputFieldFn().textContent;
+  let form1OutputValue = form1OutputFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
+  let outerFormOutputValue = outerFormOutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Oscar");
-  test.do(() => form2InputFieldFn().value = "Penny");
-  test.do(() => outerFormInputFieldFn().value = "");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Oscar");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Oscar"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe(form1OutputFieldValue));
-  test.do(() => expect(form2InputFieldFn().value).toBe("Penny"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe(""));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe(outerFormOutputFieldValue));
+  test.setup(() => form2AlertFn() === null && outerFormAlertFn() === null,
+      () => {
+        form1InputFn().value = "Leonard";
+        form2InputFn().value = "Mike";
+        outerFormInputFn().value = "Neil";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form1OutputValue = "Leonard";
+        form2OutputValue = "Mike";
+        outerFormOutputValue = "Neil";
+      });
+  test.do(() => form1InputFn().value = "Oscar");
+  test.do(() => form2InputFn().value = "Penny");
+  test.do(() => outerFormInputFn().value = "");
+  test.event("click", submitOuterValue, () => outerFormAlertFn() !== null);
+  test.do(() => expect(form1InputFn().value).toBe("Oscar"));
+  test.do(() => expect(form1OutputFn().textContent).toBe(form1OutputValue));
+  test.do(() => expect(form2InputFn().value).toBe("Penny"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe(""));
+  test.do(() => expect(outerFormAlertFn()).not.toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe(outerFormOutputValue));
   test.do(() => expect(alertFn().length).toBe(1));
   test.start();
 });
 
 it("submit outer value without violations", function (done) {
-  let form1InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
-  let form1OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 span");
-  let form2InputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
-  let form2OutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 span");
-  let outerFormInputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
-  let outerFormOutputFieldFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out span");
-  let buttonFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitOuterValue");
+  let form1InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:in1\\:\\:field");
+  let form1OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form1\\:out1 tobago-out");
+  let form2InputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2\\:\\:field");
+  let form2AlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:in2 .tobago-messages-container");
+  let form2OutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:form2\\:out2 tobago-out");
+  let outerFormInputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in\\:\\:field");
+  let outerFormAlertFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:in .tobago-messages-container");
+  let outerFormOutputFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:out tobago-out");
+  let outerFormSubmitFn = querySelectorFn("#page\\:mainForm\\:outerForm\\:submit");
+  let submitOuterValue = querySelectorFn("#page\\:mainForm\\:outerForm\\:submitOuterValue");
   let alertFn = querySelectorAllFn("#page\\:messages .alert-danger label");
-
-  let form1OutputFieldValue = form1OutputFieldFn().textContent;
-  let form2OutputFieldValue = form2OutputFieldFn().textContent;
+  let form1OutputValue = form1OutputFn().textContent;
+  let form2OutputValue = form2OutputFn().textContent;
 
   let test = new JasmineTestTool(done);
-  test.do(() => form1InputFieldFn().value = "Quin");
-  test.do(() => form2InputFieldFn().value = "Sue");
-  test.do(() => outerFormInputFieldFn().value = "Ted");
-  test.do(() => buttonFn().dispatchEvent(new Event("click", {bubbles: true})));
-  test.wait(() => form1InputFieldFn() && form1InputFieldFn().value === "Quin");
-  test.do(() => expect(form1InputFieldFn().value).toBe("Quin"));
-  test.do(() => expect(form1OutputFieldFn().textContent).toBe(form1OutputFieldValue));
-  test.do(() => expect(form2InputFieldFn().value).toBe("Sue"));
-  test.do(() => expect(form2OutputFieldFn().textContent).toBe(form2OutputFieldValue));
-  test.do(() => expect(outerFormInputFieldFn().value).toBe("Ted"));
-  test.do(() => expect(outerFormOutputFieldFn().textContent).toBe("Ted"));
+  test.setup(() => form2AlertFn() === null && form1OutputFn().textContent !== "Quin"
+      && form2OutputFn().textContent !== "Sue" && outerFormOutputFn().textContent !== "Ted",
+      () => {
+        form1InputFn().value = "Neil";
+        form2InputFn().value = "Oscar";
+        outerFormInputFn().value = "Penny";
+        outerFormSubmitFn().dispatchEvent(new Event("click", {bubbles: true}));
+        form1OutputValue = "Neil";
+        form2OutputValue = "Oscar";
+      });
+  test.do(() => form1InputFn().value = "Quin");
+  test.do(() => form2InputFn().value = "Sue");
+  test.do(() => outerFormInputFn().value = "Ted");
+  test.event("click", submitOuterValue, () => outerFormOutputFn().textContent === "Ted")
+  test.do(() => expect(form1InputFn().value).toBe("Quin"));
+  test.do(() => expect(form1OutputFn().textContent).toBe(form1OutputValue));
+  test.do(() => expect(form2InputFn().value).toBe("Sue"));
+  test.do(() => expect(form2AlertFn()).toBeNull());
+  test.do(() => expect(form2OutputFn().textContent).toBe(form2OutputValue));
+  test.do(() => expect(outerFormInputFn().value).toBe("Ted"));
+  test.do(() => expect(outerFormAlertFn()).toBeNull());
+  test.do(() => expect(outerFormOutputFn().textContent).toBe("Ted"));
   test.do(() => expect(alertFn().length).toBe(0));
   test.start();
 });
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.xhtml
index fd475fa..29f0034 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/08-form/20-ajax/Ajax.xhtml
@@ -53,7 +53,7 @@
         &lt;tc:in label="Inner Value 1"/>
         &lt;tc:out label="Inner Value 1 in Model"/>
         &lt;tc:button label="Submit">
-          &lt;f:ajax execute="in" render="out :page:messages"/>
+          &lt;f:ajax execute="in" render="in out :page:messages"/>
         &lt;/tc:button>
       &lt;/tc:form>
     &lt;/tc:box>
@@ -65,7 +65,7 @@
     &lt;tc:out label="Outer Value in Model"/>
     &lt;tc:button label="Submit">
       &lt;f:ajax execute="::form1:in ::form2:in in"
-              render="::form1:out ::form2:out out :page:messages"/>
+              render="::form1:in ::form2:in in ::form1:out ::form2:out out :page:messages"/>
     &lt;/tc:button>
     ...
   &lt;/tc:form>
@@ -78,7 +78,7 @@
             <tc:in id="in1" label="Inner Value 1" value="#{formAjaxController.innerValue1}"/>
             <tc:out id="out1" label="Inner Value 1 in Model" value="#{formAjaxController.innerValue1}"/>
             <tc:button id="submit1" label="Submit">
-              <f:ajax execute="in1" render="out1 :page:messages"/>
+              <f:ajax execute="in1" render="in1 out1 :page:messages"/>
             </tc:button>
           </tc:form>
         </tc:box>
@@ -88,7 +88,7 @@
                    value="#{formAjaxController.innerValue2}"/>
             <tc:out id="out2" label="Inner Value 2 in Model" value="#{formAjaxController.innerValue2}"/>
             <tc:button id="submit2" label="Submit">
-              <f:ajax execute="in2" render="out2 :page:messages"/>
+              <f:ajax execute="in2" render="in2 out2 :page:messages"/>
             </tc:button>
           </tc:form>
         </tc:box>
@@ -97,7 +97,7 @@
         <tc:out id="out" label="Outer Value in Model" value="#{formAjaxController.outerValue}"/>
         <tc:button id="submit" label="Submit">
           <f:ajax execute="::form1:in1 ::form2:in2 in"
-                  render="::form1:out1 ::form2:out2 out :page:messages"/>
+                  render="::form1:in1 ::form2:in2 in ::form1:out1 ::form2:out2 out :page:messages"/>
         </tc:button>
 
         <tc:separator/>
@@ -105,10 +105,10 @@
         <tc:buttons>
           <tc:button id="submitInnerForms" label="Inner Forms">
             <f:ajax execute="::form1:in1 ::form2:in2"
-                    render="::form1:out1 ::form2:out2 :page:messages"/>
+                    render="::form1:in1 ::form2:in2 ::form1:out1 ::form2:out2 :page:messages"/>
           </tc:button>
           <tc:button id="submitOuterValue" label="Outer Value">
-            <f:ajax execute="in" render="out :page:messages"/>
+            <f:ajax execute="in" render="in out :page:messages"/>
           </tc:button>
         </tc:buttons>
       </tc:form>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/error/error.test.js b/tobago-example/tobago-example-demo/src/main/webapp/error/error.test.js
index 772fe1d..9e4fea7 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/error/error.test.js
+++ b/tobago-example/tobago-example-demo/src/main/webapp/error/error.test.js
@@ -19,17 +19,19 @@
 import {JasmineTestTool} from "/tobago/test/tobago-test-tool.js";
 
 it("has no exception", function (done) {
-  const error = querySelectorFn("#page\\:mainForm\\:errorSection .tobago-section-header span");
+  let errorFn = querySelectorFn("#page\\:mainForm\\:errorSection .tobago-header span");
 
   const test = new JasmineTestTool(done);
-  test.do(() => expect(error.textContent).not.toEqual("An error has occurred!"));
+  test.do(() => expect(errorFn() === null
+      || errorFn().textContent).not.toEqual("An error has occurred!"));
   test.start();
 });
 
 it("has no 404", function (done) {
-  const error404 = querySelectorFn("#page\\:mainForm\\:pageNotFoundMessage span");
+  let error404Fn = querySelectorFn("#page\\:mainForm\\:pageNotFoundMessage tobago-out");
 
   const test = new JasmineTestTool(done);
-  test.do(() => expect(error404.textContent).not.toEqual("The page was not found!"));
+  test.do(() => expect(error404Fn() === null
+      || error404Fn().textContent.indexOf("The page was not found!") === -1).toBeTrue());
   test.start();
 });
