diff --git a/Changes b/Changes
index 83de611..8650f07 100755
--- a/Changes
+++ b/Changes
@@ -1,24 +1,24 @@
 0.43 2021-07-28
         - New menu class that has an entry at the very end,
           similar to the input text prefix,
-          that is always available (lerepp).
+          that is always available. (lerepp)
         - Fix error message in case of server error (500)
           response.
-        - Added utility funcition to menu that gets all direct
-          childNodes by a tag. Used in menu-style specs. (lerepp)
+        - Added utility funcition to util that gets all direct
+          childNodes of a given element by a tag or class. (lerepp)
         - Remove 'X-Frame-Options' in favor of 'frame-ancestors'
           as a CSP rule.
         - Fix CSS compression for new SASS compiler.
         - Support dynamic menu extensions.
         - Dynamically extend buttongroup menus.
         - Update to menu.js's removeItems function to only delete
-          direct childNodes aswell as a specification to test for it (lerepp)
+          direct childNodes aswell as a specification to test for it. (lerepp)
         - Make actions private in panels and views.
         - Move pagination out of resultinfo.
         - Add support for "adopted" button groups and anchor children
           to prepend to.
         - New menu class that has a container for further
-          entries at the very end that is always available (lerepp).
+          entries at the very end that is always available. (lerepp)
 
 0.42 2021-06-18
         - Added GitHub based CI for perl.
diff --git a/dev/js/spec/alwaysMenuSpec.js b/dev/js/spec/alwaysMenuSpec.js
index 54458c9..66fc980 100644
--- a/dev/js/spec/alwaysMenuSpec.js
+++ b/dev/js/spec/alwaysMenuSpec.js
@@ -220,16 +220,16 @@
 
         expect(menu.show()).toBe(true);
 
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
-        expect(menu.directElementChildrenByTagName("li")[1].getAttribute("data-action")).toEqual("l=");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].getAttribute("data-action")).toEqual("l=");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Check boundaries
-        expect(menu.directElementChildrenByTagName("li")[0].classList.contains("no-more")).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].classList.contains("no-more")).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].classList.contains("no-more")).toBe(false);
       });
 
       it('should be filterable', function () {
@@ -239,15 +239,15 @@
         expect(menu.alwaysEntryValue("o").alwaysEntryValue()).toEqual("o");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("o");
         expect(menu.alwaysEntry().element().innerHTML).toEqual("Speichern");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Check boundaries
-        expect(menu.directElementChildrenByTagName("li")[0].classList.contains("no-more")).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].classList.contains("no-more")).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].classList.contains("no-more")).toBe(true);
 
         menu.limit(2);
 
@@ -255,34 +255,34 @@
         expect(menu.alwaysEntryValue("o").alwaysEntryValue()).toEqual("o");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("o");
         expect(menu.alwaysEntry().element().innerHTML).toEqual("Speichern");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[2]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2]).toBe(undefined);
 
         // Check boundaries
-        expect(menu.directElementChildrenByTagName("li")[0].classList.contains("no-more")).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].classList.contains("no-more")).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[2]).toBe(undefined);
 
         expect(menu.prefix("e").show()).toBe(true);
         expect(menu.alwaysEntryValue("e").alwaysEntryValue()).toEqual("e");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("e");        
         expect(menu.alwaysEntry().element().innerHTML).toEqual("Speichern");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[2]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2]).toBe(undefined);
 
         menu.limit(5);
         expect(menu.prefix("a").show()).toBe(true);
         expect(menu.alwaysEntryValue("a").alwaysEntryValue()).toEqual("a");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("a");        
         expect(menu.alwaysEntry().element().innerHTML).toEqual("Speichern");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[3].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
-        expect(menu.directElementChildrenByTagName("li")[4].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
-        expect(menu.directElementChildrenByTagName("li")[5]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[3].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[4].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[5]).toBe(undefined);
       });
 
 
@@ -295,91 +295,91 @@
         // Show only 3 items
         menu.limit(3);
         expect(menu.show()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate next (1)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate next (2)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate next (3)
         // scroll!
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate next (4)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate next (5) - Entry / Speichern
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(true);
 
         // Activate next (6) - ROLL
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Active next (7)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         expect(menu._prefix.active()).toBe(false);
@@ -402,47 +402,47 @@
         expect(menu._prefix.active()).toBe(false);
         expect(menu.alwaysEntryValue()).toBe("");
 
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
 
         // Activate prev (1) - roll to bottom
         menu.prev();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(true);
 
         // Activate prev (2)
         menu.prev();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate prev (3)
         menu.prev();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate prev (4)
@@ -453,7 +453,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Syntax");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate prev (5)
@@ -464,7 +464,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Part-of-Speech");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate prev (6)
@@ -475,7 +475,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Morphology");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate next (7)
@@ -486,7 +486,7 @@
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2).name()).toEqual("Morphology");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
 
         // Activate prev (8)
@@ -500,7 +500,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Morphology");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(true);
 
         // Activate prev (10)
@@ -511,7 +511,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Syntax");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
         expect(menu.alwaysEntry().active()).toBe(false);
         expect(menu._prefix.active()).toBe(false);
         expect(menu.alwaysEntryValue()).toBe("");
@@ -543,40 +543,40 @@
         expect(menu.alwaysEntry().active()).toBe(false);
 
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (1)
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (2)
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (3) - to prefix
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
         expect(menu._prefix.active()).toBe(true);
@@ -585,10 +585,10 @@
          // Next (4) - to entry
          menu.next();
          expect(menu.shownItem(0).name()).toEqual("Morphology");
-         expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+         expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
          expect(menu.shownItem(0).active()).toBe(false);
          expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-         expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+         expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
          expect(menu.shownItem(1).active()).toBe(false);
          expect(menu.shownItem(2)).toBe(undefined);
          expect(menu._prefix.active()).toBe(false);
@@ -596,10 +596,10 @@
 
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -621,20 +621,20 @@
         expect(menu.alwaysEntry().active()).toBe(false);
 
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (1)
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
         expect(menu.alwaysEntryValue()).toBe("ex");
@@ -646,11 +646,11 @@
 
         expect(menu.prefix()).toEqual('ex');
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
         expect(menu.alwaysEntryValue()).toBe("ex");
@@ -666,10 +666,10 @@
         expect(menu._prefix.active()).toBe(false);
         expect(menu.alwaysEntry().active()).toBe(false);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -678,10 +678,10 @@
         expect(menu._prefix.active()).toBe(false);
         expect(menu.prefix()).toEqual('e');
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
         expect(menu._prefix.active()).toBe(false);
@@ -691,10 +691,10 @@
         menu.next();
         expect(menu._prefix.active()).toBe(true);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
         expect(menu._prefix.active()).toBe(true);
@@ -704,10 +704,10 @@
         menu.next();
         expect(menu._prefix.active()).toBe(false);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
         expect(menu._prefix.active()).toBe(false);
