     }
 
     override func didCommitTextEditing(_ sender: Any) {
-        guard let messageToEdit = messageToEdit else { return }
-        editTextMessage(message: messageToEdit, text: textView.text)
+        if let messageToEdit = messageToEdit {
+            editTextMessage(message: messageToEdit, text: textView.text)
+        }
+
+        resetMessageSending()
+        messageToEdit = nil
+
         super.didCommitTextEditing(sender)
     }
 
     override func didCancelTextEditing(_ sender: Any) {
+        messageToEdit = nil
         super.didCancelTextEditing(sender)
-        messageToEdit = nil
     }
 
     override func didPressLeftButton(_ sender: Any?) {

    }

    override func didPressRightButton(_ sender: Any?) {
        guard
            let subscription = subscription,
            let messageText = textView.text
        else {
            return
        }

        DraftMessageManager.update(draftMessage: "", for: subscription)
        SubscriptionManager.sendTypingStatus(subscription, isTyping: false)
        textView.text = ""
        self.scrollToBottom()

        let replyString = self.replyString
        stopReplying()


    var subscription: Subscription? {
        didSet {
            // clean up
            subscriptionToken?.invalidate()
            didCancelTextEditing(self)

            guard
                let subscription = subscription,
