         }
     }
     
-    public func replaceLastInvalidOrInsertItemText(text: String, completion: (() -> ())? = nil) {
+    public func replaceLastInvalidOrInsertItemText(text: String, switchToNext: Bool = true, completion: (() -> ())? = nil) {
         
         if let validator = TFBubbleItUpViewConfiguration.itemValidation, let item = self.items.last where !validator(item.text) {
             
             let position = self.items.indexOf({ (i) -> Bool in i.text == item.text })
             
             // Force try because we know that this position exists
-            try! self.replaceItemsTextAtPosition(position!, withText: text, completion: completion)
-            
-            
-        } else {
-            addStringItem(text, completion: completion)
+            try! self.replaceItemsTextAtPosition(position!, withText: text) {
+                
+                if switchToNext {
+                    self.selectLastPossible()
+                }
+                completion?()
+            }
+            
+            
+        } else {
+            addStringItem(text) {
+                
+                if switchToNext {
+                    self.selectLastPossible()
+                }
+                completion?()
+            }
         }
     }
     

    }

    internal func needUpdateLayout(cell: TFBubbleItUpViewCell) {
        self.collectionViewLayout.invalidateLayout()

        // Update cell frame by its intrinsic size
        var frame = cell.frame
        frame.size.width = cell.intrinsicContentSize().width
        cell.frame = frame
        
        self.invalidateIntrinsicContentSize(nil)
    }
    
    internal func createAndSwitchToNewCell(cell: TFBubbleItUpViewCell) {

    
    public override func becomeFirstResponder() -> Bool {
        
        self.selectLastPossible()
        
        return true
    }
