diff --git a/app/corpora/CQiWrapper/CQiWrapper.py b/app/corpora/CQiWrapper/CQiWrapper.py
index d96c5ed99e0db86c5d136dc819eaa521d043398f..0a5770b9c3ba989959880abd784c8c6b27316d74 100644
--- a/app/corpora/CQiWrapper/CQiWrapper.py
+++ b/app/corpora/CQiWrapper/CQiWrapper.py
@@ -287,12 +287,14 @@ class CQiWrapper(CQiClient):
         first_cpos, last_cpos = match_cpos_list[0], match_cpos_list[-1]
         context_sentences = {}
         s_ids = self.cl_cpos2struc(key, [first_cpos, last_cpos])
+        logger.warning('s id match: {}'.format(s_ids))
         for s_id in s_ids:
             s_start, s_end = self.cl_struc2cpos(key, s_id)
             s_cpos = list(range(s_start, s_end + 1))
             context_sentences[s_id] = s_cpos
         if get_surrounding_s:
-            max_s_id = self.cl_attribute_size(key)
+            max_s_id = self.cl_attribute_size(key) - 1
+            logger.warning('max sid: {}'.format(max_s_id))
             additional_s_ids = []
             additional_s = list(range(max(s_ids[0]
                                           - l_r_s_context_additional_len,
@@ -302,6 +304,7 @@ class CQiWrapper(CQiClient):
                                           max_s_id) + 1))
             additional_s_ids.extend(additional_s)
             for s_id in additional_s_ids:
+                logger.warning('s id additional: {}'.format(s_id))
                 s_start, s_end = self.cl_struc2cpos(key, s_id)
                 s_cpos = list(range(s_start, s_end + 1))
                 context_sentences[s_id] = s_cpos
diff --git a/app/static/css/nopaque.css b/app/static/css/nopaque.css
index 9094c45177db5b176b625a0df1d293fcb10d1f10..a86502e0739389ff70b4b4b339a4fb9d5f1db6ec 100644
--- a/app/static/css/nopaque.css
+++ b/app/static/css/nopaque.css
@@ -38,6 +38,11 @@ main {
 }
 /* ### End sidenav-fixed offset ### */
 
+/* add custom bold class */
+.bold {
+  font-weight: bold;
+}
+
 /* CSS for clickable th elements in tables. Needed for sortable table data with
 list js. On click on th header elements will be sorted accordingly. Also a caret
 indicator will show up how the column is sorted right now.; */
@@ -87,6 +92,7 @@ indicator will show up how the column is sorted right now.; */
   z-index: 999; /* tmp fix */
 }
 
+/* styles for resource lists */
 .service[data-service]:before {
   content: "help";
 }
diff --git a/app/static/js/nopaque.js b/app/static/js/nopaque.js
index 35fae36b6acfa5906400cae49a8208df8e4b212e..3c3d9309b878a878c2c85e8dd596f7e9300e1d74 100644
--- a/app/static/js/nopaque.js
+++ b/app/static/js/nopaque.js
@@ -164,6 +164,42 @@ nopaque.socket.on("foreign_jobs_update", function(msg) {
   for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._update(patch);}
 });
 
