diff --git a/app/static/js/CorpusAnalysis/QueryBuilder.js b/app/static/js/CorpusAnalysis/QueryBuilder.js
index 522054dd3d44681d4386eec28f3e75fdfe34869a..325e9982937728394a2fcde1690a795435b1da66 100644
--- a/app/static/js/CorpusAnalysis/QueryBuilder.js
+++ b/app/static/js/CorpusAnalysis/QueryBuilder.js
@@ -209,15 +209,17 @@ class ConcordanceQueryBuilder {
     window.location.href = '#query-container';
     this.elements.counter += 1;
     queryText = encodeURI(queryText);
-    let buttonElement = Utils.elementFromString(
+    let buttonElement = Utils.HTMLToElement(
       `
-        <div class='chip' data-type='${dataType}' data-query='${queryText}' draggable='true' style='cursor:pointer;' ondragstart='concordanceQueryBuilder.dragStartHandler(event)' ondragend='concordanceQueryBuilder.dragEndHandler(event)'>
+        <div class="chip" data-type="${dataType}" data-query="${queryText}" draggable="true">
           ${prettyText}
-          <i class='material-icons close'>close</i>
+          <i class="material-icons close">close</i>
         </div>
       `
     );
     buttonElement.addEventListener('click', () => {this.deleteAttr(buttonElement);});
+    buttonElement.addEventListener('dragstart', (event) => {this.dragStartHandler(event);});
+    buttonElement.addEventListener('dragend', (event) => {this.dragEndHandler(event);});
 
     // Ensures that metadata is always at the end of the query:
     if (this.elements.yourQuery.lastChild === null || this.elements.yourQuery.lastChild.dataset.type !== 'text-annotation') {
@@ -238,11 +240,11 @@ class ConcordanceQueryBuilder {
   dragStartHandler(event) {
     // Creates element with the class 'target' and all necessary drop functions, in which drop content can be released
     this.elements.dropButton = event.target;
-    let targetChip = `
-      <div class='chip target' ondragover='concordanceQueryBuilder.dragOverHandler(event)' ondragenter='concordanceQueryBuilder.dragEnterHandler(event)' ondragleave='concordanceQueryBuilder.dragLeaveHandler(event)' ondrop='concordanceQueryBuilder.dropHandler(event)'>
-        Drop here
-      </div>
-    `.trim();
+    let targetChipElement = Utils.HTMLToElement('<div class="chip target">Drop here</div>');
+    targetChipElement.addEventListener('dragover', (event) => {this.dragOverHandler(event);});
+    targetChipElement.addEventListener('dragenter', (event) => {this.dragEnterHandler(event);});
+    targetChipElement.addEventListener('dragleave', (event) => {this.dragLeaveHandler(event);});
+    targetChipElement.addEventListener('drop', (event) => {this.dropHandler(event);});
     // selects all nodes without target class
     let childNodes = this.elements.yourQuery.querySelectorAll('div:not(.target)');
 
@@ -252,15 +254,15 @@ class ConcordanceQueryBuilder {
         if (element === this.elements.dropButton) {
           // If the dragged element is not at the very end, a target chip is also inserted at the end
           if (childNodes[childNodes.length - 1] !== element) {
-            childNodes[childNodes.length - 1].insertAdjacentHTML('afterend', targetChip);
+            childNodes[childNodes.length - 1].insertAdjacentElement('afterend', targetChipElement);
           }
         } else if (element === this.elements.dropButton.nextSibling) {
           continue;
         } else {
-          element.insertAdjacentHTML('beforebegin', targetChip)
+          element.insertAdjacentElement('beforebegin', targetChipElement)
         }
       }
-    },0);
+    }, 0);
   }
 
   dragOverHandler(event) {
diff --git a/app/static/js/Forms/Form.js b/app/static/js/Forms/Form.js
index d93f3e2c7b3ebe69d99585d3c3c5583f1fd421b5..a9604c69e16fde0b8e68a834072e71db4fcfb5d4 100644
--- a/app/static/js/Forms/Form.js
+++ b/app/static/js/Forms/Form.js
@@ -32,7 +32,7 @@ class Form {
 
   submit(event) {
     let request = new XMLHttpRequest();
-    let modalElement = Utils.elementFromString(
+    let modalElement = Utils.HTMLToElement(
       `
         <div class="modal">
           <div class="modal-content">
@@ -71,7 +71,7 @@ class Form {
     for (let selectElement of this.formElement.querySelectorAll('select')) {
       if (selectElement.value === '') {
         let inputFieldElement = selectElement.closest('.input-field');
-        let errorHelperTextElement = Utils.elementFromString(
+        let errorHelperTextElement = Utils.HTMLToElement(
           '<span class="helper-text error-color-text" data-helper-text-type="error">Please select an option.</span>'
         );
         inputFieldElement.appendChild(errorHelperTextElement);
@@ -98,7 +98,7 @@ class Form {
             .querySelector(`input[name$="${inputName}"], select[name$="${inputName}"]`)
             .closest('.input-field');
           for (let inputError of inputErrors) {
-            let errorHelperTextElement = Utils.elementFromString(
+            let errorHelperTextElement = Utils.HTMLToElement(
               `<span class="helper-text error-color-text" data-helper-type="error">${inputError}</span>`
             );
             inputFieldElement.appendChild(errorHelperTextElement);
diff --git a/app/static/js/Utils.js b/app/static/js/Utils.js
index 2b81a8ed878ca9499b14b75e8301af1b6c06a082..d00b613a3b18b1e088885408051ec38e45d5f66e 100644
--- a/app/static/js/Utils.js
+++ b/app/static/js/Utils.js
@@ -1,8 +1,8 @@
 class Utils {
-  static elementFromString(string) {
-    let tmpElement = document.createElement('div');
-    tmpElement.innerHTML = string.trim();
-    return tmpElement.firstChild;
+  static HTMLToElement(HTMLString) {
+    let templateElement = document.createElement('template');
+    templateElement.innerHTML = HTMLString.trim();
+    return templateElement.content.firstChild;
   }
 
   static generateElementId(prefix='', suffix='') {
@@ -87,7 +87,7 @@ class Utils {
         corpus = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -143,7 +143,7 @@ class Utils {
         corpusFile = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -199,7 +199,7 @@ class Utils {
         spaCyNLPPipelineModel = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -254,7 +254,7 @@ class Utils {
         tesseractOCRPipelineModel = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -302,7 +302,7 @@ class Utils {
 
   static deleteProfileAvatarRequest(userId) {
     return new Promise((resolve, reject) => {
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -357,7 +357,7 @@ class Utils {
         job = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -420,7 +420,7 @@ class Utils {
         )
         .then(
           (text) => {
-            let modalElement = Utils.elementFromString(
+            let modalElement = Utils.HTMLToElement(
               `
                 <div class="modal">
                   <div class="modal-content">
@@ -459,7 +459,7 @@ class Utils {
         job = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">
@@ -516,7 +516,7 @@ class Utils {
         user = {};
       }
 
-      let modalElement = Utils.elementFromString(
+      let modalElement = Utils.HTMLToElement(
         `
           <div class="modal">
             <div class="modal-content">