diff --git a/static/js/base.js b/static/js/base.js
index 53df8329..622a13f4 100644
--- a/static/js/base.js
+++ b/static/js/base.js
@@ -1,21 +1,6 @@
 // Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
 // SPDX-License-Identifier: GPL-3.0-or-later
 
-/**
- * Perform a request on an URL and get result
- * @param url The url where the request is performed
- * @param success The function to call with the request
- * @param data The data for the request (optional)
- */
-function getJSONSync(url, success, data) {
-    $.ajax({
-        url: url,
-        dataType: 'json',
-        data: data,
-        async: false,
-        success: success
-    });
-}
 
 /**
  * Convert balance in cents to a human readable amount
@@ -41,14 +26,9 @@ function refreshBalance() {
  * Query the 20 first matched notes with a given pattern
  * @param pattern The pattern that is queried
  * @param fun For each found note with the matched alias `alias`, fun(note, alias) is called.
- * This function is synchronous.
  */
 function getMatchedNotes(pattern, fun) {
-    getJSONSync("/api/note/alias/?format=json&alias=" + pattern + "&search=user|club&ordering=normalized_name", function(aliases) {
-        aliases.results.forEach(function(alias) {
-            fun(alias.note, alias);
-        });
-    });
+    $.getJSON("/api/note/alias/?format=json&alias=" + pattern + "&search=user|club&ordering=normalized_name", fun);
 }
 
 /**
@@ -161,63 +141,71 @@ function autoCompleteNote(field_id, alias_matched_id, note_list_id, notes, notes
         let aliases_matched_obj = $("#" + alias_matched_id);
         let aliases_matched_html = "";
         // Get matched notes with the given pattern
-        getMatchedNotes(pattern, function(note, alias) {
-            aliases_matched_html += li(alias_prefix + "_" + alias.normalized_name, alias.name);
-            note.alias = alias;
-            notes.push(note);
-        });
+        getMatchedNotes(pattern, function(aliases) {
+            // The response arrived too late, we stop the request
+            if (pattern !== $("#" + field_id).val())
+                return;
 
-        // Display the list of matched aliases
-        aliases_matched_obj.html(aliases_matched_html);
-
-        notes.forEach(function (note) {
-            let alias = note.alias;
-            let alias_obj = $("#" + alias_prefix + "_" + alias.normalized_name);
-            // When an alias is hovered, the profile picture and the balance are displayed at the right place
-            alias_obj.hover(function() {
-                displayNote(note, alias.name, user_note_field, profile_pic_field);
+            aliases.results.forEach(function (alias) {
+                let note = alias.note;
+                aliases_matched_html += li(alias_prefix + "_" + alias.id, alias.name);
+                note.alias = alias;
+                notes.push(note);
             });
 
-            // When the user click on an alias, the associated note is added to the emitters
-            alias_obj.click(function() {
-                field.val("");
-                // If the note is already an emitter, we increase the quantity
-                var disp = null;
-                notes_display.forEach(function(d) {
-                    // We compare the note ids
-                    if (d[1] === note.id) {
-                        d[3] += 1;
-                        disp = d;
-                    }
-                });
-                // In the other case, we add a new emitter
-                if (disp == null)
-                    notes_display.push([alias.name, note.id, note, 1]);
+            // Display the list of matched aliases
+            aliases_matched_obj.html(aliases_matched_html);
 
-                // If the function alias_click exists, it is called. If it doesn't return true, then the notes are
-                // note displayed. Useful for a consumption when a button is already clicked
-                if (alias_click && !alias_click())
-                    return;
-
-                let note_list = $("#" + note_list_id);
-                let html = "";
-                notes_display.forEach(function(disp) {
-                   html += li(note_prefix + "_" + disp[1], disp[0]
-                        + "" + disp[3] + "");
+            notes.forEach(function (note) {
+                let alias = note.alias;
+                let alias_obj = $("#" + alias_prefix + "_" + alias.id);
+                // When an alias is hovered, the profile picture and the balance are displayed at the right place
+                alias_obj.hover(function () {
+                    displayNote(note, alias.name, user_note_field, profile_pic_field);
                 });
 
-                // Emitters are displayed
-                note_list.html(html);
+                // When the user click on an alias, the associated note is added to the emitters
+                alias_obj.click(function () {
+                    field.val("");
+                    // If the note is already an emitter, we increase the quantity
+                    var disp = null;
+                    notes_display.forEach(function (d) {
+                        // We compare the note ids
+                        if (d[1] === note.id) {
+                            d[3] += 1;
+                            disp = d;
+                        }
+                    });
+                    // In the other case, we add a new emitter
+                    if (disp == null)
+                        notes_display.push([alias.name, note.id, note, 1]);
 
-                notes_display.forEach(function(disp) {
-                    let line_obj = $("#" + note_prefix + "_" + disp[1]);
-                    // Hover an emitter display also the profile picture
-                    line_obj.hover(function() {
-                        displayNote(disp[2], disp[0], user_note_field, profile_pic_field);
+                    // If the function alias_click exists, it is called. If it doesn't return true, then the notes are
+                    // note displayed. Useful for a consumption when a button is already clicked
+                    if (alias_click && !alias_click())
+                        return;
+
+                    let note_list = $("#" + note_list_id);
+                    let html = "";
+                    notes_display.forEach(function (disp) {
+                        html += li(note_prefix + "_" + disp[1], disp[0]
+                            + "" + disp[3] + "");
                     });
 
-                    // When an emitter is clicked, it is removed
-                    line_obj.click(removeNote(disp, note_prefix, notes_display, note_list_id, user_note_field, profile_pic_field));
+                    // Emitters are displayed
+                    note_list.html(html);
+
+                    notes_display.forEach(function (disp) {
+                        let line_obj = $("#" + note_prefix + "_" + disp[1]);
+                        // Hover an emitter display also the profile picture
+                        line_obj.hover(function () {
+                            displayNote(disp[2], disp[0], user_note_field, profile_pic_field);
+                        });
+
+                        // When an emitter is clicked, it is removed
+                        line_obj.click(removeNote(disp, note_prefix, notes_display, note_list_id, user_note_field,
+                            profile_pic_field));
+                    });
                 });
             });
         });