diff --git a/js/extensionPrefs/main.js b/js/extensionPrefs/main.js
index 53a6966..c4eeee3 100644
--- a/js/extensionPrefs/main.js
+++ b/js/extensionPrefs/main.js
@@ -203,7 +203,7 @@ const Application = new Lang.Class({
     _scanExtensions: function() {
         let finder = new ExtensionUtils.ExtensionFinder();
         finder.connect('extension-found', Lang.bind(this, this._extensionFound));
-        finder.scanExtensions();
+        finder.scanExtensionsSync();
     },
 
     _extensionFound: function(signals, extension) {
diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js
index 9e70e26..e98f830 100644
--- a/js/misc/extensionUtils.js
+++ b/js/misc/extensionUtils.js
@@ -174,12 +174,46 @@ const ExtensionFinder = new Lang.Class({
         this.emit('extension-found', extension);
     },
 
+    _scanExtensionsInDirectory: function(dir, perUserDir) {
+        let fileEnum;
+        let info;
+        try {
+            fileEnum = dir.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null);
+        } catch(e) {
+            if (e.domain != Gio.io_error_quark() || e.code != Gio.IOErrorEnum.NOT_FOUND)
+                logError(e, 'Could not enumerate extensions directory');
+            return;
+        }
+
+        while ((info = fileEnum.next_file(null)) != null) {
+            let fileType = info.get_file_type();
+            if (fileType != Gio.FileType.DIRECTORY)
+                continue;
+            let uuid = info.get_name();
+            let extensionDir = dir.get_child(uuid);
+            this._loadExtension(extensionDir, info, perUserDir);
+        }
+        fileEnum.close(null);
+    },
+
     scanExtensions: function() {
         let perUserDir = Gio.File.new_for_path(global.userdatadir);
         FileUtils.collectFromDatadirsAsync('extensions',
                                            { processFile: Lang.bind(this, this._loadExtension),
                                              includeUserDir: true,
                                              data: perUserDir });
+    },
+
+    scanExtensionsSync: function() {
+        let perUserDir = Gio.File.new_for_path(global.userdatadir);
+        let dataDirs = GLib.get_system_data_dirs();
+        dataDirs.unshift(GLib.get_user_data_dir());
+        for (let i = 0; i < dataDirs.length; i++) {
+            let dirPath = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'extensions']);
+            let dir = Gio.file_new_for_path(dirPath);
+            if (dir.query_exists(null))
+                this._scanExtensionsInDirectory(dir, perUserDir);
+        }
     }
 });
 Signals.addSignalMethods(ExtensionFinder.prototype);