+// get context of one match if inspected
+nopaque.socket.on("match_context", function(message) {
+  console.log("### match_context ###");
+  console.log(message);
+  contextResultsElement.innerHTML = "<p>&nbsp;</p>";
+  document.getElementById("context-modal-loading").classList.add("hide");
+  document.getElementById("context-modal-ready").classList.remove("hide");
+
+  let sentenceElement, token, tokenElement;
+
+  lookup["cpos"] = {...lookup["cpos"], ...message["cpos_lookup"]};
+  lookup["s"] = message["context_s_cpos"];
+  lookup["text"] = {...lookup["text"], ...message["text_lookup"]};
+
+  for (let [key, value] of Object.entries(message['context_s_cpos'])) {
+    sentenceElement = document.createElement("p");
+    for (cpos of value) {
+      token = lookup["cpos"][cpos];
+      tokenElement = document.createElement("span");
+      tokenElement.classList.add("token");
+      if (message["match_cpos_list"].includes(cpos)) {
+        tokenElement.classList.add("bold");
+      }
+      tokenElement.dataset.cpos = cpos;
+      tokenElement.innerText = token["word"];
+    //   if (expertModeSwitchElement.checked) {
+    //     tokenElement.classList.add("chip");
+    //     addToolTipToTokenElement(tokenElement, token);
+    //   }
+      // tokenElements.add(tokenElement);
+      sentenceElement.append(tokenElement);
+      sentenceElement.append(document.createTextNode(" "));
+    }
+    contextResultsElement.append(sentenceElement);
+  }
+});
 
 document.addEventListener("DOMContentLoaded", function() {
   M.AutoInit();
diff --git a/app/static/js/nopaque.lists.js b/app/static/js/nopaque.lists.js
index da255d30d21bd27734ef220cd7e777bd7f8588f0..86ead2ed62ce74ed4f7654c26ac57b04ecc90e02 100644
--- a/app/static/js/nopaque.lists.js
+++ b/app/static/js/nopaque.lists.js
@@ -93,66 +93,55 @@ RessourceList.options = {
 class ResultList extends List {
 
   createResultRowElement(item, chunk) {
-    let values, cpos, matchRowElement, lcCellElement, lcTokenElement, token;
+    let values, cpos, token, matchRowElement, lcCellElement, hitCellElement, rcCellElement, textTitlesCellElement;
     // gather values from item
     values = item.values();
     console.log("CHONK");
     console.log(chunk);
+
     // get infos for full match row
     matchRowElement = document.createElement("tr");
+    matchRowElement.setAttribute("data-index", values["index"])
+    lcCellElement = document.createElement("td");
+    lcCellElement.classList.add("left-context");
+    matchRowElement.appendChild(lcCellElement);
     for (cpos of values["lc"]) {
-      console.log(cpos);
-      lcCellElement = document.createElement("td");
-      lcTokenElement = document.createElement("span");
-      lcTokenElement.classList.add("token");
-      lcTokenElement.dataset.cpos = cpos;
       token = chunk["cpos_lookup"][cpos];
-      lcTokenElement.innerText = token["word"];
-      lcCellElement.appendChild(lcTokenElement);
-      //   let hit_tokens = "";
+      lcCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
     }
-    matchRowElement.appendChild(lcCellElement);
-    //   // get infos of match
-    //   let textTitles = new Set();
-    //   for (cpos of match["hit"]) {
-    //     tokenElement = document.createElement("span");
-    //     tokenElement.classList.add("token");
-    //     tokenElement.dataset.cpos = cpos;
-    //     token = chunk["cpos_lookup"][cpos];
-    //     tokenElement.innerText = token["word"];
-    //     hit_tokens += " " + tokenElement.outerHTML;
-    //     // get text titles of every hit cpos token
-    //     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");
-    //   inspectBtn.onclick = function() {inspect()};
-    //   inspectBtn.innerHTML = '<i class="material-icons">search</i>';
-    //   hit_tokens += "<p>" + inspectBtn.outerHTML + "</p>";
-    //   // get infos for right context of match
-    //   let rc_tokens = "";
-    //   for (cpos of match["rc"]) {
-    //     tokenElement = document.createElement("span");
-    //     tokenElement.classList.add("token");
-    //     tokenElement.dataset.cpos = cpos;
-    //     token = chunk["cpos_lookup"][cpos];
-    //     tokenElement.innerText = token["word"];
-    //     rc_tokens += " " + tokenElement.outerHTML;
-    //   }
-    //   // put all infos into an javascribt object
-    //   textTitleElement = document.createElement("span");
-    //   textTitleElement.classList.add("text-titles");
-    //   textTitles = [...textTitles].join(",");
-    //   textTitleElement.innerText = textTitles;
-    //
-    //   matchRowElement.appendChild(textTitleElement);
-    //   // matchRowElement.appendChild(lc_tokens);
-    //   // matchRowElement.appendChild(hit_tokens);
-    //   // matchRowElement.appendChild(rc_tokens);
-    //   // matchRowElement.appendChild(index);
-    // }
-    console.log(matchRowElement.outerHTML);
+
+    // get infos for hit of match
+    let textTitles = new Set();
+    hitCellElement = document.createElement("td");
+    hitCellElement.classList.add("match-hit");
+    textTitlesCellElement = document.createElement("td");
+    textTitlesCellElement.classList.add("titles");
+    matchRowElement.appendChild(hitCellElement);
+    for (cpos of values["hit"]) {
+      token = chunk["cpos_lookup"][cpos];
+      hitCellElement.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"]);
+      // 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");
+      inspectBtn.innerHTML = '<i class="material-icons">search</i>';
+      inspectBtn.onclick = function () {inspect(values["index"])};
+    }
+    // add text titles at front as first td of one row
+    hitCellElement.appendChild(inspectBtn);
+    textTitlesCellElement.innerText = [...textTitles].join(", ");
+    matchRowElement.insertAdjacentHTML("afterbegin", textTitlesCellElement.outerHTML);
+
+    // get infos for right context of match
+    rcCellElement = document.createElement("td");
+    rcCellElement.classList.add("right-context");
+    matchRowElement.appendChild(rcCellElement);
+    for (cpos of values["rc"]) {
+      token = chunk["cpos_lookup"][cpos];
+      rcCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
+    }
+    console.log(matchRowElement);
     return matchRowElement
   }
 }
diff --git a/app/templates/corpora/analyse_corpus.html.j2 b/app/templates/corpora/analyse_corpus.html.j2
index 382418ab5fd04a53636b52a2caef363215079a59..1357bc9c0a11e105a652c09c5572b52b8e99251a 100644
--- a/app/templates/corpora/analyse_corpus.html.j2
+++ b/app/templates/corpora/analyse_corpus.html.j2
@@ -378,13 +378,16 @@
     resultList.add(resultItems, items => {
       for (let item of items) {
         item.elm = resultList.createResultRowElement(item, chunk);}
+      resultList.update();
     });
-    resultList.update();
     });
 
     // inspect match functions
-    function inspect() {
-      console.log("Inspect!")
+    function inspect(dataIndex) {
+      console.log("Inspect!");
+      console.log(result["matches"][dataIndex]["hit"]);
+      contextModal.open();
+      nopaque.socket.emit("inspect_match", {"cpos": result["matches"][dataIndex]["hit"]});
     }
 
     // Function to download data to a file
@@ -441,45 +444,6 @@
                    "position": "top",
                    "transitionMovement": 0});
   }
