diff --git a/include/asterisk/adsi.h b/include/asterisk/adsi.h
index 5438e48d0ca8ce48cb141841a32ccb89eac8dc42..87b18c31faede51aef411501f8886173478fa55a 100755
--- a/include/asterisk/adsi.h
+++ b/include/asterisk/adsi.h
@@ -140,11 +140,12 @@ extern int adsi_channel_restore(struct ast_channel *chan);
  * \param chan Channel to display on
  * \param lines NULL-terminated list of things to print (no more than 4 recommended)
  * \param align list of alignments to use (ADSI_JUST_LEFT, ADSI_JUST_RIGHT, ADSI_JUST_CEN, etc..)
+ * \param voice whether to jump into voice mode when finished
  *
  * Return 0 on success (or adsi unavailable) and -1 on hangup
  *
  */
-extern int adsi_print(struct ast_channel *chan, char **lines, int *align);
+extern int adsi_print(struct ast_channel *chan, char **lines, int *align, int voice);
 
 //! Check if scripts for a given app are already loaded.  Version may be -1
 //  if any version is okay, or 0-255 for a specific version.
@@ -164,6 +165,12 @@ extern int adsi_unload_session(struct ast_channel *chan);
 extern int adsi_transmit_messages(struct ast_channel *chan, unsigned char **msg, int *msglen, int *msgtype);
 extern int adsi_transmit_message(struct ast_channel *chan, unsigned char *msg, int msglen, int msgtype);
 
+//! Read some encoded DTMF data.  
+/*!
+ * Returns number of bytes received
+ */
+extern int adsi_read_encoded_dtmf(struct ast_channel *chan, unsigned char *buf, int maxlen);
+
 /* ADSI Layer 3 creation functions */
 
 //! Connects an ADSI Display Session */
@@ -178,6 +185,23 @@ extern int adsi_transmit_message(struct ast_channel *chan, unsigned char *msg, i
 
 extern int adsi_connect_session(unsigned char *buf, unsigned char *fdn, int ver);
 
+//! Build Query CPE ID of equipment */
+/*!
+ *  Returns number of bytes added to message
+ */
+extern int adsi_query_cpeid(unsigned char *buf);
+extern int adsi_query_cpeinfo(unsigned char *buf);
+
+//! Get CPE ID from an attached ADSI compatible CPE.
+/*!
+ * Returns 1 on success, storing 4 bytes of CPE ID at buf
+ * or -1 on hangup, or 0 if there was no hangup but it failed to find the
+ * device ID.  Returns to voice mode if "voice" is non-zero.
+ */
+extern int adsi_get_cpeid(struct ast_channel *chan, unsigned char *cpeid, int voice);
+
+extern int adsi_get_cpeinfo(struct ast_channel *chan, int *width, int *height, int *buttons, int voice);
+
 //! Begin an ADSI script download */
 /*!
  * \param buf Character buffer to create parameter in (must have at least 256 free)
@@ -218,6 +242,8 @@ extern int adsi_download_disconnect(unsigned char *buf);
  *
  */
 extern int adsi_data_mode(unsigned char *buf);
+extern int adsi_clear_soft_keys(unsigned char *buf);
+extern int adsi_clear_screen(unsigned char *buf);
 
 //! Puts CPE in voice mode...
 /*!
@@ -281,7 +307,8 @@ extern int adsi_load_soft_key(unsigned char *buf, int key, unsigned char *llabel
 //! Set which soft keys should be displayed
 /*!
  * \param buf Character buffer to create parameter in (must have at least 256 free)
- * \param keys Array of 6 unsigned chars with the key numbers, may be OR'd with ADSI_KEY_HILITE
+ * \param keys Array of 8 unsigned chars with the key numbers, may be OR'd with ADSI_KEY_HILITE
+ *             But remember, the last two keys aren't real keys, they're for scrolling
  *
  * Returns number of bytes added to buffer or -1 on error.
  *