diff --git a/CHANGES b/CHANGES
index fe956ca75130edee758566308422326d859014ef..7e9cc98132fb9a074de8372de47939929b8406fd 100644
--- a/CHANGES
+++ b/CHANGES
@@ -117,6 +117,13 @@ UserEvent
    interested res_stasis applications.
 
 
+Build System
+------------------
+ * Asterisk now optionally uses libxslt to improve XML documentation generation
+   and maintainability. If libxslt is not available on the system, some XML
+   documentation will be incomplete.
+
+
 Core
 ------------------
  * Redirecting reasons can now be set to arbitrary strings. This means
diff --git a/Makefile b/Makefile
index 6ee702b6ee1fbd1d836b4ca0f7823cd07e62d793..068ad6dcddb1adb426d7b63aca2ffec15952048a 100644
--- a/Makefile
+++ b/Makefile
@@ -444,6 +444,7 @@ datafiles: _all doc/core-en_US.xml
 		$(INSTALL) -m 644 $$x "$(DESTDIR)$(ASTDATADIR)/static-http" ; \
 	done
 	$(INSTALL) -m 644 doc/core-en_US.xml "$(DESTDIR)$(ASTDATADIR)/static-http";
+	$(INSTALL) -m 644 doc/snapshots.xslt "$(DESTDIR)$(ASTDATADIR)/static-http";
 	if [ -d doc/tex/asterisk ] ; then \
 		$(INSTALL) -d "$(DESTDIR)$(ASTDATADIR)/static-http/docs" ; \
 		for n in doc/tex/asterisk/* ; do \
@@ -466,6 +467,7 @@ doc/core-en_US.xml: makeopts .lastclean $(XML_core_en_US)
 	@printf "Building Documentation For: "
 	@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
 	@echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
+	@echo "<?xml-stylesheet type=\"text/xsl\" href=\"snapshots.xslt\"?>" > $@
 	@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
 	@for x in $(MOD_SUBDIRS); do \
 		printf "$$x " ; \
@@ -489,6 +491,7 @@ else
 	@printf "Building Documentation For: "
 	@echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $@
 	@echo "<!DOCTYPE docs SYSTEM \"appdocsxml.dtd\">" >> $@
+	@echo "<?xml-stylesheet type=\"text/xsl\" href=\"snapshots.xslt\"?>" > $@
 	@echo "<docs xmlns:xi=\"http://www.w3.org/2001/XInclude\">" >> $@
 	@for x in $(MOD_SUBDIRS); do \
 		printf "$$x " ; \
@@ -571,6 +574,7 @@ bininstall: _all installdirs $(SUBDIRS_INSTALL) main-bininstall
 	fi
 
 	$(INSTALL) -m 644 doc/core-*.xml "$(DESTDIR)$(ASTDATADIR)/documentation"
+	$(INSTALL) -m 644 doc/snapshots.xslt "$(DESTDIR)$(ASTDATADIR)/documentation"
 	$(INSTALL) -m 644 doc/appdocsxml.dtd "$(DESTDIR)$(ASTDATADIR)/documentation"
 	$(INSTALL) -m 644 doc/asterisk.8 "$(DESTDIR)$(ASTMANDIR)/man8"
 	$(INSTALL) -m 644 contrib/scripts/astgenkey.8 "$(DESTDIR)$(ASTMANDIR)/man8"
diff --git a/UPGRADE.txt b/UPGRADE.txt
index f5e473bc5a1bdf2797f8b168bfdb14fdfb2e183b..baae655f3b08be3ab7311a5c0cd5743047bc7b59 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -96,6 +96,11 @@ CEL:
  - The Uniqueid field for a channel is now a stable identifier, and will not
    change due to transfers, parking, etc.
 
+Build System:
+ - Asterisk now optionally uses libxslt to improve XML documentation generation
+   and maintainability. If libxslt is not available on the system, some XML
+   documentation will be incomplete.
+
 Core:
  - The following channel variables have changed behavior which is described in
    the CHANGES file: TRANSFER_CONTEXT, BRIDGEPEER, BRIDGEPVTCALLID,
diff --git a/apps/app_agent_pool.c b/apps/app_agent_pool.c
index 6beb90a95fb629ab7b505436d9b18b061ed9b255..286a937d0e621d9d95b384ee700217ff7b62eb08 100644
--- a/apps/app_agent_pool.c
+++ b/apps/app_agent_pool.c
@@ -202,49 +202,12 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 					<para>Epoche time when the agent logged in.</para>
 					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
 				</parameter>
-				<parameter name="Channel">
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter[@name='Channel']/para)" />
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="ChannelState">
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter[@name='ChannelState']/para)" />
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="ChannelStateDesc">
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter[@name='ChannelStateDesc']/para)" />
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter[@name='ChannelStateDesc']/enumlist)" />
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="CallerIDNum">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="CallerIDName">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="ConnectedLineNum">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="ConnectedLineName">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="AccountCode">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="Context">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="Exten">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="Priority">
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
-				<parameter name="Uniqueid">
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter[@name='Uniqueid']/para)" />
-					<para>Present if Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
-				</parameter>
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/manager[@name='Login']/syntax/parameter[@name='ActionID'])" />
 			</syntax>
+			<description>
+				<para>The channel snapshot is present if the Status value is <literal>AGENT_IDLE</literal> or <literal>AGENT_ONCALL</literal>.</para>
+			</description>
 			<see-also>
 				<ref type="manager">Agents</ref>
 			</see-also>
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 5bb8035be1530ffc2ab02142726a6d29c369fe91..0f272f1cc4e4d7e8923a596c17e722d54fb8a187 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -567,7 +567,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Usernum">
 					<para>The identifier of the MeetMe user who joined.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">MeetmeLeave</ref>
@@ -580,7 +580,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when a user leaves a MeetMe conference.</synopsis>
 			<syntax>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='MeetmeJoin']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Duration">
 					<para>The length of time in seconds that the Meetme user was in the conference.</para>
 				</parameter>
@@ -606,7 +606,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when a MeetMe user has started talking.</synopsis>
 			<syntax>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='MeetmeJoin']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Duration">
 					<para>The length of time in seconds that the Meetme user has been in the conference at the time of this event.</para>
 				</parameter>
@@ -624,7 +624,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when a MeetMe user begins or ends talking.</synopsis>
 			<syntax>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='MeetmeJoin']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='MeetmeTalkRequest']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 		</managerEventInstance>
@@ -634,7 +634,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when a MeetMe user is muted or unmuted.</synopsis>
 			<syntax>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='MeetmeJoin']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='MeetmeTalkRequest']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 		</managerEventInstance>
diff --git a/apps/app_minivm.c b/apps/app_minivm.c
index 2b6f7e4b87842c9e393fade53ff360aa691759e2..06ac02a5e06918cb70c8710b2db8bb2b914abba8 100644
--- a/apps/app_minivm.c
+++ b/apps/app_minivm.c
@@ -500,7 +500,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a notification is sent out by a MiniVoiceMail application</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Action">
 					<para>What action was taken. Currently, this will always be <literal>SentNotification</literal></para>
 				</parameter>
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 195517f577d13da6c301c6bc5f44935cc5068088..732a5586575058cb7f03c6aeb3eb32f5dfcb9839 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -1018,7 +1018,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a caller joins a Queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<parameter name="Position">
 					<para>This channel's current position in the queue.</para>
@@ -1037,7 +1037,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a caller leaves a Queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueCallerJoin']/managerEventInstance/syntax/parameter[@name='Count'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueCallerJoin']/managerEventInstance/syntax/parameter[@name='Position'])" />
@@ -1051,7 +1051,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a caller abandons the queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueCallerJoin']/managerEventInstance/syntax/parameter[@name='Position'])" />
 				<parameter name="OriginalPosition">
@@ -1067,8 +1067,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when an queue member is notified of a caller in the queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='DialBegin']/managerEventInstance/syntax/parameter[contains(@name, 'Dest')])" />
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='MemberName'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Interface'])" />
@@ -1084,8 +1084,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a queue member is notified of a caller in the queue and fails to answer.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='DialBegin']/managerEventInstance/syntax/parameter[contains(@name, 'Dest')])" />
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='MemberName'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Interface'])" />
@@ -1102,8 +1102,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a queue member has finished servicing a caller in the queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='DialBegin']/managerEventInstance/syntax/parameter[contains(@name, 'Dest')])" />
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='MemberName'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Interface'])" />
@@ -1129,8 +1129,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a queue member hangs up on a caller in the queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='DialBegin']/managerEventInstance/syntax/parameter[contains(@name, 'Dest')])" />
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='MemberName'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Interface'])" />
@@ -1145,8 +1145,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when a queue member answers and is bridged to a caller in the queue.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='DialBegin']/managerEventInstance/syntax/parameter[contains(@name, 'Dest')])" />
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Queue'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='MemberName'])" />
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='QueueMemberStatus']/managerEventInstance/syntax/parameter[@name='Interface'])" />
diff --git a/apps/app_stack.c b/apps/app_stack.c
index 9260f2ad026d3efcf8815c85d1d337fb9d0303ad..0d66573071aacd905beab79b6072ccf993670d22 100644
--- a/apps/app_stack.c
+++ b/apps/app_stack.c
@@ -211,7 +211,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_DIALPLAN">
 			<synopsis>Raised when a variable local to the gosub stack frame is set due to a subroutine call.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Variable">
 					<para>The LOCAL variable being set.</para>
 					<note><para>The variable name will always be enclosed with
diff --git a/apps/confbridge/confbridge_manager.c b/apps/confbridge/confbridge_manager.c
index 10503ff48645cb65e2f31876636f77855bba2059..e6e859fa0c650709d5d8c4cb16494004236219ae 100644
--- a/apps/confbridge/confbridge_manager.c
+++ b/apps/confbridge/confbridge_manager.c
@@ -44,7 +44,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeEnd</ref>
@@ -59,7 +59,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeStart</ref>
@@ -74,8 +74,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeLeave</ref>
@@ -90,8 +90,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeJoin</ref>
@@ -106,7 +106,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeStopRecord</ref>
@@ -121,7 +121,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeRecord</ref>
@@ -136,8 +136,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeUnmute</ref>
@@ -152,8 +152,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">ConfbridgeMute</ref>
@@ -161,7 +161,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			</see-also>
 		</managerEventInstance>
 	</managerEvent>
-
 	<managerEvent language="en_US" name="ConfbridgeTalking">
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a confbridge participant unmutes.</synopsis>
@@ -169,8 +168,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				<parameter name="Conference">
 					<para>The name of the Confbridge conference.</para>
 				</parameter>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
+				<channel_snapshot/>
 				<parameter name="TalkingStatus">
 					<enumlist>
 						<enum name="on"/>
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 3c29b42ebb00870acfce716338b3c1e8fea7d326..d18e94d144213bdaa09bd4a2fc6af5a5e806f2e3 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -362,7 +362,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a DAHDI channel is created or an underlying technology is associated with a DAHDI channel.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="DAHDISpan">
 					<para>The DAHDI span associated with this channel.</para>
 				</parameter>
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 9215b5af8958f1868e48c464069b6b436e55850c..1aa18b9c560fbb80a42c4d374a1bf3721d55781f 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -643,7 +643,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a SIP session times out.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Source">
 					<para>The source of the session timeout.</para>
 					<enumlist>
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index e24752b9fabe5a63511de751071c7e8b61931429..f494c825c35025b80a5882fc335769971424f93f 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -31,7 +31,7 @@
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Published when a malicious call ID request arrives.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="MCallerIDNumValid">
 				</parameter>
 				<parameter name="MCallerIDNum">
diff --git a/configure.ac b/configure.ac
index 02a324ae0896791fac4b9ac94237d43d07e27536..9a814cba506cf381d2b266f06229c6cb265456ad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -413,6 +413,7 @@ AST_EXT_LIB_SETUP([LDAP], [OpenLDAP], [ldap])
 AST_LIBCURL_CHECK_CONFIG([], [7.10.1])
 AST_EXT_LIB_SETUP([LIBEDIT], [NetBSD Editline library], [libedit], [, use 'internal' Editline otherwise])
 AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2])
+AST_EXT_LIB_SETUP([LIBXSLT], [LibXSLT], [libxslt])
 AST_EXT_LIB_SETUP([LTDL], [libtool], [ltdl])
 AST_EXT_LIB_SETUP([LUA], [Lua], [lua])
 AST_EXT_LIB_SETUP([MISDN], [mISDN user], [misdn])
@@ -564,6 +565,9 @@ if test "${disable_xmldoc}" != "yes"; then
 		AC_MSG_NOTICE(*** or install the 'libxml2' development package.)
 		exit 1
 	fi
+
+        AST_EXT_LIB_CHECK([LIBXSLT], [xslt], [xsltLoadStylesheetPI], [libxslt/xsltInternals.h], [${LIBXML2_LIB}], [${LIBXML2_INCLUDE}])
+
 fi
 
 # some embedded systems omit internationalization (locale) support
diff --git a/contrib/scripts/install_prereq b/contrib/scripts/install_prereq
index 37f1b6701558aa871ae68a8b8912205e4c13f94c..80345ed4e29a008b465d7a3cb7e050d7c06a90b7 100755
--- a/contrib/scripts/install_prereq
+++ b/contrib/scripts/install_prereq
@@ -28,14 +28,14 @@ PACKAGES_DEBIAN="$PACKAGES_DEBIAN libpq-dev unixodbc-dev libsqlite0-dev libmysql
 PACKAGES_DEBIAN="$PACKAGES_DEBIAN libopenh323-dev libvpb-dev libgtk2.0-dev libmysqlclient-dev libbluetooth-dev libradiusclient-ng-dev freetds-dev"
 PACKAGES_DEBIAN="$PACKAGES_DEBIAN libsnmp-dev libiksemel-dev libcorosync-dev libnewt-dev libpopt-dev libical-dev libspandsp-dev libjack-dev"
 PACKAGES_DEBIAN="$PACKAGES_DEBIAN libresample-dev libc-client-dev binutils-dev libsrtp-dev libgsm1-dev libedit-dev doxygen libjansson-dev libldap-dev"
-PACKAGES_DEBIAN="$PACKAGES_DEBIAN subversion git"
+PACKAGES_DEBIAN="$PACKAGES_DEBIAN subversion git libxslt1-dev"
 PACKAGES_RH="automake gcc gcc-c++ ncurses-devel openssl-devel libxml2-devel unixODBC-devel libcurl-devel libogg-devel libvorbis-devel speex-devel"
 PACKAGES_RH="$PACKAGES_RH spandsp-devel freetds-devel net-snmp-devel iksemel-devel corosynclib-devel newt-devel popt-devel libtool-ltdl-devel lua-devel"
 PACKAGES_RH="$PACKAGES_RH libsqlite3x-devel radiusclient-ng-devel portaudio-devel postgresql-devel libresample-devel neon-devel libical-devel"
 PACKAGES_RH="$PACKAGES_RH openldap-devel gmime22-devel sqlite2-devel mysql-devel bluez-libs-devel jack-audio-connection-kit-devel gsm-devel libedit-devel libuuid-devel"
-PACKAGES_RH="$PACKAGES_RH jansson-devel libsrtp-devel pjproject-devel subversion git"
+PACKAGES_RH="$PACKAGES_RH jansson-devel libsrtp-devel pjproject-devel subversion git libxslt-devel"
 
-PACKAGES_OBSD="popt gmake wget libxml libogg libvorbis curl iksemel spandsp speex iodbc freetds-0.63p1-msdblib mysql-client gmime sqlite sqlite3 jack"
+PACKAGES_OBSD="popt gmake wget libxml libogg libvorbis curl iksemel spandsp speex iodbc freetds-0.63p1-msdblib mysql-client gmime sqlite sqlite3 jack libxslt"
 
 KVERS=`uname -r`
 
diff --git a/doc/appdocsxml.dtd b/doc/appdocsxml.dtd
index f8e7100f2068b671031c3dcb2dfa020f3a10bc10..d56c8a860753ebe2a44b5b50d59351253e9f865b 100644
--- a/doc/appdocsxml.dtd
+++ b/doc/appdocsxml.dtd
@@ -76,9 +76,15 @@
 
   <!ELEMENT synopsis (#PCDATA)>
 
-  <!ELEMENT syntax (parameter|dataType|category|matchInfo|xi:include)*>
+  <!ELEMENT syntax (parameter|dataType|category|matchInfo|xi:include|channel_snapshot|bridge_snapshot)*>
   <!ATTLIST syntax argsep CDATA ",">
 
+  <!ELEMENT channel_snapshot (#PCDATA)>
+  <!ATTLIST channel_snapshot prefix CDATA "">
+
+  <!ELEMENT bridge_snapshot (#PCDATA)>
+  <!ATTLIST bridge_snapshot prefix CDATA "">
+
   <!ELEMENT description (para|note|warning|variablelist|enumlist|info|xi:include)*>
 
   <!ELEMENT parameter (optionlist|enumlist|argument|para|note|warning|parameter|info|xi:include)*>
diff --git a/doc/snapshots.xslt b/doc/snapshots.xslt
new file mode 100644
index 0000000000000000000000000000000000000000..17114cbcd72dfa092c3dee60d461ed8c93ba3de4
--- /dev/null
+++ b/doc/snapshots.xslt
@@ -0,0 +1,115 @@
+<xsl:stylesheet version="1.0" 
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+    <xsl:output omit-xml-declaration="yes" indent="yes"/>
+
+    <xsl:param name="pNewType" select="'myNewType'"/>
+
+    <xsl:template match="node()|@*">
+        <xsl:copy>
+            <xsl:apply-templates select="node()|@*"/>
+        </xsl:copy>
+    </xsl:template>
+
+    <xsl:template match="channel_snapshot">
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'Channel')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'ChannelState')"/>
+            </xsl:attribute>
+            <para>A numeric code for the channel's current state, related to <xsl:value-of select="concat(@prefix,'ChannelStateDesc')"/></para>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'ChannelStateDesc')"/>
+            </xsl:attribute>
+            <enumlist>
+                <enum name="Down"/>
+                <enum name="Rsrvd"/>
+                <enum name="OffHook"/>
+                <enum name="Dialing"/>
+                <enum name="Ring"/>
+                <enum name="Ringing"/>
+                <enum name="Up"/>
+                <enum name="Busy"/>
+                <enum name="Dialing Offhook"/>
+                <enum name="Pre-ring"/>
+                <enum name="Unknown"/>
+            </enumlist>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'CallerIDNum')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'CallerIDName')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'ConnectedLineNum')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'ConnectedLineName')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'AccountCode')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'Context')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'Exten')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'Priority')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'Uniqueid')"/>
+            </xsl:attribute>
+        </xsl:element>
+    </xsl:template>
+
+    <xsl:template match="bridge_snapshot">
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'BridgeUniqueid')"/>
+            </xsl:attribute>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'BridgeType')"/>
+            </xsl:attribute>
+            <para>The type of bridge</para>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'BridgeTechnology')"/>
+            </xsl:attribute>
+            <para>Technology in use by the bridge</para>
+        </xsl:element>
+        <xsl:element name="parameter">
+            <xsl:attribute name="name">
+                <xsl:value-of select="concat(@prefix,'BridgeNumChannels')"/>
+            </xsl:attribute>
+            <para>Number of channels in the bridge</para>
+        </xsl:element>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/funcs/func_global.c b/funcs/func_global.c
index a688ef0a5b46495a733d0e28a64d8f3ea41e1b6a..8403669eb10ce55169d590068230d4ee6d1d1572 100644
--- a/funcs/func_global.c
+++ b/funcs/func_global.c
@@ -87,7 +87,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_DIALPLAN">
 			<synopsis>Raised when a variable is shared between channels.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Variable">
 					<para>The SHARED variable being set.</para>
 					<note><para>The variable name will always be enclosed with
diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in
index ecbba0d2b1f4137c8c31f98a1e43c55f7668b21a..bbc035f92253279afaa5600b028a9c35cac5110e 100644
--- a/include/asterisk/autoconfig.h.in
+++ b/include/asterisk/autoconfig.h.in
@@ -394,6 +394,9 @@
 /* Define if your system has the LIBXML2 libraries. */
 #undef HAVE_LIBXML2
 
