diff --git a/src/components/views/elements/MessageEditor.js b/src/components/views/elements/MessageEditor.js
index f51348ce04..a121f3384e 100644
--- a/src/components/views/elements/MessageEditor.js
+++ b/src/components/views/elements/MessageEditor.js
@@ -26,7 +26,7 @@ import {htmlSerializeIfNeeded, textSerialize} from '../../../editor/serialize';
 import {findEditableEvent} from '../../../utils/EventUtils';
 import {parseEvent} from '../../../editor/deserialize';
 import Autocomplete from '../rooms/Autocomplete';
-import {PartCreator} from '../../../editor/parts';
+import {PartCreator, autoCompleteCreator} from '../../../editor/parts';
 import {renderModel} from '../../../editor/render';
 import EditorStateTransfer from '../../../utils/EditorStateTransfer';
 import {MatrixClient} from 'matrix-js-sdk';
@@ -303,8 +303,7 @@ export default class MessageEditor extends React.Component {
         const {editState} = this.props;
         const room = this._getRoom();
         const partCreator = new PartCreator(
-            () => this._autocompleteRef,
-            query => this.setState({query}),
+            autoCompleteCreator(() => this._autocompleteRef, query => this.setState({query})),
             room,
             this.context.matrixClient,
         );
diff --git a/src/editor/parts.js b/src/editor/parts.js
index 572a861024..971d93ef33 100644
--- a/src/editor/parts.js
+++ b/src/editor/parts.js
@@ -117,7 +117,8 @@ class BasePart {
     }
 }
 
-class PlainPart extends BasePart {
+// exported for unit tests, should otherwise only be used through PartCreator
+export class PlainPart extends BasePart {
     acceptsInsertion(chr) {
         return chr !== "@" && chr !== "#" && chr !== ":" && chr !== "\n";
     }
@@ -348,18 +349,24 @@ class PillCandidatePart extends PlainPart {
     }
 }
 
-export class PartCreator {
-    constructor(getAutocompleterComponent, updateQuery, room, client) {
-        this._room = room;
-        this._client = client;
-        this._autoCompleteCreator = (updateCallback) => {
+export function autoCompleteCreator(updateQuery, getAutocompleterComponent) {
+    return (partCreator) => {
+        return (updateCallback) => {
             return new AutocompleteWrapperModel(
                 updateCallback,
                 getAutocompleterComponent,
                 updateQuery,
-                this,
+                partCreator,
             );
         };
+    };
+}
+
+export class PartCreator {
+    constructor(autoCompleteCreator, room, client) {
+        this._room = room;
+        this._client = client;
+        this._autoCompleteCreator = autoCompleteCreator(this);
     }
 
     createPartForInput(input) {