 }
 
 
-// A single inline button definition
+/**
+Defines a single keyboard key on a `MarkupInline` keyboard.  Each key supports one of 4 different modes:
+_ _ _ _ _
+
+**Callback Data**
+
+This sends a small String back to the bot as a `CallbackQuery`, which is automatically filtered
+back to the session and to a `callbackState` if one exists.
+
+Alternatively if the keyboard the button belongs to is part of a `Prompt`, it will automatically
+be received by it in the respective Session, and the prompt will respond based on how you have set
+it up.
+
+**URL**
+
+The button when pressed will re-direct users to a webpage.
+
+**Inine Query Switch**
+
+This can only be used when the bot supports Inline Queries.  This prompts the user to select one of their chats
+to open it, and when open the client will insert the bot‘s username and a specified query in the input field.
+
+**Inline Query Current Chat**
+
+This can only be used when the bot supports Inline Queries.  Pressing the button will insert the bot‘s username
+and an optional specific inline query in the current chat's input field.
+*/
 public class MarkupInlineKey: NodeConvertible, JSONConvertible {
   public var text: String // Label text
   public var data: String
   public var type: InlineButtonType
   
-  //public var optional: InlineButtonOptional
-  
-  
+	
+	/** 
+	Creates a `MarkupInlineKey` as a URL key.
+	*/
   public init(fromURL url: String, label: String) {
     self.text = label
     self.data = url
     self.type = .url
-    //optional = .url(url)
-  }
-  
+  }
+	
+	/**
+	Creates a `MarkupInlineKey` as a Callback Data key.
+	*/
   public init(fromCallbackData callback: String, label: String) {
     self.text = label
     self.data = callback
     self.type = .callbackData
-    //optional = .callbackData(callback)
-  }
-  
+  }
+	
+	/**
+	Creates a `MarkupInlineKey` as a Current Chat Inline Query key.
+	*/
   public init(fromInlineQueryCurrent data: String, label: String) {
     self.text = label
     self.data = data
     self.type = .switchInlineQuery_currentChat
-    //optional = .switchInlineQuery_currentChat(data)
-  }
-  
-  // Internally used to compare two keys
-  func compare(key: MarkupInlineKey) -> Bool {
+  }
+	
+	/**
+	Creates a `MarkupInlineKey` as a New Chat Inline Query key.
+	*/
+	public init(fromInlineQueryNewChat data: String, label: String) {
+		self.text = label
+		self.data = data
+		self.type = .switchInlineQuery
+	}
+	
+	
+  /** 
+	Compares the current key with another key parameter, and returns whether or
+	not the contents they hold are identical.
+	*/
+  public func compare(key: MarkupInlineKey) -> Bool {
     if text != key.text { return false }
     
     if key.type != self.type { return false }

}


///////////////////////////////////////////////////


/// A series of inline buttons to be displayed with a message sent from the bot
public class MarkupInline: NodeConvertible, JSONConvertible, MarkupType {
  public var keyboard: [MarkupInlineRow] = []
  

  
}

/**
Represents a special action that when sent with a message, will force Telegram clients to display
a reply interface to all or a selected group of people in the chat.
*/
public class MarkupForceReply: NodeConvertible, JSONConvertible, MarkupType {
	
	/// Shows reply interface to the user, as if they manually selected the bot‘s message and tapped ’Reply'
  public var forceReply: Bool = true
	/// (Optional) Use this parameter if you want to force reply from specific users only.
  public var selective: Bool = false
	
	
	
	/**
	Creates a `MarkupForceReply` instance, to force Telegram clients to display
	a reply interface to all or a selected group of people in the chat.
	
	If isSelective is true, the reply interface will only be displayed to targets of the message it is being sent with.
	
	**Targets:**
	1) users that are @mentioned in the text of the Message object;
	2) if the bot's message is a reply (has reply_to_message_id), sender of the original message.
	
	- parameter isSelective: If false, the reply interface will appear for all users.  If true however, the 
	reply interface will only appear for the targets you specify.
	*/
  public init(isSelective sel: Bool) {
    selective = sel
  }
	
	
	
	
  // Ignore context, just try and build an object from a node.
  public required init(node: Node, in context: Context) throws {
    forceReply = try node.extract("force_reply")