+/* Define to 1 if you have the LibXSLT library. */
+#undef HAVE_LIBXSLT
+
 /* Define to 1 if you have the <limits.h> header file. */
 #undef HAVE_LIMITS_H
 
diff --git a/main/Makefile b/main/Makefile
index 3d37c7c75af6dcab8f8b1dc209978c6c9b066cd8..e3ed7c5d60b10c9d7574a0c129b6469c246c7f6b 100644
--- a/main/Makefile
+++ b/main/Makefile
@@ -33,6 +33,7 @@ OBJS+=stdtime/localtime.o
 ASTSSL_LIBS:=$(OPENSSL_LIB)
 AST_LIBS+=$(BKTR_LIB)
 AST_LIBS+=$(LIBXML2_LIB)
+AST_LIBS+=$(LIBXSLT_LIB)
 AST_LIBS+=$(SQLITE3_LIB)
 AST_LIBS+=$(ASTSSL_LIBS)
 AST_LIBS+=$(JANSSON_LIB)
diff --git a/main/aoc.c b/main/aoc.c
index d45092b05749762565c543d6e9bc71027c9d7f28..e8b23f595facb1d949be5239e55290d5a157583f 100644
--- a/main/aoc.c
+++ b/main/aoc.c
@@ -44,7 +44,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
 		<managerEventInstance class="EVENT_FLAG_AOC">
 			<synopsis>Raised when an Advice of Charge message is sent at the beginning of a call.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Chargeable" />
 				<parameter name="RateType">
 					<enumlist>