@@ -717,10 +717,10 @@
         menu.next();
         expect(menu._prefix.active()).toBe(false);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -739,13 +739,13 @@
         expect(menu._prefix.active()).toBe(false);
         expect(menu.alwaysEntry().active()).toBe(false);
         expect(menu.shownItem(0).name()).toEqual("PPS");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual(
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual(
           "<strong>PPS</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular</span>"
         );
 
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("PPSA");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
         expect(menu.shownItem(1).active()).toBe(false);
 
         expect(menu.shownItem(2)).toBe(undefined);
@@ -765,7 +765,7 @@
         expect(menu.alwaysEntryValue()).toBe(" p");
         expect(menu.show()).toBe(true);
         expect(menu.shownItem(0).name()).toEqual("PP");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual(
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual(
           "<strong><mark>P</mark><mark>P</mark></strong>"+
             "<span><mark>P</mark>ersonal <mark>P</mark>ronoun</span>"
         );
@@ -816,13 +816,13 @@
         expect(menu._entry.active()).toEqual(false);
 
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
         expect(menu._prefix.active()).toEqual(false);
@@ -836,7 +836,7 @@
         expect(menu.prefix()).toEqual("a");
         expect(menu.alwaysEntryValue()).toEqual("a");
         expect(menu.shownItem(0).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
 
         menu._prefix.add('u');
         menu._entry.add('u');
@@ -846,7 +846,7 @@
         expect(menu.shownItem(0).name()).toEqual("Autor");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(false);
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
 
         menu._prefix.chop();
         menu._entry.chop();
@@ -854,7 +854,7 @@
         expect(menu.prefix()).toEqual("a");
         expect(menu.alwaysEntryValue()).toEqual("a");
         expect(menu.shownItem(0).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
 
         menu._prefix.chop();
         menu._entry.chop();
@@ -864,13 +864,13 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -883,13 +883,13 @@
         expect(menu._entry.active()).toEqual(false);
         expect(menu.alwaysEntryValue()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
 
         // Forward
@@ -899,13 +899,13 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -916,13 +916,13 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -931,13 +931,13 @@
         expect(menu.prefix()).toEqual("");
         expect(menu.alwaysEntryValue()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Länge");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Länge</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Länge</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
         expect(menu.shownItem(3)).toBe(undefined);
         expect(menu._prefix.active()).toEqual(false);
@@ -948,13 +948,13 @@
         expect(menu.prefix()).toEqual("");
         expect(menu.alwaysEntryValue()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Länge");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Länge</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Länge</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Autor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Autor</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
         expect(menu.shownItem(3)).toBe(undefined);
         expect(menu._prefix.active()).toEqual(false);
@@ -965,13 +965,13 @@
         expect(menu.prefix()).toEqual("");
         expect(menu.alwaysEntryValue()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Länge");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Länge</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Länge</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Autor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Autor</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
         expect(menu._prefix.active()).toEqual(false);
@@ -982,13 +982,13 @@
         expect(menu.prefix()).toEqual("");
         expect(menu.alwaysEntryValue()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
       });
 
@@ -1013,10 +1013,10 @@
         expect(menu.alwaysEntryValue()).toEqual("El");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1027,10 +1027,10 @@
         expect(menu.alwaysEntryValue()).toEqual("El");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1041,10 +1041,10 @@
         expect(menu.alwaysEntryValue()).toEqual("El");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1055,10 +1055,10 @@
         expect(menu.alwaysEntryValue()).toEqual("El");
         expect(menu._entry.active()).toEqual(true);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1068,10 +1068,10 @@
         expect(menu.alwaysEntryValue()).toEqual("El");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1082,11 +1082,11 @@
         expect(menu.alwaysEntryValue()).toEqual("El");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
       });
@@ -1109,10 +1109,10 @@
         expect(menu.alwaysEntryValue()).toEqual("el");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1122,11 +1122,11 @@
         expect(menu._entry.active()).toEqual(true);
 
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1137,11 +1137,11 @@
         expect(menu._entry.active()).toEqual(false);
 
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1150,10 +1150,10 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
       });
@@ -1175,10 +1175,10 @@
         expect(menu.alwaysEntry().value()).toEqual("el");
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1187,10 +1187,10 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(true);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1199,10 +1199,10 @@
         expect(menu._prefix.active()).toEqual(true);
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1213,10 +1213,10 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(true);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1226,10 +1226,10 @@
         expect(menu._prefix.active()).toEqual(false);
         expect(menu._entry.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
       });
diff --git a/dev/js/spec/buttongroupSpec.js b/dev/js/spec/buttongroupSpec.js
index 80a9e8f..c92832e 100644
--- a/dev/js/spec/buttongroupSpec.js
+++ b/dev/js/spec/buttongroupSpec.js
@@ -173,11 +173,11 @@
       btn.click();
 
       expect(list.element().classList.contains('visible')).toBeTruthy();
-      expect(list.directElementChildrenByTagName("li")[0].innerHTML).toEqual('Meta1');
-      expect(list.directElementChildrenByTagName("li")[1].innerHTML).toEqual('Meta2');
+      expect(directElementChildrenByTagName(list.element(),"li")[0].innerHTML).toEqual('Meta1');
+      expect(directElementChildrenByTagName(list.element(),"li")[1].innerHTML).toEqual('Meta2');
 
       expect(x).toEqual('empty');
-      list.directElementChildrenByTagName("li")[0].click();
+      directElementChildrenByTagName(list.element(),"li")[0].click();
       expect(x).toEqual('meta1');
 
       expect(list.element().classList.contains('visible')).toBeFalsy();
@@ -186,7 +186,7 @@
       btn.click();
 
       expect(list.element().classList.contains('visible')).toBeTruthy();
-      list.directElementChildrenByTagName("li")[1].click();
+      directElementChildrenByTagName(list.element(),"li")[1].click();
       expect(x).toEqual('meta2');
 
       expect(list.element().classList.contains('visible')).toBeFalsy();
diff --git a/dev/js/spec/containerMenuSpec.js b/dev/js/spec/containerMenuSpec.js
index 81eafc7..26b2fc3 100644
--- a/dev/js/spec/containerMenuSpec.js
+++ b/dev/js/spec/containerMenuSpec.js
@@ -216,7 +216,7 @@
         menu.limit(3);
 
         expect(menu.show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(liElements[1].innerHTML).toEqual("Lemma");
         expect(liElements[2].innerHTML).toEqual("Morphology");
@@ -238,7 +238,7 @@
         var menu = OwnContainerMenu.create(list,ExampleItemList);
         menu.limit(3);
         expect(menu.prefix("o").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("o");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -253,7 +253,7 @@
         menu.limit(2);
         
         expect(menu.prefix("o").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("o");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -267,14 +267,14 @@
         expect(liElements[2]).toBe(undefined);
 
         expect(menu.prefix("e").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("e");
         expect(liElements[0].innerHTML).toEqual("Constitu<mark>e</mark>ncy");
         expect(liElements[2]).toBe(undefined);
 
         menu.limit(5);
         expect(menu.prefix("a").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("a");
         expect(liElements[0].innerHTML).toEqual("Lemm<mark>a</mark>");
         expect(liElements[1].innerHTML).toEqual("P<mark>a</mark>rt-of-Speech");
@@ -290,7 +290,7 @@
         // Show only 3 items
         menu.limit(3);
         expect(menu.show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -301,7 +301,7 @@
 
         // Activate next (1)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -312,7 +312,7 @@
 
         // Activate next (2)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -324,7 +324,7 @@
         // Activate next (3)
         // scroll!
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Lemma");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Morphology");
@@ -335,7 +335,7 @@
 
         // Activate next (4)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -346,7 +346,7 @@
 
         // Activate next (5) - ROLL
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -357,7 +357,7 @@
 
         // Active next (6)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -374,7 +374,7 @@
         // Show only 3 items
         menu.limit(3);
         expect(menu.show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -388,7 +388,7 @@
 
         // Activate next (1)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -402,7 +402,7 @@
 
         // Activate next (2)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -417,7 +417,7 @@
         // Activate next (3)
         // scroll!
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Lemma");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Morphology");
@@ -431,7 +431,7 @@
 
         // Activate next (4)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -445,7 +445,7 @@
 
         // Activate next (4.1) - Jump to container part
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -459,7 +459,7 @@
 
         // Activate next (4.2)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -474,7 +474,7 @@
         /** Prefix is not set
         // Activate next (4.3)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -489,7 +489,7 @@
 
         // Activate next (5) - ROLL
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -503,7 +503,7 @@
 
         // Active next (6)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -531,7 +531,7 @@
         menu.limit(3);
         expect(menu.show()).toBe(true);
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -542,7 +542,7 @@
 
         // Activate prev (1) - roll to bottom
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -553,7 +553,7 @@
 
         // Activate prev (2)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -564,7 +564,7 @@
 
         // Activate prev (3)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -575,7 +575,7 @@
 
         // Activate prev (4)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Lemma");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Morphology");
@@ -586,7 +586,7 @@
 
         // Activate prev (5)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -597,7 +597,7 @@
 
         // Activate next (1)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -611,7 +611,7 @@
 
         // Activate prev (7)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -626,7 +626,7 @@
         menu._firstActive = true;
         menu.limit(3);
         expect(menu.show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -640,7 +640,7 @@
 
         // Activate prev (1) - roll to bottom - base items stay, now container
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -654,7 +654,7 @@
 
         // Activate prev(2) - next container item
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -668,7 +668,7 @@
 
         // Activate prev (3) - roll to bottom of normal list
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -682,7 +682,7 @@
 
         // Activate prev (4)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -696,7 +696,7 @@
 
         // Activate prev (5)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -710,7 +710,7 @@
 
         // Activate prev (6)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Lemma");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Morphology");
@@ -724,7 +724,7 @@
 
         // Activate prev (7)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -738,7 +738,7 @@
 
         // Activate next (8)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Lemma");
@@ -757,7 +757,7 @@
 
         // Activate prev (10)
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Morphology");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-of-Speech");
@@ -785,7 +785,7 @@
         menu.limit(2);
 
         expect(menu.prefix("o").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -794,7 +794,7 @@
 
         // Next (1)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -803,7 +803,7 @@
 
         // Next (2)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-<mark>o</mark>f-Speech");
@@ -812,7 +812,7 @@
 
         // Next (3) - to prefix
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-<mark>o</mark>f-Speech");
@@ -820,7 +820,7 @@
         expect(menu.shownItem(2)).toBe(undefined);
 
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -834,7 +834,7 @@
         menu.limit(2);
 
         expect(menu.prefix("o").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -846,7 +846,7 @@
 
         // Next (1)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -858,7 +858,7 @@
 
         // Next (2)
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-<mark>o</mark>f-Speech");
@@ -870,7 +870,7 @@
 
         // Next (3) - to first container Item
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-<mark>o</mark>f-Speech");
@@ -882,7 +882,7 @@
 
           // Next (4) - to second container Item
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-<mark>o</mark>f-Speech");
@@ -894,7 +894,7 @@
 
         // Next (5) - to prefix
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Part-<mark>o</mark>f-Speech");
@@ -905,7 +905,7 @@
         expect(menu.container().items[2].active()).toBe(true); //prefix
 
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("C<mark>o</mark>nstituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy");
@@ -923,7 +923,7 @@
 
         expect(menu.prefix("ex").show()).toBe(true);
         expect(menu.prefix()).toEqual('ex');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>ex</mark>ample 1 Constituency");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("<mark>ex</mark>ample 2 Morphology");
@@ -936,7 +936,7 @@
         // Next (1)
         menu.next();
         expect(menu.prefix()).toEqual('ex');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>ex</mark>ample 1 Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("<mark>ex</mark>ample 2 Morphology");
@@ -949,7 +949,7 @@
         // Next (2)
         menu.next();
         expect(menu.prefix()).toEqual('ex');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>ex</mark>ample 1 Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("<mark>ex</mark>ample 2 Morphology");
@@ -963,7 +963,7 @@
         menu.next();
         menu.next();
         expect(menu.prefix()).toEqual('ex');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>ex</mark>ample 1 Constituency");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("<mark>ex</mark>ample 2 Morphology");
@@ -980,7 +980,7 @@
         expect(menu.prefix("e").show()).toBe(true);
         expect(menu._prefix.active()).toBe(false);
         expect(menu.prefix()).toEqual('e');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 1 Constitu<mark>e</mark>ncy");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 2 Morphology");
@@ -994,7 +994,7 @@
         menu.next();
         expect(menu._prefix.active()).toBe(false);
         expect(menu.prefix()).toEqual('e');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 1 Constitu<mark>e</mark>ncy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 2 Morphology");
@@ -1008,7 +1008,7 @@
         menu.next();
         expect(menu._prefix.active()).toBe(false);
         expect(menu.prefix()).toEqual('e');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 1 Constitu<mark>e</mark>ncy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 2 Morphology");
@@ -1024,7 +1024,7 @@
         menu.next();
         expect(menu._prefix.active()).toBe(true);
         expect(menu.prefix()).toEqual('e');
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 1 Constitu<mark>e</mark>ncy");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("<mark>e</mark>xampl<mark>e</mark> 2 Morphology");
@@ -1042,7 +1042,7 @@
 
         menu.limit(2);
         expect(menu.prefix("pro sin").show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual(
           "Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular"
         );
@@ -1064,7 +1064,7 @@
         expect(menu.show()).toBe(true);
         menu._prefix.add("p")
         expect(menu.show()).toBe(true);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>P</mark>ersonal <mark>P</mark>ronoun");
       });
 
@@ -1118,7 +1118,7 @@
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1130,25 +1130,25 @@
         menu._prefix.add('a');
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("a");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>A</mark>utor");
 
         menu._prefix.add('u');
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("au");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>Au</mark>tor");
 
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("a");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>A</mark>utor");
 
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1161,7 +1161,7 @@
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1172,7 +1172,7 @@
         // Forward
         menu.next();
         expect(menu.prefix()).toEqual("");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1183,7 +1183,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1195,7 +1195,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Untertitel");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1207,7 +1207,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Veröffentlichungsdatum");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1219,7 +1219,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
@@ -1238,7 +1238,7 @@
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1253,7 +1253,7 @@
         menu._prefix.add('a');
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("a");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>A</mark>utor");
         expect(menu.container().items[0].active()).toBe(false);
         expect(menu.container().items[1].active()).toBe(false);
@@ -1262,7 +1262,7 @@
         menu._prefix.add('u');
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("au");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>Au</mark>tor");
         expect(menu.container().items[0].active()).toBe(false);
         expect(menu.container().items[1].active()).toBe(false);
@@ -1271,7 +1271,7 @@
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("a");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("<mark>A</mark>utor");
         expect(menu.container().items[0].active()).toBe(false);
         expect(menu.container().items[1].active()).toBe(false);
@@ -1280,7 +1280,7 @@
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1296,7 +1296,7 @@
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1310,7 +1310,7 @@
         // Forward
         menu.next();
         expect(menu.prefix()).toEqual("");
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Untertitel");
@@ -1324,7 +1324,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1339,7 +1339,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Untertitel");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1354,7 +1354,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Veröffentlichungsdatum");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1369,7 +1369,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Veröffentlichungsdatum");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1384,7 +1384,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Veröffentlichungsdatum");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1399,7 +1399,7 @@
         
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("");
         expect(liElements[0].innerHTML).toEqual("Titel");
         expect(menu.shownItem(0).active()).toBe(true);
@@ -1425,7 +1425,7 @@
         menu.prefix('El');
         expect(menu.show()).toBe(true);
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(false);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
@@ -1439,7 +1439,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(false);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
@@ -1453,7 +1453,7 @@
 
         // Forward
         menu.next();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("El");
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1467,7 +1467,7 @@
         menu.next();
         menu.next();
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("El");
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1482,7 +1482,7 @@
         menu.prev();
         menu.prev();
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(false);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
@@ -1506,7 +1506,7 @@
         menu.prefix('el');
         expect(menu.show()).toBe(true);
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("el");
         expect(menu._prefix.active()).toEqual(false);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
@@ -1522,7 +1522,7 @@
         menu.prev();
         expect(menu._prefix.active()).toEqual(true);
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(liElements[1].innerHTML).toEqual("Untertit<mark>el</mark>");
@@ -1536,7 +1536,7 @@
         menu.prev();
         menu.prev();
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu._prefix.active()).toEqual(false);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1557,7 +1557,7 @@
         menu.prefix('el');
         expect(menu.show()).toBe(true);
 
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu.prefix()).toEqual("el");
         expect(menu._prefix.active()).toEqual(false);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
@@ -1571,7 +1571,7 @@
 
         // Backward
         menu.prev();
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(menu._prefix.active()).toEqual(true);
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
         expect(menu.shownItem(0).active()).toBe(false);
@@ -1587,7 +1587,7 @@
         menu.next();
         expect(menu.prefix()).toEqual("el");
         expect(menu._prefix.active()).toEqual(false);
-        var liElements = menu.directElementChildrenByTagName("li");
+        var liElements = directElementChildrenByTagName(menu.element(),"li");
         expect(liElements[0].innerHTML).toEqual("Tit<mark>el</mark>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(liElements[1].innerHTML).toEqual("Untertit<mark>el</mark>");
@@ -2032,7 +2032,7 @@
         expect(container.liveLength()).toEqual(0);
         expect(container.item(0)).toEqual(container._prefix);
         expect(container.active()).toBeFalsy();
-        expect(menu.directElementChildrenByTagName("pref")).toEqual([]);
+        expect(directElementChildrenByTagName(menu.element(),"pref")).toEqual([]);
         expect(container.element().getElementsByClassName("pref").length).toEqual(1);
         
 
diff --git a/dev/js/spec/menuSpec.js b/dev/js/spec/menuSpec.js
index 47adfd3..8cb62fa 100644
--- a/dev/js/spec/menuSpec.js
+++ b/dev/js/spec/menuSpec.js
@@ -434,16 +434,16 @@
 
         expect(menu.show()).toBe(true);
 
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
-        expect(menu.directElementChildrenByTagName("li")[1].getAttribute("data-action")).toEqual("l=");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].getAttribute("data-action")).toEqual("l=");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Check boundaries
-        expect(menu.directElementChildrenByTagName("li")[0].classList.contains("no-more")).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].classList.contains("no-more")).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].classList.contains("no-more")).toBe(false);
       });
 
       it('should be filterable', function () {
@@ -451,44 +451,44 @@
         menu.limit(3);
         expect(menu.prefix("o").show()).toBe(true);
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("o");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Check boundaries
-        expect(menu.directElementChildrenByTagName("li")[0].classList.contains("no-more")).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].classList.contains("no-more")).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].classList.contains("no-more")).toBe(true);
 
         menu.limit(2);
 
         expect(menu.prefix("o").show()).toBe(true);
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("o");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[2]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2]).toBe(undefined);
 
         // Check boundaries
-        expect(menu.directElementChildrenByTagName("li")[0].classList.contains("no-more")).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].classList.contains("no-more")).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].classList.contains("no-more")).toBe(true);
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].classList.contains("no-more")).toBe(false);
+        expect(directElementChildrenByTagName(menu.element(),"li")[2]).toBe(undefined);
 
         expect(menu.prefix("e").show()).toBe(true);
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("e");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[2]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2]).toBe(undefined);
 
         menu.limit(5);
         expect(menu.prefix("a").show()).toBe(true);
         expect(menu.element().getElementsByClassName("pref")[0].innerHTML).toEqual("a");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
-        expect(menu.directElementChildrenByTagName("li")[3].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
-        expect(menu.directElementChildrenByTagName("li")[4].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
-        expect(menu.directElementChildrenByTagName("li")[5]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Ex<mark>a</mark>mple 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemm<mark>a</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Ex<mark>a</mark>mple 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[3].innerHTML).toEqual("<strong>P<mark>a</mark>rt-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[4].innerHTML).toEqual("<strong>Synt<mark>a</mark>x</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[5]).toBe(undefined);
       });
 
       it('should be nextable', function () {
@@ -498,74 +498,74 @@
         // Show only 3 items
         menu.limit(3);
         expect(menu.show()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate next (1)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate next (2)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate next (3)
         // scroll!
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate next (4)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate next (5) - ROLL
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Active next (6)
         menu.next();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
       });
 
       it('should be nextable without active field', function () {
@@ -583,33 +583,33 @@
         menu.limit(3);
         expect(menu.show()).toBe(true);
 
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Lemma</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate prev (1) - roll to bottom
         menu.prev();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate prev (2)
         menu.prev();
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Morphology</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-of-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Syntax</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate prev (3)
         menu.prev();
@@ -619,7 +619,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Syntax");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate prev (4)
         menu.prev();
@@ -629,7 +629,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Part-of-Speech");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate prev (5)
         menu.prev();
@@ -639,7 +639,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Morphology");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate next (1)
         menu.next();
@@ -649,7 +649,7 @@
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2).name()).toEqual("Morphology");
         expect(menu.shownItem(2).active()).toBe(false);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
 
         // Activate prev (6)
         menu.prev();
@@ -662,7 +662,7 @@
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Syntax");
         expect(menu.shownItem(2).active()).toBe(true);
-        expect(menu.directElementChildrenByTagName("li")[3]).toBe(undefined);
+        expect(directElementChildrenByTagName(menu.element(),"li")[3]).toBe(undefined);
       });
 
       it('should be prevable without active field', function () {
@@ -681,49 +681,49 @@
 
         expect(menu.prefix("o").show()).toBe(true);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (1)
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (2)
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (3) - to prefix
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Part-of-Speech");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Part-<mark>o</mark>f-Speech</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>C<mark>o</mark>nstituency</strong><span>Example 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>M<mark>o</mark>rph<mark>o</mark>l<mark>o</mark>gy</strong><span>Example 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
       });
@@ -737,20 +737,20 @@
         expect(menu.prefix("ex").show()).toBe(true);
 
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
         // Next (1)
         menu.next();
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -759,11 +759,11 @@
 
         expect(menu.prefix()).toEqual('ex');
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constituency</strong><span><mark>Ex</mark>ample 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>Ex</mark>ample 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -774,10 +774,10 @@
         expect(menu.prefix("e").show()).toBe(true);
         expect(menu._prefix.active()).toBe(false);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -786,10 +786,10 @@
         expect(menu._prefix.active()).toBe(false);
         expect(menu.prefix()).toEqual('e');
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -797,10 +797,10 @@
         menu.next();
         expect(menu._prefix.active()).toBe(true);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -808,10 +808,10 @@
         menu.next();
         expect(menu._prefix.active()).toBe(false);
         expect(menu.shownItem(0).name()).toEqual("Constituency");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Constitu<mark>e</mark>ncy</strong><span><mark>E</mark>xampl<mark>e</mark> 1</span>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Morphology");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Morphology</strong><span><mark>E</mark>xampl<mark>e</mark> 2</span>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
       });
@@ -823,13 +823,13 @@
         menu.limit(2);
         expect(menu.prefix("pro sin").show()).toBe(true);
         expect(menu.shownItem(0).name()).toEqual("PPS");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual(
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual(
           "<strong>PPS</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular</span>"
         );
 
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("PPSA");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>PPSA</strong><span>Personal <mark>Pro</mark>noun, <mark>Sin</mark>gular, Accusative</span>");
         expect(menu.shownItem(1).active()).toBe(false);
 
         expect(menu.shownItem(2)).toBe(undefined);
@@ -846,7 +846,7 @@
         menu._prefix.add("p")
         expect(menu.show()).toBe(true);
         expect(menu.shownItem(0).name()).toEqual("PP");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual(
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual(
           "<strong><mark>P</mark><mark>P</mark></strong>"+
             "<span><mark>P</mark>ersonal <mark>P</mark>ronoun</span>"
         );
@@ -903,13 +903,13 @@
         expect(menu.prefix()).toEqual("");
 
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -917,31 +917,31 @@
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("a");
         expect(menu.shownItem(0).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
 
         menu._prefix.add('u');
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("au");
         expect(menu.shownItem(0).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong><mark>Au</mark>tor</strong>");
 
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("a");
         expect(menu.shownItem(0).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong><mark>A</mark>utor</strong>");
 
         menu._prefix.chop();
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -950,26 +950,26 @@
         expect(menu.show()).toBe(true);
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
 
         // Forward
         menu.next();
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -977,13 +977,13 @@
         menu.next();
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -991,13 +991,13 @@
         menu.next();
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Länge");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Länge</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Länge</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -1005,13 +1005,13 @@
         menu.next();
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Länge");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Länge</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Länge</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Autor");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Autor</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Autor</strong>");
         expect(menu.shownItem(2).active()).toBe(true);
         expect(menu.shownItem(3)).toBe(undefined);
 
@@ -1019,13 +1019,13 @@
         menu.next();
         expect(menu.prefix()).toEqual("");
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Titel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Titel</strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertitel</strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2).name()).toEqual("Veröffentlichungsdatum");
-        expect(menu.directElementChildrenByTagName("li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[2].innerHTML).toEqual("<strong>Veröffentlichungsdatum</strong>");
         expect(menu.shownItem(2).active()).toBe(false);
       });
 
@@ -1046,10 +1046,10 @@
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1058,10 +1058,10 @@
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1070,10 +1070,10 @@
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(true);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1082,11 +1082,11 @@
         expect(menu.prefix()).toEqual("El");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
       });
@@ -1105,10 +1105,10 @@
         expect(menu.prefix()).toEqual("el");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1117,11 +1117,11 @@
         expect(menu._prefix.active()).toEqual(true);
 
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
 
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1129,10 +1129,10 @@
         menu.prev();
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(true);
         expect(menu.shownItem(2)).toBe(undefined);
       });
@@ -1149,10 +1149,10 @@
         expect(menu.prefix()).toEqual("el");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1160,10 +1160,10 @@
         menu.prev();
         expect(menu._prefix.active()).toEqual(true);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(false);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
@@ -1173,10 +1173,10 @@
         expect(menu.prefix()).toEqual("el");
         expect(menu._prefix.active()).toEqual(false);
         expect(menu.shownItem(0).name()).toEqual("Titel");
-        expect(menu.directElementChildrenByTagName("li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[0].innerHTML).toEqual("<strong>Tit<mark>el</mark></strong>");
         expect(menu.shownItem(0).active()).toBe(true);
         expect(menu.shownItem(1).name()).toEqual("Untertitel");
-        expect(menu.directElementChildrenByTagName("li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
+        expect(directElementChildrenByTagName(menu.element(),"li")[1].innerHTML).toEqual("<strong>Untertit<mark>el</mark></strong>");
         expect(menu.shownItem(1).active()).toBe(false);
         expect(menu.shownItem(2)).toBe(undefined);
 
diff --git a/dev/js/src/menu.js b/dev/js/src/menu.js
index 86a8105..794d517 100644
--- a/dev/js/src/menu.js
+++ b/dev/js/src/menu.js
@@ -972,24 +972,6 @@
         item.element(),
         e.children[this._notItemElements]
       );
-    },
-
-    /**
-     * A Method for generating an array of nodes, that are direct descendants of the menus
-     * element node, using a tag tagName as a parameter. Supposed to be used by the specification only.
-     * @param {String} tagName The tag the children are looked for by
-     * @returns An array of children nodes with tag tagName
-     */
-    directElementChildrenByTagName : function (tagName) {
-      const tagElementsCollection=this._el.getElementsByTagName(tagName);
-      //var tagElements = Array.from(tagElementsCollection);
-      //var tagElements = [...tagElementsCollection];
-      //This one has the best compatability:
-      var tagElements = Array.prototype.slice.call(tagElementsCollection);
-      const t = this;
-      //filter by actually being direct child node
-      tagElements = tagElements.filter(element => element.parentNode === t._el);
-      return tagElements;
     }
   };
 });
diff --git a/dev/js/src/util.js b/dev/js/src/util.js
index c13ba3d..42edf44 100644
--- a/dev/js/src/util.js
+++ b/dev/js/src/util.js
@@ -166,3 +166,39 @@
 
   return KorAP;
 });
+
+/**
+ * A Method for generating an array of nodes, that are direct descendants of the passed
+ * element node, using a tag tagName as a parameter. Supposed to be used by the specification only.
+ * @param {HTMLNode} element The HTMLNode / element object whose children we are fetching
+ * @param {String} tagName The tag the children are looked for by
+ * @returns An array of children nodes with tag tagName
+ */
+function directElementChildrenByTagName (element, tagName) {
+  const tagElementsCollection=element.getElementsByTagName(tagName);
+  //var tagElements = Array.from(tagElementsCollection);
+  //var tagElements = [...tagElementsCollection];
+  //This one has the best compatability:
+  var tagElements = Array.prototype.slice.call(tagElementsCollection);
+  //filter by actually being direct child node
+  tagElements = tagElements.filter(subElement => subElement.parentNode === element);
+  return tagElements;
+};
+
+/**
+ * A Method for generating an array of nodes, that are direct descendants of the passed
+ * element node, using a class className as a parameter. Supposed to be used by the specification only.
+ * @param {HTMLNode} element The HTMLNode / element object whose children we are fetching
+ * @param {String} className The class the children are looked for by
+ * @returns An array of children nodes with class className
+ */
+ function directElementChildrenByClassName (element, className) {
+  const classElementsCollection=element.getElementsByTagName(className);
+  //var classElements = Array.from(classElementsCollection);
+  //var classElements = [...classElementsCollection];
+  //This one has the best compatability:
+  var classElements = Array.prototype.slice.call(classElementsCollection);
+  //filter by actually being direct child node
+  classElements = classElements.filter(subElement => subElement.parentNode === element);
+  return classElements;
+};
\ No newline at end of file
