diff --git a/packages/location-select/src/location-select.js b/packages/location-select/src/location-select.js
index b0ba579eaa209a2e3544ddf6c23ef39ffcc4293d..44b49571e2bd577f75e7845140aac4f96592a19b 100644
--- a/packages/location-select/src/location-select.js
+++ b/packages/location-select/src/location-select.js
@@ -81,15 +81,11 @@ export class LocationSelect extends ScopedElementsMixin(LitElement) {
         this.updateComplete.then(()=>{
             that.$select = that.$('#' + that.selectId);
 
-            // close the selector on blur of the web component
-            $(that).blur(() => {
-                // the 500ms delay is a workaround to actually get an item selected when clicking on it,
-                // because the blur gets also fired when clicking in the selector
-                setTimeout(() => {
-                    if (this.select2IsInitialized()) {
-                        that.$select.select2('close');
-                    }
-                }, 500);
+            // Close the popup when clicking outside of select2
+            document.addEventListener('click', (ev) => {
+                if (!ev.composedPath().includes(this)) {
+                    this._closeSelect2();
+                }
             });
 
             // try an init when user-interface is loaded
@@ -97,6 +93,14 @@ export class LocationSelect extends ScopedElementsMixin(LitElement) {
         });
     }
 
+    _closeSelect2() {
+        const $select = this.$('#' + this.selectId);
+        console.assert($select.length, "select2 missing");
+        if (this.select2IsInitialized($select)) {
+            $select.select2('close');
+        }
+    }
+
     initJSONLD(ignorePreset = false) {
         const that = this;