@@ -91,7 +91,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
 		<managerEventInstance class="EVENT_FLAG_AOC">
 			<synopsis>Raised when an Advice of Charge message is sent during a call.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Charge" />
 				<parameter name="Type">
 					<enumlist>
@@ -144,7 +144,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$");
 		<managerEventInstance class="EVENT_FLAG_AOC">
 			<synopsis>Raised when an Advice of Charge message is sent at the end of a call.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="ChargingAssociation" />
 				<parameter name="Number" />
 				<parameter name="Plan" />
diff --git a/main/core_local.c b/main/core_local.c
index 961a28096027a08d9949a36e1c664b9faabcc497..3cdff9503c53adca35addb69b2a2bb88529cd595 100644
--- a/main/core_local.c
+++ b/main/core_local.c
@@ -72,82 +72,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when two halves of a Local Channel form a bridge.</synopsis>
 			<syntax>
-				<parameter name="LocalOneChannel">
-				</parameter>
-				<parameter name="LocalOneChannelState">
-					<para>A numeric code for the channel's current state, related to ChannelStateDesc</para>
-				</parameter>
-				<parameter name="LocalOneChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="LocalOneCallerIDNum">
-				</parameter>
-				<parameter name="LocalOneCallerIDName">
-				</parameter>
-				<parameter name="LocalOneConnectedLineNum">
-				</parameter>
-				<parameter name="LocalOneConnectedLineName">
-				</parameter>
-				<parameter name="LocalOneAccountCode">
-				</parameter>
-				<parameter name="LocalOneContext">
-				</parameter>
-				<parameter name="LocalOneExten">
-				</parameter>
-				<parameter name="LocalOnePriority">
-				</parameter>
-				<parameter name="LocalOneUniqueid">
-				</parameter>
-				<parameter name="LocalTwoChannel">
-				</parameter>
-				<parameter name="LocalTwoChannelState">
-					<para>A numeric code for the channel's current state, related to ChannelStateDesc</para>
-				</parameter>
-				<parameter name="LocalTwoChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="LocalTwoCallerIDNum">
-				</parameter>
-				<parameter name="LocalTwoCallerIDName">
-				</parameter>
-				<parameter name="LocalTwoConnectedLineNum">
-				</parameter>
-				<parameter name="LocalTwoConnectedLineName">
-				</parameter>
-				<parameter name="LocalTwoAccountCode">
-				</parameter>
-				<parameter name="LocalTwoContext">
-				</parameter>
-				<parameter name="LocalTwoExten">
-				</parameter>
-				<parameter name="LocalTwoPriority">
-				</parameter>
-				<parameter name="LocalTwoUniqueid">
-				</parameter>
+				<channel_snapshot prefix="LocalOne"/>
+				<channel_snapshot prefix="LocalTwo"/>
 				<parameter name="Context">
 					<para>The context in the dialplan that Channel2 starts in.</para>
 				</parameter>
@@ -168,8 +94,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when two halves of a Local Channel begin to optimize
 			themselves out of the media path.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='LocalBridge']/managerEventInstance/syntax/parameter[contains(@name, 'LocalOne')])" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='LocalBridge']/managerEventInstance/syntax/parameter[contains(@name, 'LocalTwo')])" />
+				<channel_snapshot prefix="LocalOne"/>
+				<channel_snapshot prefix="LocalTwo"/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">LocalOptimizationEnd</ref>
@@ -182,8 +108,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when two halves of a Local Channel have finished optimizing
 			themselves out of the media path.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='LocalBridge']/managerEventInstance/syntax/parameter[contains(@name, 'LocalOne')])" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='LocalBridge']/managerEventInstance/syntax/parameter[contains(@name, 'LocalTwo')])" />
+				<channel_snapshot prefix="LocalOne"/>
+				<channel_snapshot prefix="LocalTwo"/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">LocalOptimizationBegin</ref>
diff --git a/main/features.c b/main/features.c
index 56e47fb9175b6081197ec4ff2777bf89865e984a..9490116b779e4b9d00047b4209b0465a2e8e0ba1 100644
--- a/main/features.c
+++ b/main/features.c
@@ -286,33 +286,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a call pickup occurs.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<parameter name="TargetChannel"/>
-				<parameter name="TargetChannelState"><para>A numeric code for the channel's current state, related to TargetChannelStateDesc</para></parameter>
-				<parameter name="TargetChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="TargetCallerIDNum"/>
-				<parameter name="TargetCallerIDName"/>
-				<parameter name="TargetConnectedLineNum"/>
-				<parameter name="TargetConnectedLineName"/>
-				<parameter name="TargetAccountCode"/>
-				<parameter name="TargetContext"/>
-				<parameter name="TargetExten"/>
-				<parameter name="TargetPriority"/>
-				<parameter name="TargetUniqueid"/>
+				<channel_snapshot/>
+				<channel_snapshot prefix="Target"/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
diff --git a/main/manager.c b/main/manager.c
index 8ea7f4202208ffbb935503e5a76913949208c5cd..19f1e94c24265c37de122480beed2a7a18295e43 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -227,57 +227,13 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised in response to a Status command.</synopsis>
 			<syntax>
 				<parameter name="ActionID" required="false"/>
-				<parameter name="Channel">
-					<para>Name of the channel</para>
-				</parameter>
+				<channel_snapshot/>
 				<parameter name="Type">
 					<para>Type of channel</para>
 				</parameter>
 				<parameter name="DNID">
 					<para>Dialed number identifier</para>
 				</parameter>
-				<parameter name="ChannelState">
-					<para>A numeric code for the channel's current state, related to ChannelStateDesc</para>
-				</parameter>
-				<parameter name="ChannelStateDesc">
-					<para>Name for the channel's current state</para>
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="CallerIDNum">
-				</parameter>
-				<parameter name="CallerIDName">
-				</parameter>
-				<parameter name="ConnectedLineNum">
-				</parameter>
-				<parameter name="ConnectedLineName">
-				</parameter>
-				<parameter name="EffectiveConnectedLineNum">
-				</parameter>
-				<parameter name="EffectiveConnectedLineName">
-				</parameter>
-				<parameter name="AccountCode">
-				</parameter>
-				<parameter name="Context">
-				</parameter>
-				<parameter name="Exten">
-				</parameter>
-				<parameter name="Priority">
-				</parameter>
-				<parameter name="Uniqueid">
-					<para>Unique identifier for the channel</para>
-				</parameter>
 				<parameter name="TimeToHangup">
 					<para>Absolute lifetime of the channel</para>
 				</parameter>
diff --git a/main/manager_bridges.c b/main/manager_bridges.c
index c791e63f37a85b7350f5659324cdae34346ccfcd..5d831b5b4498218158ec7531ebb149c1caf94c93 100644
--- a/main/manager_bridges.c
+++ b/main/manager_bridges.c
@@ -40,18 +40,7 @@ static struct stasis_message_router *bridge_state_router;
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a bridge is created.</synopsis>
 			<syntax>
