diff --git a/scripts/h5peditor.js b/scripts/h5peditor.js
index c88e1186c7b7109d10e2513733ced29dbf1ebb85..3affeec6e0dc6d90746129875887c74c1df76493 100644
--- a/scripts/h5peditor.js
+++ b/scripts/h5peditor.js
@@ -56,34 +56,46 @@ ns.isIE = navigator.userAgent.match(/; MSIE \d+.\d+;/) !== null;
  */
 ns.renderableCommonFields = {};
 
-/**
- * Help load JavaScripts, prevents double loading.
- *
- * @param {string} src
- * @param {Function} done Callback
- */
-ns.loadJs = function (src, done) {
-  if (H5P.jsLoaded(src)) {
-    // Already loaded
-    done();
-  }
-  else {
-    // Loading using script tag
+(() => {
+  const loading = {}; // Map of callbacks for each src being loaded
+
+  /**
+   * Help load JavaScripts, prevents double loading.
+   *
+   * @param {string} src
+   * @param {Function} done Callback
+   */
+  ns.loadJs = (src, done) => {
+    if (H5P.jsLoaded(src)) {
+      // Already loaded
+      done(); 
+      return;
+    }
+
+    if (loading[src] !== undefined) {
+      // Loading in progress...
+      loading[src].push(done);
+      return;
+    }
+
+    loading[src] = [done];
+
+    // Load using script tag
     var script = document.createElement('script');
     script.type = 'text/javascript';
     script.charset = 'UTF-8';
     script.async = false;
     script.onload = function () {
       H5PIntegration.loadedJs.push(src);
-      done();
+      loading[src].forEach(cb => cb());
     };
     script.onerror = function (err) {
-      done(err);
+      loading[src].forEach(cb => cb(err));
     };
     script.src = src;
     document.head.appendChild(script);
-  }
-}
+  };
+})();
 
 /**
  * Helper function invoked when a library is requested. Will add CSS and eval JS