diff --git a/app/static/js/nopaque.Results.js b/app/static/js/nopaque.Results.js
index 3f4c7473ca60080702e865b0604a3438795df283..a27e98c904c5e5317cd744d8b38a379c706c54bd 100644
--- a/app/static/js/nopaque.Results.js
+++ b/app/static/js/nopaque.Results.js
@@ -14,6 +14,7 @@ class Results {
 
 class ResultsJSON {
   // Sets empty object structure. Also usefull to delete old results.
+  // matchCount default is 0
   init(matchCount = 0) {
     this["matches"] = [];  // list of all c with lc and rc
     this["cpos_lookup"] = {};  // object contains all this key value pair
@@ -40,14 +41,19 @@ class ResultsJSON {
     let resultFilename;
     // get and create metadata
     today = new Date();
-    currentDate = today.getUTCFullYear() + '-' + (today.getUTCMonth() +1) + '-' + today.getUTCDate();
-    currentTime = today.getUTCHours() + ":" + today.getUTCMinutes() + ":" + today.getUTCSeconds();
+    currentDate = `${today.getUTCFullYear()}` +
+                  `-${(today.getUTCMonth() + 1)}` +
+                  `-${today.getUTCDate()}`;
+    currentTime = `${today.getUTCHours()}h` +
+                  `${today.getUTCMinutes()}m` +
+                  `${today.getUTCSeconds()}s`;
     safeFilename = this.query.replace(/[^a-z0-9_-]/gi, "_");
-    resultFilename = "UTC-" + currentDate + "_" + currentTime + "_" + safeFilename;
+    resultFilename = `UTC-${currentDate}_${currentTime}_${safeFilename}`;
     return resultFilename
   }
 
-  // Function to download data as a Blob created from a string, should be multi purpose
+  // Function to download data as Blob created from string
+  // should be private but that is not yet a feature of javascript 08.04.2020
   download(downloadElem, dataStr, filename, type, filenameSlug) {
     let file;
     console.log("Start Download!");
@@ -68,7 +74,8 @@ class ResultsJSON {
     let dataStr;
     let downloadElement;
     // stringify JSON object for json download
-    dataStr = JSON.stringify(results.resultsJSON, undefined, "\t"); // use tabs to save some space
+    // use tabs to save some space
+    dataStr = JSON.stringify(results.resultsJSON, undefined, "\t");
     // get downloadResultsElement
     downloadElement = document.getElementById("download-results-json");
     // start actual download
diff --git a/app/static/js/nopaque.callbacks.js b/app/static/js/nopaque.callbacks.js
index 031d73b86021fd9678e34572e6d31b862a44daf4..26425cc05863cf72784e0d149877db35f5a49cb5 100644
--- a/app/static/js/nopaque.callbacks.js
+++ b/app/static/js/nopaque.callbacks.js
@@ -2,22 +2,22 @@ function querySetup(payload) {
   // This is called when a query was successfull
   // some hiding
   queryResultsExportElement.classList.add("disabled");
-
-  console.log("Query initial setup seccessfull.");
   queryResultsDeterminateElement.style.width = "0%";
   queryResultsProgressElement.classList.remove("hide");
   queryResultsUserFeedbackElement.classList.remove("hide");
+  // some initial values
   receivedMatchCountElement.innerText = "0";
   textLookupCountElement.innerText = "0";
   matchCountElement.innerText = payload.match_count;
   // always re initializes results to delete old results from it
-  // this has to be done here again because teh last chunk from old results was still being recieved
+  // this has to be done here again because the last chunk from old results was still being recieved
   results.clear_all()
   // Get query string again
   results.resultsJSON.getQueryStr(queryFormElement);
 }
 
 function queryRenderResults(payload) {
+  let resultItems;  // array of built html result items row element
   // This is called when results are transmitted and being recieved
   console.log("Current recieved chunk:", payload.chunk);
   if (payload.chunk.cpos_ranges == true) {
@@ -54,7 +54,7 @@ function queryRenderResults(payload) {
     queryResultsProgressElement.classList.add("hide");
     queryResultsUserFeedbackElement.classList.add("hide");
     queryResultsExportElement.classList.remove("disabled");
-    ResultsList.activateInspect();
+    results.resultsList.activateInspect();
   }
   // inital expert mode check and activation
   if (expertModeSwitchElement.checked) {
diff --git a/app/static/js/nopaque.lists.js b/app/static/js/nopaque.lists.js
index b5fcb473d9e3a973a1162abf4211e9f2f83e30e4..ec571aa7b1786388f2add5cd31e51c91c1d06ba6 100644
--- a/app/static/js/nopaque.lists.js
+++ b/app/static/js/nopaque.lists.js
@@ -81,11 +81,16 @@ RessourceList.options = {
                       <i class="description"></i>
                     </td>
                     <td>
-                      <span class="badge new status" data-badge-caption=""></span>
+                      <span class="badge new status" data-badge-caption="">
+                      </span>
                     </td>
                     <td class="right-align">
-                      <a class="btn-small edit-link waves-effect waves-light"><i class="material-icons">edit</i></a>
-                      <a class="btn-small analyse-link waves-effect waves-light">Analyse<i class="material-icons right">search</i></a>
+                      <a class="btn-small edit-link waves-effect waves-light">
+                        <i class="material-icons">edit</i>
+                      </a>
+                      <a class="btn-small analyse-link waves-effect waves-light">
+                        Analyse<i class="material-icons right">search</i>
+                      </a>
                     </td>
                   </tr>`,
            valueNames: ["creation_date", "description", "title",
@@ -107,7 +112,9 @@ RessourceList.options = {
                    <span class="badge new status" data-badge-caption=""></span>
                  </td>
                  <td class="right-align">
-                   <a class="btn-small link waves-effect waves-light">View<i class="material-icons right">send</i></a>
+                   <a class="btn-small link waves-effect waves-light">
+                    View<i class="material-icons right">send</i>
+                  </a>
                  </td>
                </tr>`,
         valueNames: ["creation_date", "description", "title",
@@ -126,17 +133,20 @@ class ResultsList extends List {
     let displayOptionsFormData
     let displayOptionsData;
     displayOptionsFormData = new FormData(displayOptionsFormElement);
-    displayOptionsData = {"resultsPerPage": displayOptionsFormData.get("display-options-form-results_per_page"),
-                          "resultsContex": displayOptionsFormData.get("display-options-form-result_context"),
-                          "expertMode": displayOptionsFormData.get("display-options-form-expert_mode")};
+    displayOptionsData =
+      {
+        "resultsPerPage": displayOptionsFormData.get("display-options-form-results_per_page"),
+        "resultsContex": displayOptionsFormData.get("display-options-form-result_context"),
+        "expertMode": displayOptionsFormData.get("display-options-form-expert_mode")
+      };
     return displayOptionsData
   }
 
   // ###### Functions to inspect one match, to show more details ######
-  // activate inspect buttons if queryFinished is true
-  static activateInspect() {
+  // activate inspect buttons if progress is 100
+  activateInspect() {
+    let inspectBtnElements;
     if (progress === 100) {
-      let inspectBtnElements;
       inspectBtnElements = document.getElementsByClassName("inspect");
       for (let inspectBtn of inspectBtnElements) {
         inspectBtn.classList.remove("disabled");
@@ -148,40 +158,39 @@ class ResultsList extends List {
 
   //gets result cpos infos for one dataIndex to send back to the server
   inspect(dataIndex) {
-    // This function should be in the AnalysisClient class as a method.
-    console.log("Inspect!");
-    console.log(results.resultsJSON.matches[dataIndex].c);
-    let contextResultsElement = document.getElementById("context-results");
+    let contextResultsElement;
+    contextResultsElement = document.getElementById("context-results");
     contextResultsElement.innerHTML = "";  // clear it from old inspects
     contextModal.open();
     nopaque.socket.emit("corpus_analysis_inspect_match",
-                {payload: {
-                           first_cpos: results.resultsJSON.matches[dataIndex].c[0],
-                           last_cpos: results.resultsJSON.matches[dataIndex].c[1]
-                          }
-                });
+            {payload: {
+                       first_cpos: results.resultsJSON.matches[dataIndex].c[0],
+                       last_cpos: results.resultsJSON.matches[dataIndex].c[1]
+                      }
+            }
+          );
   }
 
   showMatchContext(response) {
-    let contextData = response.payload
-    let contextResultsElement;
+    let c;
+    let contextData;
     let contextModalLoading;
     let contextModalReady;
-    let expertModeSwitchElement
-    let partElement
+    let contextResultsElement;
+    let expertModeSwitchElement;
+    let lc;
+    let partElement;
+    let rc;
     let token;
     let tokenElement;
     let tokenElements;
-    let lc;
-    let c;
-    let rc;
-    console.log("###### match_context ######");
-    console.log("Incoming data:", contextData);
-    expertModeSwitchElement = document.getElementById("display-options-form-expert_mode");
+    contextData = response.payload;
     contextResultsElement = document.getElementById("context-results");
-
+    expertModeSwitchElement = document.getElementById("display-options-form-expert_mode");
+    // check if cpos ranges are used or not
     if (contextData.cpos_ranges == true) {
-      // python range like function from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Sequence_generator_(range)
+      // python range like function from MDN
+      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Sequence_generator_(range)
       const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));
       lc = range(contextData.match.lc[0], contextData.match.lc[1], 1)
       c = range(contextData.match.c[0], contextData.match.c[1], 1)
@@ -191,26 +200,29 @@ class ResultsList extends List {
       c = contextData.match.c;
       rc = contextData.match.rc;
     }
-
+    // create sentence strings as tokens
     partElement = document.createElement("p");
     for (let cpos of lc) {
       token = contextData["cpos_lookup"][cpos];
-      partElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
+      partElement.insertAdjacentHTML("beforeend",
+        `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
       contextResultsElement.append(partElement);
     }
     for (let cpos of c) {
       token = contextData["cpos_lookup"][cpos];
-      partElement.insertAdjacentHTML("beforeend", `<span class="token bold light-green" data-cpos="${cpos}" style="text-decoration-line: underline;">${token["word"]} </span>`);
+      partElement.insertAdjacentHTML("beforeend",
+        `<span class="token bold light-green" data-cpos="${cpos}"` +
+        `style="text-decoration-line: underline;">${token["word"]} </span>`);
       contextResultsElement.append(partElement);
     }
     for (let cpos of rc) {
       token = contextData["cpos_lookup"][cpos];
-      partElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
+      partElement.insertAdjacentHTML("beforeend",
+        `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
       contextResultsElement.append(partElement);
     }
     if (expertModeSwitchElement.checked) {
       tokenElements = partElement.getElementsByClassName("token");
-      console.log(this);
       this.expertModeOn(tokenElements, contextData);
     }
   }
@@ -225,31 +237,29 @@ class ResultsList extends List {
       resultsList.update();
       nopaque.flash("Updated matches per page.")
     } catch (e) {
-      console.log("resultsList has no results right now. Live update of items per page is useless for now.");
+      console.log("resultsList has no results right now.");
     }
   }
 
-  // Event function triggered on context select change and also if pagination is clicked
+  // Event function triggered on context select change
+  // also if pagination is clicked
   changeContext(event) {
-    let newContextValue;
+    let array;
     let lc;
+    let newContextValue;
     let rc;
-    let array;
     try {
         if (event.type === "change") {
             nopaque.flash("Updated context per match!");
         }
     } catch (e) {
-        // console.log(e);
-        // console.log("This error is expected.");
     } finally {
         newContextValue = document.getElementById("display-options-form-result_context").value;
-        console.log("Context value is:", newContextValue);
         lc = document.getElementsByClassName("left-context");
         rc = document.getElementsByClassName("right-context");
         for (let element of lc) {
           array = Array.from(element.childNodes);
-          for (let element of array.slice(newContextValue)) {
+          for (let element of array.reverse().slice(newContextValue)) {
             element.classList.add("hide");
           }
           for (let element of array.slice(0, newContextValue)) {
@@ -275,13 +285,10 @@ class ResultsList extends List {
   // if checked than expertModeOn is executed
   // if unchecked expertModeOff is executed
   eventHandlerCheck(event) {
-    console.log("pagination used!");
-    console.log(expertModeSwitchElement.checked);
     if (expertModeSwitchElement.checked) {
       this.expertModeOn(event.currentTarget.tokenElements, resultsJSON);
     } else if (!expertModeSwitchElement.checked) {
       event.preventDefault();
-      console.log("prevented! Destroy");
       this.expertModeOff(event.currentTarget.tokenElements);
     }
   }
@@ -289,17 +296,13 @@ class ResultsList extends List {
   // function to apply extra information and animation to every token
   expertModeOn(tokenElements, results) {
     let token;
-
-    console.log("expertModeOn!");
     for (let tokenElement of tokenElements) {
       tokenElement.classList.add("chip");
       tokenElement.classList.add("hoverable");
       tokenElement.classList.add("expert-view");
-      token = results["cpos_lookup"][tokenElement.dataset.cpos];
+      token = results.cpos_lookup[tokenElement.dataset.cpos];
       tokenElement.addEventListener("mouseover", (event) => {
-        console.log("Mouseover!");
-        console.log(event.target);
-        token = results["cpos_lookup"][event.target.dataset.cpos];
+        token = results.cpos_lookup[event.target.dataset.cpos];
         this.addToolTipToTokenElement(event.target, token);
       });
     }
@@ -309,26 +312,29 @@ class ResultsList extends List {
   // infos from the result JSON
   addToolTipToTokenElement(tokenElement, token) {
     M.Tooltip.init(tokenElement,
-                   {"html": `<table>
-                               <tr>
-                                 <th>Token information</th>
-                                 <th>Source information</th>
-                               </tr>
-                               <tr>
-                                 <td class="left-align">
-                                   Word: ${token["word"]}<br>
-                                   Lemma: ${token["lemma"]}<br>
-                                   POS: ${token["pos"]}<br>
-                                   Simple POS: ${token["simple_pos"]}<br>
-                                   NER: ${token["ner"]}
-                                 </td>
-                                 <td class="left-align">
-                                   Title: ${resultsJSON["text_lookup"][token["text"]]["title"]}<br>
-                                   Author: ${resultsJSON["text_lookup"][token["text"]]["author"]}<br>
-                                   Publishing year: ${resultsJSON["text_lookup"][token["text"]]["publishing_year"]}
-                                 </td>
-                               </tr>
-                             </table>`});
+     {"html": `<table>
+                 <tr>
+                   <th>Token information</th>
+                   <th>Source information</th>
+                 </tr>
+                 <tr>
+                   <td class="left-align">
+                     Word: ${token.word}<br>
+                     Lemma: ${token.lemma}<br>
+                     POS: ${token.pos}<br>
+                     Simple POS: ${token.simple_pos}<br>
+                     NER: ${token.ner}
+                   </td>
+                   <td class="left-align">
+                     Title: ${resultsJSON.text_lookup[token.text].title}
+                     <br>
+                     Author: ${resultsJSON.text_lookup[token.text].author}
+                     <br>
+                     Publishing year: ${resultsJSON.text_lookup[token.text].publishing_year}
+                   </td>
+                 </tr>
+               </table>`}
+    );
   }
 
   // function to remove extra informations and animations from tokens
@@ -343,11 +349,25 @@ class ResultsList extends List {
   }
 
   createResultRowElement(item, chunk) {
-    let values, cpos, token, matchRowElement, lcCellElement, hitCellElement, rcCellElement, textTitlesCellElement, matchNrElement, lc, c, rc;
+    let c;
+    let cCellElement;
+    let cpos;
+    let inspectBtn
+    let lc;
+    let lcCellElement;
+    let matchNrElement;
+    let matchRowElement;
+    let rc;
+    let rcCellElement;
+    let textTitles;
+    let textTitlesCellElement;
+    let token;
+    let values;
     // gather values from item
     values = item.values();
     if (chunk.cpos_ranges == true) {
-      // python range like function from MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Sequence_generator_(range)
+      // python range like function from MDN
+      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Sequence_generator_(range)
       const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));
       lc = range(values.lc[0], values.lc[1], 1)
       c = range(values.c[0], values.c[1], 1)
@@ -364,35 +384,39 @@ class ResultsList extends List {
     lcCellElement.classList.add("left-context");
     matchRowElement.appendChild(lcCellElement);
     for (cpos of lc) {
-      token = chunk["cpos_lookup"][cpos];
-      lcCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
+      token = chunk.cpos_lookup[cpos];
+      lcCellElement.insertAdjacentHTML("beforeend",
+        `<span class="token" data-cpos="${cpos}">${token.word} </span>`);
     }
 
     // get infos for hit of match
-    let textTitles = new Set();
-    hitCellElement = document.createElement("td");
-    hitCellElement.classList.add("match-hit");
+    textTitles = new Set();
+    cCellElement = document.createElement("td");
+    cCellElement.classList.add("match-hit");
     textTitlesCellElement = document.createElement("td");
     textTitlesCellElement.classList.add("titles");
     matchNrElement = document.createElement("td");
     matchNrElement.classList.add("match-nr");
-    matchRowElement.appendChild(hitCellElement);
+    matchRowElement.appendChild(cCellElement);
     for (cpos of c) {
-      token = chunk["cpos_lookup"][cpos];
-      hitCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
+      token = chunk.cpos_lookup[cpos];
+      cCellElement.insertAdjacentHTML("beforeend",
+        `<span class="token" data-cpos="${cpos}">${token.word} </span>`);
       // get text titles of every hit cpos token
-      textTitles.add(chunk["text_lookup"][token["text"]]["title"]);
+      textTitles.add(chunk.text_lookup[token.text].title);
       // add button to trigger more context to every match td
-      var inspectBtn = document.createElement("a");
-      inspectBtn.setAttribute("class", "btn-floating btn-flat waves-effect waves-light grey right inspect disabled");
+      inspectBtn = document.createElement("a");
+      inspectBtn.setAttribute("class", `btn-floating btn-flat waves-effect` +
+                                       `waves-light grey right inspect disabled`
+                              );
       inspectBtn.innerHTML = '<i class="material-icons">search</i>';
-      inspectBtn.onclick = () => {this.inspect(values["index"])};
+      inspectBtn.onclick = () => {this.inspect(values.index)};
     }
     // add text titles at front as first td of one row
-    hitCellElement.appendChild(inspectBtn);
+    cCellElement.appendChild(inspectBtn);
     textTitlesCellElement.innerText = [...textTitles].join(", ");
     matchRowElement.insertAdjacentHTML("afterbegin", textTitlesCellElement.outerHTML);
-    matchNrElement.innerText = values["index"] + 1;
+    matchNrElement.innerText = values.index + 1;
     matchRowElement.insertAdjacentHTML("afterbegin", matchNrElement.outerHTML);
 
     // get infos for right context of match
@@ -401,7 +425,8 @@ class ResultsList extends List {
     matchRowElement.appendChild(rcCellElement);
     for (cpos of rc) {
       token = chunk["cpos_lookup"][cpos];
-      rcCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
+      rcCellElement.insertAdjacentHTML("beforeend",
+        `<span class="token" data-cpos="${cpos}">${token.word} </span>`);
     }
     return matchRowElement
   }
diff --git a/app/templates/corpora/analyse_corpus.html.j2 b/app/templates/corpora/analyse_corpus.html.j2
index 10ec3bc5ea826a14d1a0b137f889a03d77fae928..a57a2096b6286fd4fb2c70d8efcfed7e1edd646a 100644
--- a/app/templates/corpora/analyse_corpus.html.j2
+++ b/app/templates/corpora/analyse_corpus.html.j2
@@ -217,36 +217,60 @@
 <script src="{{ url_for('static', filename='js/nopaque.callbacks.js') }}">
 </script>
 <script>
-  // ###### Defining global variables used in other functions ######
-  var results;  // results object
-  var resultsJSON;  // full JSON object holding match results
-  var resultsList;  // resultsList object
-  var queryFormElement;  // the query form
+// ###### Defining global variables used in other functions ######
+  var client;  // CorpusAnalysisClient first undefined on DOMContentLoaded defined
+  var collapsibleElements;  // All collapsibleElements on this page
   var collapsibleElements;  // all collapsibles on site
+  var contextModal;  // Modal to open on inspect for further match context
+  var displayOptionsData;  // Getting form data from display options
+  var displayOptionsFormElement;  // Form holding the display informations
+  var downloadResultsJSONElement;  // button for downloading results as JSON
+  var expertModeSwitchElement; // Expert mode switch Element
+  var exportModal;  // Download options modal
+  var firstPageElement;  // first page element of resultsList pagination
+  var initDisplay;  // CorpusAnalysisDisplay object first undfined on DOMContentLoaded defined
+  var initDisplayElement;  // Element for initialization using initDisplay
+  var initModal;
+  var matchCountElement;  // Total nr. of matches will be displayed in this element
   var progress;  // global progress value
-  var queryResultsProgressElement;  // Div element holding the progress bar
+  var queryDisplay; // CorpusAnalysisDisplay object first undfined on DOMContentLoaded defined
+  var queryDisplayElement;  // Element for initialization using queryDisplay
+  var queryFormElement;  // the query form
   var queryResultsDeterminateElement;  // The progress bar for recieved results
-  var queryResultsUserFeedbackElement;  // Element showing match count|total etc
   var queryResultsExportElement;  // Download button opens download modal
-  var exportModal;  // Download options modal
-  var contextModal;  // Modal to open on inspect for further match context
-  var initModal;
-  var downloadResultsJSONElement;  // button for downloading results as JSON
-  var displayOptionsFormElement;
+  var queryResultsProgressElement;  // Div element holding the progress bar
+  var queryResultsUserFeedbackElement;  // Element showing match count|total etc
+  var receivedMatchCountElement;  // Nr. of loaded matches will be displayed in this element
+  var results;  // results object
+  var resultsJSON;  // full JSON object holding match results
+  var resultsList;  // resultsList object
+  var resultsListOptions;  // specifies ResultsList options
+  var textLookupCountElement  // Nr of texts the matches occured in will be shown in this element
+  var xpath;  // xpath to grab first resultsList page pagination element
 
   // ###### Initialize variables ######
+  client = undefined;
+  collapsibleElements = document.querySelector('.collapsible.expandable');
   contextModal = document.getElementById("context-modal");
+  displayOptionsFormElement = document.getElementById("display-options-form");
+  expertModeSwitchElement = document.getElementById("display-options-form-expert_mode");
   exportModal = document.getElementById("query-results-download-modal");
+  initDisplay = undefined;
+  initDisplayElement = document.getElementById("init-display");
+  matchCountElement = document.getElementById("match-count");
+  queryDisplay = undefined;
+  queryDisplayElement = document.getElementById("query-display");
   queryFormElement = document.getElementById("query-form");
-  queryResultsProgressElement = document.getElementById("query-results-progress");
   queryResultsDeterminateElement = document.getElementById("query-results-determinate");
-  queryResultsUserFeedbackElement = document.getElementById("query-results-user-feedback");
   queryResultsExportElement = document.getElementById("query-results-export");
-  displayOptionsFormElement = document.getElementById("display-options-form");
+  queryResultsProgressElement = document.getElementById("query-results-progress");
+  queryResultsUserFeedbackElement = document.getElementById("query-results-user-feedback");
+  receivedMatchCountElement = document.getElementById("received-match-count");
+  textLookupCountElement = document.getElementById("text-lookup-count");
 
-  // js list options and intialization
-  let displayOptionsData = ResultsList.getDisplayOptions(displayOptionsFormElement);
-  let resultsListOptions = {page: displayOptionsData["resultsPerPage"],
+  // ###### js list options and intialization ######
+  displayOptionsData = ResultsList.getDisplayOptions(displayOptionsFormElement);
+  resultsListOptions = {page: displayOptionsData["resultsPerPage"],
     pagination: [{
       name: "paginationTop",
       paginationClass: "paginationTop",
@@ -260,23 +284,8 @@
     valueNames: ["titles", "lc", "c", "rc", {data: ["index"]}],
     item: `<span></span>`};
 
-  // ###### Set some css options ######
-  // get collapsibles to alter options of those
-  var collapsibleElements = document.querySelector('.collapsible.expandable');
-
-
-  var client = undefined;
-  var initDisplay = undefined;
-  var queryDisplay = undefined;
-
-  var initDisplayElement = document.getElementById("init-display");
-  var queryDisplayElement = document.getElementById("query-display");
-  receivedMatchCountElement = document.getElementById("received-match-count");
-  matchCountElement = document.getElementById("match-count");
-  textLookupCountElement = document.getElementById("text-lookup-count");
-  var expertModeSwitchElement = document.getElementById("display-options-form-expert_mode");
-
 
+  // ###### event on DOMContentLoaded ######
   document.addEventListener("DOMContentLoaded", () => {
     //set accordion of collapsibles to false
     M.Collapsible.init(collapsibleElements, {accordion: false});
@@ -311,6 +320,19 @@
     client.init();
     // start a query request on submit
     queryFormElement.addEventListener("submit", (event) => {
+      try {
+        // Selects first page of result list if pagination is already available
+        // from an query submitted before.
+        // This avoids confusion for the user eg: The user was on page 24
+        // reviewing the results and issues a new query. He would not see any
+        // results until the new results reach page 24 or he clicks on another
+        // valid result page element from the new pagination.
+        firstPageElement;
+        xpath = '//a[@class="page" and text()=1]';
+        firstPageElement = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
+        firstPageElement.click();
+      } catch (e) {
+      }
       // Prevent page from reloading on submit
       event.preventDefault();
       // empty ResultsList and ResultsJSON for new query
@@ -336,7 +358,7 @@
     paginationElements = document.getElementsByClassName("pagination");
     for (element of paginationElements) {
       element.addEventListener("click", results.resultsList.changeContext);
-      element.addEventListener("click", ResultsList.activateInspect);
+      element.addEventListener("click", results.resultsList.activateInspect);
     }
 
     // epxert mode table view
@@ -344,16 +366,13 @@
       let currentTokenElements = document.getElementsByClassName("token");
       let paginationElements = document.getElementsByClassName("pagination");
       if (event.target.checked) {
-        console.log("Checked!");
         results.resultsList.expertModeOn(currentTokenElements, resultsJSON);
         for (element of paginationElements) {
           element.tokenElements = currentTokenElements;
           element.addEventListener("click", (event) => { results.resultsList.eventHandlerCheck(event)});
         }
       } else {
-        console.log("Unchecked!");
         results.resultsList.expertModeOff(currentTokenElements);
-        console.log("unchecked! Destroy");
       }
     });
   });