-				<parameter name="BridgeUniqueid">
-					<para>The unique identifier of the bridge</para>
-				</parameter>
-				<parameter name="BridgeType">
-					<para>The type of bridge</para>
-				</parameter>
-				<parameter name="BridgeTechnology">
-					<para>Technology in use by the bridge</para>
-				</parameter>
-				<parameter name="BridgeNumChannels">
-					<para>Number of channels in the bridge</para>
-				</parameter>
+				<bridge_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -59,7 +48,7 @@ static struct stasis_message_router *bridge_state_router;
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a bridge is destroyed.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
+				<bridge_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -67,10 +56,8 @@ static struct stasis_message_router *bridge_state_router;
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel enters a bridge.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<parameter name="Uniqueid">
-					<para>The uniqueid of the channel entering the bridge</para>
-				</parameter>
+				<bridge_snapshot/>
+				<channel_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -78,10 +65,8 @@ static struct stasis_message_router *bridge_state_router;
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel leaves a bridge.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<parameter name="Uniqueid">
-					<para>The uniqueid of the channel leaving the bridge</para>
-				</parameter>
+				<bridge_snapshot/>
+				<channel_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -246,13 +231,8 @@ static void bridge_merge_cb(void *data, struct stasis_subscription *sub,
 		<managerEventInstance>
 			<synopsis>Raised when two bridges are merged.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='BridgeCreate']/managerEventInstance/syntax/parameter)" />
-				<parameter name="BridgeUniqueidFrom">
-					<para>The uniqueid of the bridge being dissolved in the merge</para>
-				</parameter>
-				<parameter name="BridgeTypeFrom">
-					<para>The type of bridge that is being dissolved in the merge</para>
-				</parameter>
+				<bridge_snapshot/>
+				<bridge_snapshot prefix="From"/>
 			</syntax>
 		</managerEventInstance>
 	***/
diff --git a/main/manager_channels.c b/main/manager_channels.c
index cab4aa38d5b7e20249e766a2c17ab9627e5e8f78..23418e6a28038d338a80a5f5d8abbea2303f111c 100644
--- a/main/manager_channels.c
+++ b/main/manager_channels.c
@@ -42,47 +42,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a new channel is created.</synopsis>
 			<syntax>
-				<parameter name="Channel">
-					<para>Name of the channel</para>
-				</parameter>
-				<parameter name="ChannelState">
-					<para>A numeric code for the channel's current state, related to ChannelStateDesc</para>
-				</parameter>
-				<parameter name="ChannelStateDesc">
-					<para>Name for the channel's current state</para>
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="CallerIDNum">
-				</parameter>
-				<parameter name="CallerIDName">
-				</parameter>
-				<parameter name="ConnectedLineNum">
-				</parameter>
-				<parameter name="ConnectedLineName">
-				</parameter>
-				<parameter name="AccountCode">
-				</parameter>
-				<parameter name="Context">
-				</parameter>
-				<parameter name="Exten">
-				</parameter>
-				<parameter name="Priority">
-				</parameter>
-				<parameter name="Uniqueid">
-					<para>Unique identifier for the channel</para>
-				</parameter>
+				<channel_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -90,7 +50,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel's state changes.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -98,7 +58,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel is hung up.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Cause">
 					<para>A numeric cause code for why the channel was hung up.</para>
 				</parameter>
@@ -112,7 +72,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a hangup is requested.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Hangup']/managerEventInstance/syntax/parameter[@name='Cause'])" />
 			</syntax>
 		</managerEventInstance>
@@ -121,7 +81,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a soft hangup is requested with a specific cause code.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Hangup']/managerEventInstance/syntax/parameter[@name='Cause'])" />
 			</syntax>
 		</managerEventInstance>
@@ -130,7 +90,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_DIALPLAN">
 			<synopsis>Raised when a channel enters a new context, extension, priority.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Extension">
 					<para>Deprecated in 12, but kept for
 					backward compatability. Please use
@@ -149,7 +109,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel receives new Caller ID information.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="CID-CallingPres">
 					<para>A description of the Caller ID presentation.</para>
 				</parameter>
@@ -160,7 +120,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a Channel's AccountCode is changed.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="OldAccountCode">
 					<para>The channel's previous account code</para>
 				</parameter>
@@ -171,45 +131,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a dial action has started.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<parameter name="DestChannel">
-				</parameter>
-				<parameter name="DestChannelState">
-					<para>A numeric code for the channel's current state, related to DestChannelStateDesc</para>
-				</parameter>
-				<parameter name="DestChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="DestCallerIDNum">
-				</parameter>
-				<parameter name="DestCallerIDName">
-				</parameter>
-				<parameter name="DestConnectedLineNum">
-				</parameter>
-				<parameter name="DestConnectedLineName">
-				</parameter>
-				<parameter name="DestAccountCode">
-				</parameter>
-				<parameter name="DestContext">
-				</parameter>
-				<parameter name="DestExten">
-				</parameter>
-				<parameter name="DestPriority">
-				</parameter>
-				<parameter name="DestUniqueid">
-				</parameter>
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<parameter name="DialString">
 					<para>The non-technology specific device being dialed.</para>
 				</parameter>
@@ -223,8 +146,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a dial action has completed.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='DialBegin']/managerEventInstance/syntax/parameter[contains(@name, 'Dest')])" />
+				<channel_snapshot/>
+				<channel_snapshot prefix="Dest"/>
 				<parameter name="DialStatus">
 					<para>The result of the dial operation.</para>
 					<enumlist>
@@ -246,7 +169,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel goes on hold.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="MusicClass">
 					<para>The suggested MusicClass, if provided.</para>
 				</parameter>
@@ -257,7 +180,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel goes off hold.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -265,84 +188,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when one channel begins spying on another channel.</synopsis>
 			<syntax>
-				<parameter name="SpyerChannel">
-					<para>The channel performing the spying.</para>
-				</parameter>
-				<parameter name="SpyerChannelState">
-					<para>A numeric code for the channel's current state, related to SpyerChannelStateDesc</para>
-				</parameter>
-				<parameter name="SpyerChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="SpyerCallerIDNum">
-				</parameter>
-				<parameter name="SpyerCallerIDName">
-				</parameter>
-				<parameter name="SpyerConnectedLineNum">
-				</parameter>
-				<parameter name="SpyerConnectedLineName">
-				</parameter>
-				<parameter name="SpyerAccountCode">
-				</parameter>
-				<parameter name="SpyerContext">
-				</parameter>
-				<parameter name="SpyerExten">
-				</parameter>
-				<parameter name="SpyerPriority">
-				</parameter>
-				<parameter name="SpyerUniqueid">
-				</parameter>
-				<parameter name="SpyeeChannel">
-					<para>The channel being spied upon.</para>
-				</parameter>
-				<parameter name="SpyeeChannelState">
-					<para>A numeric code for the channel's current state, related to SpyeeChannelStateDesc</para>
-				</parameter>
-				<parameter name="SpyeeChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="SpyeeCallerIDNum">
-				</parameter>
-				<parameter name="SpyeeCallerIDName">
-				</parameter>
-				<parameter name="SpyeeConnectedLineNum">
-				</parameter>
-				<parameter name="SpyeeConnectedLineName">
-				</parameter>
-				<parameter name="SpyeeAccountCode">
-				</parameter>
-				<parameter name="SpyeeContext">
-				</parameter>
-				<parameter name="SpyeeExten">
-				</parameter>
-				<parameter name="SpyeePriority">
-				</parameter>
-				<parameter name="SpyeeUniqueid">
-				</parameter>
+				<channel_snapshot prefix="Spyer"/>
+				<channel_snapshot prefix="Spyee"/>
 			</syntax>
 			<see-also>
 				<ref type="application">ChanSpyStop</ref>
@@ -353,7 +200,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel has stopped spying.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='ChanSpyStart']/managerEventInstance/syntax/parameter[contains(@name, 'Spyer')])" />
+				<channel_snapshot prefix="Spyer"/>
+				<channel_snapshot prefix="Spyee"/>
 			</syntax>
 			<see-also>
 				<ref type="application">ChanSpyStart</ref>
@@ -364,7 +212,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_DIALPLAN">
 			<synopsis>Raised when a hangup handler is about to be called.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Handler">
 					<para>Hangup handler parameter string passed to the Gosub application.</para>
 				</parameter>
@@ -378,6 +226,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				by the CHANNEL() function.
 			</synopsis>
 			<syntax>
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='HangupHandlerRun']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 			<see-also>
@@ -393,6 +242,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				the CHANNEL() function.
 			</synopsis>
 			<syntax>
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='HangupHandlerRun']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 			<see-also>
@@ -407,7 +257,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				Raised periodically during a fax transmission.
 			</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Operation">
 					<enumlist>
 						<enum name="gateway"/>
@@ -429,7 +279,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				Raised when a receive fax operation has completed.
 			</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="LocalStationID">
 					<para>The value of the <variable>LOCALSTATIONID</variable> channel variable</para>
 				</parameter>
@@ -457,7 +307,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				Raised when a send fax operation has completed.
 			</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='ReceiveFAX']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 		</managerEventInstance>
@@ -466,7 +316,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when music on hold has started on a channel.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Class">
 					<para>The class of music being played on the channel</para>
 				</parameter>
@@ -481,7 +331,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when music on hold has stopped on a channel.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">MusicOnHoldStart</ref>
@@ -493,7 +343,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when monitoring has started on a channel.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 			</syntax>
 			<see-also>
 				<ref type="managerEvent">MonitorStop</ref>
@@ -506,7 +356,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 		<synopsis>Raised when monitoring has stopped on a channel.</synopsis>
 		<syntax>
-			<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+			<channel_snapshot/>
 		</syntax>
 		<see-also>
 			<ref type="managerEvent">MonitorStart</ref>
@@ -785,7 +635,7 @@ static void channel_user_event_cb(void *data, struct stasis_subscription *sub,
 		<managerEventInstance>
 			<synopsis>A user defined event raised from the dialplan.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="UserEvent">
 					<para>The event name, as specified in the dialplan.</para>
 				</parameter>
@@ -934,7 +784,7 @@ static void channel_dtmf_begin_cb(void *data, struct stasis_subscription *sub,
 		<managerEventInstance>
 			<synopsis>Raised when a DTMF digit has started on a channel.</synopsis>
 				<syntax>
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+					<channel_snapshot/>
 					<parameter name="Digit">
 						<para>DTMF digit received or transmitted (0-9, A-E, # or *</para>
 					</parameter>
@@ -977,7 +827,7 @@ static void channel_dtmf_end_cb(void *data, struct stasis_subscription *sub,
 		<managerEventInstance>
 			<synopsis>Raised when a DTMF digit has ended on a channel.</synopsis>
 				<syntax>
-					<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+					<channel_snapshot/>
 					<parameter name="Digit">
 						<para>DTMF digit received or transmitted (0-9, A-E, # or *</para>
 					</parameter>
diff --git a/main/manager_mwi.c b/main/manager_mwi.c
index ac629089b250bb309b5f3439867ee36c4caf4dd9..12a3de3613f86b9c8bc1774483e04c310ef44737 100644
--- a/main/manager_mwi.c
+++ b/main/manager_mwi.c
@@ -111,7 +111,7 @@ static void mwi_update_cb(void *data, struct stasis_subscription *sub,
 			has changed or when a channel has finished interacting with a
 			mailbox.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Mailbox">
 					<para>The mailbox with the new message, specified as <literal>mailbox</literal>@<literal>context</literal></para>
 				</parameter>
diff --git a/main/rtp_engine.c b/main/rtp_engine.c
index 4dd4d46def8eb09b37774606c30b2e81540bafb8..907cb271a0553c1363f93f8d0e095aa70fb19353 100644
--- a/main/rtp_engine.c
+++ b/main/rtp_engine.c
@@ -32,7 +32,7 @@
 		<managerEventInstance class="EVENT_FLAG_REPORTING">
 			<synopsis>Raised when an RTCP packet is sent.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="SSRC">
 					<para>The SSRC identifier for our stream</para>
 				</parameter>
@@ -108,7 +108,7 @@
 		<managerEventInstance class="EVENT_FLAG_REPORTING">
 			<synopsis>Raised when an RTCP packet is received.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="SSRC">
 					<para>The SSRC identifier for the remote system</para>
 				</parameter>
diff --git a/main/stasis_bridges.c b/main/stasis_bridges.c
index 72f4d5055e53a0d8ae22ff992cf0c086e7b94f64..251f9d7afb4ea7b186f11ff49a5d5ceaf7884de8 100644
--- a/main/stasis_bridges.c
+++ b/main/stasis_bridges.c
@@ -58,48 +58,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 					<note><para>A result of <literal>Success</literal> does not necessarily mean that a target was succesfully
 					contacted. It means that a party was succesfully placed into the dialplan at the expected location.</para></note>
 				</parameter>
-				<parameter name="TransfererChannel">
-					<para>The name of the channel that performed the transfer</para>
-				</parameter>
-				<parameter name="TransfererChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="TransfererCallerIDNum">
-				</parameter>
-				<parameter name="TransfererCallerIDName">
-				</parameter>
-				<parameter name="TransfererConnectedLineNum">
-				</parameter>
-				<parameter name="TransfererConnectedLineName">
-				</parameter>
-				<parameter name="TransfererAccountCode">
-				</parameter>
-				<parameter name="TransfererContext">
-				</parameter>
-				<parameter name="TransfererExten">
-				</parameter>
-				<parameter name="TransfererPriority">
-				</parameter>
-				<parameter name="TransfererUniqueid">
-				</parameter>
-				<parameter name="BridgeUniqueid">
-					<para>The ID of the bridge where the Transferer performed the transfer</para>
-				</parameter>
-				<parameter name="BridgeType">
-					<para>The type of the bridge where the Transferer performed the transfer</para>
-				</parameter>
+				<channel_snapshot prefix="Transferer"/>
+				<bridge_snapshot/>
 				<parameter name="IsExternal">
 					<para>Indicates if the transfer was performed outside of Asterisk. For instance,
 					a channel protocol native transfer is external. A DTMF transfer is internal.</para>
@@ -122,100 +82,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 			<synopsis>Raised when an attended transfer is complete.</synopsis>
 			<syntax>
 				<xi:include xpointer="xpointer(docs/managerEvent[@name='BlindTransfer']/managerEventInstance/syntax/parameter[@name='Result'])" />
-				<parameter name="OrigTransfererChannel">
-					<para>The original transferer channel that performed the attended transfer.</para>
-				</parameter>
-				<parameter name="OrigTransfererChannelState">
-					<para>A numeric code for the channel's current state, related to DestChannelStateDesc</para>
-				</parameter>
-				<parameter name="OrigTransfererChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="OrigTransfererCallerIDNum">
-				</parameter>
-				<parameter name="OrigTransfererCallerIDName">
-				</parameter>
-				<parameter name="OrigTransfererConnectedLineNum">
-				</parameter>
-				<parameter name="OrigTransfererConnectedLineName">
-				</parameter>
-				<parameter name="OrigTransfererAccountCode">
-				</parameter>
-				<parameter name="OrigTransfererContext">
-				</parameter>
-				<parameter name="OrigTransfererExten">
-				</parameter>
-				<parameter name="OrigTransfererPriority">
-				</parameter>
-				<parameter name="OrigTransfererUniqueid">
-				</parameter>
-				<parameter name="OrigBridgeUniqueid">
-					<para>The ID of the bridge where the Transferer performed the transfer</para>
-					<note><para>This header will not be present if the original transferer was not in a bridge.</para></note>
-				</parameter>
-				<parameter name="OrigBridgeType">
-					<para>The type of the bridge where the Transferer performed the transfer</para>
-					<note><para>This header will not be present if the original transferer was not in a bridge.</para></note>
-				</parameter>
-				<parameter name="SecondTransfererChannel">
-					<para>The second transferer channel involved in the attended transfer.</para>
-				</parameter>
-				<parameter name="SecondTransfererChannelState">
-					<para>A numeric code for the channel's current state, related to SecondTransfererChannelStateDesc</para>
-				</parameter>
-				<parameter name="SecondTransfererChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="SecondTransfererCallerIDNum">
-				</parameter>
-				<parameter name="SecondTransfererCallerIDName">
-				</parameter>
-				<parameter name="SecondTransfererConnectedLineNum">
-				</parameter>
-				<parameter name="SecondTransfererConnectedLineName">
-				</parameter>
-				<parameter name="SecondTransfererAccountCode">
-				</parameter>
-				<parameter name="SecondTransfererContext">
-				</parameter>
-				<parameter name="SecondTransfererExten">
-				</parameter>
-				<parameter name="SecondTransfererPriority">
-				</parameter>
-				<parameter name="SecondTransfererUniqueid">
-				</parameter>
-				<parameter name="SecondBridgeUniqueid">
-					<para>The unique ID of the bridge that the second transferer channel was in, or <literal>None</literal> if the second transferer channel was not bridged</para>
-					<note><para>This header will not be present if the second transferer was not in a bridge.</para></note>
-				</parameter>
-				<parameter name="SecondBridgeType">
-					<para>The type of the bridge where the Transferer performed the transfer</para>
-					<note><para>This header will not be present if the second transferer was not in a bridge.</para></note>
-				</parameter>
+				<channel_snapshot prefix="OrigTransferer"/>
+				<bridge_snapshot prefix="Orig"/>
+				<channel_snapshot prefix="SecondTransferer"/>
+				<bridge_snapshot prefix="Second"/>
 				<parameter name="DestType">
 					<para>Indicates the method by which the attended transfer completed.</para>
 					<enumlist>
@@ -234,107 +104,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 					<para>Indicates the application that is running when the transfer completes</para>
 					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>App</literal></para></note>
 				</parameter>
-				<parameter name="LocalOneChannel">
-					<para>The local channel that is bridged with the original bridge when forming a link between bridges</para>
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneChannelState">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneCallerIDNum">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneCallerIDName">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneConnectedLineNum">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneConnectedLineName">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneAccountCode">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneContext">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneExten">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOnePriority">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalOneUniqueid">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoChannel">
-					<para>The local channel that is bridged with the second bridge when forming a link between bridges</para>
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoChannelState">
-					<para>A numeric code for the channel's current state, related to LocalTwoChannelStateDesc</para>
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoCallerIDNum">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoCallerIDName">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoConnectedLineNum">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoConnectedLineName">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoAccountCode">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoContext">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoExten">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoPriority">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
-				<parameter name="LocalTwoUniqueid">
-					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Link</literal></para></note>
-				</parameter>
+				<channel_snapshot prefix="LocalOne"/>
+				<channel_snapshot prefix="LocalTwo"/>
 				<parameter name="DestTransfererChannel">
 					<para>The name of the surviving transferer channel when a transfer results in a threeway call</para>
 					<note><para>This header is only present when <replaceable>DestType</replaceable> is <literal>Threeway</literal></para></note>
@@ -345,15 +116,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 				and the two bridges are determined based on their chronological establishment. So consider that Alice calls Bob, and then Alice
 				transfers the call to Voicemail. The transferer and bridge headers would be arranged as follows:</para>
 				<para>	<replaceable>OrigTransfererChannel</replaceable>: Alice's channel in the bridge with Bob.</para>
-				<para>	<replaceable>BridgeUniqueidOrig</replaceable>: The bridge between Alice and Bob.</para>
+				<para>	<replaceable>OrigBridgeUniqueid</replaceable>: The bridge between Alice and Bob.</para>
 				<para>	<replaceable>SecondTransfererChannel</replaceable>: Alice's channel that called Voicemail.</para>
-				<para>	<replaceable>BridgeUniqueidSecond</replaceable>: Not present, since a call to Voicemail has no bridge.</para>
+				<para>	<replaceable>SecondBridgeUniqueid</replaceable>: Not present, since a call to Voicemail has no bridge.</para>
 				<para>Now consider if the order were reversed; instead of having Alice call Bob and transfer him to Voicemail, Alice instead
 				calls her Voicemail and transfers that to Bob. The transferer and bridge headers would be arranged as follows:</para>
 				<para>	<replaceable>OrigTransfererChannel</replaceable>: Alice's channel that called Voicemail.</para>
-				<para>	<replaceable>BridgeUniqueidOrig</replaceable>: Not present, since a call to Voicemail has no bridge.</para>
+				<para>	<replaceable>OrigBridgeUniqueid</replaceable>: Not present, since a call to Voicemail has no bridge.</para>
 				<para>	<replaceable>SecondTransfererChannel</replaceable>: Alice's channel in the bridge with Bob.</para>
-				<para>	<replaceable>BridgeUniqueidSecond</replaceable>: The bridge between Alice and Bob.</para>
+				<para>	<replaceable>SecondBridgeUniqueid</replaceable>: The bridge between Alice and Bob.</para>
 			</description>
 		</managerEventInstance>
 	</managerEvent>
diff --git a/main/stasis_channels.c b/main/stasis_channels.c
index 6729a1072259557aa8579ecc44e467edf27909ba..4f88a5a6c5f51974a758d340a3f9680333a8ad12 100644
--- a/main/stasis_channels.c
+++ b/main/stasis_channels.c
@@ -46,7 +46,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_DIALPLAN">
 			<synopsis>Raised when a variable is set to a particular value.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Variable">
 					<para>The variable being set.</para>
 				</parameter>
@@ -60,7 +60,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGENT">
 			<synopsis>Raised when an Agent has logged in.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Agent">
 					<para>Agent ID of the agent.</para>
 				</parameter>
diff --git a/main/xml.c b/main/xml.c
index 5ca4d4ff11a3355623411bae34a44d7bafbb9706..bd5850813dd7035fc0c3e2c1cdf7b31a6a7dd745 100644
--- a/main/xml.c
+++ b/main/xml.c
@@ -29,6 +29,7 @@
 #include "asterisk/xml.h"
 #include "asterisk/logger.h"
 #include "asterisk/utils.h"
+#include "asterisk/autoconfig.h"
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
@@ -38,6 +39,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include <libxml/xinclude.h>
 #include <libxml/xpath.h>
 /* libxml2 ast_xml implementation. */
+#ifdef HAVE_LIBXSLT
+	#include <libxslt/xsltInternals.h>
+	#include <libxslt/transform.h>
+#endif /* HAVE_LIBXSLT */
 
 
 int ast_xml_init(void)
@@ -63,13 +68,32 @@ struct ast_xml_doc *ast_xml_open(char *filename)
 	}
 
 	doc = xmlReadFile(filename, NULL, XML_PARSE_RECOVER);
-	if (doc) {
-		/* process xinclude elements. */
-		if (xmlXIncludeProcess(doc) < 0) {
+	if (!doc) {
+		return NULL;
+	}
+
+	/* process xinclude elements. */
+	if (xmlXIncludeProcess(doc) < 0) {
+		xmlFreeDoc(doc);
+		return NULL;
+	}
+
+#ifdef HAVE_LIBXSLT
+	{
+		xsltStylesheetPtr xslt = xsltLoadStylesheetPI(doc);
+		if (xslt) {
+			xmlDocPtr tmpdoc = xsltApplyStylesheet(xslt, doc, NULL);
+			xsltFreeStylesheet(xslt);
 			xmlFreeDoc(doc);
-			return NULL;
+			if (!tmpdoc) {
+				return NULL;
+			}
+			doc = tmpdoc;
 		}
 	}
+#else /* no HAVE_LIBXSLT */
+	ast_log(LOG_NOTICE, "XSLT support not found. XML documentation may be incomplete.\n");
+#endif /* HAVE_LIBXSLT */
 
 	return (struct ast_xml_doc *) doc;
 }
diff --git a/makeopts.in b/makeopts.in
index 401e8f1af0bb4cfaee7430b759727a7b858ab46c..fa9cce6c433b0160328439b03fe14055e69d2347 100644
--- a/makeopts.in
+++ b/makeopts.in
@@ -329,6 +329,9 @@ TERMCAP_DIR=@TERMCAP_DIR@
 LIBXML2_INCLUDE=@LIBXML2_INCLUDE@
 LIBXML2_LIB=@LIBXML2_LIB@
 
+LIBXSLT_INCLUDE=@LIBXSLT_INCLUDE@
+LIBXSLT_LIB=@LIBXSLT_LIB@
+
 TINFO_INCLUDE=@TINFO_INCLUDE@
 TINFO_LIB=@TINFO_LIB@
 TINFO_DIR=@TINFO_DIR@
diff --git a/res/parking/parking_manager.c b/res/parking/parking_manager.c
index 430d5408ae964448f4c1f56a8b1ef0810cf63a27..70fab285253f9d956b39da3f2ff195319aaee89d 100644
--- a/res/parking/parking_manager.c
+++ b/res/parking/parking_manager.c
@@ -96,44 +96,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel is parked.</synopsis>
 			<syntax>
-				<parameter name="ParkeeChannel">
-				</parameter>
-				<parameter name="ParkeeChannelState">
-					<para>A numeric code for the channel's current state, related to ChannelStateDesc</para>
-				</parameter>
-				<parameter name="ParkeeChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="ParkeeCallerIDNum">
-				</parameter>
-				<parameter name="ParkeeCallerIDName">
-				</parameter>
-				<parameter name="ParkeeConnectedLineNum">
-				</parameter>
-				<parameter name="ParkeeConnectedLineName">
-				</parameter>
-				<parameter name="ParkeeAccountCode">
-				</parameter>
-				<parameter name="ParkeeContext">
-				</parameter>
-				<parameter name="ParkeeExten">
-				</parameter>
-				<parameter name="ParkeePriority">
-				</parameter>
-				<parameter name="ParkeeUniqueid">
-				</parameter>
+				<channel_snapshot prefix="Parkee"/>
 				<parameter name="ParkerDialString">
 					<para>Dial String that can be used to call back the parker on ParkingTimeout.</para>
 				</parameter>
@@ -156,6 +119,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel leaves a parking lot due to reaching the time limit of being parked.</synopsis>
 			<syntax>
+				<channel_snapshot prefix="Parkee"/>
+				<channel_snapshot prefix="Parker"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='ParkedCall']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 		</managerEventInstance>
@@ -164,6 +129,8 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel leaves a parking lot because it hung up without being answered.</synopsis>
 			<syntax>
+				<channel_snapshot prefix="Parkee"/>
+				<channel_snapshot prefix="Parker"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='ParkedCall']/managerEventInstance/syntax/parameter)" />
 			</syntax>
 		</managerEventInstance>
@@ -172,45 +139,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_CALL">
 			<synopsis>Raised when a channel leaves a parking lot because it was retrieved from the parking lot and reconnected.</synopsis>
 			<syntax>
+				<channel_snapshot prefix="Parkee"/>
+				<channel_snapshot prefix="Parker"/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='ParkedCall']/managerEventInstance/syntax/parameter)" />
-				<parameter name="RetrieverChannel">
-				</parameter>
-				<parameter name="RetrieverChannelState">
-					<para>A numeric code for the channel's current state, related to ChannelStateDesc</para>
-				</parameter>
-				<parameter name="RetrieverChannelStateDesc">
-					<enumlist>
-						<enum name="Down"/>
-						<enum name="Rsrvd"/>
-						<enum name="OffHook"/>
-						<enum name="Dialing"/>
-						<enum name="Ring"/>
-						<enum name="Ringing"/>
-						<enum name="Up"/>
-						<enum name="Busy"/>
-						<enum name="Dialing Offhook"/>
-						<enum name="Pre-ring"/>
-						<enum name="Unknown"/>
-					</enumlist>
-				</parameter>
-				<parameter name="RetrieverCallerIDNum">
-				</parameter>
-				<parameter name="RetrieverCallerIDName">
-				</parameter>
-				<parameter name="RetrieverConnectedLineNum">
-				</parameter>
-				<parameter name="RetrieverConnectedLineName">
-				</parameter>
-				<parameter name="RetrieverAccountCode">
-				</parameter>
-				<parameter name="RetrieverContext">
-				</parameter>
-				<parameter name="RetrieverExten">
-				</parameter>
-				<parameter name="RetrieverPriority">
-				</parameter>
-				<parameter name="RetrieverUniqueid">
-				</parameter>
+				<channel_snapshot prefix="Retriever"/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
diff --git a/res/res_agi.c b/res/res_agi.c
index 5c79ec27f3d4807c8b21177c64dc033fc5e13e16..6619183fc0fae1bbd5cbcab7f0e6c5f73a09d136 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -940,7 +940,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGI">
 			<synopsis>Raised when a channel starts AsyncAGI command processing.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Env">
 					<para>URL encoded string read from the AsyncAGI server.</para>
 				</parameter>
@@ -951,7 +951,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGI">
 			<synopsis>Raised when a channel stops AsyncAGI command processing.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 			</syntax>
 		</managerEventInstance>
 	</managerEvent>
@@ -959,7 +959,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGI">
 			<synopsis>Raised when AsyncAGI completes an AGI command.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="CommandID" required="false">
 					<para>Optional command ID sent by the AsyncAGI server to identify the command.</para>
 				</parameter>
@@ -973,7 +973,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGI">
 			<synopsis>Raised when a received AGI command starts processing.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<parameter name="Command">
 					<para>The AGI command as received from the external source.</para>
 				</parameter>
@@ -987,7 +987,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 		<managerEventInstance class="EVENT_FLAG_AGI">
 			<synopsis>Raised when a received AGI command completes processing.</synopsis>
 			<syntax>
-				<xi:include xpointer="xpointer(/docs/managerEvent[@name='Newchannel']/managerEventInstance/syntax/parameter)" />
+				<channel_snapshot/>
 				<xi:include xpointer="xpointer(/docs/managerEvent[@name='AGIExecStart']/managerEventInstance/syntax/parameter)" />
 				<parameter name="ResultCode">
 					<para>The numeric result code from AGI</para>