The server splits the attendee input on whitespace, commas and semicolons, but the search widget only treated commas and semicolons as separators. Typing "a@x.com b" therefore sent the whole string as the search query instead of "b", and picking a contact dropped the whitespace-separated entry. Split on /[\s;,]+/ in both fragment() and commit() so the widget agrees with parseAttendees() on what an entry is.