     // MARK: - Intersect keyboard operations
 
     open override func insertText(_ text: String) {
-        var insertionRange = selectedRange
+        // Note:
+        // Whenever the entered text causes the Paragraph Attributes to be removed, we should prevent the actual
+        // text insertion to happen. Thus, we won't call super.insertText, capicci?
+        //
+        if removeParagraphAttributesIfNeeded(insertedText: text, at: selectedRange) {
+            return
+        }
+
         super.insertText(text)
-        insertionRange.length = 1
-        refreshListAfterInsertion(of: text, at: insertionRange)
-        refreshBlockquoteAfterInsertion(of: text, at: insertionRange)
         forceRedrawCursorIfNeeded(afterEditing: text)
     }
 

        toggleBlockquote(range: range)
    }


    /// Refresh blockquote attributes when inserting new text at the specified range
    ///
    /// - Parameters:
    ///   - text: the text being added
    ///   - range: the range of the insertion of the new text
    ///
    private func refreshBlockquoteAfterInsertion(of text: String, at range: NSRange) {
        guard formattingAtIndexContainsBlockquote(range.location) else {
            return
        }

        let afterRange = NSRange(location: range.location + 1, length: 1)
        let beforeRange = NSRange(location: range.location - 1, length: 1)

        var afterString = "\n"
        var beforeString = "\n"
        if beforeRange.location >= 0 {
            beforeString = storage.attributedSubstring(from: beforeRange).string
        }
        if afterRange.endLocation < storage.length {
            afterString = storage.attributedSubstring(from: afterRange).string
        }

        let isBegginingOfListItem = storage.isStartOfNewLine(atLocation: range.location)
        guard text == "\n" && beforeString == "\n" && afterString == "\n" && isBegginingOfListItem else {
            return
        }

        let formatter = BlockquoteFormatter(placeholderAttributes: typingAttributes)
        var newSelectedRange = formatter.toggle(in: textStorage, at: range)

        if afterRange.endLocation < storage.length {
            newSelectedRange = formatter.toggle(in: textStorage, at: afterRange) ?? newSelectedRange
            deleteBackward()
        }

        selectedRange = newSelectedRange ?? selectedRange
    }


    /// Force the SDK to Redraw the cursor, asynchronously, if the edited text (inserted / deleted) requires it.
    /// This method was meant as a workaround for Issue #144.


    // MARK: - Lists

    /// Refresh Lists attributes when text is deleted in the specified range
    ///
    /// - Parameters:
