     }
     
     /**
-     Adds an incoming typing indicator to the messenger
-     */
-    public func showTypingIndicator(avatar: ASDisplayNode?) -> GeneralMessengerCell
+     Creates an incoming typing indicator
+     - parameter avatar: an avatar to add to the typing indicator message
+     */
+    public func createTypingIndicator(avatar: ASDisplayNode?) -> GeneralMessengerCell
     {
         let typing = TypingIndicatorContent(bubbleConfiguration: self.sharedBubbleConfiguration)
         let newMessage = MessageNode(content: typing)
         newMessage.avatarNode = avatar
+        
+        return newMessage
+    }
+    
+    /**
+     Adds an incoming typing indicator to the messenger
+     - parameter avatar: an avatar to add to the typing indicator message
+     */
+    public func showTypingIndicator(avatar: ASDisplayNode?) -> GeneralMessengerCell
+    {
+        let newMessage = self.createTypingIndicator(avatar)
         messengerView.addTypingIndicator(newMessage, scrollsToLast: false, animated: true, completion: nil)
         return newMessage
     }

    }
    
    //MARK: NMessengerViewController Helper methods
    /**
     Adds a text message as outgoing
     - parameter text: the text content to post
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postText(text: String, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let textContent = TextContentNode(textMessegeString: text, currentViewController: self, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: textContent)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }
    
    /**
     Adds an image message as outgoing
     - parameter image: the image to be displayed
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postImage(image: UIImage, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let imageContent = ImageContentNode(image: image, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: imageContent)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }
    
    /**
     Adds an image message as outgoing
     - parameter image: the image to be displayed
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postNetworkImage(url: String, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let networkImageContent = NetworkImageContentNode(imageURL: url, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: networkImageContent)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }
    
    
    /**
     Adds an image message as outgoing
     - parameter views: a [UIView] that are the view for the collection view
     - parameter numberOfRows: CGFloat number of rows in the collection view
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postCollectionView(views: [UIView], numberOfRows:CGFloat, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let collectionViewContent = CollectionViewContentNode(withCustomViews: views, andNumberOfRows: numberOfRows, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: collectionViewContent)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }
    
    /**
     Adds an image message as outgoing
     - parameter views: a [ASDisplayNode] that are the view for the collection view
     - parameter numberOfRows: CGFloat number of rows in the collection view
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postCollectionView(nodes: [ASDisplayNode], numberOfRows:CGFloat, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let collectionViewContent = CollectionViewContentNode(withCustomNodes: nodes, andNumberOfRows: numberOfRows, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: collectionViewContent)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }
    
    
    /**
     Adds an image message as outgoing
     - parameter view: a UIView that is the view for the message
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postCustomContent(view: UIView, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let customView = CustomContentNode(withCustomView: view, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: customView)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }
    
    /**
     Adds an image message as outgoing
     - parameter view: a ASDisplayNode that is the view for the message
     - parameter isIncomingMessage: if message is incoming or outgoing
     - returns: the newly created message
     */
    private func postCustomContent(node: ASDisplayNode, isIncomingMessage:Bool) -> GeneralMessengerCell {
        let customView = CustomContentNode(withCustomNode: node, bubbleConfiguration: self.sharedBubbleConfiguration)
        let newMessage = MessageNode(content: customView)
        newMessage.cellPadding = messagePadding
        newMessage.currentViewController = self
        newMessage.isIncomingMessage = isIncomingMessage
        
        self.addMessgeToMessenger(newMessage)
        return newMessage
    }


    
    //MARK: NMessengerViewController - Add messege methods - DO NOT OVVERRIDE
    /**
     DO NOT OVERRIDE
     Adds a message to the messanger
     - parameter message: GeneralMessageCell
     */
    public func addMessageToMessenger(message:GeneralMessengerCell)
    {
        message.currentViewController = self
        if message.isIncomingMessage == false {
            self.messengerView.addMessage(message, scrollsToMessage: true, withAnimation: .Right)
        } else {
            self.messengerView.addMessage(message, scrollsToMessage: true, withAnimation: .Left)
        }
    }
    