-
-
-  nopaque.socket.on("match_context", function(message) {
-    console.log("### match_context ###");
-    console.log(message);
-    contextResultsElement.innerHTML = "<p>&nbsp;</p>";
-    document.getElementById("context-modal-loading").classList.add("hide");
-    document.getElementById("context-modal-ready").classList.remove("hide");
-
-    var sentenceElement;
-    var token;
-    var tokenElement;
-
-    lookup["cpos"] = {...lookup["cpos"], ...message["cpos_lookup"]};
-    lookup["s"] = message["context_s_cpos"];
-    lookup["text"] = {...lookup["text"], ...message["text_lookup"]};
-
-    for (let [key, value] of Object.entries(message['context_s_cpos'])) {
-      sentenceElement = document.createElement("p");
-      for (cpos of value) {
-        token = lookup["cpos"][cpos];
-        tokenElement = document.createElement("span");
-        tokenElement.classList.add("token");
-        if (message["match_cpos_list"].includes(cpos)) {
-          tokenElement.classList.add("bold");
-        }
-        tokenElement.dataset.cpos = cpos;
-        tokenElement.innerText = token["word"];
-        if (expertModeSwitchElement.checked) {
-          tokenElement.classList.add("chip");
-          addToolTipToTokenElement(tokenElement, token);
-        }
-        tokenElements.add(tokenElement);
-        sentenceElement.append(tokenElement);
-        sentenceElement.append(document.createTextNode(" "));
-      }
-      contextResultsElement.append(sentenceElement);
-    }
-  });
   // collapsible display options
   var elem = document.querySelector('.collapsible.expandable');
 </script>