[Telepathy-commits] [telepathy-python/master] Upgrade to spec 0.17.13

Guillaume Desmottes guillaume.desmottes at collabora.co.uk
Thu Oct 16 08:14:45 PDT 2008


---
 spec/Account.xml                                   |   59 ++--
 spec/Account_Interface_Avatar.xml                  |    5 +-
 spec/Account_Manager.xml                           |   25 +-
 spec/Channel.xml                                   |  168 +++++++++-
 spec/Channel_Bundle.xml                            |    4 +-
 spec/Channel_Dispatch_Operation.xml                |  342 ++++++++++++++++++
 spec/Channel_Dispatcher.xml                        |  361 ++++++++++++++++++++
 ...Channel_Dispatcher_Interface_Operation_List.xml |  138 ++++++++
 spec/Channel_Future.xml                            |  122 +-------
 spec/Channel_Handler.xml                           |    2 +-
 spec/Channel_Interface_Call_Merging.xml            |    4 +-
 spec/Channel_Interface_Call_State.xml              |   16 +-
 spec/Channel_Interface_Chat_State.xml              |   10 +-
 spec/Channel_Interface_DTMF.xml                    |   10 +-
 spec/Channel_Interface_Delivery_Reporting.xml      |    6 +-
 spec/Channel_Interface_Destroyable.xml             |   79 +++++
 spec/Channel_Interface_Group.xml                   |   86 +++---
 spec/Channel_Interface_Hold.xml                    |    6 +-
 spec/Channel_Interface_Media_Signalling.xml        |    5 +-
 spec/Channel_Interface_Messages.xml                |   25 +-
 spec/Channel_Interface_Password.xml                |   13 +-
 spec/Channel_Interface_Transfer.xml                |    4 +-
 spec/Channel_Request.xml                           |  175 ++++++++++
 spec/Channel_Type_Contact_Search.xml               |   18 +-
 spec/Channel_Type_Room_List.xml                    |   17 +-
 spec/Channel_Type_Streamed_Media.xml               |   55 ++--
 spec/Channel_Type_Text.xml                         |   88 ++++--
 spec/Channel_Type_Tubes.xml                        |  107 +++---
 spec/Client.xml                                    |  123 +++++++
 spec/Client_Approver.xml                           |  137 ++++++++
 spec/Client_Handler.xml                            |  268 +++++++++++++++
 spec/Client_Observer.xml                           |  230 +++++++++++++
 spec/Connection.xml                                |  186 ++++++++---
 spec/Connection_Interface_Aliasing.xml             |   18 +-
 spec/Connection_Interface_Avatars.xml              |   44 ++--
 spec/Connection_Interface_Capabilities.xml         |   16 +-
 spec/Connection_Interface_Contact_Info.xml         |   11 +-
 spec/Connection_Interface_Contacts.xml             |    6 +-
 spec/Connection_Interface_Forwarding.xml           |   12 +-
 spec/Connection_Interface_Presence.xml             |   37 +-
 spec/Connection_Interface_Privacy.xml              |   13 +-
 spec/Connection_Interface_Renaming.xml             |   10 +-
 spec/Connection_Interface_Requests.xml             |  152 ++++++++-
 spec/Connection_Interface_Simple_Presence.xml      |   22 +-
 spec/Connection_Manager.xml                        |   66 ++---
 spec/Media_Session_Handler.xml                     |   19 +-
 spec/Media_Stream_Handler.xml                      |   95 +++---
 spec/Properties_Interface.xml                      |   23 +-
 spec/all.xml                                       |   35 ++-
 spec/errors.xml                                    |   21 +-
 spec/generic-types.xml                             |   28 ++-
 51 files changed, 2886 insertions(+), 636 deletions(-)
 create mode 100644 spec/Channel_Dispatch_Operation.xml
 create mode 100644 spec/Channel_Dispatcher.xml
 create mode 100644 spec/Channel_Dispatcher_Interface_Operation_List.xml
 create mode 100644 spec/Channel_Interface_Destroyable.xml
 create mode 100644 spec/Channel_Request.xml
 create mode 100644 spec/Client.xml
 create mode 100644 spec/Client_Approver.xml
 create mode 100644 spec/Client_Handler.xml
 create mode 100644 spec/Client_Observer.xml

diff --git a/spec/Account.xml b/spec/Account.xml
index 86ff675..5f7b5b7 100644
--- a/spec/Account.xml
+++ b/spec/Account.xml
@@ -104,20 +104,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       are the ones given special status by the source, and we have all of them
     -->
 
-    <property name="Interfaces" type="as" access="read">
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" tp:type="DBus_Interface[]" access="read">
       <tp:docstring>
         A list of the extra interfaces provided by this account.
       </tp:docstring>
     </property>
 
-    <method name="Remove">
+    <method name="Remove" tp:name-for-bindings="Remove">
       <tp:docstring>Delete the account.</tp:docstring>
       <tp:possible-errors>
         <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
       </tp:possible-errors>
     </method>
 
-    <signal name="Removed">
+    <signal name="Removed" tp:name-for-bindings="Removed">
       <tp:docstring>
         This account has been removed.
 
@@ -130,7 +131,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </signal>
 
-    <signal name="AccountPropertyChanged">
+    <signal name="AccountPropertyChanged"
+      tp:name-for-bindings="Account_Property_Changed">
       <tp:docstring>
         The values of one or more properties on this interface (that do not
         specify that this signal does not apply to them) may have changed.
@@ -147,7 +149,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </signal>
 
-    <property name="DisplayName" type="s" access="readwrite">
+    <property name="DisplayName" type="s" access="readwrite"
+      tp:name-for-bindings="Display_Name">
       <tp:docstring>
         The user-visible name of this account. This SHOULD be chosen by the
         user at account creation time. The account creation user interface
@@ -161,7 +164,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="Icon" type="s" access="readwrite">
+    <property name="Icon" tp:name-for-bindings="Icon"
+      type="s" access="readwrite">
       <tp:docstring>
         The name of an icon in the system's icon theme, such as "im-msn",
         or the empty string to not specify an icon. If the icon is set to
@@ -177,7 +181,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="Valid" type="b" access="read">
+    <property name="Valid" tp:name-for-bindings="Valid"
+      type="b" access="read">
       <tp:docstring>
         If true, this account is considered by the account manager to be
         complete and usable. If false, user action is required to make it
@@ -196,7 +201,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="Enabled" type="b" access="readwrite">
+    <property name="Enabled" tp:name-for-bindings="Enabled"
+      type="b" access="readwrite">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>This property gives the users the possibility to prevent an account
           from being used. This flag does not change the validity of the
@@ -229,7 +235,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="Nickname" type="as" access="readwrite">
+    <property name="Nickname" tp:name-for-bindings="Nickname"
+      type="as" access="readwrite">
       <tp:docstring>
         The nickname to set on this account for display to other contacts,
         as set by the user. When the account becomes connected, the
@@ -247,7 +254,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="Parameters" type="a{sv}" access="read">
+    <property name="Parameters" tp:name-for-bindings="Parameters"
+      type="a{sv}" access="read">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>A map from connection manager parameter names (as in the
           ConnectionManager interface) to their values. This property includes
@@ -263,7 +271,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <method name="UpdateParameters">
+    <method name="UpdateParameters" tp:name-for-bindings="Update_Parameters">
       <tp:docstring>
         Change the value of the Parameters property. Any changes will not
         take effect until the next time the account is disconnected and
@@ -299,7 +307,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     </method>
 
     <property name="AutomaticPresence" type="(uss)" access="readwrite"
-      tp:type="Simple_Presence">
+      tp:type="Simple_Presence" tp:name-for-bindings="Automatic_Presence">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The presence status that this account should have if it is brought
           online.</p>
@@ -318,7 +326,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="ConnectAutomatically" type="b" access="readwrite">
+    <property name="ConnectAutomatically" type="b" access="readwrite"
+      tp:name-for-bindings="Connect_Automatically">
       <tp:docstring>
         If true, the account manager SHOULD attempt to put this account
         online with the AutomaticPresence whenever possible (in the base
@@ -336,14 +345,20 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="Connection" type="s" access="read">
+    <property name="Connection" tp:name-for-bindings="Connection"
+      type="o" access="read">
       <tp:docstring>
-        Either the well-known bus name of the connection to this account,
-        or the empty string if there is no connection.
+        Either the object path of the connection to this account,
+        or the special value '/' if there is no connection.
+
+        <tp:rationale>
+          Object paths aren't nullable, so we can't use an empty string.
+        </tp:rationale>
       </tp:docstring>
     </property>
 
-    <property name="ConnectionStatus" type="u" access="read">
+    <property name="ConnectionStatus" type="u" access="read"
+      tp:name-for-bindings="Connection_Status">
       <tp:docstring>
         If the Connection property is non-empty, the status of that connection.
         If the Connection property is the empty string, this property may
@@ -362,7 +377,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="ConnectionStatusReason" type="u" access="read">
+    <property name="ConnectionStatusReason" type="u" access="read"
+      tp:name-for-bindings="Connection_Status_Reason">
       <tp:docstring>
         The reason for the last change to ConnectionStatus.
         The account manager is expected to set this by observing signals
@@ -377,7 +393,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     </property>
 
     <property name="CurrentPresence" type="(uss)" access="read"
-      tp:type="Simple_Presence">
+      tp:type="Simple_Presence" tp:name-for-bindings="Current_Presence">
       <tp:docstring>
         The actual presence. If the connection is not online, this should be
         (Connection_Presence_Type_Offline, "", "").
@@ -393,7 +409,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     </property>
 
     <property name="RequestedPresence" type="(uss)" access="readwrite"
-      tp:type="Simple_Presence">
+      tp:type="Simple_Presence" tp:name-for-bindings="Requested_Presence">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The requested presence for this account. When this is changed, the
           account manager should attempt to manipulate the connection manager
@@ -412,7 +428,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="NormalizedName" type="s" access="read">
+    <property name="NormalizedName" type="s" access="read"
+      tp:name-for-bindings="Normalized_Name">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The normalized user ID of the local user on this account (i.e. the
           string returned when the InspectHandle method is called on the
diff --git a/spec/Account_Interface_Avatar.xml b/spec/Account_Interface_Avatar.xml
index cb58256..9bf31a9 100644
--- a/spec/Account_Interface_Avatar.xml
+++ b/spec/Account_Interface_Avatar.xml
@@ -35,7 +35,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     </tp:docstring>
     <tp:added version="0.17.6"/>
 
-    <property name="Avatar" type="(ays)" access="readwrite">
+    <property name="Avatar" tp:name-for-bindings="Avatar"
+      type="(ays)" access="readwrite">
       <tp:docstring>
         The avatar to set on this account for display to other contacts,
         represented as a structure containing the bytes of the avatar,
@@ -50,7 +51,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <signal name="AvatarChanged">
+    <signal name="AvatarChanged" tp:name-for-bindings="Avatar_Changed">
       <tp:docstring>
         Emitted when the Avatar property changes.
         
diff --git a/spec/Account_Manager.xml b/spec/Account_Manager.xml
index a068da3..b92913e 100644
--- a/spec/Account_Manager.xml
+++ b/spec/Account_Manager.xml
@@ -29,6 +29,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         the session bus. This process must export an
         /org/freedesktop/Telepathy/AccountManager object with the
         AccountManager interface.</p>
+
+      <p>Until a mechanism exists for making a reasonable automatic choice
+        of AccountManager implementation, implementations SHOULD NOT
+        register as an activatable service for the AccountManager's
+        well-known bus name. Instead, it is RECOMMENDED that some component
+        of the user's session will select and activate a particular
+        implementation, and that other Telepathy-enabled programs can
+        detect whether Telepathy is in use by checking whether the
+        AccountManager's well-known name is in use at runtime.</p>
     </tp:docstring>
     <tp:added version="0.17.2"/>
 
@@ -43,13 +52,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     * register filters (completely out of scope: Channel Dispatcher again)
     -->
 
-    <property name="Interfaces" type="as" access="read">
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" tp:type="DBus_Interface[]" access="read">
       <tp:docstring>
         A list of the interfaces provided by the account manager object.
       </tp:docstring>
     </property>
 
-    <property name="ValidAccounts" type="ao" access="read">
+    <property name="ValidAccounts" type="ao" access="read"
+      tp:name-for-bindings="Valid_Accounts">
       <tp:docstring>
         A list of the valid (complete, usable) accounts. Change notification
         is via AccountValidityChanged.
@@ -63,14 +74,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:docstring>
     </property>
 
-    <property name="InvalidAccounts" type="ao" access="read">
+    <property name="InvalidAccounts" type="ao" access="read"
+      tp:name-for-bindings="Invalid_Accounts">
       <tp:docstring>
         A list of incomplete or otherwise unusable accounts. Change
         notification is via AccountValidityChanged.
       </tp:docstring>
     </property>
 
-    <signal name="AccountRemoved">
+    <signal name="AccountRemoved" tp:name-for-bindings="Account_Removed">
       <tp:docstring>
         The given account has been removed.
 
@@ -87,7 +99,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </signal>
 
-    <signal name="AccountValidityChanged">
+    <signal name="AccountValidityChanged"
+      tp:name-for-bindings="Account_Validity_Changed">
       <tp:docstring>
         The validity of the given account has changed. New accounts are
         also indicated by this signal, as an account validity change
@@ -112,7 +125,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </signal>
 
-    <method name="CreateAccount">
+    <method name="CreateAccount" tp:name-for-bindings="Create_Account">
       <tp:docstring>
         Request the creation of a new account. The account manager SHOULD NOT
         allow invalid accounts to be created. Accounts created through this
diff --git a/spec/Channel.xml b/spec/Channel.xml
index b9b8f3b..f560ed8 100644
--- a/spec/Channel.xml
+++ b/spec/Channel.xml
@@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <interface name="org.freedesktop.Telepathy.Channel">
 
     <property name="ChannelType" type="s" tp:type="DBus_Interface"
-      access="read">
+      access="read" tp:name-for-bindings="Channel_Type">
       <tp:added version="0.17.7"/>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The channel's type. This cannot change once the channel has
@@ -46,8 +46,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </property>
 
-    <property name="Interfaces" type="as" tp:type="DBus_Interface[]"
-      access="read">
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" tp:type="DBus_Interface[]" access="read">
       <tp:added version="0.17.7"/>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Extra interfaces provided by this channel. This SHOULD NOT include
@@ -75,7 +75,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </property>
 
-    <property name="TargetHandle" type="u" access="read" tp:type="Handle">
+    <property name="TargetHandle" type="u" access="read" tp:type="Handle"
+      tp:name-for-bindings="Target_Handle">
       <tp:added version="0.17.7"/>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The handle (a representation for the identifier) of the contact,
@@ -112,7 +113,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </property>
 
-    <property name="TargetID" type="s" access="read">
+    <property name="TargetID" tp:name-for-bindings="Target_ID"
+      type="s" access="read">
       <tp:added version="0.17.9"/>
 
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
@@ -158,7 +160,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </property>
 
     <property name="TargetHandleType" type="u" access="read"
-      tp:type="Handle_Type">
+      tp:type="Handle_Type" tp:name-for-bindings="Target_Handle_Type">
       <tp:added version="0.17.7"/>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The type of TargetHandle.</p>
@@ -173,7 +175,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </property>
 
-    <method name="Close">
+    <method name="Close" tp:name-for-bindings="Close">
       <tp:docstring>
         Request that the channel be closed. This is not the case until
         the Closed signal has been emitted, and depending on the connection
@@ -198,7 +200,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <signal name="Closed">
+    <signal name="Closed" tp:name-for-bindings="Closed">
       <tp:docstring>
         Emitted when the channel has been closed. Method calls on the
         channel are no longer valid after this signal has been emitted,
@@ -207,7 +209,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <method name="GetChannelType">
+    <method name="GetChannelType" tp:name-for-bindings="Get_Channel_Type">
       <tp:deprecated version="0.17.7">Use the ChannelType
         property if possible.</tp:deprecated>
       <arg direction="out" type="s" tp:type="DBus_Interface">
@@ -225,7 +227,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <method name="GetHandle">
+    <method name="GetHandle" tp:name-for-bindings="Get_Handle">
       <tp:deprecated version="0.17.7">Use the TargetHandleType
         and TargetHandle properties if possible.</tp:deprecated>
       <arg direction="out" type="u" tp:type="Handle_Type">
@@ -252,7 +254,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <method name="GetInterfaces">
+    <method name="GetInterfaces" tp:name-for-bindings="Get_Interfaces">
       <tp:deprecated version="0.17.7">Use the Interfaces
         property if possible.</tp:deprecated>
       <arg direction="out" type="as" tp:type="DBus_Interface[]">
@@ -272,6 +274,129 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
+    <property name="Requested" tp:name-for-bindings="Requested"
+      type="b" access="read">
+      <tp:added version="0.17.13">(as stable API)</tp:added>
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>True if this channel was created in response to a local request,
+          such as a call to
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.RequestChannel</tp:dbus-ref>
+          or
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.CreateChannel</tp:dbus-ref>.</p>
+
+        <tp:rationale>
+          <p>The idea of this property is to distinguish between "incoming"
+            and "outgoing" channels, in a way that doesn't break down when
+            considering special cases like contact lists that are automatically
+            created on connection to the server, or chatrooms that an
+            IRC proxy/bouncer like irssi-proxy or bip was already in.</p>
+
+          <p>The reason we want to make that distinction is that UIs for
+            things that the user explicitly requested should start up
+            automatically, whereas for incoming messages and VoIP calls we
+            should first ask the user whether they want to open the messaging
+            UI or accept the call.</p>
+        </tp:rationale>
+
+        <p>If the channel was not explicitly requested (even if it was
+          created as a side-effect of a call to one of those functions,
+          e.g. because joining a Tube in a MUC context on XMPP implies
+          joining that MUC), then this property is false.</p>
+
+        <p>For compatibility with older connection managers, clients SHOULD
+          assume that this property is true if they see a channel announced
+          by the
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.NewChannel</tp:dbus-ref>
+          signal with the suppress_handler parameter set to true.</p>
+
+        <tp:rationale>
+          <p>In a correct connection manager, the only way to get such a
+            channel is to request it.</p>
+        </tp:rationale>
+
+        <p>Clients MAY additionally assume that this property is false
+          if they see a channel announced by the NewChannel signal with the
+          suppress_handler parameter set to false.</p>
+
+        <tp:rationale>
+          <p>This is more controversial, since it's possible to get that
+            parameter set to false by requesting a channel. However, there's
+            no good reason to do so, and we've deprecated this practice.</p>
+
+          <p>In the particular case of the channel dispatcher, the only
+            side-effect of wrongly thinking a channel is unrequested
+            is likely to be that the user has to confirm that they want to
+            use it, so it seems fairly harmless to assume in the channel
+            dispatcher that channels with suppress_handler false are
+            indeed unrequested.</p>
+        </tp:rationale>
+      </tp:docstring>
+    </property>
+
+    <property name="InitiatorHandle" type="u" tp:type="Contact_Handle"
+      access="read" tp:name-for-bindings="Initiator_Handle">
+      <tp:added version="0.17.13">(as stable API)</tp:added>
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The contact who initiated the channel. For channels requested by the
+          local user, this MUST be the value of
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.SelfHandle</tp:dbus-ref>
+          at the time the channel was created (i.e. not a channel-specific
+          handle).</p>
+
+        <tp:rationale>
+          <p>The careful wording about the self-handle is because the Renaming
+            interface can cause the return from Connection.GetSelfHandle to
+            change. It's something of a specification bug that we don't signal
+            this in the Connection interface yet.</p>
+        </tp:rationale>
+
+        <p>For channels requested by a remote user, this MUST be their handle.
+          If unavailable or not applicable, this MUST be 0 (for instance,
+          contact lists are not really initiated by anyone in particular, and
+          it's easy to imagine a protocol where chatroom invitations can be
+          anonymous).</p>
+
+        <p>For channels with the Group interface, this SHOULD be the same
+          contact who is signalled as the "Actor" causing the self-handle
+          to be placed in the local-pending set.</p>
+
+        <p>This SHOULD NOT be a channel-specific handle, if possible.</p>
+
+        <p>It does not make sense for this property to be in channel
+          requests - the initiator will always be the local user - so it
+          MUST NOT be accepted.</p>
+      </tp:docstring>
+    </property>
+
+    <property name="InitiatorID" type="s" access="read"
+      tp:name-for-bindings="Initiator_ID">
+      <tp:added version="0.17.13">(as stable API)</tp:added>
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The string that would result from inspecting the
+          <tp:member-ref>InitiatorHandle</tp:member-ref>
+          property (i.e. the initiator's identifier in the IM protocol).</p>
+
+        <tp:rationale>
+          <p>The presence of this property avoids the following race
+            condition:</p>
+
+          <ul>
+            <li>New StreamedMedia channel C is signalled with initiator
+              handle I</li>
+            <li>Client calls InspectHandles(CONTACT, [I])</li>
+            <li>Channel C closes, removing the last reference to handle I</li>
+            <li>InspectHandles(CONTACT, [I]) returns an error</li>
+            <li>Client can indicate that a call was missed, but not who
+              called!</li>
+          </ul>
+        </tp:rationale>
+
+        <p>It does not make sense for this property to be in channel
+          requests - the initiator will always be the local user - so it
+          MUST NOT be accepted.</p>
+      </tp:docstring>
+    </property>
+
     <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
     <p>All communication in the Telepathy framework is carried out via channel
     objects which are created and managed by connections. This interface must
@@ -280,6 +405,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     as a buddy list) or a Channel.Type.Text which represents a channel over
     which textual messages are sent and received.</p>
 
+    <p>Each Channel's object path MUST start with the object path of
+      its associated Connection, followed by '/'. There MAY be any number
+      of additional object-path components, which clients MUST NOT attempt
+      to parse.</p>
+
+    <tp:rationale>
+      <p>This ensures that Channel object paths are unique, even between
+        Connections and CMs, because Connection object paths are
+        guaranteed-unique via their link to the well-known bus name.</p>
+
+      <p>If all connection managers in use are known to comply with at least
+        spec version 0.17.10, then the Connection's object path can
+        even be determined from the Channel's without any additional
+        information, by taking the first 7 components.</p>
+    </tp:rationale>
+
     <p>Each channel may have an immutable handle associated with it, which
       may be any handle type, such as a contact, room or list handle,
       indicating that the channel is for communicating with that handle.</p>
@@ -316,6 +457,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       has now been removed in order to accommodate features like message
       threads.
     </tp:changed>
+
+    <tp:changed version="0.17.10">Previously we did not explicitly
+      guarantee that Channels' object paths had the Connection's object path
+      as a prefix.
+    </tp:changed>
   </interface>
 </node>
 <!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Channel_Bundle.xml b/spec/Channel_Bundle.xml
index 0b1a6c1..d211525 100644
--- a/spec/Channel_Bundle.xml
+++ b/spec/Channel_Bundle.xml
@@ -36,8 +36,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         exist, the bundle <em>B</em> will also exist.</p>
     </tp:docstring>
 
-    <property name="Interfaces" type="as" access="read"
-      tp:type="DBus_Interface[]">
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" access="read" tp:type="DBus_Interface[]">
       <tp:docstring>
         A list of the extra interfaces provided by this channel bundle.
       </tp:docstring>
diff --git a/spec/Channel_Dispatch_Operation.xml b/spec/Channel_Dispatch_Operation.xml
new file mode 100644
index 0000000..c9f5592
--- /dev/null
+++ b/spec/Channel_Dispatch_Operation.xml
@@ -0,0 +1,342 @@
+<?xml version="1.0" ?>
+<node name="/Channel_Dispatch_Operation"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+      MA 02110-1301, USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT"
+    tp:causes-havoc="experimental">
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>A channel dispatch operation is an object in the ChannelDispatcher
+        representing a bundle of unrequested channels being announced to
+        client
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy.Client">Approver.DRAFT</tp:dbus-ref>
+        processes.</p>
+
+      <p>These objects can result from new incoming channels or channels
+        which are automatically created for some reason, but cannot result
+        from outgoing requests for channels.</p>
+
+      <p>More specifically, whenever the
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.NewChannels</tp:dbus-ref>
+        signal contains channels whose
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">Requested</tp:dbus-ref>
+        property is false, or whenever the
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.NewChannel</tp:dbus-ref>
+        signal contains a channel with suppress_handler false,
+        one or more ChannelDispatchOperation objects are created for those
+        channels.</p>
+
+      <p>(If some channels in a NewChannels signal are in different bundles,
+        this is an error. The channel dispatcher SHOULD recover by treating
+        the NewChannels signal as if it had been several NewChannels signals
+        each containing one channel.)</p>
+
+      <p>First, the channel dispatcher SHOULD construct a list of all the
+        channel handlers that could handle all the channels, ordered by
+        priority in some implementation-dependent way. If there are handlers
+        which could handle all the channels, one channel dispatch operation
+        SHOULD be created for all the channels. If there are not, one channel
+        dispatch operation SHOULD be created for each channel, each with
+        a list of channel handlers that could handle that channel.</p>
+
+      <p>When listing channel handlers, priority SHOULD be given to
+        channel handlers that are already handling channels from the same
+        bundle.</p>
+
+      <p>Processing of a channel dispatch operation proceeds as follows.
+        If the channels in a channel dispatch operation are in the same
+        bundle as a channel that is already being handled, and the handler
+        could also handle the channels being dispatched, the channel
+        dispatcher SHOULD call the handler's
+        HandleAdditionalChannels
+        method to see whether the handler will accept the new channels too.
+        If the handler takes responsibility for the channels,
+        processing stops, and no approvers are run.</p>
+
+      <p>(FIXME: this is far too subtle and everyone will get it wrong.
+        Open issue: how else do we address this use case?)</p>
+
+      <tp:rationale>
+        <p>Some channel types can be picked up "quietly" by an existing
+          channel handler. If a Text channel is added to an existing
+          bundle containing a StreamedMedia channel, there shouldn't be
+          any approvers, flashing icons or notification bubbles, if the
+          the UI for the StreamedMedia channel can just add a text box
+          and display the message.</p>
+      </tp:rationale>
+
+      <p>If not, the channel dispatcher SHOULD send the channel dispatch
+        operation to all relevant approvers (in parallel) and wait for an
+        approver to claim the channels or request that they are handled.
+        See
+        <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy.Client.Approver.DRAFT">AddDispatchOperation</tp:dbus-ref>
+        for more details on this.</p>
+
+      <p>Finally, if the approver requested it, the channel dispatcher SHOULD
+        send the channels to a handler.</p>
+    </tp:docstring>
+
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" access="read" tp:type="DBus_Interface[]">
+      <tp:docstring>
+        A list of the extra interfaces provided by this channel dispatch
+        operation. This property cannot change.
+      </tp:docstring>
+    </property>
+
+    <property name="Connection" tp:name-for-bindings="Connection"
+      type="o" access="read">
+      <tp:docstring>
+        The <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>
+        with which the <tp:member-ref>Channels</tp:member-ref> are
+        associated. The well-known bus name to use can be derived from
+        this object path by removing the leading '/' and replacing all
+        subsequent '/' by '.'. This property cannot change.
+      </tp:docstring>
+    </property>
+
+    <property name="Account" tp:name-for-bindings="Account"
+      type="o" access="read">
+      <tp:docstring>
+        The <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy">Account</tp:dbus-ref>
+        with which the <tp:member-ref>Connection</tp:member-ref>
+        and <tp:member-ref>Channels</tp:member-ref> are
+        associated. This property cannot change.
+      </tp:docstring>
+    </property>
+
+    <property name="Channels" tp:name-for-bindings="Channels"
+      type="a(oa{sv})" access="read" tp:type="Channel_Details[]">
+      <tp:docstring>
+        The <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy">Channel</tp:dbus-ref>s
+        to be dispatched, and their properties. Change notification is via
+        the <tp:member-ref>ChannelLost</tp:member-ref> signal (channels
+        cannot be added to this property, only removed).
+      </tp:docstring>
+    </property>
+
+    <signal name="ChannelLost" tp:name-for-bindings="Channel_Lost">
+      <tp:docstring>
+        A channel has closed before it could be claimed or handled. If this
+        is emitted for the last remaining channel in a channel dispatch
+        operation, it MUST immediately be followed by
+        <tp:member-ref>Finished</tp:member-ref>.
+      </tp:docstring>
+
+      <arg name="Channel" type="o">
+        <tp:docstring>
+          The <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Channel</tp:dbus-ref>
+          that closed.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Error" type="s" tp:type="DBus_Error_Name">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The name of a D-Bus error indicating why the channel closed. If
+            no better reason can be found,
+            <code>org.freedesktop.Telepathy.Errors.NotAvailable</code> MAY
+            be used as a fallback; this means that this error SHOULD NOT be
+            given any more specific meaning.</p>
+
+          <p>FIXME: or should we invent a new OtherError for that purpose?</p>
+
+          <p>FIXME: we need to specify errors for these situations:</p>
+
+          <ul>
+            <li>kicked from a chatroom</li>
+            <li>outgoing call rejected</li>
+            <li>outgoing call timed out</li>
+            <li>incoming call terminated</li>
+          </ul>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Message" type="s">
+        <tp:docstring>
+          A string associated with the D-Bus error.
+        </tp:docstring>
+      </arg>
+    </signal>
+
+    <property name="PossibleHandlers" tp:name-for-bindings="Possible_Handlers"
+      type="as" access="read" tp:type="DBus_Well_Known_Name[]">
+      <tp:docstring>
+        The well known bus names (starting with
+        <code>org.freedesktop.Telepathy.Client.</code>) of the possible
+        <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy.Client">Handler</tp:dbus-ref>s
+        for these channels. The channel dispatcher MUST place the most
+        preferred handlers first, according to some reasonable heuristic.
+        As a result, approvers SHOULD use the first handler by default.
+      </tp:docstring>
+    </property>
+
+    <method name="HandleWith" tp:name-for-bindings="Handle_With">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by an approver to accept a channel bundle and request that
+          the given handler be used to handle it.</p>
+
+        <p>If successful, this method will cause the ChannelDispatchOperation
+          object to disappear, emitting
+          <tp:member-ref>Finished</tp:member-ref>.</p>
+
+        <p>However, this method may fail because the dispatch has already been
+          completed and the object has already gone. If this occurs, it
+          indicates that another approver has asked for the bundle to be
+          handled by a particular handler. The approver MUST NOT attempt
+          to interact with the channels further in this case, unless it is
+          separately invoked as the handler.</p>
+
+        <p>Approvers which are also channel handlers SHOULD use Claim instead
+          of HandleWith to request that they can handle a channel bundle
+          themselves.</p>
+
+        <p>(FIXME: list some possible errors)</p>
+
+        <p>If the channel handler raises an error from Handle, this method
+          MAY respond by raising that same error, even if it is not
+          specifically documented here.</p>
+      </tp:docstring>
+
+      <arg direction="in" type="s" tp:type="DBus_Bus_Name" name="Handler">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The well-known bus name (starting with
+            <code>org.freedesktop.Telepathy.Client.</code>) of the channel
+            handler that should handle the channel.</p>
+        </tp:docstring>
+      </arg>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
+          <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            The selected handler is not a syntactically correct
+            <tp:type>DBus_Bus_Name</tp:type> or does not start with
+            "<code>org.freedesktop.Telepathy.Client.</code>".
+          </tp:docstring>
+        </tp:error>
+        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
+          <tp:docstring>
+            The selected handler is temporarily unable to handle these
+            channels.
+          </tp:docstring>
+        </tp:error>
+        <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
+          <tp:docstring>
+            The selected handler is syntactically correct, but will never
+            be able to handle these channels (for instance because the channels
+            do not match its HandlerChannelFilter, or because HandleChannels
+            raised NotImplemented).
+          </tp:docstring>
+        </tp:error>
+        <tp:error name="org.freedesktop.Telepathy.Error.NotYours">
+          <tp:docstring>
+            At the time that HandleWith was called, this dispatch operation was
+            processing an earlier call to HandleWith. The earlier call has
+            now succeeded, so some Handler nominated by another approver is
+            now responsible for the channels. In this situation, the second
+            call to HandleWith MUST NOT return until the first one has
+            returned successfully or unsuccessfully, and if the first call
+            to HandleChannels fails, the channel dispatcher SHOULD try to obey
+            the choice of Handler made by the second call to HandleWith.
+          </tp:docstring>
+        </tp:error>
+      </tp:possible-errors>
+    </method>
+
+    <method name="Claim" tp:name-for-bindings="Claim">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by an approver to claim channels for handling
+          internally. If this method is called successfully, the process
+          calling this method becomes the handler for the channel, but
+          <em>does not</em> have the HandleChannels method called on it.</p>
+        <!-- FIXME: tp:dbus-ref -->
+
+        <p>Clients that call Claim on channels but do not immediately
+          close them SHOULD implement the Handler interface and its
+          CurrentlyHandledChannels property.</p>
+        <!-- FIXME: tp:dbus-ref -->
+
+        <p>Approvers wishing to reject channels MUST call this method to
+          claim ownership of them, and MUST NOT call
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">Close</tp:dbus-ref>
+          on the channels unless/until this method returns successfully.</p>
+
+        <tp:rationale>
+          <p>The channel dispatcher can't know how best to close arbitrary
+            channel types, so it leaves it up to the approver to do so.
+            For instance, for Text channels it is necessary
+            to acknowledge any messages that have already been displayed to
+            the user first - ideally, the approver would display and then
+            acknowledge the messages.</p>
+        </tp:rationale>
+
+        <p>If successful, this method will cause the ChannelDispatchOperation
+          object to disappear, emitting
+          <tp:member-ref>Finished</tp:member-ref>, in the same way as for
+          <tp:member-ref>HandleWith</tp:member-ref>.</p>
+
+        <p>This method may fail because the dispatch operation has already
+          been completed. Again, see HandleWith for more details. The approver
+          MUST NOT attempt to interact with the channels further in this
+          case.</p>
+
+        <p>(FIXME: list some other possible errors)</p>
+      </tp:docstring>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.NotYours">
+          <tp:docstring>
+            At the time that Claim was called, this dispatch operation was
+            processing a call to HandleWith which has now succeeded, so
+            some Handler nominated by another approver is now responsible for
+            the channel.
+          </tp:docstring>
+        </tp:error>
+      </tp:possible-errors>
+    </method>
+
+    <signal name="Finished" tp:name-for-bindings="Finished">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Emitted when this dispatch operation finishes. The dispatch
+          operation is no longer present and further methods must not be
+          called on it.</p>
+
+        <p>Its object path SHOULD NOT be reused for a subsequent dispatch
+          operation; the ChannelDispatcher MUST choose object paths
+          in a way that avoids immediate re-use.</p>
+
+        <tp:rationale>
+          <p>Otherwise, clients might accidentally call HandleWith or Claim
+            on a new dispatch operation instead of the one they
+            intended to handle.</p>
+        </tp:rationale>
+      </tp:docstring>
+    </signal>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Channel_Dispatcher.xml b/spec/Channel_Dispatcher.xml
new file mode 100644
index 0000000..c9b8a2b
--- /dev/null
+++ b/spec/Channel_Dispatcher.xml
@@ -0,0 +1,361 @@
+<?xml version="1.0" ?>
+<node name="/Channel_Dispatcher"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+      USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.ChannelDispatcher.DRAFT"
+    tp:causes-havoc="experimental">
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>The channel dispatcher is responsible for responding to new
+        channels and launching client processes to handle them. It also
+        provides functionality for client processes to request that new
+        channels are created.</p>
+
+      <p>If a channel dispatcher is running, it is responsible for dispatching
+        new channels on all
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>s
+        created by the
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>.
+        Connections not created by the AccountManager are outside the scope
+        of the channel dispatcher.</p>
+
+      <tp:rationale>
+        <p>Connections created by standalone Telepathy clients
+          that do not intend to interact with the channel dispatcher
+          should be ignored - otherwise, the channel dispatcher would try
+          to launch handlers for channels that the standalone client
+          was already handling internally.</p>
+      </tp:rationale>
+
+      <p>The current channel dispatcher is defined to be the process that
+        owns the well-known bus name
+        <code>org.freedesktop.Telepathy.ChannelDispatcher</code> on
+        the session bus. This process MUST export an object with this
+        interface at the object path
+        <code>/org/freedesktop/Telepathy/ChannelDispatcher</code>.</p>
+
+      <p>Until a mechanism exists for making a reasonable automatic choice
+        of ChannelDispatcher implementation, implementations SHOULD NOT
+        register as an activatable service for the ChannelDispatcher's
+        well-known bus name. Instead, it is RECOMMENDED that some component
+        of the user's session will select and activate a particular
+        implementation, and that other Telepathy-enabled programs
+        can detect whether channel request/dispatch functionality is available
+        by checking whether the ChannelDispatcher's well-known name is in use
+        at runtime.</p>
+
+      <p>There are three categories of client process defined by this
+        specification:</p>
+
+      <dl>
+        <dt>Observer</dt>
+        <dd><p>Observers monitor the creation of new channels. This
+            functionality can be used for things like message logging.
+            All observers are notified simultaneously.</p></dd>
+
+        <dt>Approver</dt>
+        <dd>
+          <p>Approvers notify the user that new channels have been created,
+            and also select which channel handler will be used for the channel,
+            either by asking the user or by choosing the most appropriate
+            channel handler.</p>
+        </dd>
+
+        <dt>Handler</dt>
+        <dd>
+          <p>Each new channel or set of channels is passed to exactly one
+            handler as its final destination. A typical channel handler is a
+            user interface process handling channels of a particular type.</p>
+        </dd>
+      </dl>
+    </tp:docstring>
+
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" access="read" tp:type="DBus_Interface[]">
+      <tp:docstring>
+        A list of the extra interfaces provided by this channel dispatcher.
+      </tp:docstring>
+    </property>
+
+    <method name="CreateChannel" tp:name-for-bindings="Create_Channel">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Start a request to create a channel. This initially just creates a
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT</tp:dbus-ref>
+          object, which can be used to continue the request and track its
+          success or failure.</p>
+
+        <tp:rationale>
+          <p>The request can take a long time - in the worst case, the
+            channel dispatcher has to ask the account manager to put the
+            account online, the account manager has to ask the operating
+            system to obtain an Internet connection, and the operating
+            system has to ask the user whether to activate an Internet
+            connection using an on-demand mechanism like dialup.</p>
+
+          <p>This means that using a single D-Bus method call and response
+            to represent the whole request will tend to lead to that call
+            timing out, which is not the behaviour we want.</p>
+        </tp:rationale>
+
+        <p>If this method is called for an Account that is disabled, invalid
+          or otherwise unusable, no error is signalled until
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT.Proceed</tp:dbus-ref>
+          is called, at which point
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT.Failed</tp:dbus-ref>
+          is emitted with an appropriate error.</p>
+
+        <tp:rationale>
+          <p>This means there's only one code path for errors, apart from
+            InvalidArgument for "that request makes no sense".</p>
+
+          <p>It also means that the request will proceed if the account is
+            enabled after calling CreateChannel, but before calling
+            Proceed.</p>
+        </tp:rationale>
+      </tp:docstring>
+
+      <arg direction="in" name="Account" type="o">
+        <tp:docstring>
+          The
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Account</tp:dbus-ref>
+          for which the new channel is to be created.
+        </tp:docstring>
+      </arg>
+
+      <arg direction="in" name="Requested_Properties" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>A dictionary containing desirable properties. This has the same
+            semantics as the corresponding parameter to
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.CreateChannel</tp:dbus-ref>.
+          </p>
+
+          <p>Certain properties will not necessarily make sense in this
+            dictionary: for instance,
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
+            can only be given if the requester is able to interact with a
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>
+            to the desired account.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg direction="in" name="User_Action_Time" type="t"
+        tp:type="Unix_Timestamp64">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The time at which user action occurred, or 0 if this channel
+            request is for some reason not involving user action.
+            The <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy.ChannelRequest.DRAFT">UserActionTime</tp:dbus-ref>
+            property will be set to this value, and it will eventually be
+            passed as the <code>User_Action_Time</code> parameter of <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy.Client.Handler.DRAFT">HandleChannels</tp:dbus-ref>.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg direction="in" name="Preferred_Handler" type="s"
+        tp:type="DBus_Well_Known_Name">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>Either the well-known bus name (starting with
+            <code>org.freedesktop.Telepathy.Client.</code>)
+            of the preferred handler for this
+            channel, or an empty string to indicate that any handler would be
+            acceptable. The channel dispatcher SHOULD dispatch as many as
+            possible of the resulting channels (ideally, all of them)
+            to that handler, and SHOULD remember the preferred handler
+            so it can try to dispatch subsequent channels in the same bundle
+            to the same handler.</p>
+
+          <tp:rationale>
+            <p>This must be the well-known bus name, not the unique name,
+              to ensure that all handlers do indeed have the Client API,
+              and the Client object on the handler can be located easily.</p>
+
+            <p>This is partly so the channel dispatcher can call
+              <tp:dbus-ref
+                namespace="org.freedesktop.Telepathy.Client.Handler.DRAFT">HandleChannels</tp:dbus-ref>
+              on it, and partly so the channel dispatcher
+              can recover state if it crashes and is restarted.</p>
+          </tp:rationale>
+        </tp:docstring>
+      </arg>
+
+      <arg direction="out" name="Request" type="o">
+        <tp:docstring>
+          A
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT</tp:dbus-ref>
+          object.
+        </tp:docstring>
+      </arg>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
+          <tp:docstring>
+            The Preferred_Handler is syntactically invalid or does
+            not start with <code>org.freedesktop.Telepathy.Client.</code>,
+            the Account does not exist, or one of the Requested_Properties
+            is invalid
+          </tp:docstring>
+        </tp:error>
+      </tp:possible-errors>
+
+    </method>
+
+    <method name="EnsureChannel" tp:name-for-bindings="Ensure_Channel">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Start a request to ensure that a channel exists, creating it if
+          necessary.  This initially just creates a <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT</tp:dbus-ref>
+          object, which can be used to continue the request and track its
+          success or failure.</p>
+
+        <p>If this method is called for an Account that is disabled, invalid
+          or otherwise unusable, no error is signalled until
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT.Proceed</tp:dbus-ref>
+          is called, at which point
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT.Failed</tp:dbus-ref>
+          is emitted with an appropriate error.</p>
+
+        <tp:rationale>
+          <p>The rationale is as for <tp:dbus-ref
+              namespace='org.freedesktop.Telepathy.ChannelDispatcher.DRAFT'>CreateChannel</tp:dbus-ref>.</p>
+        </tp:rationale>
+      </tp:docstring>
+
+      <arg direction="in" name="Account" type="o">
+        <tp:docstring>
+          The
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Account</tp:dbus-ref>
+          for which the new channel is to be created.
+        </tp:docstring>
+      </arg>
+
+      <arg direction="in" name="Requested_Properties" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>A dictionary containing desirable properties. This has the same
+            semantics as the corresponding parameter to
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.EnsureChannel</tp:dbus-ref>.
+          </p>
+
+          <p>Certain properties will not necessarily make sense in this
+            dictionary: for instance,
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
+            can only be given if the requester is able to interact with a
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>
+            to the desired account.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg direction="in" name="User_Action_Time" type="t"
+        tp:type="Unix_Timestamp64">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The time at which user action occurred, or 0 if this channel
+            request is for some reason not involving user action.
+            The <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy.ChannelRequest.DRAFT">UserActionTime</tp:dbus-ref>
+            property will be set to this value, and it will eventually be
+            passed as the <code>User_Action_Time</code> parameter of <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy.Client.Handler.DRAFT">HandleChannels</tp:dbus-ref>.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg direction="in" name="Preferred_Handler" type="s"
+        tp:type="DBus_Well_Known_Name">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>Either the well-known bus name (starting with
+            <code>org.freedesktop.Telepathy.Client.</code>)
+            of the preferred handler for this
+            channel, or an empty string to indicate that any handler would be
+            acceptable.</p>
+
+          <tp:rationale>
+            <p>This must be the well-known bus name, not the unique name,
+              to ensure that all handlers do indeed have the Client API,
+              and the Client object on the handler can be located easily.</p>
+
+            <p>This is partly so the channel dispatcher can call
+              <tp:dbus-ref
+                namespace="org.freedesktop.Telepathy.Client.Handler.DRAFT">HandleChannels</tp:dbus-ref>
+              on it, and partly so the channel dispatcher
+              can recover state if it crashes and is restarted.</p>
+          </tp:rationale>
+
+          <p>If any new channels are created in response to this
+            request, the channel dispatcher SHOULD dispatch as many as
+            possible of the resulting channels (ideally, all of them)
+            to that handler, and SHOULD remember the preferred handler
+            so it can try to dispatch subsequent channels in the same bundle
+            to the same handler. If the requested channel already exists (that
+            is, <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.EnsureChannel</tp:dbus-ref>
+            returns <code>Yours=False</code>) then the channel dispatcher
+            SHOULD re-dispatch the channel to its existing handler, and MUST
+            NOT dispatch it to this client (unless it is the existing handler);
+            the request is still deemed to have succeeded in this case.</p>
+
+          <tp:rationale>
+            <p>An address book application, for example, might call <tp:dbus-ref
+                namespace='org.freedesktop.Telepathy.ChannelDispatcher.DRAFT'>EnsureChannel</tp:dbus-ref>
+              to ensure that a text channel with a particular contact is
+              displayed to the user; it does not care whether a new channel was
+              made. An IM client might call <tp:dbus-ref
+                namespace='org.freedesktop.Telepathy.ChannelDispatcher.DRAFT'>EnsureChannel</tp:dbus-ref>
+              in response to the user double-clicking an entry in the contact
+              list, with itself as the <code>Preferred_Handler</code>; if the
+              user already has a conversation with that contact in another
+              application, they would expect the existing window to be
+              presented, rather than their double-click leading to an error
+              message.  So the request should succeed, even if its
+              <code>Preferred_Handler</code> is not used.</p>
+          </tp:rationale>
+
+        </tp:docstring>
+      </arg>
+
+      <arg direction="out" name="Request" type="o">
+        <tp:docstring>
+          A
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">ChannelRequest.DRAFT</tp:dbus-ref>
+          object.
+        </tp:docstring>
+      </arg>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument">
+          <tp:docstring>
+            The Preferred_Handler is syntactically invalid or does
+            not start with <code>org.freedesktop.Telepathy.Client.</code>,
+            the Account does not exist, or one of the Requested_Properties
+            is invalid
+          </tp:docstring>
+        </tp:error>
+      </tp:possible-errors>
+
+    </method>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Channel_Dispatcher_Interface_Operation_List.xml b/spec/Channel_Dispatcher_Interface_Operation_List.xml
new file mode 100644
index 0000000..40cd86e
--- /dev/null
+++ b/spec/Channel_Dispatcher_Interface_Operation_List.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" ?>
+<node name="/Channel_Dispatcher_Interface_Operation_List"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+      USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.ChannelDispatcher.Interface.OperationList.DRAFT"
+    tp:causes-havoc="experimental">
+
+    <tp:requires interface="org.freedesktop.Telepathy.ChannelDispatcher.DRAFT"/>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>This interface allows users of the ChannelDispatcher to enumerate
+        all the pending dispatch operations, with change notification.</p>
+
+      <tp:rationale>
+        <p>The existence of the DispatchOperations property allows a newly
+          started approver to pick up existing dispatch operations.</p>
+
+        <p>This is on a separate interface so clients that aren't interested
+          in doing this aren't woken up by its signals.</p>
+      </tp:rationale>
+    </tp:docstring>
+
+    <tp:struct name="Dispatch_Operation_Details"
+      array-name="Dispatch_Operation_Details_List">
+
+      <tp:docstring>
+        Details of a channel dispatch operation.
+      </tp:docstring>
+
+      <tp:member name="Channel_Dispatch_Operation" type="o">
+        <tp:docstring>
+          The object path of the
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelDispatchOperation</tp:dbus-ref>.
+        </tp:docstring>
+      </tp:member>
+
+      <tp:member name="Properties" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>Properties of the channel dispatch operation.</p>
+
+          <p>Connection managers MUST NOT include properties in this mapping
+            if their values can change. Clients MUST ignore properties
+            that appear in this mapping if their values can change.</p>
+
+          <tp:rationale>
+            <p>The rationale is the same as for
+              <tp:type-ref>Channel_Details</tp:type-ref>.</p>
+          </tp:rationale>
+
+          <p>Each dictionary MUST contain at least the following keys:</p>
+          <ul>
+            <li><tp:dbus-ref>org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT.Interfaces</tp:dbus-ref></li>
+            <li><tp:dbus-ref>org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT.Connection</tp:dbus-ref></li>
+            <li><tp:dbus-ref>org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT.Account</tp:dbus-ref></li>
+            <li><tp:dbus-ref>org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT.Channels</tp:dbus-ref></li>
+            <li><tp:dbus-ref>org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT.PossibleHandlers</tp:dbus-ref></li>
+          </ul>
+        </tp:docstring>
+      </tp:member>
+    </tp:struct>
+
+    <property
+      name="DispatchOperations" tp:name-for-bindings="Dispatch_Operations"
+      type="a(oa{sv})" tp:type="Dispatch_Operation_Details[]" access="read">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The list of ChannelDispatchOperation objects currently being
+          processed. Change notification is via the NewDispatch and
+          DispatchFinished signals.</p>
+      </tp:docstring>
+    </property>
+
+    <signal name="NewDispatchOperation"
+      tp:name-for-bindings="New_Dispatch_Operation">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Emitted when a dispatch operation is added to
+          <tp:member-ref>DispatchOperations</tp:member-ref>.</p>
+      </tp:docstring>
+
+      <arg name="Dispatch_Operation" type="o">
+        <tp:docstring>
+          The dispatch operation that was created.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Properties"
+        type="a{sv}" tp:type="Qualified_Property_Value_Map">
+        <tp:docstring>
+          The same properties that would appear in the Properties member of
+          <tp:type-ref>Dispatch_Operation_Details</tp:type-ref>.
+        </tp:docstring>
+      </arg>
+    </signal>
+
+    <signal name="DispatchOperationFinished"
+      tp:name-for-bindings="Dispatch_Operation_Finished">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        Emitted when a dispatch operation finishes (i.e. exactly once per
+        emission of <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy">ChannelDispatchOperation.DRAFT.Finished</tp:dbus-ref>).
+
+        <tp:rationale>
+          Strictly speaking this is redundant with
+          ChannelDispatchOperation.Finished, but it provides full
+          change-notification for the DispatchOperations property.
+        </tp:rationale>
+      </tp:docstring>
+
+      <arg name="Dispatch_Operation" type="o">
+        <tp:docstring>
+          The dispatch operation that was closed.
+        </tp:docstring>
+      </arg>
+    </signal>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Channel_Future.xml b/spec/Channel_Future.xml
index ad18879..235ff2c 100644
--- a/spec/Channel_Future.xml
+++ b/spec/Channel_Future.xml
@@ -42,126 +42,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:rationale>
     </tp:docstring>
 
-    <property name="Requested" type="b" access="read">
-      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-        <p>True if this channel was created in response to a call to
-          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.RequestChannel</tp:dbus-ref>,
-          or
-          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.DRAFT.CreateChannel</tp:dbus-ref>.</p>
-
-        <tp:rationale>
-          <p>The idea of this property is to distinguish between "incoming"
-            and "outgoing" channels, in a way that doesn't break down when
-            considering special cases like contact lists that are automatically
-            created on connection to the server, or chatrooms that an
-            IRC proxy/bouncer like irssi-proxy or bip was already in.</p>
-
-          <p>The reason we want to make that distinction is that UIs for
-            things that the user explicitly requested should start up
-            automatically, whereas for incoming messages and VoIP calls we
-            should first ask the user whether they want to open the messaging
-            UI or accept the call.</p>
-        </tp:rationale>
-
-        <p>If the channel was not explicitly requested (even if it was
-          created as a side-effect of a call to one of those functions,
-          e.g. because joining a Tube in a MUC context on XMPP implies
-          joining that MUC), then this property is false.</p>
-
-        <p>For compatibility with older connection managers, clients SHOULD
-          assume that this property is true if they see a channel announced
-          by the
-          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.NewChannel</tp:dbus-ref>
-          signal with the suppress_handler parameter set to true.</p>
-
-        <tp:rationale>
-          <p>In a correct connection manager, the only way to get such a
-            channel is to request it.</p>
-        </tp:rationale>
-
-        <p>Clients MAY additionally assume that this property is false
-          if they see a channel announced by the NewChannel signal with the
-          suppress_handler parameter set to false.</p>
-
-        <tp:rationale>
-          <p>This is more controversial, since it's possible to get that
-            parameter set to false by requesting a channel. However, there's
-            no good reason to do so, and we've deprecated this practice.</p>
-
-          <p>In the particular case of the channel dispatcher, the only
-            side-effect of wrongly thinking a channel is unrequested
-            is likely to be that the user has to confirm that they want to
-            use it, so it seems fairly harmless to assume in the channel
-            dispatcher that channels with suppress_handler false are
-            indeed unrequested.</p>
-        </tp:rationale>
-      </tp:docstring>
-    </property>
-
-    <property name="InitiatorHandle" type="u" tp:type="Contact_Handle"
-      access="read">
-      <tp:added version="0.17.7">(in Channel.FUTURE
-        pseudo-interface)</tp:added>
-      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-        <p>The contact who initiated the channel. For channels requested by the
-          local user, this MUST be the same thing as would be returned
-          by Connection.GetSelfHandle() at the time the channel was
-          created.</p>
-
-        <tp:rationale>
-          <p>The careful wording about the self-handle is because the Renaming
-            interface can cause the return from Connection.GetSelfHandle to
-            change. It's something of a specification bug that we don't signal
-            this in the Connection interface yet.</p>
-        </tp:rationale>
-
-        <p>For channels requested by a remote user, this MUST be their handle.
-          If unavailable or not applicable, this MUST be 0 (for instance,
-          contact lists are not really initiated by anyone in particular, and
-          it's easy to imagine a protocol where chatroom invitations can be
-          anonymous).</p>
-
-        <p>For channels with the Group interface, this SHOULD be the same
-          contact who is signalled as the "Actor" causing the self-handle
-          to be placed in the local-pending set.</p>
-
-        <p>This SHOULD NOT be a channel-specific handle, if possible.</p>
-
-        <p>It does not make sense for this property to be in channel
-          requests - the initiator will always be the local user - so it
-          MUST NOT be accepted.</p>
-      </tp:docstring>
-    </property>
-
-    <property name="InitiatorID" type="s" access="read">
-      <tp:added version="0.17.7">(in Channel.FUTURE
-        pseudo-interface)</tp:added>
-      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-        <p>The string that would result from inspecting the InitiatorHandle
-          property (i.e. the initiator's identifier in the IM protocol).</p>
-
-        <tp:rationale>
-          <p>The presence of this property avoids the following race
-            condition:</p>
-
-          <ul>
-            <li>New StreamedMedia channel C is signalled with initiator
-              handle I</li>
-            <li>Client calls InspectHandles(CONTACT, [I])</li>
-            <li>Channel C closes, removing the last reference to handle I</li>
-            <li>InspectHandles(CONTACT, [I]) returns an error</li>
-            <li>Client can indicate that a call was missed, but not who
-              called!</li>
-          </ul>
-        </tp:rationale>
-
-        <p>It does not make sense for this property to be in channel
-          requests - the initiator will always be the local user - so it
-          MUST NOT be accepted.</p>
-      </tp:docstring>
-    </property>
-
-    <property name="Bundle" type="o" access="read">
+    <property name="Bundle" tp:name-for-bindings="Bundle"
+      type="o" access="read">
       <tp:added version="0.17.9">(in Channel.FUTURE
         pseudo-interface)</tp:added>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
diff --git a/spec/Channel_Handler.xml b/spec/Channel_Handler.xml
index 06b14e8..e942839 100644
--- a/spec/Channel_Handler.xml
+++ b/spec/Channel_Handler.xml
@@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </tp:docstring>
     <tp:added version="0.17.0"/>
 
-    <method name="HandleChannel">
+    <method name="HandleChannel" tp:name-for-bindings="Handle_Channel">
       <tp:docstring>
         Called when a channel handler should handle a new channel.
       </tp:docstring>
diff --git a/spec/Channel_Interface_Call_Merging.xml b/spec/Channel_Interface_Call_Merging.xml
index 23f9558..a98daf1 100644
--- a/spec/Channel_Interface_Call_Merging.xml
+++ b/spec/Channel_Interface_Call_Merging.xml
@@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         in the same sort of way as in GSM or PBX telephony.</p>
     </tp:docstring>
 
-    <method name="Merge">
+    <method name="Merge" tp:name-for-bindings="Merge">
       <arg direction="in" type="o" name="Other">
         <tp:docstring>
           The other channel to merge into this one
@@ -49,7 +49,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <method name="Split">
+    <method name="Split" tp:name-for-bindings="Split">
       <arg direction="in" name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the contact to split off a conversation with, who
diff --git a/spec/Channel_Interface_Call_State.xml b/spec/Channel_Interface_Call_State.xml
index aead16b..0df6e34 100644
--- a/spec/Channel_Interface_Call_State.xml
+++ b/spec/Channel_Interface_Call_State.xml
@@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </tp:docstring>
     <tp:added version="0.17.2"/>
 
-    <method name="GetCallStates">
+    <method name="GetCallStates" tp:name-for-bindings="Get_Call_States">
       <tp:docstring>
         Get the current call states for all contacts involved in this call.
       </tp:docstring>
@@ -43,18 +43,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </arg>
     </method>
 
-    <signal name="CallStateChanged">
+    <signal name="CallStateChanged" tp:name-for-bindings="Call_State_Changed">
       <tp:docstring>
         Emitted when the state of a member of the channel has changed.
       </tp:docstring>
 
-      <arg name="contact" type="u" tp:type="Contact_Handle">
+      <arg name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer handle for the contact.
         </tp:docstring>
       </arg>
 
-      <arg name="state" type="u" tp:type="Channel_Call_State_Flags">
+      <arg name="State" type="u" tp:type="Channel_Call_State_Flags">
         <tp:docstring>
           The new state for this contact.
         </tp:docstring>
@@ -101,6 +101,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
           unhold the call again.
         </tp:docstring>
       </tp:flag>
+
+      <tp:flag suffix="Forwarded" value="8">
+        <tp:docstring>
+          The initiator of the call originally called a contact other than the
+          current recipient of the call, but the call was then forwarded or
+          diverted.
+        </tp:docstring>
+      </tp:flag>
     </tp:flags>
 
   </interface>
diff --git a/spec/Channel_Interface_Chat_State.xml b/spec/Channel_Interface_Chat_State.xml
index 9cc6883..aa29236 100644
--- a/spec/Channel_Interface_Chat_State.xml
+++ b/spec/Channel_Interface_Chat_State.xml
@@ -18,8 +18,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   </tp:license>
   <interface name="org.freedesktop.Telepathy.Channel.Interface.ChatState">
     <tp:requires interface="org.freedesktop.Telepathy.Channel"/>
-    <method name="SetChatState">
-      <arg direction="in" name="state" type="u" tp:type="Channel_Chat_State">
+    <method name="SetChatState" tp:name-for-bindings="Set_Chat_State">
+      <arg direction="in" name="State" type="u" tp:type="Channel_Chat_State">
         <tp:docstring>
           The new state: one of the values of ChannelChatState.
         </tp:docstring>
@@ -34,13 +34,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
       </tp:possible-errors>
     </method>
-    <signal name="ChatStateChanged">
-      <arg name="contact" type="u" tp:type="Contact_Handle">
+    <signal name="ChatStateChanged" tp:name-for-bindings="Chat_State_Changed">
+      <arg name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer handle for the contact.
         </tp:docstring>
       </arg>
-      <arg name="state" type="u" tp:type="Channel_Chat_State">
+      <arg name="State" type="u" tp:type="Channel_Chat_State">
         <tp:docstring>
           The new state of this contact: one of the values of ChannelChatState.
         </tp:docstring>
diff --git a/spec/Channel_Interface_DTMF.xml b/spec/Channel_Interface_DTMF.xml
index c24ec11..8abb8dc 100644
--- a/spec/Channel_Interface_DTMF.xml
+++ b/spec/Channel_Interface_DTMF.xml
@@ -21,11 +21,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <interface name="org.freedesktop.Telepathy.Channel.Interface.DTMF">
     <tp:requires interface="org.freedesktop.Telepathy.Channel.Type.StreamedMedia"/>
 
-    <method name="StartTone">
-      <arg direction="in" name="stream_id" type="u" tp:type="Stream_ID">
+    <method name="StartTone" tp:name-for-bindings="Start_Tone">
+      <arg direction="in" name="Stream_ID" type="u" tp:type="Stream_ID">
         <tp:docstring>A stream ID as defined in the StreamedMedia channel type.</tp:docstring>
       </arg>
-      <arg direction="in" name="event" type="y" tp:type="DTMF_Event">
+      <arg direction="in" name="Event" type="y" tp:type="DTMF_Event">
         <tp:docstring>A numeric event code from the DTMF_Event enum.</tp:docstring>
       </arg>
       <tp:docstring>
@@ -50,8 +50,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="StopTone">
-      <arg direction="in" name="stream_id" type="u" tp:type="Stream_ID">
+    <method name="StopTone" tp:name-for-bindings="Stop_Tone">
+      <arg direction="in" name="Stream_ID" type="u" tp:type="Stream_ID">
         <tp:docstring>A stream ID as defined in the StreamedMedia channel type.</tp:docstring>
       </arg>
       <tp:docstring>
diff --git a/spec/Channel_Interface_Delivery_Reporting.xml b/spec/Channel_Interface_Delivery_Reporting.xml
index 8d6f797..494b44d 100644
--- a/spec/Channel_Interface_Delivery_Reporting.xml
+++ b/spec/Channel_Interface_Delivery_Reporting.xml
@@ -354,13 +354,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </tp:flags>
 
     <property name="DeliveryReportingSupport" access="read"
-      tp:type="Delivery_Reporting_Support_Flags" type="u">
+      tp:type="Delivery_Reporting_Support_Flags" type="u"
+      tp:name-for-bindings="Delivery_Reporting_Support">
       <tp:docstring>
         A bitfield indicating features supported by this channel.
       </tp:docstring>
     </property>
 
-    <method name="SendDeliveryReport">
+    <method name="SendDeliveryReport"
+      tp:name-for-bindings="Send_Delivery_Report">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Request that a delivery report is sent for the specified pending
           incoming message. Delivery reports cannot currently be sent for
diff --git a/spec/Channel_Interface_Destroyable.xml b/spec/Channel_Interface_Destroyable.xml
new file mode 100644
index 0000000..2f82e69
--- /dev/null
+++ b/spec/Channel_Interface_Destroyable.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<node name="/Channel_Interface_Destroyable"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+      USA.</p>
+  </tp:license>
+
+  <interface
+    name="org.freedesktop.Telepathy.Channel.Interface.Destroyable.DRAFT"
+    tp:causes-havoc="experimental">
+    <tp:requires interface="org.freedesktop.Telepathy.Channel"/>
+    <tp:added version="0.17.UNRELEADED">(draft, not API-stable)</tp:added>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>This interface exists to support channels where
+        <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy">Channel.Close</tp:dbus-ref>
+        is insufficiently destructive.</p>
+    </tp:docstring>
+
+    <method name="Destroy" tp:name-for-bindings="Destroy">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Close the channel abruptly, possibly with loss of data. The
+          connection manager MUST NOT re-create the channel unless/until
+          more events occur.</p>
+
+        <tp:rationale>
+          <p>The main motivating situation for this method is that when a Text
+            channel with pending messages is closed with Close, it comes back
+            as an incoming channel (to avoid a race between Close and an
+            incoming message). If Destroy is called on a Text channel, the CM
+            should delete all pending messages and close the channel, and
+            the channel shouldn't be re-created until/unless another message
+            arrives.</p>
+        </tp:rationale>
+
+        <p>Most clients SHOULD call
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Channel.Close</tp:dbus-ref>
+          instead. However, if a client explicitly intends to destroy the
+          channel with possible loss of data, it SHOULD call this method
+          if this interface is supported (according to the
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Channel.Interfaces</tp:dbus-ref>
+          property), falling back to Close if not.</p>
+
+        <p>In particular, channel dispatchers SHOULD use this method if
+          available when terminating channels that cannot be handled
+          correctly (for instance, if no handler has been installed for
+          a channel type, or if the handler crashes repeatedly).</p>
+
+        <p>Connection managers do not need to implement this interface on
+          channels where Close and Destroy would be equivalent.</p>
+
+        <tp:rationale>
+          <p>Callers need to be able to fall back to Close in any case.</p>
+        </tp:rationale>
+      </tp:docstring>
+    </method>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Channel_Interface_Group.xml b/spec/Channel_Interface_Group.xml
index cab68c5..4e69b88 100644
--- a/spec/Channel_Interface_Group.xml
+++ b/spec/Channel_Interface_Group.xml
@@ -48,13 +48,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:member>
     </tp:struct>
 
-    <method name="AddMembers">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="AddMembers" tp:name-for-bindings="Add_Members">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of contact handles to invite to the channel
         </tp:docstring>
       </arg>
-      <arg direction="in" name="message" type="s">
+      <arg direction="in" name="Message" type="s">
         <tp:docstring>
           A string message, which can be blank if desired
         </tp:docstring>
@@ -83,11 +83,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="GetAllMembers">
+    <method name="GetAllMembers" tp:name-for-bindings="Get_All_Members">
       <tp:deprecated version="0.17.6">Use GetAll on the D-Bus
         Properties D-Bus interface to get properties including Members,
         RemotePendingMembers and LocalPendingMembers instead, falling back to
-        this method and GetLocalPendingMembers if necessary.</tp:deprecated>
+        this method and GetLocalPendingMembersWithInfo if necessary.
+      </tp:deprecated>
 
       <arg direction="out" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
@@ -211,7 +212,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </tp:flags>
 
     <property name="GroupFlags" type="u" tp:type="Channel_Group_Flags"
-      access="read">
+      access="read" tp:name-for-bindings="Group_Flags">
       <tp:docstring>
         An integer representing the bitwise-OR of flags on this
         channel. The user interface can use this to present information about
@@ -223,7 +224,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         Channel_Group_Flag_Properties is not present.</tp:added>
     </property>
 
-    <method name="GetGroupFlags">
+    <method name="GetGroupFlags" tp:name-for-bindings="Get_Group_Flags">
       <arg direction="out" type="u" tp:type="Channel_Group_Flags">
         <tp:docstring>
           The value of the GroupFlags property
@@ -264,7 +265,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </tp:mapping>
 
     <property name="HandleOwners" type="a{uu}" tp:type="Handle_Owner_Map"
-      access="read">
+      access="read" tp:name-for-bindings="Handle_Owners">
       <tp:docstring>
         A map from channel-specific handles to their owners, including
         at least all of the channel-specific handles in this channel's members,
@@ -277,7 +278,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:added version="0.17.6"/>
     </property>
 
-    <signal name="HandleOwnersChanged">
+    <signal name="HandleOwnersChanged"
+      tp:name-for-bindings="Handle_Owners_Changed">
       <tp:docstring>
         Emitted whenever the HandleOwners property changes.
       </tp:docstring>
@@ -301,8 +303,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </arg>
     </signal>
 
-    <method name="GetHandleOwners">
-      <arg direction="in" name="handles" type="au" tp:type="Contact_Handle[]">
+    <method name="GetHandleOwners" tp:name-for-bindings="Get_Handle_Owners">
+      <arg direction="in" name="Handles" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           A list of integer handles representing members of the channel
         </tp:docstring>
@@ -344,7 +346,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="GetLocalPendingMembers">
+    <method name="GetLocalPendingMembers"
+      tp:name-for-bindings="Get_Local_Pending_Members">
       <arg direction="out" type="au" tp:type="Contact_Handle[]"/>
       <tp:docstring>
         Returns the To_Be_Added handle (only) for each structure in the
@@ -358,7 +361,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="GetLocalPendingMembersWithInfo">
+    <method name="GetLocalPendingMembersWithInfo"
+      tp:name-for-bindings="Get_Local_Pending_Members_With_Info">
       <tp:added version="0.15.0" />
       <tp:docstring>
         Returns the LocalPendingMembers property.
@@ -394,7 +398,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </method>
 
     <property name="LocalPendingMembers" access="read"
-      type="a(uuus)" tp:type="Local_Pending_Info[]">
+      type="a(uuus)" tp:type="Local_Pending_Info[]"
+      tp:name-for-bindings="Local_Pending_Members">
       <tp:docstring>
         An array of structs containing handles representing contacts
         requesting channel membership and awaiting local approval with
@@ -406,7 +411,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         from that to the deprecated GetAllMembers method.</tp:added>
     </property>
 
-    <property name="Members" access="read" type="au" tp:type="Contact_Handle[]">
+    <property name="Members" tp:name-for-bindings="Members"
+      access="read" type="au" tp:type="Contact_Handle[]">
       <tp:docstring>
         The members of this channel.
       </tp:docstring>
@@ -414,7 +420,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         is not set, fall back to calling GetAllMembers.</tp:added>
     </property>
 
-    <method name="GetMembers">
+    <method name="GetMembers" tp:name-for-bindings="Get_Members">
       <arg direction="out" type="au" tp:type="Contact_Handle[]"/>
       <tp:docstring>
         Returns the Members property.
@@ -428,7 +434,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </method>
 
     <property name="RemotePendingMembers" access="read" type="au"
-      tp:type="Contact_Handle[]">
+      tp:type="Contact_Handle[]" tp:name-for-bindings="Remote_Pending_Members">
       <tp:docstring>
         An array of handles representing contacts who have been
         invited to the channel and are awaiting remote approval.
@@ -437,7 +443,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         is not set, fall back to calling GetAllMembers.</tp:added>
     </property>
 
-    <method name="GetRemotePendingMembers">
+    <method name="GetRemotePendingMembers"
+      tp:name-for-bindings="Get_Remote_Pending_Members">
       <arg direction="out" type="au" tp:type="Contact_Handle[]"/>
       <tp:docstring>
         Returns an array of handles representing contacts who have been
@@ -451,7 +458,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <signal name="SelfHandleChanged">
+    <signal name="SelfHandleChanged" tp:name-for-bindings="Self_Handle_Changed">
       <tp:docstring>
         Emitted whenever the SelfHandle property changes.
       </tp:docstring>
@@ -466,7 +473,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     </signal>
 
     <property name="SelfHandle" type="u" tp:type="Contact_Handle"
-      access="read">
+      access="read" tp:name-for-bindings="Self_Handle">
       <tp:docstring>
         The handle for the user on this channel (which can also be a
         local or remote pending member), or 0 if the user is not a member at
@@ -480,7 +487,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         Channel_Group_Flag_Properties is not present.</tp:added>
     </property>
 
-    <method name="GetSelfHandle">
+    <method name="GetSelfHandle" tp:name-for-bindings="Get_Self_Handle">
       <arg direction="out" type="u" tp:type="Contact_Handle"/>
       <tp:docstring>
         Returns the value of the SelfHandle property.
@@ -494,13 +501,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <signal name="GroupFlagsChanged">
-      <arg name="added" type="u" tp:type="Channel_Group_Flags">
+    <signal name="GroupFlagsChanged" tp:name-for-bindings="Group_Flags_Changed">
+      <arg name="Added" type="u" tp:type="Channel_Group_Flags">
         <tp:docstring>
           A bitwise OR of the flags which have been set
         </tp:docstring>
       </arg>
-      <arg name="removed" type="u" tp:type="Channel_Group_Flags">
+      <arg name="Removed" type="u" tp:type="Channel_Group_Flags">
         <tp:docstring>
           A bitwise OR of the flags which have been cleared
         </tp:docstring>
@@ -599,39 +606,39 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:enumvalue>
     </tp:enum>
 
-    <signal name="MembersChanged">
-      <arg name="message" type="s">
+    <signal name="MembersChanged" tp:name-for-bindings="Members_Changed">
+      <arg name="Message" type="s">
         <tp:docstring>
           A string message from the server, or blank if not
         </tp:docstring>
       </arg>
-      <arg name="added" type="au" tp:type="Contact_Handle[]">
+      <arg name="Added" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           A list of members added to the channel
         </tp:docstring>
       </arg>
-      <arg name="removed" type="au" tp:type="Contact_Handle[]">
+      <arg name="Removed" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           A list of members removed from the channel
         </tp:docstring>
       </arg>
-      <arg name="local_pending" type="au" tp:type="Contact_Handle[]">
+      <arg name="Local_Pending" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           A list of members who are pending local approval
         </tp:docstring>
       </arg>
-      <arg name="remote_pending" type="au" tp:type="Contact_Handle[]">
+      <arg name="Remote_Pending" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           A list of members who are pending remote approval
         </tp:docstring>
       </arg>
-      <arg name="actor" type="u" tp:type="Contact_Handle">
+      <arg name="Actor" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The contact handle of the person who made the change, or 0
           if not known
         </tp:docstring>
       </arg>
-      <arg name="reason" type="u" tp:type="Channel_Group_Change_Reason">
+      <arg name="Reason" type="u" tp:type="Channel_Group_Change_Reason">
         <tp:docstring>
           A reason for the change: one of the values of
           ChannelGroupChangeReason
@@ -653,13 +660,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <method name="RemoveMembers">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="RemoveMembers" tp:name-for-bindings="Remove_Members">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of contact handles to remove from the channel
         </tp:docstring>
       </arg>
-      <arg direction="in" name="message" type="s">
+      <arg direction="in" name="Message" type="s">
         <tp:docstring>
           A string message, which can be blank if desired
         </tp:docstring>
@@ -683,18 +690,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="RemoveMembersWithReason">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="RemoveMembersWithReason"
+      tp:name-for-bindings="Remove_Members_With_Reason">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of contact handles to remove from the channel
         </tp:docstring>
       </arg>
-      <arg direction="in" name="message" type="s">
+      <arg direction="in" name="Message" type="s">
         <tp:docstring>
           A string message, which can be blank if desired
         </tp:docstring>
       </arg>
-      <arg direction="in" name="reason" type="u"
+      <arg direction="in" name="Reason" type="u"
            tp:type="Channel_Group_Change_Reason">
         <tp:docstring>
           A reason for the change: one of the values of
diff --git a/spec/Channel_Interface_Hold.xml b/spec/Channel_Interface_Hold.xml
index 8c5c33b..4d3cc4d 100644
--- a/spec/Channel_Interface_Hold.xml
+++ b/spec/Channel_Interface_Hold.xml
@@ -37,7 +37,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         another call).</p>
     </tp:docstring>
 
-    <method name="GetHoldState">
+    <method name="GetHoldState" tp:name-for-bindings="Get_Hold_State">
       <tp:docstring>
         Return whether the local user has placed the channel on hold.
       </tp:docstring>
@@ -57,7 +57,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </method>
 
-    <signal name="HoldStateChanged">
+    <signal name="HoldStateChanged" tp:name-for-bindings="Hold_State_Changed">
       <tp:docstring>
         Emitted to indicate that the hold state has changed for this channel.
         This may occur as a consequence of you requesting a change with
@@ -140,7 +140,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:enumvalue>
     </tp:enum>
 
-    <method name="RequestHold">
+    <method name="RequestHold" tp:name-for-bindings="Request_Hold">
       <arg direction="in" name="Hold" type="b">
         <tp:docstring>
           A boolean indicating whether or not the channel should be on hold
diff --git a/spec/Channel_Interface_Media_Signalling.xml b/spec/Channel_Interface_Media_Signalling.xml
index cc7a7a9..aa39721 100644
--- a/spec/Channel_Interface_Media_Signalling.xml
+++ b/spec/Channel_Interface_Media_Signalling.xml
@@ -39,7 +39,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:member>
     </tp:struct>
 
-    <method name="GetSessionHandlers">
+    <method name="GetSessionHandlers"
+      tp:name-for-bindings="Get_Session_Handlers">
       <arg direction="out" type="a(os)" tp:type="Media_Session_Handler_Info[]"/>
       <tp:docstring>
         Returns all currently active session handlers on this channel
@@ -47,7 +48,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <signal name="NewSessionHandler">
+    <signal name="NewSessionHandler" tp:name-for-bindings="New_Session_Handler">
       <arg name="Session_Handler" type="o">
         <tp:docstring>
           Object path of the new MediaSessionHandler object
diff --git a/spec/Channel_Interface_Messages.xml b/spec/Channel_Interface_Messages.xml
index 7ba2f8e..232a199 100644
--- a/spec/Channel_Interface_Messages.xml
+++ b/spec/Channel_Interface_Messages.xml
@@ -61,7 +61,8 @@ USA.</p>
         (which are guaranteed to duplicate signals from this interface).</p>
     </tp:docstring>
 
-    <property name="SupportedContentTypes" type="as" access="read">
+    <property name="SupportedContentTypes" type="as" access="read"
+      tp:name-for-bindings="Supported_Content_Types">
       <tp:docstring>
         A list of MIME types supported by this channel, with more preferred
         MIME types appearing earlier in the list. The list MAY include "*/*"
@@ -72,8 +73,8 @@ USA.</p>
     </property>
 
     <property name="MessagePartSupportFlags" type="u"
-      tp:type="Message_Part_Support_Flags"
-      access="read">
+      tp:type="Message_Part_Support_Flags" access="read"
+      tp:name-for-bindings="Message_Part_Support_Flags">
       <tp:docstring>
         Flags indicating the level of support for message parts on this
         channel.
@@ -190,12 +191,12 @@ USA.</p>
               identifier.</dd>
             -->
 
-            <dt>message-sent (u - <tp:type>Unix_Timestamp</tp:type>)</dt>
+            <dt>message-sent (t - <tp:type>Unix_Timestamp64</tp:type>)</dt>
             <dd>The time the message was sent (if unavailable, the time
               it arrived at a central server MAY be used). Omitted if no
               reasonable approximation is available</dd>
 
-            <dt>message-received (u - <tp:type>Unix_Timestamp</tp:type>)</dt>
+            <dt>message-received (t - <tp:type>Unix_Timestamp64</tp:type>)</dt>
             <dd>The time the message was received locally. SHOULD always
               be present.</dd>
 
@@ -426,7 +427,7 @@ USA.</p>
       </tp:docstring>
     </tp:simple-type>
 
-    <method name="SendMessage">
+    <method name="SendMessage" tp:name-for-bindings="Send_Message">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Submit a message to the server for sending.
           If this method returns successfully, the message has been submitted
@@ -492,7 +493,7 @@ USA.</p>
       </tp:flag>
     </tp:flags>
 
-    <signal name="MessageSent">
+    <signal name="MessageSent" tp:name-for-bindings="Message_Sent">
       <tp:docstring>
         Signals that a message has been submitted for sending. This
         MUST be emitted exactly once per emission of the Sent signal on the
@@ -528,7 +529,7 @@ USA.</p>
     </signal>
 
     <property name="PendingMessages" type="aaa{sv}" access="read"
-      tp:type="Message_Part[][]">
+      tp:type="Message_Part[][]" tp:name-for-bindings="Pending_Messages">
       <tp:docstring>
         A list of incoming messages that have neither been acknowledged nor
         rejected. This list is a superset of the one returned by
@@ -537,7 +538,8 @@ USA.</p>
       </tp:docstring>
     </property>
 
-    <signal name="PendingMessagesRemoved">
+    <signal name="PendingMessagesRemoved"
+      tp:name-for-bindings="Pending_Messages_Removed">
       <tp:docstring>
         The messages with the given IDs have been removed from the
         PendingMessages list. Clients SHOULD NOT attempt to acknowledge
@@ -557,7 +559,8 @@ USA.</p>
       </arg>
     </signal>
 
-    <method name="GetPendingMessageContent">
+    <method name="GetPendingMessageContent"
+      tp:name-for-bindings="Get_Pending_Message_Content">
       <tp:docstring>
         Retrieve the content of one or more parts of a pending message.
         Note that this function may take a considerable amount of time
@@ -609,7 +612,7 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <signal name="MessageReceived">
+    <signal name="MessageReceived" tp:name-for-bindings="Message_Received">
       <tp:docstring>
         Signals that a message has been received and added to the pending
         messages queue. This MUST be emitted exactly once per emission of the
diff --git a/spec/Channel_Interface_Password.xml b/spec/Channel_Interface_Password.xml
index 41a92ab..adcd0f8 100644
--- a/spec/Channel_Interface_Password.xml
+++ b/spec/Channel_Interface_Password.xml
@@ -30,7 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         </tp:docstring>
       </tp:flag>
     </tp:flags>
-    <method name="GetPasswordFlags">
+    <method name="GetPasswordFlags" tp:name-for-bindings="Get_Password_Flags">
       <arg direction="out" type="u" tp:type="Channel_Password_Flags">
         <tp:docstring>
           An integer with the logical OR of all the flags set
@@ -47,13 +47,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
       </tp:possible-errors>
     </method>
-    <signal name="PasswordFlagsChanged">
-      <arg name="added" type="u" tp:type="Channel_Password_Flags">
+    <signal name="PasswordFlagsChanged"
+      tp:name-for-bindings="Password_Flags_Changed">
+      <arg name="Added" type="u" tp:type="Channel_Password_Flags">
         <tp:docstring>
           A bitwise OR of the flags which have been set
         </tp:docstring>
       </arg>
-      <arg name="removed" type="u" tp:type="Channel_Password_Flags">
+      <arg name="Removed" type="u" tp:type="Channel_Password_Flags">
         <tp:docstring>
           A bitwise OR of the flags which have been cleared
         </tp:docstring>
@@ -63,8 +64,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         The user interface should be updated as appropriate.
       </tp:docstring>
     </signal>
-    <method name="ProvidePassword">
-      <arg direction="in" name="password" type="s">
+    <method name="ProvidePassword" tp:name-for-bindings="Provide_Password">
+      <arg direction="in" name="Password" type="s">
         <tp:docstring>
           The password
         </tp:docstring>
diff --git a/spec/Channel_Interface_Transfer.xml b/spec/Channel_Interface_Transfer.xml
index 5165c9a..02591c1 100644
--- a/spec/Channel_Interface_Transfer.xml
+++ b/spec/Channel_Interface_Transfer.xml
@@ -22,12 +22,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
     tp:causes-havoc='not well-tested'>
     <tp:requires interface="org.freedesktop.Telepathy.Channel"/>
     <method name="Transfer">
-      <arg direction="in" name="member" type="u" tp:type="Contact_Handle">
+      <arg direction="in" name="Member" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the member to transfer
         </tp:docstring>
       </arg>
-      <arg direction="in" name="destination" type="u" tp:type="Contact_Handle">
+      <arg direction="in" name="Destination" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the destination contact
         </tp:docstring>
diff --git a/spec/Channel_Request.xml b/spec/Channel_Request.xml
new file mode 100644
index 0000000..08b291f
--- /dev/null
+++ b/spec/Channel_Request.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" ?>
+<node name="/Channel_Request"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+      MA 02110-1301, USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.ChannelRequest.DRAFT"
+    tp:causes-havoc="experimental">
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>A channel request is an object in the ChannelDispatcher representing
+        an ongoing request for some channels to be created or found. There
+        can be any number of ChannelRequest objects at the same time.</p>
+
+      <p>Its well-known bus name is the same as that of the ChannelDispatcher,
+        "org.freedesktop.Telepathy.ChannelDispatcher".</p>
+
+      <tp:rationale>
+        <p>See
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">ChannelDispatcher.DRAFT.CreateChannel</tp:dbus-ref>
+          for rationale for ChannelRequest being a separate object.</p>
+      </tp:rationale>
+    </tp:docstring>
+
+    <property name="UserActionTime" tp:name-for-bindings="User_Action_Time"
+      type="t" tp:type="Unix_Timestamp64" access="read">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The time at which user action occurred, or 0 if this channel
+          request is for some reason not involving user action.</p>
+
+        <p>This corresponds to the _NET_WM_USER_TIME property in
+          <a href="http://standards.freedesktop.org/wm-spec/wm-spec-latest.html">EWMH</a>.</p>
+
+        <p>This property is set when the channel request is created,
+          and can never change.</p>
+      </tp:docstring>
+    </property>
+
+    <property name="Requests" tp:name-for-bindings="Requests" type="aa{sv}"
+      tp:type="Qualified_Property_Value_Map[]"
+      access="read">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>An array of dictionaries containing desirable properties for
+          the channel or channels to be created.</p>
+
+        <tp:rationale>
+          <p>This is an array so that we could add a CreateChannels method in
+            future without redefining the API of ChannelRequest.</p>
+        </tp:rationale>
+
+        <p>This property is set when the channel request is created,
+          and can never change.</p>
+      </tp:docstring>
+    </property>
+
+    <method name="Proceed" tp:name-for-bindings="Proceed">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Proceed with the channel request.</p>
+
+        <tp:rationale>
+          <p>The client that created this object calls this method
+            when it has connected signal handlers for
+            <tp:member-ref>Succeeded</tp:member-ref> and
+            <tp:member-ref>Failed</tp:member-ref>.</p>
+        </tp:rationale>
+
+        <p>Clients other than the client which created the ChannelRequest
+          MUST NOT call this method.</p>
+
+        <p>This method SHOULD return immediately; on success, the request
+          might still fail, but this will be indicated asynchronously
+          by the <tp:member-ref>Failed</tp:member-ref> signal.</p>
+
+        <p>Proceed cannot fail, unless clients have got the life-cycle
+          of a ChannelRequest seriously wrong (e.g. a client calls this
+          method twice, or a client that did not create the ChannelRequest
+          calls this method). If it fails, clients SHOULD assume that the
+          whole ChannelRequest has become useless.</p>
+      </tp:docstring>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Errors.NotAvailable">
+          <tp:docstring>
+            This method has already been called, so it is no longer
+            available. Stop calling it.
+          </tp:docstring>
+        </tp:error>
+      </tp:possible-errors>
+    </method>
+
+    <method name="Cancel" tp:name-for-bindings="Cancel">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Cancel the channel request. The precise effect depends on the
+          current progress of the request.</p>
+
+        <p>If the connection manager has not already been asked to create
+          a channel, then <tp:member-ref>Failed</tp:member-ref> is emitted
+          immediately, and the channel request is removed.</p>
+
+        <p>If the connection manager has already been asked to create a
+          channel but has not produced one yet (e.g. if <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Connection.Interface.Requests.CreateChannel</tp:dbus-ref>
+          has been called, but has not yet returned), then the
+          ChannelDispatcher will remember that the request has been cancelled.
+          When the channel appears, it will be closed (if it was newly
+          created and can be closed), and will not be dispatched to a
+          handler.</p>
+
+        <p>If the connection manager has already returned a channel, but the
+          channel has not yet been dispatched to a handler
+          then the channel dispatcher will not dispatch that
+          channel to a handler. If the channel was newly created for this
+          request, the channel dispatcher will close it with Close; otherwise,
+          the channel dispatcher will ignore it. In either case,
+          <tp:member-ref>Failed</tp:member-ref> will be emitted when processing
+          has been completed.</p>
+
+        <p>If Failed is emitted in response to this method, the error SHOULD be
+          <code>org.freedesktop.Telepathy.Errors.Cancelled</code>.</p>
+
+        <p>If the channel has already been dispatched to a handler, then
+          it's too late to call this method, and the channel request will
+          no longer exist.</p>
+      </tp:docstring>
+    </method>
+
+    <signal name="Failed" tp:name-for-bindings="Failed">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The channel request has failed. It is no longer present,
+          and further methods must not be called on it.</p>
+      </tp:docstring>
+
+      <arg name="Error" type="s" tp:type="DBus_Error_Name">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The name of a D-Bus error. This can come from various sources,
+            including the error raised by CreateChannel, or an error generated
+            to represent failure to establish the Connection.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Message" type="s">
+        <tp:docstring>
+          If the first argument of the D-Bus error message was a string,
+          that string. Otherwise, an empty string.
+        </tp:docstring>
+      </arg>
+    </signal>
+
+    <signal name="Succeeded" tp:name-for-bindings="Succeeded">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>The channel request has succeeded. It is no longer present,
+          and further methods must not be called on it.</p>
+      </tp:docstring>
+    </signal>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Channel_Type_Contact_Search.xml b/spec/Channel_Type_Contact_Search.xml
index 0213ca7..7c324d0 100644
--- a/spec/Channel_Type_Contact_Search.xml
+++ b/spec/Channel_Type_Contact_Search.xml
@@ -41,7 +41,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="(bg)" tp:type="Search_Key_Info" name="Details"/>
     </tp:mapping>
 
-    <method name="GetSearchKeys">
+    <method name="GetSearchKeys" tp:name-for-bindings="Get_Search_Keys">
       <arg direction="out" type="s">
         <tp:docstring>
           A string with any instructions from the server
@@ -81,7 +81,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:docstring>The search has been completed</tp:docstring>
       </tp:enumvalue>
     </tp:enum>
-    <method name="GetSearchState">
+    <method name="GetSearchState" tp:name-for-bindings="Get_Search_State">
       <arg direction="out" type="u" tp:type="Channel_Contact_Search_State">
         <tp:docstring>The search state represented as one of the values of
           ChannelContactSearchState</tp:docstring>
@@ -91,7 +91,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
     <method name="Search">
-      <arg direction="in" name="terms" type="a{sv}" tp:type="String_Variant_Map">
+      <arg direction="in" name="Terms" type="a{sv}" tp:type="String_Variant_Map">
         <tp:docstring>
           A dictionary mapping search key names to the desired values
         </tp:docstring>
@@ -107,19 +107,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
       </tp:possible-errors>
     </method>
-    <signal name="SearchResultReceived">
-      <arg name="contact" type="u" tp:type="Contact_Handle">
+    <signal name="SearchResultReceived"
+      tp:name-for-bindings="Search_Result_Received">
+      <arg name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>An integer handle for the contact</tp:docstring>
       </arg>
-      <arg name="values" type="a{sv}" tp:type="String_Variant_Map">
+      <arg name="Values" type="a{sv}" tp:type="String_Variant_Map">
         <tp:docstring>A dictionary mapping search key names to values for this contact</tp:docstring>
       </arg>
       <tp:docstring>
         Emitted when a search result is received from the server.
       </tp:docstring>
     </signal>
-    <signal name="SearchStateChanged">
-      <arg name="state" type="u" tp:type="Channel_Contact_Search_State">
+    <signal name="SearchStateChanged"
+      tp:name-for-bindings="Search_State_Changed">
+      <arg name="State" type="u" tp:type="Channel_Contact_Search_State">
         <tp:docstring>An integer representing the new search state</tp:docstring>
       </arg>
       <tp:docstring>
diff --git a/spec/Channel_Type_Room_List.xml b/spec/Channel_Type_Room_List.xml
index 10261c9..6636ce0 100644
--- a/spec/Channel_Type_Room_List.xml
+++ b/spec/Channel_Type_Room_List.xml
@@ -27,7 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="a{sv}" tp:type="String_Variant_Map" name="Info"/>
     </tp:struct>
 
-    <property name="Server" type="s" access="read">
+    <property name="Server" tp:name-for-bindings="Server"
+      type="s" access="read">
       <tp:docstring>
         <p>For protocols with a concept of chatrooms on multiple servers
           with different DNS names (like XMPP), the DNS name of the server
@@ -38,7 +39,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </property>
 
-    <method name="GetListingRooms">
+    <method name="GetListingRooms" tp:name-for-bindings="Get_Listing_Rooms">
       <arg direction="out" type="b">
         <tp:docstring>
           A boolean indicating if room listing is in progress
@@ -50,8 +51,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <signal name="GotRooms">
-      <arg name="rooms" type="a(usa{sv})" tp:type="Room_Info[]">
+    <signal name="GotRooms" tp:name-for-bindings="Got_Rooms">
+      <arg name="Rooms" type="a(usa{sv})" tp:type="Room_Info[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           An array of structs containing:
           <ul>
@@ -80,7 +81,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </dl>
       </tp:docstring>
     </signal>
-    <method name="ListRooms">
+    <method name="ListRooms" tp:name-for-bindings="List_Rooms">
       <tp:docstring>
         Request the list of rooms from the server. The ListingRooms signal
         should be emitted when this request is being processed, GotRooms when
@@ -94,14 +95,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
       </tp:possible-errors>
     </method>
-    <method name="StopListing">
+    <method name="StopListing" tp:name-for-bindings="Stop_Listing">
       <tp:docstring>
         Stop the room listing if it's in progress, but don't close the channel.
         The ListingRooms signal should be emitted when the listing stops.
       </tp:docstring>
     </method>
-    <signal name="ListingRooms">
-      <arg name="listing" type="b">
+    <signal name="ListingRooms" tp:name-for-bindings="Listing_Rooms">
+      <arg name="Listing" type="b">
         <tp:docstring>A boolean indicating if room listing is in progress</tp:docstring>
       </arg>
       <tp:docstring>
diff --git a/spec/Channel_Type_Streamed_Media.xml b/spec/Channel_Type_Streamed_Media.xml
index 0c2eced..aebc131 100644
--- a/spec/Channel_Type_Streamed_Media.xml
+++ b/spec/Channel_Type_Streamed_Media.xml
@@ -87,7 +87,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 
     <tp:simple-type name="Stream_ID" type="u"/>
 
-    <method name="ListStreams">
+    <method name="ListStreams" tp:name-for-bindings="List_Streams">
       <arg direction="out" type="a(uuuuuu)" tp:type="Media_Stream_Info[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           An array of structs containing:
@@ -109,8 +109,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <method name="RemoveStreams">
-      <arg direction="in" name="streams" type="au" tp:type="Stream_ID[]">
+    <method name="RemoveStreams" tp:name-for-bindings="Remove_Streams">
+      <arg direction="in" name="Streams" type="au" tp:type="Stream_ID[]">
         <tp:docstring>
           An array of stream identifiers (as defined in ListStreams)
         </tp:docstring>
@@ -125,13 +125,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="RequestStreamDirection">
-      <arg direction="in" name="stream_id" type="u">
+    <method name="RequestStreamDirection"
+      tp:name-for-bindings="Request_Stream_Direction">
+      <arg direction="in" name="Stream_ID" type="u">
         <tp:docstring>
           The stream identifier (as defined in ListStreams)
         </tp:docstring>
       </arg>
-      <arg direction="in" name="stream_direction" type="u" tp:type="Media_Stream_Direction">
+      <arg direction="in" name="Stream_Direction" type="u" tp:type="Media_Stream_Direction">
         <tp:docstring>
           The desired stream direction (a value of MediaStreamDirection)
         </tp:docstring>
@@ -162,13 +163,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="RequestStreams">
-      <arg direction="in" name="contact_handle" type="u" tp:type="Contact_Handle">
+    <method name="RequestStreams" tp:name-for-bindings="Request_Streams">
+      <arg direction="in" name="Contact_Handle" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           A contact handle with whom to establish the streams
         </tp:docstring>
       </arg>
-      <arg direction="in" name="types" type="au" tp:type="Media_Stream_Type[]">
+      <arg direction="in" name="Types" type="au" tp:type="Media_Stream_Type[]">
         <tp:docstring>
           An array of stream types (values of MediaStreamType)
         </tp:docstring>
@@ -219,19 +220,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <signal name="StreamAdded">
-      <arg name="stream_id" type="u">
+    <signal name="StreamAdded" tp:name-for-bindings="Stream_Added">
+      <arg name="Stream_ID" type="u">
         <tp:docstring>
           The stream identifier (as defined in ListStreams)
         </tp:docstring>
       </arg>
-      <arg name="contact_handle" type="u" tp:type="Contact_Handle">
+      <arg name="Contact_Handle" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The contact handle who the stream is with (or 0 if it
           represents more than a single member)
         </tp:docstring>
       </arg>
-      <arg name="stream_type" type="u" tp:type="Media_Stream_Type">
+      <arg name="Stream_Type" type="u" tp:type="Media_Stream_Type">
         <tp:docstring>
           The stream type (a value from MediaStreamType)
         </tp:docstring>
@@ -241,18 +242,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <signal name="StreamDirectionChanged">
-      <arg name="stream_id" type="u">
+    <signal name="StreamDirectionChanged"
+      tp:name-for-bindings="Stream_Direction_Changed">
+      <arg name="Stream_ID" type="u">
         <tp:docstring>
         The stream identifier (as defined in ListStreams)
         </tp:docstring>
       </arg>
-      <arg name="stream_direction" type="u" tp:type="Media_Stream_Direction">
+      <arg name="Stream_Direction" type="u" tp:type="Media_Stream_Direction">
         <tp:docstring>
         The new stream direction (as defined in ListStreams)
         </tp:docstring>
       </arg>
-      <arg name="pending_flags" type="u" tp:type="Media_Stream_Pending_Send">
+      <arg name="Pending_Flags" type="u" tp:type="Media_Stream_Pending_Send">
         <tp:docstring>
         The new pending send flags (as defined in ListStreams)
         </tp:docstring>
@@ -265,18 +267,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <signal name="StreamError">
-      <arg name="stream_id" type="u">
+    <signal name="StreamError" tp:name-for-bindings="Stream_Error">
+      <arg name="Stream_ID" type="u">
         <tp:docstring>
         The stream identifier (as defined in ListStreams)
         </tp:docstring>
       </arg>
-      <arg name="errno" type="u">
+      <arg name="Error_Code" type="u" tp:type="Media_Stream_Error">
         <tp:docstring>
           A stream error number, one of the values of MediaStreamError
         </tp:docstring>
       </arg>
-      <arg name="message" type="s">
+      <arg name="Message" type="s">
         <tp:docstring>
           A string describing the error (for debugging purposes only)
         </tp:docstring>
@@ -286,8 +288,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <signal name="StreamRemoved">
-      <arg name="stream_id" type="u">
+    <signal name="StreamRemoved" tp:name-for-bindings="Stream_Removed">
+      <arg name="Stream_ID" type="u">
         <tp:docstring>
         stream_id - the stream identifier (as defined in ListStreams)
         </tp:docstring>
@@ -297,13 +299,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <signal name="StreamStateChanged">
-      <arg name="stream_id" type="u">
+    <signal name="StreamStateChanged"
+      tp:name-for-bindings="Stream_State_Changed">
+      <arg name="Stream_ID" type="u">
         <tp:docstring>
           The stream identifier (as defined in ListStreams)
         </tp:docstring>
       </arg>
-      <arg name="stream_state" type="u" tp:type="Media_Stream_State">
+      <arg name="Stream_State" type="u" tp:type="Media_Stream_State">
         <tp:docstring>
           The new stream state (as defined in ListStreams)
         </tp:docstring>
diff --git a/spec/Channel_Type_Text.xml b/spec/Channel_Type_Text.xml
index 049ed6b..205dbc0 100644
--- a/spec/Channel_Type_Text.xml
+++ b/spec/Channel_Type_Text.xml
@@ -45,8 +45,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="s" name="Text"/>
     </tp:struct>
 
-    <method name="AcknowledgePendingMessages">
-      <arg direction="in" name="ids" type="au" tp:type="Message_ID[]">
+    <method name="AcknowledgePendingMessages"
+      tp:name-for-bindings="Acknowledge_Pending_Messages">
+      <arg direction="in" name="IDs" type="au" tp:type="Message_ID[]">
         <tp:docstring>
           The IDs of the messages to acknowledge
         </tp:docstring>
@@ -64,7 +65,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="GetMessageTypes">
+    <method name="GetMessageTypes" tp:name-for-bindings="Get_Message_Types">
       <arg direction="out" type="au" tp:type="Channel_Text_Message_Type[]">
         <tp:docstring>
           An array of integer message types (ChannelTextMessageType)
@@ -76,8 +77,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <method name="ListPendingMessages">
-      <arg direction="in" name="clear" type="b">
+    <method name="ListPendingMessages"
+      tp:name-for-bindings="List_Pending_Messages">
+      <arg direction="in" name="Clear" type="b">
         <tp:docstring>
           If true, behave as if AcknowledgePendingMessages had also been
           called.
@@ -107,7 +109,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <signal name="LostMessage">
+    <signal name="LostMessage" tp:name-for-bindings="Lost_Message">
       <tp:docstring>
         This signal is emitted to indicate that an incoming message was
         not able to be stored and forwarded by the connection manager
@@ -115,33 +117,33 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <signal name="Received">
-      <arg name="id" type="u">
+    <signal name="Received" tp:name-for-bindings="Received">
+      <arg name="ID" type="u">
         <tp:docstring>
           A numeric identifier for acknowledging the message
         </tp:docstring>
       </arg>
-      <arg name="timestamp" type="u" tp:type="Unix_Timestamp">
+      <arg name="Timestamp" type="u" tp:type="Unix_Timestamp">
         <tp:docstring>
           A Unix timestamp indicating when the message was received
         </tp:docstring>
       </arg>
-      <arg name="sender" type="u" tp:type="Contact_Handle">
+      <arg name="Sender" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the contact who sent the message
         </tp:docstring>
       </arg>
-      <arg name="type" type="u" tp:type="Channel_Text_Message_Type">
+      <arg name="Type" type="u" tp:type="Channel_Text_Message_Type">
         <tp:docstring>
           The type of the message (normal, action, notice, etc.)
         </tp:docstring>
       </arg>
-      <arg name="flags" type="u" tp:type="Channel_Text_Message_Flags">
+      <arg name="Flags" type="u" tp:type="Channel_Text_Message_Flags">
         <tp:docstring>
           A bitwise OR of the message flags
         </tp:docstring>
       </arg>
-      <arg name="text" type="s">
+      <arg name="Text" type="s">
         <tp:docstring>
           The text of the message
         </tp:docstring>
@@ -155,13 +157,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <method name="Send">
-      <arg direction="in" name="type" type="u" tp:type="Channel_Text_Message_Type">
+    <method name="Send" tp:name-for-bindings="Send">
+      <arg direction="in" name="Type" type="u" tp:type="Channel_Text_Message_Type">
         <tp:docstring>
           An integer indicating the type of the message
         </tp:docstring>
       </arg>
-      <arg direction="in" name="text" type="s">
+      <arg direction="in" name="Text" type="s">
         <tp:docstring>
           The message to send
         </tp:docstring>
@@ -214,23 +216,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:enumvalue>
     </tp:enum>
 
-    <signal name="SendError">
-      <arg name="error" type="u" tp:type="Channel_Text_Send_Error">
+    <signal name="SendError" tp:name-for-bindings="Send_Error">
+      <arg name="Error" type="u" tp:type="Channel_Text_Send_Error">
         <tp:docstring>
           The error that occurred
         </tp:docstring>
       </arg>
-      <arg name="timestamp" type="u" tp:type="Unix_Timestamp">
+      <arg name="Timestamp" type="u" tp:type="Unix_Timestamp">
         <tp:docstring>
           The Unix timestamp indicating when the message was sent
         </tp:docstring>
       </arg>
-      <arg name="type" type="u" tp:type="Channel_Text_Message_Type">
+      <arg name="Type" type="u" tp:type="Channel_Text_Message_Type">
         <tp:docstring>
           The message type
         </tp:docstring>
       </arg>
-      <arg name="text" type="s">
+      <arg name="Text" type="s">
         <tp:docstring>
           The text of the message
         </tp:docstring>
@@ -249,19 +251,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         actually implemented.</tp:changed>
     </signal>
 
-    <signal name="Sent">
-      <arg name="timestamp" type="u" tp:type="Unix_Timestamp">
+    <signal name="Sent" tp:name-for-bindings="Sent">
+      <arg name="Timestamp" type="u" tp:type="Unix_Timestamp">
         <tp:docstring>
           Unix timestamp indicating when the message was sent
         </tp:docstring>
       </arg>
-      <arg name="type" type="u" tp:type="Channel_Text_Message_Type">
+      <arg name="Type" type="u" tp:type="Channel_Text_Message_Type">
         <tp:docstring>
           The message type (normal, action, notice, etc) from
           ChannelTextMessageType
         </tp:docstring>
       </arg>
-      <arg name="text" type="s">
+      <arg name="Text" type="s">
         <tp:docstring>
           The text of the message
         </tp:docstring>
@@ -463,6 +465,42 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         and handle type CONTACT should continue to succeed, but may return
         a channel with handle type 0, handle 0, the group interface,
         and the local and remote contacts in its members.</p>
+
+      <p>If a channel of type Text is closed while it has pending messages,
+        the connection manager MUST allow this, but SHOULD open a new,
+        identical channel to deliver those messages, signalling it as a new
+        channel with the
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">NewChannel</tp:dbus-ref>
+        signal (with the suppress_handler parameter set to FALSE).</p>
+
+      <tp:rationale>
+        <p>In effect, this turns this situation, in which a client
+          is likely to lose messages:</p>
+
+        <ul>
+          <li>UI window is closed</li>
+          <li>message arrives</li>
+          <li>text channel emits Received</li>
+          <li>UI calls Close on text channel before it has seen the
+            Received signal</li>
+          <li>text channel emits Closed and closes</li>
+        </ul>
+
+        <p>into something nearly equivalent to this situation, which is
+          fine:</p>
+
+        <ul>
+          <li>UI window is closed</li>
+          <li>UI calls Close on text channel</li>
+          <li>text channel emits Closed and closes</li>
+          <li>message arrives</li>
+          <li>new text channel is created, connection emits NewChannel</li>
+          <li>(the same or a different) UI handles it</li>
+        </ul>
+
+        <p>suppress_handler must be set to FALSE so the replacement channel
+          will be handled by something.</p>
+      </tp:rationale>
     </tp:docstring>
   </interface>
 </node>
diff --git a/spec/Channel_Type_Tubes.xml b/spec/Channel_Type_Tubes.xml
index b187c03..68df224 100644
--- a/spec/Channel_Type_Tubes.xml
+++ b/spec/Channel_Type_Tubes.xml
@@ -273,7 +273,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
         tp:type="Socket_Access_Control[]"/>
     </tp:mapping>
 
-    <method name="GetAvailableStreamTubeTypes">
+    <method name="GetAvailableStreamTubeTypes"
+      tp:name-for-bindings="Get_Available_Stream_Tube_Types">
       <tp:docstring>List the available address types and access-control types
         for stream tubes.</tp:docstring>
       <arg direction="out" type="a{uau}" tp:type="Supported_Socket_Map">
@@ -302,7 +303,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </method>
 
-    <method name="GetAvailableTubeTypes">
+    <method name="GetAvailableTubeTypes"
+      tp:name-for-bindings="Get_Available_Tube_Types">
       <arg direction="out" type="au" tp:type="Tube_Type[]">
         <tp:docstring>
           An array of the available tube types, as defined by the Tube_Type
@@ -311,7 +313,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </method>
 
-    <method name="ListTubes">
+    <method name="ListTubes" tp:name-for-bindings="List_Tubes">
       <arg direction="out" type="a(uuusa{sv}u)" tp:type="Tube_Info[]">
         <tp:docstring>
          Return an array of tuples, each representing a tube, with the
@@ -329,11 +331,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </arg>
     </method>
 
-    <method name="OfferDBusTube">
+    <method name="OfferDBusTube" tp:name-for-bindings="Offer_DBus_Tube">
       <tp:docstring>
         Offers a D-Bus tube providing the service specified.
       </tp:docstring>
-      <arg direction="in" name="service" type="s">
+      <arg direction="in" name="Service" type="s">
         <tp:docstring>
           A string representing the service name that will be used over the
           tube.
@@ -341,7 +343,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
           com.example.ServiceName.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="parameters" type="a{sv}"
+      <arg direction="in" name="Parameters" type="a{sv}"
         tp:type="String_Variant_Map">
         <tp:docstring>
           A dictionary of properties for the new tube; the allowable keys,
@@ -371,11 +373,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <method name="OfferStreamTube">
+    <method name="OfferStreamTube" tp:name-for-bindings="Offer_Stream_Tube">
       <tp:docstring>
         Offer a stream tube exporting the local socket specified.
       </tp:docstring>
-      <arg direction="in" name="service" type="s">
+      <arg direction="in" name="Service" type="s">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           A string representing the service name that will be used over the
           tube.
@@ -387,7 +389,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
           "rsync" or "daap".
         </tp:docstring>
       </arg>
-      <arg direction="in" name="parameters" type="a{sv}"
+      <arg direction="in" name="Parameters" type="a{sv}"
         tp:type="String_Variant_Map">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>A dictionary of properties for the new tube; the allowable keys,
@@ -398,26 +400,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
           use in the DNS-SD TXT record for that service.</p>
         </tp:docstring>
       </arg>
-      <arg direction="in" name="address_type" type="u" tp:type="Socket_Address_Type">
+      <arg direction="in" name="Address_Type" type="u" tp:type="Socket_Address_Type">
         <tp:docstring>
           The type of the listening address of the local service, as a member of
           Socket_Address_Type.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="address" type="v">
+      <arg direction="in" name="Address" type="v">
         <tp:docstring>
           The listening address of the local service, as indicated by the
           address_type.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="access_control" type="u" tp:type="Socket_Access_Control">
+      <arg direction="in" name="Access_Control" type="u" tp:type="Socket_Access_Control">
         <tp:docstring>
           The access control the local service applies to the local socket,
           specified so the connection manager can behave appropriately
           when it connects.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="access_control_param" type="v">
+      <arg direction="in" name="Access_Control_Param" type="v">
         <tp:docstring>
           A parameter for the access control type, to be interpreted as
           specified in the documentation for the Socket_Access_Control enum.
@@ -445,55 +447,55 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <signal name="NewTube">
+    <signal name="NewTube" tp:name-for-bindings="New_Tube">
       <tp:docstring>
         Emitted when a tube is created.
       </tp:docstring>
-      <arg name="id" type="u" tp:type="Tube_ID">
+      <arg name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the new tube.
         </tp:docstring>
       </arg>
-      <arg name="initiator" type="u" tp:type="Contact_Handle">
+      <arg name="Initiator" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the contact who initiated the tube.
         </tp:docstring>
       </arg>
-      <arg name="type" type="u" tp:type="Tube_Type">
+      <arg name="Type" type="u" tp:type="Tube_Type">
         <tp:docstring>
           The tube type, as defined by the Tube_Type enum.
         </tp:docstring>
       </arg>
-      <arg name="service" type="s">
+      <arg name="Service" type="s">
         <tp:docstring>
           A string representing the service that will be used over the tube.
         </tp:docstring>
       </arg>
-      <arg name="parameters" type="a{sv}" tp:type="String_Variant_Map">
+      <arg name="Parameters" type="a{sv}" tp:type="String_Variant_Map">
         <tp:docstring>
           The new tube's properties.
         </tp:docstring>
       </arg>
-      <arg name="state" type="u" tp:type="Tube_State">
+      <arg name="State" type="u" tp:type="Tube_State">
         <tp:docstring>
           The new tube's state.
         </tp:docstring>
       </arg>
     </signal>
 
-    <method name="AcceptDBusTube">
+    <method name="AcceptDBusTube" tp:name-for-bindings="Accept_DBus_Tube">
       <tp:docstring>
         Accept a D-Bus tube that's in the "local pending" state. The
         connection manager will attempt to open the tube. The tube remains in
         the "local pending" state until the TubeStateChanged signal is
         emitted.
       </tp:docstring>
-      <arg direction="in" name="id" type="u" tp:type="Tube_ID">
+      <arg direction="in" name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube to accept.
         </tp:docstring>
       </arg>
-      <arg direction="out" name="address" type="s">
+      <arg direction="out" name="Address" type="s">
         <tp:docstring>
           The string describing the address of the private bus. The client
           should not attempt to connect to the address until the tube is open.
@@ -509,36 +511,36 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <method name="AcceptStreamTube">
+    <method name="AcceptStreamTube" tp:name-for-bindings="Accept_Stream_Tube">
       <tp:docstring>
         Accept a stream tube that's in the "local pending" state. The
         connection manager will attempt to open the tube. The tube remains in
         the "local pending" state until the TubeStateChanged signal is
         emitted.
       </tp:docstring>
-      <arg direction="in" name="id" type="u" tp:type="Tube_ID">
+      <arg direction="in" name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube to accept.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="address_type" type="u" tp:type="Socket_Address_Type">
+      <arg direction="in" name="Address_Type" type="u" tp:type="Socket_Address_Type">
         <tp:docstring>
           The type of address the connection manager should listen on.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="access_control" type="u" tp:type="Socket_Access_Control">
+      <arg direction="in" name="Access_Control" type="u" tp:type="Socket_Access_Control">
         <tp:docstring>
           The type of access control the connection manager should apply to
           the socket.
         </tp:docstring>
       </arg>
-      <arg direction="in" name="access_control_param" type="v">
+      <arg direction="in" name="Access_Control_Param" type="v">
         <tp:docstring>
           A parameter for the access control type, to be interpreted as
           specified in the documentation for the Socket_Access_Control enum.
         </tp:docstring>
       </arg>
-      <arg direction="out" name="address" type="v">
+      <arg direction="out" name="Address" type="v">
         <tp:docstring>
           The address on which the connection manager will listen for
           connections to this tube. The client should not attempt to connect
@@ -561,27 +563,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <signal name="TubeStateChanged">
+    <signal name="TubeStateChanged" tp:name-for-bindings="Tube_State_Changed">
       <tp:docstring>
         Emitted when the state of a tube changes.
       </tp:docstring>
-      <arg name="id" type="u" tp:type="Tube_ID">
+      <arg name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube that changed state.
         </tp:docstring>
       </arg>
-      <arg name="state" type="u" tp:type="Tube_State">
+      <arg name="State" type="u" tp:type="Tube_State">
         <tp:docstring>
           The new state of the tube; see the Tube_State enumeration.
         </tp:docstring>
       </arg>
     </signal>
 
-    <method name="CloseTube">
+    <method name="CloseTube" tp:name-for-bindings="Close_Tube">
       <tp:docstring>
         Close a tube.
       </tp:docstring>
-      <arg direction="in" name="id" type="u" tp:type="Tube_ID">
+      <arg direction="in" name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube to close.
         </tp:docstring>
@@ -591,24 +593,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <signal name="TubeClosed">
+    <signal name="TubeClosed" tp:name-for-bindings="Tube_Closed">
       <tp:docstring>
        Emitted when a tube has been closed. The ID of a closed tube is no
        longer valid. The ID may later be reused for a new tube.
       </tp:docstring>
-      <arg name="id" type="u" tp:type="Tube_ID">
+      <arg name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube that was closed.
         </tp:docstring>
       </arg>
     </signal>
 
-    <method name="GetDBusTubeAddress">
+    <method name="GetDBusTubeAddress"
+      tp:name-for-bindings="Get_DBus_Tube_Address">
       <tp:docstring>
         For a D-Bus tube, return a string describing the address of the
         private bus.
       </tp:docstring>
-      <arg direction="in" name="id" type="u" tp:type="Tube_ID">
+      <arg direction="in" name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube to get an address for.
         </tp:docstring>
@@ -632,12 +635,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <method name="GetDBusNames">
+    <method name="GetDBusNames" tp:name-for-bindings="Get_DBus_Names">
       <tp:docstring>
         For a multi-user (i.e. Handle_Type_Room) D-Bus tube, obtain a mapping
         between contact handles and their unique bus names on this tube.
       </tp:docstring>
-      <arg direction="in" name="id" type="u" tp:type="Tube_ID">
+      <arg direction="in" name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube to get names for.
         </tp:docstring>
@@ -662,45 +665,46 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <signal name="DBusNamesChanged">
+    <signal name="DBusNamesChanged" tp:name-for-bindings="DBus_Names_Changed">
       <tp:docstring>
         Emitted on a multi-user (i.e. Handle_Type_Room) D-Bus tube when a
         participant opens or closes the tube.
       </tp:docstring>
-      <arg name="id" type="u" tp:type="Tube_ID">
+      <arg name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube whose names have changed.
         </tp:docstring>
       </arg>
-      <arg name="added" type="a(us)" tp:type="DBus_Tube_Member[]">
+      <arg name="Added" type="a(us)" tp:type="DBus_Tube_Member[]">
         <tp:docstring>
           Array of handles and D-Bus names of new participants.
         </tp:docstring>
       </arg>
-      <arg name="removed" type="au" tp:type="Contact_Handle[]">
+      <arg name="Removed" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           Array of handles of former participants.
         </tp:docstring>
       </arg>
     </signal>
 
-    <method name="GetStreamTubeSocketAddress">
+    <method name="GetStreamTubeSocketAddress"
+      tp:name-for-bindings="Get_Stream_Tube_Socket_Address">
       <tp:docstring>
         For a stream tube, obtain the address of the socket used to
         communicate over this tube.
       </tp:docstring>
-      <arg direction="in" name="id" type="u" tp:type="Tube_ID">
+      <arg direction="in" name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the stream tube to get the socket for.
         </tp:docstring>
       </arg>
-      <arg direction="out" name="address_type" type="u" tp:type="Socket_Address_Type">
+      <arg direction="out" name="Address_Type" type="u" tp:type="Socket_Address_Type">
         <tp:docstring>
           The type of the listening address of the socket, as a member of
           Socket_Address_Type.
         </tp:docstring>
       </arg>
-      <arg direction="out" name="address" type="v">
+      <arg direction="out" name="Address" type="v">
         <tp:docstring>
           The listening address of the socket, as indicated by the
           address_type.
@@ -720,17 +724,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
       </tp:possible-errors>
     </method>
 
-    <signal name="StreamTubeNewConnection">
+    <signal name="StreamTubeNewConnection"
+      tp:name-for-bindings="Stream_Tube_New_Connection">
       <tp:docstring>
         Emitted on a stream tube when a participant opens a new connection
         to its socket.
       </tp:docstring>
-      <arg name="id" type="u" tp:type="Tube_ID">
+      <arg name="ID" type="u" tp:type="Tube_ID">
         <tp:docstring>
           The ID of the tube
         </tp:docstring>
       </arg>
-      <arg name="handle" type="u" tp:type="Contact_Handle">
+      <arg name="Handle" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the participant who opened the new connection
         </tp:docstring>
diff --git a/spec/Client.xml b/spec/Client.xml
new file mode 100644
index 0000000..d0bb8e5
--- /dev/null
+++ b/spec/Client.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" ?>
+<node name="/Client"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+      02110-1301, USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.Client.DRAFT"
+    tp:causes-havoc="experimental">
+    <tp:added version="0.17.12">(as a draft)</tp:added>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>Telepathy clients use connection managers, the channel dispatcher
+        and optionally the account manager to provide useful
+        functionality.</p>
+
+      <p>User interface processes are the obvious example of Telepathy
+        clients, but they can provide other functionality, such as
+        address-book synchronization.</p>
+
+      <p>Every running or activatable process with a well-known
+        name of the form org.freedesktop.Telepathy.Client.<em>clientname</em>
+        should be probed by the channel dispatcher to discover its
+        capabilities. Each client is either an <em>observer</em>, an
+        <em>approver</em>, a <em>channel handler</em>, or some combination
+        of these.</p>
+
+      <tp:rationale>
+        <p>Activatable services (those with a D-Bus <code>.service</code>
+          file) must be supported so that we can run clients
+          in response to channel creation.</p>
+
+        <p>Non-activatable services (those that do not register a D-Bus
+          <code>.service</code> file for their well-known name, but do
+          request it at runtime) must be supported so that we can have
+          programs that process channels, but only if they are already
+          running - for instance, a full-screen media centre
+          application might do this.</p>
+      </tp:rationale>
+
+      <p>The client name, <em>clientname</em>, MUST be a non-empty string of
+        ASCII digits, letters, dots and/or underscores, starting with a
+        letter, and without sets of two consecutive dots or a dot
+        followed by a digit. For non-activatable services, it MAY contain a
+        part that is generated per instance at runtime.</p>
+
+      <tp:rationale>
+        <p>If each of a client Foo's instances should be able to manipulate
+          channels separately, the instance with unique name
+          <code>:1.25</code> might request a well-known name like
+          <code>org.freedesktop.Telepathy.Client.Foo._1._25</code>.</p>
+
+        <p>(Note that well-known bus-name components may not start with a
+          digit, so o.f.T.Client.Foo.1.25 would not be acceptable.)</p>
+      </tp:rationale>
+
+      <p>Each Client MUST export an object whose object path may be
+        determined by replacing '.' with '/' in the well-known name and
+        prepending '/'. This object represents its API as a Telepathy
+        client; the channel dispatcher will call its methods and read
+        its properties when appropriate.</p>
+
+      <p>As an optimization, activatable clients SHOULD install a file
+        <code><a href="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">$XDG_DATA_DIRS</a>/telepathy/clients/<em>clientname</em>.client</code>
+        containing a cached version of its immutable properties,
+        so that for most clients, the channel dispatcher can
+        just read a file to discover capabilities, instead of
+        having to service-activate the client immediately in order to fetch
+        its read-only properties. However, the D-Bus API is canonical, and
+        the channel dispatcher MUST support clients without such a file.</p>
+
+      <p>Non-activatable clients MAY install a <code>.client</code> file,
+        but there's not much point in them doing so.</p>
+
+      <p>The .client files MUST contain UTF-8 text with the same syntax
+        as
+        <a href="http://standards.freedesktop.org/desktop-entry-spec/latest/">Desktop
+          Entry files</a> (although the allowed groups, keys and values differ).
+        Every <code>.client</code> file MUST contain a group whose name is
+        the name of this interface.</p>
+
+      <p>The groups, keys and values in the <code>.client</code> file are
+        defined by individual interfaces. Each interface that can usefully
+        cache information in the <code>.client</code> file SHOULD correspond
+        to a group with the same name.</p>
+    </tp:docstring>
+
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" access="read" tp:type="DBus_Interface[]">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>A list of the extra interfaces provided by this client.
+          This SHOULD include at least one of
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Client.Observer</tp:dbus-ref>,
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Client.Approver</tp:dbus-ref> or
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Client.Handler</tp:dbus-ref>.</p>
+
+        <p>In the <code>.client</code> file, this is represented by key
+          "<code>Interfaces</code>" in the group named after this interface.
+          The value of the key is a list of interface names each followed by
+          a semicolon (so it always ends with a semicolon unless it is empty),
+          i.e. a key of type "strings" as described in the Desktop Entry
+          specification.</p>
+      </tp:docstring>
+    </property>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Client_Approver.xml b/spec/Client_Approver.xml
new file mode 100644
index 0000000..8f59a19
--- /dev/null
+++ b/spec/Client_Approver.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" ?>
+<node name="/Client_Approver"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+      02110-1301, USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.Client.Approver.DRAFT"
+    tp:causes-havoc="experimental">
+    <tp:added version="0.17.12">(as a draft)</tp:added>
+
+    <tp:requires interface="org.freedesktop.Telepathy.Client.DRAFT"/>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>Approvers notify the user that new channels have been created,
+        and allow the user to accept or reject those channels.</p>
+
+      <p>They can also select which channel handler will be used for the
+        channel, for instance by offering the user a list of possible
+        handlers rather than just an accept/reject choice.</p>
+
+      <p>However, the Channel Dispatcher must be able to prioritize
+        possible handlers on its own using some reasonable heuristic,
+        probably based on user configuration.</p>
+
+      <p>It is possible (and useful) to have an approver and
+        a channel handler in the same process; this is particularly useful
+        if a channel handler wants to claim responsibility for particular
+        channels itself.</p>
+
+      <p>All approvers are notified simultaneously. For instance, in a
+        desktop system, there might be one approver that displays a
+        notification-area icon, one that is part of a contact list
+        window and highlights contacts there, and one that is part
+        of a full-screen media player.</p>
+
+      <p>Any approver can approve the handling of a channel with a
+        particular channel handler. Approvers can also request that the
+        channel is rejected. The first approver to reply gets its decision
+        acted on; any other approvers that reply at the same time will
+        get a D-Bus error, indicating that the channel has already been
+        dealt with.</p>
+
+      <p>Approvers should usually prompt the user and ask for
+        confirmation, rather than dispatching the channel to a handler
+        straight away.</p>
+    </tp:docstring>
+
+    <property name="ApproverChannelFilter"
+      tp:name-for-bindings="Approver_Channel_Filter"
+      type="aa{sv}" access="read" tp:type="Channel_Class[]">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>A specification of the channels in which this approver is
+          interested. The <tp:member-ref>AddDispatchOperation</tp:member-ref>
+          method should be called by the channel dispatcher whenever the
+          channels in a channel dispatch operation
+          match this description.</p>
+
+        <p>(FIXME: what happens if some but not all of the channels
+          match this?)</p>
+
+        <p>This property works in exactly the same way as the
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Client.Observer.DRAFT.ObserverChannelFilter</tp:dbus-ref>
+          property. In the .client file, it is represented in the
+          same way as ObserverChannelFilter, but the group has the same
+          name as this interface and the keys start with
+          ApproverChannelFilter instead of ObserverChannelFilter.</p>
+      </tp:docstring>
+    </property>
+
+    <method name="AddDispatchOperation"
+      tp:name-for-bindings="Add_Dispatch_Operation">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by the channel dispatcher when a ChannelDispatchOperation
+          in which the approver has registered an interest is created,
+          or when the approver starts up while such channel dispatch
+          operations already exist.</p>
+
+        <p>The channel dispatcher SHOULD call this method on all approvers
+          at the same time. If no approvers return from this method
+          successfully (including situations where there are no matching
+          approvers at all), the channel dispatcher SHOULD consider this
+          to be an error, and recover by dispatching the channel to the
+          most preferred handler.</p>
+
+        <tp:rationale>
+          Processes that aren't approvers shouldn't be making connections
+          anyway - there should always be at least one approver running.
+        </tp:rationale>
+      </tp:docstring>
+
+      <arg name="DispatchOperation" type="o" direction="in">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">ChannelDispatchOperation</tp:dbus-ref>
+            to be processed.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Properties" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map" direction="in">
+        <tp:docstring>
+          Properties of the channel dispatch operation. This MUST NOT include
+          properties that could change, SHOULD include as many properties as
+          possible given that constraint, and MUST include at least the
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT">Account</tp:dbus-ref>,
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT">Connection</tp:dbus-ref>,
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT">Channels</tp:dbus-ref>
+          and
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.ChannelDispatchOperation.DRAFT">PossibleHandlers</tp:dbus-ref>
+          properties.
+        </tp:docstring>
+      </arg>
+    </method>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Client_Handler.xml b/spec/Client_Handler.xml
new file mode 100644
index 0000000..84e789f
--- /dev/null
+++ b/spec/Client_Handler.xml
@@ -0,0 +1,268 @@
+<?xml version="1.0" ?>
+<node name="/Client_Handler"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+      02110-1301, USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.Client.Handler.DRAFT"
+    tp:causes-havoc="experimental">
+    <tp:added version="0.17.12">(as a draft)</tp:added>
+
+    <tp:requires interface="org.freedesktop.Telepathy.Client.DRAFT"/>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>Channel handlers are the eventual handler for a channel or a
+        channel bundle; a typical channel handler is a user interface
+        process handling channels of a particular type.</p>
+
+      <p>When a new incoming channel (one with
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">Requested</tp:dbus-ref>
+        = FALSE) is offered to
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy.Client">Approver</tp:dbus-ref>s
+        by the channel dispatcher, it also offers the Approvers a list of all
+        the running or activatable ChannelHandlers whose
+        <tp:member-ref>HandlerChannelFilter</tp:member-ref> property
+        (possibly as cached in the .client file) indicates that they
+        are able to handle the channel. The Approvers can choose one of
+        those channel handlers to handle the channel.</p>
+
+      <p>When a new outgoing channel (one with
+        <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">Requested</tp:dbus-ref>
+        = TRUE) appears, the channel dispatcher passes it to an appropriate
+        channel handler automatically.
+      </p>
+
+    </tp:docstring>
+
+    <property name="HandlerChannelFilter"
+      tp:name-for-bindings="Handler_Channel_Filter"
+      type="aa{sv}" access="read" tp:type="Channel_Class[]">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>A specification of the channels that this channel handler can
+          deal with. It will be offered to approvers as a potential
+          channel handler for bundles that contain only suitable channels,
+          or for suitable channels that must be handled separately.</p>
+
+        <p>This property works in exactly the same way as the
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Client.Observer.DRAFT.ObserverChannelFilter</tp:dbus-ref>
+          property. In the .client file, it is represented in the
+          same way as ObserverChannelFilter, but the group has the same
+          name as this interface and the keys start with
+          HandlerChannelFilter instead of ObserverChannelFilter.</p>
+      </tp:docstring>
+    </property>
+
+    <property name="BypassApproval" tp:name-for-bindings="Bypass_Approval"
+      type="b" access="read">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>If true, channels destined for this handler are automatically
+          handled, without invoking approvers.</p>
+
+        <tp:rationale>
+          <p>The intended usage is to allow a client handling one channel to
+            pick up closely related channels. Suppose a client capable of
+            handling both Text and StreamedMedia,
+            <code>org.freedesktop.Telepathy.Client.Empathy</code>, is
+            handling a StreamedMedia channel. That client can take a second
+            well-known bus name, say
+            <code>org.freedesktop.Telepathy.Client.Empathy._1._42.Bundle1</code>,
+            and configure an object at
+            <code>/org/freedesktop/Telepathy/Client/Empathy/_1/_42/Bundle1</code>
+            with BypassApproval = TRUE,
+            whose <tp:member-ref>HandlerChannelFilter</tp:member-ref>
+            matches closely related Text channels by their Bundle property.
+            (This is use-case dis5)</p>
+        </tp:rationale>
+      </tp:docstring>
+    </property>
+
+    <method name="HandleChannels" tp:name-for-bindings="Handle_Channels">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by the channel dispatcher when this client should handle these
+          channels, or when this client should present channels that it is already
+          handling to the user (e.g. bring them into the foreground).</p>
+
+        <tp:rationale>
+          <p>Clients are expected to know what channels they're already handling,
+            and which channel object path corresponds to which window or tab.
+            This can easily be done using a hash table keyed by channels' object
+            paths.</p>
+        </tp:rationale>
+
+        <p>This method can raise any D-Bus error. If it does, or if the
+          handler loses its bus name before all the channels have closed, the
+          handler is assumed to have failed or crashed, and the channel
+          dispatcher MUST recover in an implementation-specific way.</p>
+
+        <p>It is RECOMMENDED that the channel dispatcher attempts to
+          close the channels using
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Channel.Close</tp:dbus-ref>,
+          but resorts to calling
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">Channel.Interface.Destroyable.DRAFT.Destroy</tp:dbus-ref>
+          (if available) or ignoring the channel (if not) if the same handler
+          repeatedly fails to handle channels.</p>
+      </tp:docstring>
+
+      <arg name="Account" type="o" direction="in">
+        <tp:docstring>
+          The
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Account</tp:dbus-ref>
+          with which the channels are associated. The
+          well-known bus name to use is that of the
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Connection" type="o" direction="in">
+        <tp:docstring>
+          The Connection with which the channels are associated. The
+          well-known bus name to use can be derived from this object
+          path by removing the leading '/' and replacing all subsequent
+          '/' by '.'.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Channels" type="a(oa{sv})" direction="in">
+        <tp:docstring>
+          The channels and their immutable properties. Their well-known
+          bus name is the same as that of the Connection.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Requests_Satisfied" type="ao" direction="in">
+        <tp:docstring>
+          The requests satisfied by these channels.
+
+          <tp:rationale>
+            There can be more than one, if they were EnsureChannel
+            requests.
+          </tp:rationale>
+        </tp:docstring>
+      </arg>
+
+      <arg name="User_Action_Time" type="t" direction="in">
+        <tp:docstring>
+          The time at which user action occurred, or 0 if this channel
+          is to be handled for some reason not involving user action.
+          Handlers SHOULD use this for focus-stealing prevention,
+          if applicable.
+        </tp:docstring>
+      </arg>
+
+      <!-- FIXME: invent a way to say "any error is possible" in spec markup -->
+    </method>
+
+    <method name="AddRequest" tp:name-for-bindings="Add_Request">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by the ChannelDispatcher to indicate that channels have been
+          requested, and that if the request is successful, they will be
+          handled by this Handler.</p>
+
+        <tp:rationale>
+          <p>This allows the UI to start preparing to handle the channels
+            in advance (e.g. render a window with an "in progress" message),
+            improving perceived responsiveness.</p>
+        </tp:rationale>
+
+        <p>(FIXME: how do we know the returned channels will be handled by
+          this handler? Do we just assume that they'll match the
+          HandlerChannelFilter iff the request does?)</p>
+      </tp:docstring>
+
+      <arg name="Request" type="o" direction="in">
+        <tp:docstring>
+          The <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy">ChannelRequest</tp:dbus-ref>
+          object.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Properties" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map" direction="in">
+        <tp:docstring>
+          <p>Some of the properties of the ChannelRequest. To avoid race
+            conditions, this dictionary MUST NOT include properties whose
+            values could subsequently change. It SHOULD include as many
+            properties as possible, given that constraint.</p>
+
+          <p>In particular, the properties Requests and UserActionTimestamp
+            MUST be included.</p>
+        </tp:docstring>
+      </arg>
+    </method>
+
+    <method name="RemoveFailedRequest"
+      tp:name-for-bindings="Remove_Failed_Request">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by the ChannelDispatcher to indicate that a request
+          previously passed to <tp:member-ref>AddRequest</tp:member-ref>
+          has failed and should be disregarded.</p>
+      </tp:docstring>
+
+      <arg name="Request" type="o" direction="in">
+        <tp:docstring>
+          The request that failed.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Error" type="s" tp:type="DBus_Error_Name" direction="in">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The name of the D-Bus error with which the request failed.</p>
+
+          <p>If this is <code>org.freedesktop.Telepathy.Errors.NotYours</code>,
+            this indicates that the request succeeded, but all the resulting
+            channels were given to some other handler.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Message" type="s" direction="in">
+        <tp:docstring>
+          Any message supplied with the D-Bus error.
+        </tp:docstring>
+      </arg>
+    </method>
+
+    <property name="HandledChannels" tp:name-for-bindings="Handled_Channels"
+      type="ao" access="read">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>A list of the channels that this Handler is currently handling.
+        </p>
+
+        <p>There is no change notification.</p>
+
+        <tp:rationale>
+          <p>This property exists for state recovery - it makes it possible
+            for channel handling to survive a ChannelDispatcher crash.</p>
+
+          <p>If the channel dispatcher is automatically replaced, the
+            replacement can discover all Handlers by looking for the Client
+            well-known bus names, and discover which channels they are
+            currently handling. Once this has been done, all unhandled
+            channels can be re-dispatched, and the only issue visible to
+            the user is that unhandled channels that they have already
+            approved might be sent back to Approvers.</p>
+        </tp:rationale>
+      </tp:docstring>
+    </property>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Client_Observer.xml b/spec/Client_Observer.xml
new file mode 100644
index 0000000..89709e2
--- /dev/null
+++ b/spec/Client_Observer.xml
@@ -0,0 +1,230 @@
+<?xml version="1.0" ?>
+<node name="/Client_Observer"
+  xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+  <tp:copyright>Copyright (C) 2008 Collabora Ltd.</tp:copyright>
+  <tp:copyright>Copyright (C) 2008 Nokia Corporation</tp:copyright>
+  <tp:license xmlns="http://www.w3.org/1999/xhtml">
+    <p>This library is free software; you can redistribute it and/or
+      modify it under the terms of the GNU Lesser General Public
+      License as published by the Free Software Foundation; either
+      version 2.1 of the License, or (at your option) any later version.</p>
+
+    <p>This library is distributed in the hope that it will be useful,
+      but WITHOUT ANY WARRANTY; without even the implied warranty of
+      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+      Lesser General Public License for more details.</p>
+
+    <p>You should have received a copy of the GNU Lesser General Public
+      License along with this library; if not, write to the Free Software
+      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+      02110-1301, USA.</p>
+  </tp:license>
+
+  <interface name="org.freedesktop.Telepathy.Client.Observer.DRAFT"
+    tp:causes-havoc="experimental">
+    <tp:added version="0.17.12">(as a draft)</tp:added>
+
+    <tp:requires interface="org.freedesktop.Telepathy.Client.DRAFT"/>
+
+    <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+      <p>Observers monitor the creation of new channels. This
+        functionality can be used for things like message logging.
+        All observers are notified simultaneously.</p>
+
+      <p>Observers SHOULD NOT modify the state of a channel except
+        via user interaction.</p>
+
+      <tp:rationale>
+        <p>We want Observer UIs for file transfer channels (a progress
+          bar for the transfer) to be able to have a Cancel button.</p>
+      </tp:rationale>
+
+      <p>Observers MUST NOT carry out actions that exactly one process
+        must take responsibility for (e.g. acknowledging Text
+        messages, or carrying out the actual transfer in a file transfer
+        channel).</p>
+
+      <tp:rationale>
+        <p>Since arbitrarily many observers can be activated for
+          each channel, it would not make sense for observers to do things
+          that can only be done by one process (acknowledging
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.Channel.Type">Text</tp:dbus-ref>
+          messages, carrying out streaming for
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.Channel.Type">StreamedMedia</tp:dbus-ref>
+          channels, doing the actual data transfer for file transfers,
+          setting up the out-of-band connection for Tubes). The
+          <tp:dbus-ref
+            namespace="org.freedesktop.Telepathy.Client">Handler</tp:dbus-ref>
+          is responsible for such tasks.</p>
+
+        <p>Handlers MAY, of course, delegate responsibility for these
+          tasks to other processes (including those run as observers),
+          but this MUST be done explicitly via a request from the Handler
+          to the Observer.</p>
+      </tp:rationale>
+
+      <p>Whenever new channels are signalled, the channel dispatcher
+        will notify all running or activatable observers whose
+        <tp:member-ref>ObserverChannelFilter</tp:member-ref> property
+        (possibly as cached in the .client file) indicates that they are
+        interested in the channel.</p>
+
+      <p>Observers are activated for all channels in which they have
+        registered an interest - incoming, outgoing or automatically created -
+        although of course the ObserverChannelFilter property can be set
+        to filter on the
+        <tp:dbus-ref
+          namespace="org.freedesktop.Telepathy.Channel">Requested</tp:dbus-ref>
+        property.</p>
+    </tp:docstring>
+
+    <property name="ObserverChannelFilter"
+      tp:name-for-bindings="Observer_Channel_Filter"
+      type="aa{sv}" access="read" tp:type="Channel_Class[]">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>A specification of the channels in which this observer is
+          interested. The <tp:member-ref>ObserveChannels</tp:member-ref> method
+          should be called by the channel dispatcher whenever any of the new
+          channels in a NewChannels signal match this description.</p>
+
+        <p>(FIXME: open issue: do we want this, and the corresponding
+          Approver and Handler properties, to be able to change at
+          runtime?)</p>
+
+        <p>Only certain D-Bus types have useful semantics for matching like this,
+          so only certain types are allowed:</p>
+
+        <dl>
+          <dt>Integers of all sizes, including byte (y, n, q, i, u, x, t)</dt>
+          <dd>Matched by numeric value, regardless of type (e.g. 42 as a
+            16-bit signed integer 'n' is considered equal to 42 as a 32-bit
+            unsigned integer 'u')</dd>
+
+          <dt>Booleans (b)</dt>
+          <dd>Matched by equality in the obvious way; not considered equal to any
+            other type</dd>
+
+          <dt>Strings (s)</dt>
+          <dd>Matched by equality in the obvious way; not considered equal to any
+            other type</dd>
+
+          <dt>Object paths (o)</dt>
+          <dd>Matched by equality in the obvious way; not considered equal to any
+            other type</dd>
+
+        </dl>
+
+        <p>This property never changes while the observer process is
+          running. For activatable processes, the filter can change due to an
+          upgrade - the channel dispatcher SHOULD observe changes to .client files
+          using a mechanism like inotify.</p>
+
+        <p>For observers that have a .client file, the channel dispatcher
+          may discover this property from keys of the form
+          <code><em>propertyname</em>/<em>type</em></code>,
+          in groups in the .client file whose name is the name of this
+          interface followed by <code>.ObserverChannelFilter</code>,
+          a space and an ASCII decimal number starting from 0.</p>
+
+        <p>Integers in the .client file are encoded in ASCII decimal, booleans
+          are encoded as "true" or "false", and strings are encoded in the usual
+          way for desktop files (including the C-style backslash escapes
+          documented in the Desktop Entry specification).</p>
+
+        <p>For instance, a .client file for an observer that is only interested
+          in Text channels, with CONTACT or ROOM handles, that were requested by
+          a local client:</p>
+
+<pre>
+[org.freedesktop.Telepathy.Client.DRAFT]
+Interfaces=org.freedesktop.Telepathy.Client.Observer.DRAFT;
+
+[org.freedesktop.Telepathy.Client.Observer.DRAFT.ObserverChannelFilter 0]
+org.freedesktop.Telepathy.Channel.Type s=org.freedesktop.Telepathy.Channel.Type.Text
+org.freedesktop.Telepathy.Channel.TargetHandleType u=1
+org.freedesktop.Telepathy.Channel.Requested b=true
+
+[org.freedesktop.Telepathy.Client.Observer.DRAFT.ObserverChannelFilter 1]
+org.freedesktop.Telepathy.Channel.Type s=org.freedesktop.Telepathy.Channel.Type.Text
+org.freedesktop.Telepathy.Channel.TargetHandleType u=2
+org.freedesktop.Telepathy.Channel.Requested b=true
+</pre>
+
+      </tp:docstring>
+    </property>
+
+    <method name="ObserveChannels" tp:name-for-bindings="Observe_Channels">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Called by the channel dispatcher when channels in which the
+          observer has registered an interest are created.</p>
+
+        <p>The observer MUST NOT return from this method call until it is ready
+          for a handler for the channel to run (which may change the channel's
+          state).</p>
+
+        <tp:rationale>
+          <p>The channel dispatcher must wait for observers to start up,
+            to avoid the following race: text channel logger (observer) gets
+            ObserveChannel, text channel handler gets
+            <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy.Client.Handler.DRAFT">HandleChannels</tp:dbus-ref>
+            channel handler starts up faster and acknowledges messages,
+            logger never sees those messages.</p>
+        </tp:rationale>
+      </tp:docstring>
+
+      <arg name="Account" type="o" direction="in">
+        <tp:docstring>
+          The
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Account</tp:dbus-ref>
+          with which the channels are associated. The
+          well-known bus name to use is that of the
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">AccountManager</tp:dbus-ref>.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Connection" type="o" direction="in">
+        <tp:docstring>
+          The
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>
+          with which the channels are associated. The
+          well-known bus name to use can be derived from this object
+          path by removing the leading '/' and replacing all subsequent
+          '/' by '.'.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Channels" type="a(oa{sv})" tp:type="Channel_Details[]"
+        direction="in">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>The
+            <tp:dbus-ref
+              namespace="org.freedesktop.Telepathy">Channel</tp:dbus-ref>s
+            and their properties. Their well-known bus names are all the same
+            as that of the Connection.</p>
+
+          <tp:rationale>
+            <p>The ChannelDispatchOperation is <em>not</em> supplied: for
+              requests, there isn't one, and for incoming channels, it hasn't
+              been created yet.</p>
+          </tp:rationale>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Observer_Info" type="a{sv}" direction="in">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>Additional information about these channels. No keys are
+            currently defined.</p>
+
+          <p>If keys are defined for this dictionary, all will be optional;
+            observers MAY safely ignore any entry in this dictionary.</p>
+        </tp:docstring>
+      </arg>
+
+    </method>
+
+  </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Connection.xml b/spec/Connection.xml
index 4dac8d0..f543a16 100644
--- a/spec/Connection.xml
+++ b/spec/Connection.xml
@@ -44,7 +44,7 @@ USA.</p>
       </tp:member>
     </tp:struct>
 
-    <method name="Connect">
+    <method name="Connect" tp:name-for-bindings="Connect">
       <tp:docstring>
         Request that the connection be established. This will be done
         asynchronously and errors will be returned by emitting StatusChanged
@@ -58,7 +58,7 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <method name="Disconnect">
+    <method name="Disconnect" tp:name-for-bindings="Disconnect">
       <tp:docstring>
         Request that the connection be closed. This closes the connection if
         it's not already in DISCONNECTED state, and destroys the connection
@@ -66,7 +66,7 @@ USA.</p>
       </tp:docstring>
     </method>
 
-    <method name="GetInterfaces">
+    <method name="GetInterfaces" tp:name-for-bindings="Get_Interfaces">
       <arg direction="out" type="as" tp:type="DBus_Interface[]">
         <tp:docstring>
           An array of D-Bus interface names
@@ -109,7 +109,7 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <method name="GetProtocol">
+    <method name="GetProtocol" tp:name-for-bindings="Get_Protocol">
       <arg direction="out" type="s" tp:type="Protocol">
         <tp:docstring>
           A string identifier for the protocol
@@ -121,26 +121,59 @@ USA.</p>
       </tp:docstring>
     </method>
 
-    <method name="GetSelfHandle">
-      <arg direction="out" type="u" tp:type="Contact_Handle">
+    <signal name="SelfHandleChanged"
+        tp:name-for-bindings="Self_Handle_Changed">
+      <tp:docstring>
+        Emitted whenever the SelfHandle property changes. If the connection
+        is not yet in the CONNECTED state, this signal is not guaranteed
+        to be emitted.
+      </tp:docstring>
+      <tp:added version="0.17.10">Clients MAY assume that if the
+        SelfHandle property exists, this signal will be emitted when
+        necessary.</tp:added>
+
+      <arg type="u" tp:type="Contact_Handle" name="Self_Handle">
         <tp:docstring>
-          An integer handle representing the user
+          The new value of the SelfHandle property.
         </tp:docstring>
       </arg>
+    </signal>
 
+    <property name="SelfHandle" tp:name-for-bindings="Self_Handle"
+      type="u" tp:type="Contact_Handle" access="read">
       <tp:docstring>
-        Get the handle which represents the user on this connection, which will
+        The handle which represents the user on this connection, which will
         remain valid for the lifetime of this connection, or until a change
-        in the user's identifier is signalled by the Renamed signal on the
-        Renaming interface (if present).
+        in the user's identifier is signalled by the SelfHandleChanged signal.
+        If the connection is not yet in the CONNECTED state, the value of
+        this property MAY be zero.
+      </tp:docstring>
+      <tp:added version="0.17.10">For compatibility with older
+        versions, clients should fall back to calling the GetSelfHandle
+        method.</tp:added>
+    </property>
+
+    <method name="GetSelfHandle" tp:name-for-bindings="Get_Self_Handle">
+      <arg direction="out" type="u" tp:type="Contact_Handle">
+        <tp:docstring>
+          The value of the SelfHandle property
+        </tp:docstring>
+      </arg>
+
+      <tp:docstring>
+        Returns the value of the SelfHandle property. Change notification
+        is via the SelfHandleChanged signal.
       </tp:docstring>
+      <tp:deprecated version="0.17.10">Use GetAll to get the
+        SelfHandle property (and all other Connection properties)
+        instead.</tp:deprecated>
 
       <tp:possible-errors>
         <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
       </tp:possible-errors>
     </method>
 
-    <method name="GetStatus">
+    <method name="GetStatus" tp:name-for-bindings="Get_Status">
       <arg direction="out" type="u" tp:type="Connection_Status">
         <tp:docstring>
           An integer representing the current status
@@ -152,14 +185,14 @@ USA.</p>
       </tp:docstring>
     </method>
 
-    <method name="HoldHandles">
-      <arg direction="in" name="handle_type" type="u" tp:type="Handle_Type">
+    <method name="HoldHandles" tp:name-for-bindings="Hold_Handles">
+      <arg direction="in" name="Handle_Type" type="u" tp:type="Handle_Type">
         <tp:docstring>
           The type of handle to be held
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="handles" type="au" tp:type="Handle[]">
+      <arg direction="in" name="Handles" type="au" tp:type="Handle[]">
         <tp:docstring>
           A array of integer handles to hold
         </tp:docstring>
@@ -194,14 +227,14 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <method name="InspectHandles">
-      <arg direction="in" name="handle_type" type="u" tp:type="Handle_Type">
+    <method name="InspectHandles" tp:name-for-bindings="Inspect_Handles">
+      <arg direction="in" name="Handle_Type" type="u" tp:type="Handle_Type">
         <tp:docstring>
           The type of handle to be inspected
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="handles" type="au" tp:type="Handle[]">
+      <arg direction="in" name="Handles" type="au" tp:type="Handle[]">
         <tp:docstring>
           An array of integer handles of this type
         </tp:docstring>
@@ -229,7 +262,7 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <method name="ListChannels">
+    <method name="ListChannels" tp:name-for-bindings="List_Channels">
       <arg direction="out" type="a(osuu)" tp:type="Channel_Info[]">
         <tp:docstring>
           An array of structs representing channels.
@@ -245,34 +278,34 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <signal name="NewChannel">
-      <arg name="object_path" type="o">
+    <signal name="NewChannel" tp:name-for-bindings="New_Channel">
+      <arg name="Object_Path" type="o">
         <tp:docstring>
           A D-Bus object path for the channel object on this service
         </tp:docstring>
       </arg>
 
-      <arg name="channel_type" type="s" tp:type="DBus_Interface">
+      <arg name="Channel_Type" type="s" tp:type="DBus_Interface">
         <tp:docstring>
           A D-Bus interface name representing the channel type
         </tp:docstring>
       </arg>
 
-      <arg name="handle_type" type="u" tp:type="Handle_Type">
+      <arg name="Handle_Type" type="u" tp:type="Handle_Type">
         <tp:docstring>
           An integer representing the type of handle this channel
           communicates with, or Handle_Type_None if no handle is specified
         </tp:docstring>
       </arg>
 
-      <arg name="handle" type="u" tp:type="Handle">
+      <arg name="Handle" type="u" tp:type="Handle">
         <tp:docstring>
           A handle indicating the specific contact, room or list this
           channel communicates with, or zero if no handle is specified
         </tp:docstring>
       </arg>
 
-      <arg name="suppress_handler" type="b">
+      <arg name="Suppress_Handler" type="b">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>If true, the channel was requested by a client that intends to
             present it to the user itself (i.e. it passed suppress_handler=TRUE
@@ -296,14 +329,14 @@ USA.</p>
       </tp:docstring>
     </signal>
 
-    <method name="ReleaseHandles">
-      <arg direction="in" name="handle_type" type="u" tp:type="Handle_Type">
+    <method name="ReleaseHandles" tp:name-for-bindings="Release_Handles">
+      <arg direction="in" name="Handle_Type" type="u" tp:type="Handle_Type">
         <tp:docstring>
           An integer handle type (as defined in RequestHandle)
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="handles" type="au" tp:type="Handle[]">
+      <arg direction="in" name="Handles" type="au" tp:type="Handle[]">
         <tp:docstring>
           An array of integer handles being held by the client
         </tp:docstring>
@@ -336,21 +369,21 @@ USA.</p>
       </tp:possible-errors>
     </method>
 
-    <method name="RequestChannel">
-      <arg direction="in" name="type" type="s" tp:type="DBus_Interface">
+    <method name="RequestChannel" tp:name-for-bindings="Request_Channel">
+      <arg direction="in" name="Type" type="s" tp:type="DBus_Interface">
         <tp:docstring>
           A D-Bus interface name representing base channel type
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="handle_type" type="u" tp:type="Handle_Type">
+      <arg direction="in" name="Handle_Type" type="u" tp:type="Handle_Type">
         <tp:docstring>
           An integer representing the handle type, or Handle_Type_None if
           no handle is specified
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="handle" type="u" tp:type="Handle">
+      <arg direction="in" name="Handle" type="u" tp:type="Handle">
         <tp:docstring>
           A nonzero integer handle representing a contact, room, list etc.
           according to handle_type, or zero if the handle_type is
@@ -358,11 +391,34 @@ USA.</p>
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="suppress_handler" type="b">
+      <arg direction="in" name="Suppress_Handler" type="b">
         <tp:docstring>
-          If true, the requesting client intends to take responsibility for
-          displaying the channel to the user, so no other handler needs to
-          be launched
+          <p>Clients SHOULD always set this to true.</p>
+
+          <tp:rationale>
+            <p>The historical meaning was that clients that did not
+              intend to take responsibility for displaying the channel to
+              the user could set this to FALSE, in which case the channel
+              dispatcher would launch an appropriate channel handler.</p>
+
+            <p>However, clients whose functionality relies on having a
+              working channel dispatcher should obtain that functionality by
+              calling methods on the channel dispatcher, so that they will
+              get an appropriate error if the channel dispatcher is missing
+              or not working.</p>
+
+            <p>The channel dispatcher itself should set this to true too,
+              so that it will ignore the
+              <tp:member-ref>NewChannel</tp:member-ref> signal that results
+              from the creation of the channel. It can then dispatch the
+              channel returned from this method to an
+              appropriate handler.</p>
+
+            <p>So, there is no sensible use-case for setting this to false,
+              and setting it to false can result in unhandled channels (in
+              the case where clients assume that a channel dispatcher is
+              present, but it isn't).</p>
+          </tp:rationale>
         </tp:docstring>
       </arg>
 
@@ -481,14 +537,14 @@ USA.</p>
         Handle_Type_Group</tp:docstring>
     </tp:simple-type>
 
-    <method name="RequestHandles">
-      <arg direction="in" name="handle_type" type="u" tp:type="Handle_Type">
+    <method name="RequestHandles" tp:name-for-bindings="Request_Handles">
+      <arg direction="in" name="Handle_Type" type="u" tp:type="Handle_Type">
         <tp:docstring>
           The type of handle required
         </tp:docstring>
       </arg>
 
-      <arg direction="in" name="names" type="as">
+      <arg direction="in" name="Names" type="as">
         <tp:docstring>
           An array of names of entities to request handles for
         </tp:docstring>
@@ -623,14 +679,14 @@ USA.</p>
       </tp:enumvalue>
     </tp:enum>
 
-    <signal name="StatusChanged">
-      <arg name="status" type="u" tp:type="Connection_Status">
+    <signal name="StatusChanged" tp:name-for-bindings="Status_Changed">
+      <arg name="Status" type="u" tp:type="Connection_Status">
         <tp:docstring>
           An integer indicating the new status, as defined by ConnectionStatus
         </tp:docstring>
       </arg>
 
-      <arg name="reason" type="u" tp:type="Connection_Status_Reason">
+      <arg name="Reason" type="u" tp:type="Connection_Status_Reason">
         <tp:docstring>
           An integer indicating the reason for the status change, as defined
           by ConnectionStatusReason
@@ -645,10 +701,43 @@ USA.</p>
     </signal>
 
     <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-    <p>This models a connection to a single user account on a communication
-    service. Its basic capability is to provide the facility to request and
-    receive channels of differing types (such as text channels or streaming
-    media channels) which are used to carry out further communication.</p>
+      <p>This models a connection to a single user account on a communication
+        service. Its basic capability is to provide the facility to request and
+        receive channels of differing types (such as text channels or streaming
+        media channels) which are used to carry out further communication.</p>
+
+      <p>In order to allow Connection objects to be discovered by new clients,
+        the object path and well-known bus name MUST be of the form
+        <code>/org/freedesktop/Telepathy/Connection/cmname/proto/account</code>
+        and
+        <code>org.freedesktop.Telepathy.Connection.cmname.proto.account</code>
+        where:</p>
+
+      <ul>
+        <li><em>cmname</em> is the same
+          <tp:type>Connection_Manager_Name</tp:type> that appears
+          in the connection manager's object path and well-known bus name</li>
+        <li><em>proto</em> is the <tp:type>Protocol</tp:type> name as seen in
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy.ConnectionManager">ListProtocols</tp:dbus-ref>,
+          but with "-" replaced with "_" to get a valid
+          object path/bus name</li>
+        <li><em>account</em> is some non-empty sequence of ASCII letters,
+          digits and underscores not starting with a digit</li>
+      </ul>
+
+      <p><em>account</em> SHOULD be formed such that any valid distinct
+        connection instance on this protocol has a distinct name. This
+        might be formed by including the server name followed by the user
+        name (escaped via some suitable mechanism like telepathy-glib's
+        tp_escape_as_identifier() function to preserve uniqueness); on
+        protocols where connecting multiple times is permissable, a
+        per-connection identifier might be necessary to ensure
+        uniqueness.</p>
+
+      <p>Clients MAY parse the object path to determine the connection
+        manager name and the protocol, but MUST NOT attempt to parse the
+        <em>account</em> part. Connection managers MAY use any unique string
+        for this part.</p>
 
     <p>As well as the methods and signatures below, arbitrary interfaces may be
     provided by the Connection object to represent extra connection-wide
@@ -679,6 +768,13 @@ USA.</p>
     keep handles from being released with HoldHandles, and notify that they are
     no longer storing handles with ReleaseHandles.</p>
     </tp:docstring>
+
+    <tp:changed version="0.17.10">Previously, the account part of
+      Connection bus names/object paths was allowed to have more than one
+      component (i.e. contain dots or slashes), resulting in Connection
+      bus names and object paths with more than 7 components. We now restrict
+      Connection bus names/object paths to have exactly 7
+      components.</tp:changed>
   </interface>
 </node>
 <!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/spec/Connection_Interface_Aliasing.xml b/spec/Connection_Interface_Aliasing.xml
index 5d6eb53..ee14fa7 100644
--- a/spec/Connection_Interface_Aliasing.xml
+++ b/spec/Connection_Interface_Aliasing.xml
@@ -35,8 +35,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="s" name="Alias"/>
     </tp:struct>
 
-    <signal name="AliasesChanged">
-      <arg name="aliases" type="a(us)" tp:type="Alias_Pair[]">
+    <signal name="AliasesChanged" tp:name-for-bindings="Aliases_Changed">
+      <arg name="Aliases" type="a(us)" tp:type="Alias_Pair[]">
         <!-- FIXME: if we break API, this could be an Alias_Map, a{us} -->
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           An array containing structs of:
@@ -68,7 +68,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </tp:flag>
     </tp:flags>
-    <method name="GetAliasFlags">
+    <method name="GetAliasFlags" tp:name-for-bindings="Get_Alias_Flags">
       <arg direction="out" type="u" tp:type="Connection_Alias_Flags">
         <tp:docstring>
           An integer with a bitwise OR of flags from ConnectionAliasFlags
@@ -82,8 +82,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
       </tp:possible-errors>
     </method>
-    <method name="RequestAliases">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="RequestAliases" tp:name-for-bindings="Request_Aliases">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of handles representing contacts
         </tp:docstring>
@@ -103,8 +103,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
       </tp:possible-errors>
     </method>
-    <method name="GetAliases">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="GetAliases" tp:name-for-bindings="Get_Aliases">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of handles representing contacts
         </tp:docstring>
@@ -126,8 +126,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
       </tp:possible-errors>
     </method>
-    <method name="SetAliases">
-      <arg direction="in" name="aliases" type="a{us}" tp:type="Alias_Map">
+    <method name="SetAliases" tp:name-for-bindings="Set_Aliases">
+      <arg direction="in" name="Aliases" type="a{us}" tp:type="Alias_Map">
         <tp:docstring>
           A dictionary mapping integer handles of contacts
           to strings of the new alias to set.
diff --git a/spec/Connection_Interface_Avatars.xml b/spec/Connection_Interface_Avatars.xml
index 53d3108..76b85f3 100644
--- a/spec/Connection_Interface_Avatars.xml
+++ b/spec/Connection_Interface_Avatars.xml
@@ -28,13 +28,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="s" name="Token"/>
     </tp:mapping>
 
-    <signal name="AvatarUpdated">
-      <arg name="contact" type="u" tp:type="Contact_Handle">
+    <signal name="AvatarUpdated" tp:name-for-bindings="Avatar_Updated">
+      <arg name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer handle for the contact whose avatar has changed
         </tp:docstring>
       </arg>
-      <arg name="new_avatar_token" type="s">
+      <arg name="New_Avatar_Token" type="s">
         <tp:docstring>
           Unique token for their new avatar
         </tp:docstring>
@@ -46,23 +46,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         avatar should be requested with RequestAvatars.
       </tp:docstring>
     </signal>
-    <signal name="AvatarRetrieved">
-      <arg name="contact" type="u" tp:type="Contact_Handle">
+    <signal name="AvatarRetrieved" tp:name-for-bindings="Avatar_Retrieved">
+      <arg name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The contact whose avatar has been retrieved
         </tp:docstring>
       </arg>
-      <arg name="token" type="s">
+      <arg name="Token" type="s">
         <tp:docstring>
           The token corresponding to the avatar
         </tp:docstring>
       </arg>
-      <arg name="avatar" type="ay">
+      <arg name="Avatar" type="ay">
         <tp:docstring>
           An array of bytes containing the image data
         </tp:docstring>
       </arg>
-      <arg name="type" type="s">
+      <arg name="Type" type="s">
         <tp:docstring>
           A string containing the image MIME type (eg image/jpeg), or empty if
           unknown
@@ -72,7 +72,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         Emitted when the avatar for a contact has been retrieved.
       </tp:docstring>
     </signal>
-    <method name="GetAvatarRequirements">
+    <method name="GetAvatarRequirements"
+      tp:name-for-bindings="Get_Avatar_Requirements">
       <arg direction="out" type="as">
         <tp:docstring>
           An array of supported MIME types (eg image/jpeg)
@@ -113,8 +114,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
       </tp:possible-errors>
     </method>
-    <method name="GetAvatarTokens">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="GetAvatarTokens" tp:name-for-bindings="Get_Avatar_Tokens">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
         An array of handles representing contacts
         </tp:docstring>
@@ -139,8 +140,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
       </tp:possible-errors>
     </method>
-    <method name="GetKnownAvatarTokens">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="GetKnownAvatarTokens"
+      tp:name-for-bindings="Get_Known_Avatar_Tokens">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
         An array of handles representing contacts
         </tp:docstring>
@@ -170,8 +172,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
       </tp:possible-errors>
     </method>
-    <method name="RequestAvatar">
-      <arg direction="in" name="contact" type="u" tp:type="Contact_Handle">
+    <method name="RequestAvatar" tp:name-for-bindings="Request_Avatar">
+      <arg direction="in" name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer handle for the contact to request the avatar for
         </tp:docstring>
@@ -203,8 +205,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:error>
       </tp:possible-errors>
     </method>
-    <method name="RequestAvatars">
-      <arg direction="in" name="contacts" type="au"
+    <method name="RequestAvatars" tp:name-for-bindings="Request_Avatars">
+      <arg direction="in" name="Contacts" type="au"
         tp:type="Contact_Handle[]">
         <tp:docstring>
           The contacts to retrieve avatars for
@@ -222,13 +224,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle"/>
       </tp:possible-errors>
     </method>
-    <method name="SetAvatar">
-      <arg direction="in" name="avatar" type="ay">
+    <method name="SetAvatar" tp:name-for-bindings="Set_Avatar">
+      <arg direction="in" name="Avatar" type="ay">
         <tp:docstring>
           An array of bytes representing the avatar image data
         </tp:docstring>
       </arg>
-      <arg direction="in" name="mime_type" type="s">
+      <arg direction="in" name="MIME_Type" type="s">
         <tp:docstring>
           A string representing the image MIME type
         </tp:docstring>
@@ -250,7 +252,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
       </tp:possible-errors>
     </method>
-    <method name="ClearAvatar">
+    <method name="ClearAvatar" tp:name-for-bindings="Clear_Avatar">
       <tp:added version="0.15.0" />
       <tp:docstring>
         Remove the avatar image for this connection.
diff --git a/spec/Connection_Interface_Capabilities.xml b/spec/Connection_Interface_Capabilities.xml
index 95fbaaf..d577934 100644
--- a/spec/Connection_Interface_Capabilities.xml
+++ b/spec/Connection_Interface_Capabilities.xml
@@ -109,8 +109,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="u" name="New_Type_Specific_Flags"/>
     </tp:struct>
 
-    <method name="AdvertiseCapabilities">
-      <arg direction="in" name="add" type="a(su)" tp:type="Capability_Pair[]">
+    <method name="AdvertiseCapabilities"
+      tp:name-for-bindings="Advertise_Capabilities">
+      <arg direction="in" name="Add" type="a(su)" tp:type="Capability_Pair[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           An array of structures containing:
           <ul>
@@ -119,7 +120,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
           </ul>
         </tp:docstring>
       </arg>
-      <arg direction="in" name="remove" type="as" tp:type="DBus_Interface[]">
+      <arg direction="in" name="Remove" type="as" tp:type="DBus_Interface[]">
         <tp:docstring>
           An array of D-Bus interface names of channel types to remove
         </tp:docstring>
@@ -158,8 +159,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <signal name="CapabilitiesChanged">
-      <arg name="caps" type="a(usuuuu)" tp:type="Capability_Change[]">
+    <signal name="CapabilitiesChanged"
+      tp:name-for-bindings="Capabilities_Changed">
+      <arg name="Caps" type="a(usuuuu)" tp:type="Capability_Change[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           An array of structures containing:
           <ul>
@@ -182,8 +184,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <method name="GetCapabilities">
-      <arg direction="in" name="handles" type="au" tp:type="Contact_Handle[]">
+    <method name="GetCapabilities" tp:name-for-bindings="Get_Capabilities">
+      <arg direction="in" name="Handles" type="au" tp:type="Contact_Handle[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>An array of contact handles for this connection.</p>
 
diff --git a/spec/Connection_Interface_Contact_Info.xml b/spec/Connection_Interface_Contact_Info.xml
index 22cd507..4f8fd42 100644
--- a/spec/Connection_Interface_Contact_Info.xml
+++ b/spec/Connection_Interface_Contact_Info.xml
@@ -21,13 +21,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <interface name="org.freedesktop.Telepathy.Connection.Interface.ContactInfo"
     tp:causes-havoc='obsolete'>
     <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
-    <signal name="GotContactInfo">
-      <arg name="contact" type="u" tp:type="Contact_Handle">
+    <signal name="GotContactInfo" tp:name-for-bindings="Got_Contact_Info">
+      <arg name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer handle of the contact ID on the server
         </tp:docstring>
       </arg>
-      <arg name="vcard" type="s">
+      <arg name="VCard" type="s">
         <tp:docstring>
           The XML string containing their vcard information
         </tp:docstring>
@@ -37,8 +37,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         the details of a particular contact.
       </tp:docstring>
     </signal>
-    <method name="RequestContactInfo">
-      <arg direction="in" name="contact" type="u" tp:type="Contact_Handle">
+    <method name="RequestContactInfo"
+      tp:name-for-bindings="Request_Contact_Info">
+      <arg direction="in" name="Contact" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer handle for the contact to request info for
         </tp:docstring>
diff --git a/spec/Connection_Interface_Contacts.xml b/spec/Connection_Interface_Contacts.xml
index 3f5b5ea..590c339 100644
--- a/spec/Connection_Interface_Contacts.xml
+++ b/spec/Connection_Interface_Contacts.xml
@@ -128,7 +128,8 @@
     </tp:mapping>
 
     <property name="ContactAttributeInterfaces" access="read" type="as"
-      tp:type="DBus_Interface[]">
+      tp:type="DBus_Interface[]"
+      tp:name-for-bindings="Contact_Attribute_Interfaces">
       <tp:docstring>
         A list of D-Bus interfaces for which
         <tp:member-ref>GetContactAttributes</tp:member-ref> is expected to work.
@@ -136,7 +137,8 @@
       </tp:docstring>
     </property>
 
-    <method name="GetContactAttributes">
+    <method name="GetContactAttributes"
+      tp:name-for-bindings="Get_Contact_Attributes">
       <tp:docstring>
         Return any number of contact attributes for the given handles.
       </tp:docstring>
diff --git a/spec/Connection_Interface_Forwarding.xml b/spec/Connection_Interface_Forwarding.xml
index 6322fbc..73051f4 100644
--- a/spec/Connection_Interface_Forwarding.xml
+++ b/spec/Connection_Interface_Forwarding.xml
@@ -21,8 +21,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <interface name="org.freedesktop.Telepathy.Connection.Interface.Forwarding"
     tp:causes-havoc='not well-tested'>
     <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
-    <signal name="ForwardingChanged">
-      <arg name="forward_to" type="u" tp:type="Contact_Handle">
+    <signal name="ForwardingChanged" tp:name-for-bindings="Forwarding_Changed">
+      <arg name="Forward_To" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer contact handle to forward communication to
         </tp:docstring>
@@ -32,7 +32,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         changed. An zero handle indicates forwarding is disabled.
       </tp:docstring>
     </signal>
-    <method name="GetForwardingHandle">
+    <method name="GetForwardingHandle"
+      tp:name-for-bindings="Get_Forwarding_Handle">
       <arg direction="out" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer contact handle to whom incoming communication is forwarded
@@ -47,8 +48,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
       </tp:possible-errors>
     </method>
-    <method name="SetForwardingHandle">
-      <arg direction="in" name="forward_to" type="u" tp:type="Contact_Handle">
+    <method name="SetForwardingHandle"
+      tp:name-for-bindings="Set_Forwarding_Handle">
+      <arg direction="in" name="Forward_To" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           An integer contact handle to forward incoming communications to
         </tp:docstring>
diff --git a/spec/Connection_Interface_Presence.xml b/spec/Connection_Interface_Presence.xml
index 4ba59b6..58ad34e 100644
--- a/spec/Connection_Interface_Presence.xml
+++ b/spec/Connection_Interface_Presence.xml
@@ -63,13 +63,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="(ubba{ss})" tp:type="Status_Spec" name="Spec"/>
     </tp:mapping>
 
-    <method name="AddStatus">
-      <arg direction="in" name="status" type="s">
+    <method name="AddStatus" tp:name-for-bindings="Add_Status">
+      <arg direction="in" name="Status" type="s">
         <tp:docstring>
           The string identifier of the desired status
         </tp:docstring>
       </arg>
-      <arg direction="in" name="parms" type="a{sv}" tp:type="String_Variant_Map">
+      <arg direction="in" name="Parameters" type="a{sv}" tp:type="String_Variant_Map">
         <tp:docstring>
           A dictionary of optional parameter names mapped to their variant-boxed values
         </tp:docstring>
@@ -87,7 +87,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
       </tp:possible-errors>
     </method>
-    <method name="ClearStatus">
+    <method name="ClearStatus" tp:name-for-bindings="Clear_Status">
       <tp:docstring>
         Request that all of a user's presence statuses be removed. Be aware
         that this request may simply result in the statuses being replaced by a
@@ -100,13 +100,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
       </tp:possible-errors>
     </method>
-    <method name="GetPresence">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="GetPresence" tp:name-for-bindings="Get_Presence">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of the contacts whose presence should be obtained
         </tp:docstring>
       </arg>
-      <arg direction="out" name="presence" type="a{u(ua{sa{sv}})}"
+      <arg direction="out" name="Presence" type="a{u(ua{sa{sv}})}"
         tp:type="Contact_Presences">
         <tp:docstring>
           Presence information in the same format as for the PresenceUpdate
@@ -126,7 +126,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
       </tp:possible-errors>
     </method>
-    <method name="GetStatuses">
+    <method name="GetStatuses" tp:name-for-bindings="Get_Statuses">
       <arg direction="out" type="a{s(ubba{ss})}" tp:type="Status_Spec_Map">
         <tp:docstring>
         A dictionary of string identifiers mapped to a struct for each status, containing:
@@ -148,8 +148,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
       </tp:possible-errors>
     </method>
-    <signal name="PresenceUpdate">
-      <arg name="presence" type="a{u(ua{sa{sv}})}" tp:type="Contact_Presences">
+    <signal name="PresenceUpdate" tp:name-for-bindings="Presence_Update">
+      <arg name="Presence" type="a{u(ua{sa{sv}})}" tp:type="Contact_Presences">
         <tp:docstring>
         A dictionary of contact handles mapped to a struct containing
         a UNIX timestamp of the last activity time (in UTC), and
@@ -165,8 +165,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 
       </tp:docstring>
     </signal>
-    <method name="RemoveStatus">
-      <arg direction="in" name="status" type="s">
+    <method name="RemoveStatus" tp:name-for-bindings="Remove_Status">
+      <arg direction="in" name="Status" type="s">
         <tp:docstring>
           The string identifier of the status not to publish anymore for the user
         </tp:docstring>
@@ -186,8 +186,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:error>
       </tp:possible-errors>
     </method>
-    <method name="RequestPresence">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="RequestPresence" tp:name-for-bindings="Request_Presence">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of the contacts whose presence should be obtained
         </tp:docstring>
@@ -211,8 +211,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:error>
       </tp:possible-errors>
     </method>
-    <method name="SetLastActivityTime">
-      <arg direction="in" name="time" type="u" tp:type="Unix_Timestamp">
+    <method name="SetLastActivityTime"
+      tp:name-for-bindings="Set_Last_Activity_Time">
+      <arg direction="in" name="Time" type="u" tp:type="Unix_Timestamp">
         <tp:docstring>
           A UNIX timestamp of the user's last activity time (in UTC)
         </tp:docstring>
@@ -231,8 +232,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:error>
       </tp:possible-errors>
     </method>
-    <method name="SetStatus">
-      <arg direction="in" name="statuses" type="a{sa{sv}}" tp:type="Multiple_Status_Map">
+    <method name="SetStatus" tp:name-for-bindings="Set_Status">
+      <arg direction="in" name="Statuses" type="a{sa{sv}}" tp:type="Multiple_Status_Map">
         <tp:docstring>
           A dictionary mapping status identifiers to dictionaries, which
           map optional parameter names to their variant-boxed values
diff --git a/spec/Connection_Interface_Privacy.xml b/spec/Connection_Interface_Privacy.xml
index 8654736..b89d968 100644
--- a/spec/Connection_Interface_Privacy.xml
+++ b/spec/Connection_Interface_Privacy.xml
@@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <interface name="org.freedesktop.Telepathy.Connection.Interface.Privacy"
     tp:causes-havoc='not well-tested'>
     <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
-    <method name="GetPrivacyMode">
+    <method name="GetPrivacyMode" tp:name-for-bindings="Get_Privacy_Mode">
       <arg direction="out" type="s">
         <tp:docstring>
           A string representing the current privacy mode
@@ -36,7 +36,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
       </tp:possible-errors>
     </method>
-    <method name="GetPrivacyModes">
+    <method name="GetPrivacyModes" tp:name-for-bindings="Get_Privacy_Modes">
       <arg direction="out" type="as">
         <tp:docstring>
           An array of valid privacy modes for this connection
@@ -52,8 +52,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
          </dl>
        </tp:docstring>
     </method>
-    <signal name="PrivacyModeChanged">
-      <arg name="mode" type="s">
+    <signal name="PrivacyModeChanged"
+      tp:name-for-bindings="Privacy_Mode_Changed">
+      <arg name="Mode" type="s">
         <tp:docstring>
           The current privacy mode
         </tp:docstring>
@@ -63,8 +64,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         initially received from the server.
       </tp:docstring>
     </signal>
-    <method name="SetPrivacyMode">
-      <arg direction="in" name="mode" type="s">
+    <method name="SetPrivacyMode" tp:name-for-bindings="Set_Privacy_Mode">
+      <arg direction="in" name="Mode" type="s">
         <tp:docstring>
           The desired privacy mode
         </tp:docstring>
diff --git a/spec/Connection_Interface_Renaming.xml b/spec/Connection_Interface_Renaming.xml
index 2c4e272..9981184 100644
--- a/spec/Connection_Interface_Renaming.xml
+++ b/spec/Connection_Interface_Renaming.xml
@@ -21,13 +21,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
   <interface name="org.freedesktop.Telepathy.Connection.Interface.Renaming"
     tp:causes-havoc='not well-tested'>
     <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
-    <signal name="Renamed">
-      <arg name="original" type="u" tp:type="Contact_Handle">
+    <signal name="Renamed" tp:name-for-bindings="Renamed">
+      <arg name="Original" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the original identifier
         </tp:docstring>
       </arg>
-      <arg name="new" type="u" tp:type="Contact_Handle">
+      <arg name="New" type="u" tp:type="Contact_Handle">
         <tp:docstring>
           The handle of the new identifier
         </tp:docstring>
@@ -61,8 +61,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </p>
       </tp:docstring>
     </signal>
-    <method name="RequestRename">
-      <arg direction="in" name="name" type="s">
+    <method name="RequestRename" tp:name-for-bindings="Request_Rename">
+      <arg direction="in" name="Name" type="s">
         <tp:docstring>
           The desired identifier
         </tp:docstring>
diff --git a/spec/Connection_Interface_Requests.xml b/spec/Connection_Interface_Requests.xml
index ea1eeeb..5576d5b 100644
--- a/spec/Connection_Interface_Requests.xml
+++ b/spec/Connection_Interface_Requests.xml
@@ -21,10 +21,9 @@
       USA.</p>
   </tp:license>
 
-  <interface name="org.freedesktop.Telepathy.Connection.Interface.Requests.DRAFT"
-    tp:causes-havoc="experimental">
+  <interface name="org.freedesktop.Telepathy.Connection.Interface.Requests">
     <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
-    <tp:added version="0.17.9"/>
+    <tp:added version="0.17.11">(as stable API)</tp:added>
 
     <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
       <p>An enhanced version of the Telepathy connection interface, which can
@@ -34,6 +33,8 @@
     </tp:docstring>
 
     <tp:struct name="Channel_Details" array-name="Channel_Details_List">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
+
       <tp:docstring>
         Enough details of a channel that clients can work out how to dispatch
         or handle it.
@@ -79,12 +80,11 @@
           <p>Each dictionary MUST contain the keys
             <tp:dbus-ref>org.freedesktop.Telepathy.Channel.ChannelType</tp:dbus-ref>,
             <tp:dbus-ref>org.freedesktop.Telepathy.Channel.TargetHandleType</tp:dbus-ref>,
-            <tp:dbus-ref>org.freedesktop.Telepathy.Channel.TargetHandle</tp:dbus-ref>
+            <tp:dbus-ref>org.freedesktop.Telepathy.Channel.TargetHandle</tp:dbus-ref>,
+            <tp:dbus-ref>org.freedesktop.Telepathy.Channel.TargetID</tp:dbus-ref>
             and
-            <tp:dbus-ref>org.freedesktop.Telepathy.Channel.TargetID</tp:dbus-ref>.
+            <tp:dbus-ref>org.freedesktop.Telepathy.Channel.Requested</tp:dbus-ref>.
           </p>
-          <!-- FIXME: maybe also Requested, InitiatorHandle,
-          InitiatorID once they leave the FUTURE pseudo-interface -->
 
           <tp:rationale>
             <p>We expect these to be crucial to the channel-dispatching
@@ -94,9 +94,11 @@
       </tp:member>
     </tp:struct>
 
-    <method name="CreateChannel">
+    <method name="CreateChannel" tp:name-for-bindings="Create_Channel">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
+
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-        <p>Request that channels are created.</p>
+        <p>Request that an entirely new channel is created.</p>
 
         <tp:rationale>
           <p>There is deliberately no flag corresponding to the
@@ -185,13 +187,119 @@
           </tp:docstring>
         </tp:error>
         <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
+          <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+            <p>The requested channel cannot be created, but in
+              principle, a similar request might succeed in future.
+              For instance, this might be because:</p>
+
+            <ul>
+              <li>the requested contact is using a client
+                that lacks a particular feature</li>
+              <li>a channel matching the request already exists and the
+                protocol requires that only one such channel can exist at a
+                time</li>
+              <li>a channel matching the request has already been requested
+                (by a previous call to CreateChannel,
+                <tp:member-ref>EnsureChannel</tp:member-ref>,
+                <tp:dbus-ref
+                  namespace="org.freedesktop.Telepathy">Connection.RequestChannel</tp:dbus-ref>
+                or similar) and the protocol requires that only one such
+                channel can exist at a time</li>
+            </ul>
+          </tp:docstring>
+        </tp:error>
+        <tp:error name="org.freedesktop.Telepathy.Error.Channel.Banned"/>
+        <tp:error name="org.freedesktop.Telepathy.Error.Channel.Full"/>
+        <tp:error name="org.freedesktop.Telepathy.Error.Channel.InviteOnly"/>
+      </tp:possible-errors>
+    </method>
+
+    <method name="EnsureChannel" tp:name-for-bindings="Ensure_Channel">
+      <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+        <p>Request that channels are ensured to exist.</p>
+
+        <tp:rationale>
+          <p>The connection manager is in the best position to determine which
+            existing channels could satisfy which requests.</p>
+        </tp:rationale>
+
+      </tp:docstring>
+
+      <arg direction="in" name="Request" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>A dictionary containing desirable properties, with the same
+            semantics as the corresponding parameter to
+            <tp:member-ref>CreateChannel</tp:member-ref>.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Yours" direction="out" type="b">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>If false, the caller of EnsureChannel MUST assume that some
+            other process is handling this channel; if true, the caller of
+            EnsureChannel SHOULD handle it themselves or delegate it to another
+            client.</p>
+
+          <p>If the creation of a channel makes several calls to EnsureChannel
+            (and no other requests) successful, exactly one of those calls MUST
+            return a true value for this argument.</p>
+
+          <p>If the creation of a channel makes other requests successful,
+            the value returned for this argument MUST be such that exactly
+            one of the clients making requests ends up responsible for the
+            channel. In particular, if CreateChannel returns a channel
+            <em>C</em>, any EnsureChannel calls that also return <em>C</em>
+            MUST return a false value for this argument.</p>
+        </tp:docstring>
+      </arg>
+
+      <arg name="Channel" direction="out" type="o">
+        <tp:docstring>
+          The Channel object, which MUST already have been signalled with
+          <tp:member-ref>NewChannels</tp:member-ref> by the time this method
+          returns.
+        </tp:docstring>
+      </arg>
+
+      <arg name="Properties" direction="out" type="a{sv}"
+        tp:type="Qualified_Property_Value_Map">
+        <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+          <p>Properties of the channel that was produced, equivalent to
+            the properties in <tp:type>Channel_Details</tp:type>.
+            Connection managers MUST NOT include properties here whose
+            values can change, for the same reasons as in
+            <tp:type>Channel_Details</tp:type>.</p>
+        </tp:docstring>
+      </arg>
+
+      <tp:possible-errors>
+        <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
+        <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
+        <tp:error name="org.freedesktop.Telepathy.Error.NotImplemented">
+          <tp:docstring>
+            The channel request was one that can never succeed,
+            such as requesting an unsupported channel type, or requesting
+            a channel type which this connection manager does not support with
+            the given target handle type.
+          </tp:docstring>
+        </tp:error>
+        <tp:error name="org.freedesktop.Telepathy.Error.InvalidHandle">
+          <tp:docstring>
+            An invalid handle was requested as the value of a property whose
+            value is a handle (like
+            <tp:dbus-ref namespace="org.freedesktop.Telepathy">Channel.TargetHandle</tp:dbus-ref>),
+            or a syntactically invalid identifier was requested as the value
+            of a property whose value is the string corresponding to a handle
+            (like TargetID).
+          </tp:docstring>
+        </tp:error>
+        <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable">
           <tp:docstring>
             The requested channel cannot be created, but in
             principle, a similar request might succeed in future. For instance,
             this might be because the requested contact is using a client
-            that lacks a particular feature, or because a channel matching the
-            request already exists and the protocol requires that only one
-            such channel can exist at a time.
+            that lacks a particular feature.
           </tp:docstring>
         </tp:error>
         <tp:error name="org.freedesktop.Telepathy.Error.Channel.Banned"/>
@@ -200,7 +308,9 @@
       </tp:possible-errors>
     </method>
 
-    <signal name="NewChannels">
+    <signal name="NewChannels" tp:name-for-bindings="New_Channels">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
+
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>New channels have been created. The connection manager SHOULD emit
           a single signal for any group of closely related channels that are
@@ -230,8 +340,9 @@
       </arg>
     </signal>
 
-    <property name="Channels" type="a(oa{sv})" access="read"
-      tp:type="Channel_Details[]">
+    <property name="Channels" tp:name-for-bindings="Channels"
+      type="a(oa{sv})" access="read" tp:type="Channel_Details[]">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
       <tp:docstring>
         A list of all the channels which currently exist on this connection.
         Change notification is via the
@@ -240,7 +351,8 @@
       </tp:docstring>
     </property>
 
-    <signal name="ChannelClosed">
+    <signal name="ChannelClosed" tp:name-for-bindings="Channel_Closed">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
       <tp:docstring>
         Emitted when a channel is closed and hence disappears from the
         Channels property.
@@ -258,7 +370,8 @@
       </arg>
     </signal>
 
-    <tp:mapping name="Channel_Class">
+    <tp:mapping name="Channel_Class" array-name="Channel_Class_List">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Mapping representing a class of channels that can be requested
           from a connection manager, can be handled by a user interface,
@@ -289,6 +402,7 @@
 
     <tp:struct name="Requestable_Channel_Class"
       array-name="Requestable_Channel_Class_List">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Structure representing a class of channels that can be requested,
           identified by a set of properties that identify that class of
@@ -371,7 +485,9 @@
     </tp:struct>
 
     <property name="RequestableChannelClasses" access="read"
-      type="a(a{sv}as)" tp:type="Requestable_Channel_Class[]">
+      type="a(a{sv}as)" tp:type="Requestable_Channel_Class[]"
+      tp:name-for-bindings="Requestable_Channel_Classes">
+      <tp:added version="0.17.11">(as stable API)</tp:added>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>The classes of channel that are expected to be available on this
           connection, i.e. those for which
diff --git a/spec/Connection_Interface_Simple_Presence.xml b/spec/Connection_Interface_Simple_Presence.xml
index 56ac9d3..92614e0 100644
--- a/spec/Connection_Interface_Simple_Presence.xml
+++ b/spec/Connection_Interface_Simple_Presence.xml
@@ -55,8 +55,8 @@
             translation of "Available" from a menu.
             It is more informative for his English-speaking colleagues
             to see the English translation of "Available" (as localized
-            by their own clients) than to see the Welsh version (which they
-            don't understand anyway).
+            by their own clients) than to see "Ar Gael" (which they don't
+            understand anyway).
           </tp:rationale>
         </tp:docstring>
       </tp:member>
@@ -129,8 +129,8 @@
       </tp:member>
     </tp:mapping>
 
-    <method name="SetPresence">
-      <arg direction="in" name="status" type="s">
+    <method name="SetPresence" tp:name-for-bindings="Set_Presence">
+      <arg direction="in" name="Status" type="s">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>The string identifier of the desired status. Possible status
             identifiers are defined in the
@@ -153,7 +153,7 @@
           </tp:rationale>
         </tp:docstring>
       </arg>
-      <arg direction="in" name="status_message" type="s">
+      <arg direction="in" name="Status_Message" type="s">
         <tp:docstring>
           The status message associated with the current status.
         </tp:docstring>
@@ -189,13 +189,13 @@
       </tp:possible-errors>
     </method>
 
-    <method name="GetPresences">
-      <arg direction="in" name="contacts" type="au" tp:type="Contact_Handle[]">
+    <method name="GetPresences" tp:name-for-bindings="Get_Presences">
+      <arg direction="in" name="Contacts" type="au" tp:type="Contact_Handle[]">
         <tp:docstring>
           An array of the contacts whose presence should be obtained.
         </tp:docstring>
       </arg>
-      <arg direction="out" name="presence" type="a{u(uss)}"
+      <arg direction="out" name="Presence" type="a{u(uss)}"
         tp:type="Simple_Contact_Presences">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>Presence information in the same format as for the
@@ -228,7 +228,7 @@
       </tp:possible-errors>
     </method>
 
-    <property name="Statuses" access="read"
+    <property name="Statuses" tp:name-for-bindings="Statuses" access="read"
       type="a{s(ubb)}" tp:type="Simple_Status_Spec_Map">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>A dictionary where the keys are the presence statuses that the user
@@ -265,8 +265,8 @@
       </tp:docstring>
     </property>
 
-    <signal name="PresencesChanged">
-      <arg name="presence" type="a{u(uss)}" tp:type="Simple_Contact_Presences">
+    <signal name="PresencesChanged" tp:name-for-bindings="Presences_Changed">
+      <arg name="Presence" type="a{u(uss)}" tp:type="Simple_Contact_Presences">
         <tp:docstring>
           A dictionary of contact handles mapped to the status,
           presence type and status message.
diff --git a/spec/Connection_Manager.xml b/spec/Connection_Manager.xml
index 33f1ede..e3cfa8d 100644
--- a/spec/Connection_Manager.xml
+++ b/spec/Connection_Manager.xml
@@ -140,8 +140,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:flag>
     </tp:flags>
 
-    <method name="GetParameters">
-      <arg direction="in" name="proto" type="s" tp:type="Protocol">
+    <method name="GetParameters" tp:name-for-bindings="Get_Parameters">
+      <arg direction="in" name="Protocol" type="s" tp:type="Protocol">
         <tp:docstring>
           The required protocol name
         </tp:docstring>
@@ -164,7 +164,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <method name="ListProtocols">
+    <method name="ListProtocols" tp:name-for-bindings="List_Protocols">
       <arg direction="out" type="as" tp:type="Protocol[]">
         <tp:docstring>
           A array of string protocol identifiers supported by this manager
@@ -176,18 +176,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <signal name="NewConnection">
-      <arg name="bus_name" type="s" tp:type="DBus_Bus_Name">
+    <signal name="NewConnection" tp:name-for-bindings="New_Connection">
+      <arg name="Bus_Name" type="s" tp:type="DBus_Bus_Name">
         <tp:docstring>
           The D-Bus service where the connection object can be found
         </tp:docstring>
       </arg>
-      <arg name="object_path" type="o">
+      <arg name="Object_Path" type="o">
         <tp:docstring>
           The object path of the Connection object on this service
         </tp:docstring>
       </arg>
-      <arg name="proto" type="s" tp:type="Protocol">
+      <arg name="Protocol" type="s" tp:type="Protocol">
         <tp:docstring>
           The identifier for the protocol this connection uses
         </tp:docstring>
@@ -197,13 +197,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </signal>
 
-    <method name="RequestConnection">
-      <arg direction="in" name="proto" type="s" tp:type="Protocol">
+    <method name="RequestConnection" tp:name-for-bindings="Request_Connection">
+      <arg direction="in" name="Protocol" type="s" tp:type="Protocol">
         <tp:docstring>
           The protocol identifier
         </tp:docstring>
       </arg>
-      <arg direction="in" name="parameters" type="a{sv}"
+      <arg direction="in" name="Parameters" type="a{sv}"
         tp:type="String_Variant_Map">
         <tp:docstring>
           A dictionary mapping parameter name to the variant boxed value
@@ -220,39 +220,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </arg>
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
-        <p>Request a Connection object representing a given account on a given
-        protocol with the given parameters. The method returns the bus name
-        and the object path where the new Connection object can be found, which
-        should have the status of Connection_Status_Disconnected, to allow
-        signal handlers to be attached before connecting is started with the
-        Connect method.</p>
-
-        <p>In order to allow Connection objects to be discovered by new clients,
-        the object path and well-known bus name must be of the form
-        <code>/org/freedesktop/Telepathy/Connection/cmname/proto/account</code>
-        and
-        <code>org.freedesktop.Telepathy.Connection.cmname.proto.account</code>
-        where:</p>
-
-        <ul>
-          <li><em>cmname</em> is the same connection manager name that appears
-            in the connection manager's object path and well-known bus name</li>
-          <li><em>proto</em> is the protocol name as seen in
-            ListProtocols, but with "-" replaced with "_" to get a valid
-            object path/bus name</li>
-          <li><em>account</em> SHOULD be a series of elements formed such that
-            any valid distinct connection instance on this protocol has a
-            distinct name; this might be formed by including the server name
-            followed by the user name (escaped via some suitable mechanism like
-            telepathy-glib's tp_escape_as_identifier() function to preserve
-            uniqueness), or on protocols where connecting multiple times
-            is permissable, a per-connection identifier might be necessary to
-            ensure uniqueness</li>
-        </ul>
-
-        <p>Clients MUST NOT attempt to parse the <em>account</em> part of the
-          bus name. Connection managers MAY use any unique string for this
-          part.</p>
+        <p>Request a
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>
+          object representing a given account on a given
+          protocol with the given parameters. The method returns the bus name
+          and the object path where the new Connection object can be found,
+          which should have the status of Connection_Status_Disconnected, to
+          allow signal handlers to be attached before connecting is started
+          with the
+          <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">Connect</tp:dbus-ref>
+          method.</p>
 
         <p>The parameters which must and may be provided in the parameters
         dictionary can be discovered with the GetParameters method. These
@@ -320,7 +297,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:possible-errors>
     </method>
 
-    <property name="Interfaces" type="as" access="read">
+    <property name="Interfaces" tp:name-for-bindings="Interfaces"
+      type="as" access="read">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>A list of the extra interfaces provided by this connection manager
           (i.e. extra functionality that can be provided even before a
diff --git a/spec/Media_Session_Handler.xml b/spec/Media_Session_Handler.xml
index b4e9ffb..a6cf519 100644
--- a/spec/Media_Session_Handler.xml
+++ b/spec/Media_Session_Handler.xml
@@ -19,9 +19,10 @@ License along with this library; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
   </tp:license>
   <interface name="org.freedesktop.Telepathy.Media.SessionHandler">
-    <method name="Error">
-      <arg direction="in" name="errno" type="u"/>
-      <arg direction="in" name="message" type="s"/>
+    <method name="Error" tp:name-for-bindings="Error">
+      <arg direction="in" name="Error_Code" type="u"
+        tp:type="Media_Stream_Error"/>
+      <arg direction="in" name="Message" type="s"/>
       <tp:docstring>
         THIS METHOD IS DEPRECATED AND SHOULD NOT BE USED. Instead the Error
         function should be used on the relevant MediaStreamHandler objects.
@@ -31,24 +32,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         channel for each stream within the session.
       </tp:docstring>
     </method>
-    <signal name="NewStreamHandler">
-      <arg name="stream_handler" type="o">
+    <signal name="NewStreamHandler" tp:name-for-bindings="New_Stream_Handler">
+      <arg name="Stream_Handler" type="o">
         <tp:docstring>
           An object path to a new MediaStreamHandler
         </tp:docstring>
       </arg>
-      <arg name="id" type="u">
+      <arg name="ID" type="u">
         <tp:docstring>
           The unique ID of the new stream
         </tp:docstring>
       </arg>
-      <arg name="media_type" type="u" tp:type="Media_Stream_Type">
+      <arg name="Media_Type" type="u" tp:type="Media_Stream_Type">
         <tp:docstring>
           Enum for type of media that this stream should handle
           (a value from MediaStreamType)
         </tp:docstring>
       </arg>
-      <arg name="direction" type="u" tp:type="Media_Stream_Direction">
+      <arg name="Direction" type="u" tp:type="Media_Stream_Direction">
         <tp:docstring>
           Enum for direction of this stream (a value from
           MediaStreamDirection)
@@ -59,7 +60,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         session.
       </tp:docstring>
     </signal>
-    <method name="Ready">
+    <method name="Ready" tp:name-for-bindings="Ready">
       <tp:docstring>
         Inform the connection manager that a client is ready to handle
         this session handler (i.e. that it has connected to the
diff --git a/spec/Media_Stream_Handler.xml b/spec/Media_Stream_Handler.xml
index 7d69463..e476479 100644
--- a/spec/Media_Stream_Handler.xml
+++ b/spec/Media_Stream_Handler.xml
@@ -52,13 +52,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="a{ss}" name="Parameters" tp:type="String_String_Map"/>
     </tp:struct>
 
-    <signal name="AddRemoteCandidate">
-      <arg name="candidate_id" type="s">
+    <signal name="AddRemoteCandidate"
+      tp:name-for-bindings="Add_Remote_Candidate">
+      <arg name="Candidate_ID" type="s">
         <tp:docstring>
           String identifier for this candidate
         </tp:docstring>
       </arg>
-      <arg name="transports" type="a(usuussduss)"
+      <arg name="Transports" type="a(usuussduss)"
         tp:type="Media_Stream_Handler_Transport[]">
         <tp:docstring>
           Array of transports for this candidate with fields,
@@ -70,25 +71,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         client of a new remote candidate.
       </tp:docstring>
     </signal>
-    <signal name="Close">
+    <signal name="Close" tp:name-for-bindings="Close">
       <tp:docstring>
         Signal emitted when the connection manager wishes the stream to be
         closed.
       </tp:docstring>
     </signal>
-    <method name="CodecChoice">
-      <arg direction="in" name="codec_id" type="u"/>
+    <method name="CodecChoice" tp:name-for-bindings="Codec_Choice">
+      <arg direction="in" name="Codec_ID" type="u"/>
       <tp:docstring>
         Inform the connection manager of the current codec choice.
       </tp:docstring>
     </method>
-    <method name="Error">
-      <arg direction="in" name="errno" type="u" tp:type="Media_Stream_Error">
+    <method name="Error" tp:name-for-bindings="Error">
+      <arg direction="in" name="Error_Code" type="u" tp:type="Media_Stream_Error">
         <tp:docstring>
           ID of error, from the MediaStreamError enumeration
         </tp:docstring>
       </arg>
-      <arg direction="in" name="message" type="s">
+      <arg direction="in" name="Message" type="s">
         <tp:docstring>
           String describing the error
         </tp:docstring>
@@ -111,15 +112,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </tp:enumvalue>
     </tp:enum>
-    <method name="NativeCandidatesPrepared">
+    <method name="NativeCandidatesPrepared"
+      tp:name-for-bindings="Native_Candidates_Prepared">
       <tp:docstring>
         Informs the connection manager that all possible native candisates
         have been discovered for the moment.
       </tp:docstring>
     </method>
-    <method name="NewActiveCandidatePair">
-      <arg direction="in" name="native_candidate_id" type="s"/>
-      <arg direction="in" name="remote_candidate_id" type="s"/>
+    <method name="NewActiveCandidatePair"
+      tp:name-for-bindings="New_Active_Candidate_Pair">
+      <arg direction="in" name="Native_Candidate_ID" type="s"/>
+      <arg direction="in" name="Remote_Candidate_ID" type="s"/>
       <tp:docstring>
         Informs the connection manager that a valid candidate pair
         has been discovered and streaming is in progress.
@@ -133,13 +136,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         <tp:docstring>TCP (Transmission Control Protocol)</tp:docstring>
       </tp:enumvalue>
     </tp:enum>
-    <method name="NewNativeCandidate">
-      <arg direction="in" name="candidate_id" type="s">
+    <method name="NewNativeCandidate"
+      tp:name-for-bindings="New_Native_Candidate">
+      <arg direction="in" name="Candidate_ID" type="s">
         <tp:docstring>
           String identifier for this candidate
         </tp:docstring>
       </arg>
-      <arg direction="in" name="transports" type="a(usuussduss)"
+      <arg direction="in" name="Transports" type="a(usuussduss)"
         tp:type="Media_Stream_Handler_Transport[]">
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           Array of transports for this candidate, with fields:
@@ -180,8 +184,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </tp:enumvalue>
     </tp:enum>
-    <method name="Ready">
-      <arg direction="in" name="codecs" type="a(usuuua{ss})"
+    <method name="Ready" tp:name-for-bindings="Ready">
+      <arg direction="in" name="Codecs" type="a(usuuua{ss})"
         tp:type="Media_Stream_Handler_Codec[]">
         <tp:docstring>
           As for SupportedCodecs.
@@ -193,8 +197,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         codecs.
       </tp:docstring>
     </method>
-    <method name="SetLocalCodecs">
-      <arg name="codecs" type="a(usuuua{ss})" direction="in"
+    <method name="SetLocalCodecs" tp:name-for-bindings="Set_Local_Codecs">
+      <arg name="Codecs" type="a(usuuua{ss})" direction="in"
         tp:type="Media_Stream_Handler_Codec[]">
         <tp:docstring>Codecs in the same format as for
           SupportedCodecs, which have the same semantics as the
@@ -206,8 +210,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         knowing what local codecs are available.
       </tp:docstring>
     </method>
-    <signal name="RemoveRemoteCandidate">
-      <arg name="candidate_id" type="s">
+    <signal name="RemoveRemoteCandidate"
+      tp:name-for-bindings="Remove_Remote_Candidate">
+      <arg name="Candidate_ID" type="s">
         <tp:docstring>
           String identifier for remote candidate to drop
         </tp:docstring>
@@ -218,17 +223,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         candidate.
       </tp:docstring>
     </signal>
-    <signal name="SetActiveCandidatePair">
-      <arg name="native_candidate_id" type="s"/>
-      <arg name="remote_candidate_id" type="s"/>
+    <signal name="SetActiveCandidatePair"
+      tp:name-for-bindings="Set_Active_Candidate_Pair">
+      <arg name="Native_Candidate_ID" type="s"/>
+      <arg name="Remote_Candidate_ID" type="s"/>
       <tp:docstring>
         Emitted by the connection manager to inform the client that a
         valid candidate pair has been discovered by the remote end
         and streaming is in progress.
       </tp:docstring>
     </signal>
-    <signal name="SetRemoteCandidateList">
-      <arg name="remote_candidates" type="a(sa(usuussduss))"
+    <signal name="SetRemoteCandidateList"
+      tp:name-for-bindings="Set_Remote_Candidate_List">
+      <arg name="Remote_Candidates" type="a(sa(usuussduss))"
         tp:type="Media_Stream_Handler_Candidate[]">
         <tp:docstring>
         A list of candidate id and a list of transports
@@ -240,8 +247,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         client of all the available remote candidates at once.
       </tp:docstring>
     </signal>
-    <signal name="SetRemoteCodecs">
-      <arg name="codecs" type="a(usuuua{ss})"
+    <signal name="SetRemoteCodecs" tp:name-for-bindings="Set_Remote_Codecs">
+      <arg name="Codecs" type="a(usuuua{ss})"
         tp:type="Media_Stream_Handler_Codec[]">
         <tp:docstring>As for SupportedCodecs</tp:docstring>
       </arg>
@@ -250,22 +257,23 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         client of the codecs supported by the remote end.
       </tp:docstring>
     </signal>
-    <signal name="SetStreamPlaying">
-      <arg name="playing" type="b"/>
+    <signal name="SetStreamPlaying" tp:name-for-bindings="Set_Stream_Playing">
+      <arg name="Playing" type="b"/>
       <tp:docstring>
         Signal emitted when the connection manager wishes to set the
         stream playing or stopped.
       </tp:docstring>
     </signal>
-    <signal name="SetStreamSending">
-      <arg name="sending" type="b"/>
+    <signal name="SetStreamSending" tp:name-for-bindings="Set_Stream_Sending">
+      <arg name="Sending" type="b"/>
       <tp:docstring>
         Signal emitted when the connection manager wishes to set whether or not
         the stream sends to the remote end.
       </tp:docstring>
     </signal>
-    <signal name="StartTelephonyEvent">
-      <arg name="event" type="y">
+    <signal name="StartTelephonyEvent"
+      tp:name-for-bindings="Start_Telephony_Event">
+      <arg name="Event" type="y">
         <tp:docstring>
           A telephony event code as defined by RFC 4733.
         </tp:docstring>
@@ -275,21 +283,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         over this stream until StopTelephonyEvent is called.
       </tp:docstring>
     </signal>
-    <signal name="StopTelephonyEvent">
+    <signal name="StopTelephonyEvent"
+      tp:name-for-bindings="Stop_Telephony_Event">
       <tp:docstring>
         Request that any ongoing telephony events (as defined by RFC 4733)
         being transmitted over this stream are stopped.
       </tp:docstring>
     </signal>
-    <method name="StreamState">
-      <arg direction="in" name="state" type="u" tp:type="Media_Stream_State"/>
+    <method name="StreamState" tp:name-for-bindings="Stream_State">
+      <arg direction="in" name="State" type="u" tp:type="Media_Stream_State"/>
       <tp:docstring>
         Informs the connection manager of the stream's current state, as
         as specified in Channel.Type.StreamedMedia::ListStreams.
       </tp:docstring>
     </method>
-    <method name="SupportedCodecs">
-      <arg direction="in" name="codecs" type="a(usuuua{ss})"
+    <method name="SupportedCodecs" tp:name-for-bindings="Supported_Codecs">
+      <arg direction="in" name="Codecs" type="a(usuuua{ss})"
         tp:type="Media_Stream_Handler_Codec[]">
         <tp:docstring>
           List of codec info structures, each containing:
@@ -312,7 +321,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </tp:docstring>
     </method>
 
-    <signal name="SetStreamHeld">
+    <signal name="SetStreamHeld" tp:name-for-bindings="Set_Stream_Held">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Emitted when the connection manager wishes to place the stream on
           hold (so the streaming client should free hardware or software
@@ -347,7 +356,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </arg>
     </signal>
 
-    <method name="HoldState">
+    <method name="HoldState" tp:name-for-bindings="Hold_State">
       <tp:docstring>
         Notify the connection manager that the stream's hold state has
         been changed successfully in response to SetStreamHeld.
@@ -360,7 +369,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       </arg>
     </method>
 
-    <method name="UnholdFailure">
+    <method name="UnholdFailure" tp:name-for-bindings="Unhold_Failure">
       <tp:docstring>
         Notify the connection manager that an attempt to reacquire the
         necessary hardware or software resources to unhold the stream,
diff --git a/spec/Properties_Interface.xml b/spec/Properties_Interface.xml
index fa78f20..2773d75 100644
--- a/spec/Properties_Interface.xml
+++ b/spec/Properties_Interface.xml
@@ -25,8 +25,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         flags) representing a property, as returned by ListProperties on the
         Properties interface.</tp:docstring>
       <tp:member type="u" name="Property_ID"/>
-      <tp:member type="s" name="name"/>
-      <tp:member type="s" tp:type="DBus_Signature" name="signature"/>
+      <tp:member type="s" name="Name"/>
+      <tp:member type="s" tp:type="DBus_Signature" name="Signature"/>
       <tp:member type="u" tp:type="Property_Flags" name="Flags"/>
     </tp:struct>
 
@@ -54,12 +54,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
       <tp:member type="v" name="Value"/>
     </tp:struct>
 
-    <method name="GetProperties">
+    <method name="GetProperties" tp:name-for-bindings="Get_Properties">
       <tp:docstring>
         Returns an array of (identifier, value) pairs containing the current
         values of the given properties.
       </tp:docstring>
-      <arg direction="in" name="properties" type="au" tp:type="Property_ID[]">
+      <arg direction="in" name="Properties" type="au" tp:type="Property_ID[]">
         <tp:docstring>An array of property identifiers</tp:docstring>
       </arg>
       <arg direction="out" type="a(uv)" tp:type="Property_Value[]">
@@ -86,7 +86,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:error>
       </tp:possible-errors>
     </method>
-    <method name="ListProperties">
+    <method name="ListProperties" tp:name-for-bindings="List_Properties">
       <tp:docstring>
         Returns a dictionary of the properties available on this channel.
       </tp:docstring>
@@ -104,11 +104,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </arg>
     </method>
-    <signal name="PropertiesChanged">
+    <signal name="PropertiesChanged" tp:name-for-bindings="Properties_Changed">
       <tp:docstring>
         Emitted when the value of readable properties has changed.
       </tp:docstring>
-      <arg name="properties" type="a(uv)" tp:type="Property_Value[]">
+      <arg name="Properties" type="a(uv)" tp:type="Property_Value[]">
         <!-- XXX: if we're ever breaking API compatibility, make this a{uv} -->
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>An array of structs containing:</p>
@@ -121,11 +121,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </arg>
     </signal>
-    <signal name="PropertyFlagsChanged">
+    <signal name="PropertyFlagsChanged"
+      tp:name-for-bindings="Property_Flags_Changed">
       <tp:docstring>
         Emitted when the flags of some room properties have changed.
       </tp:docstring>
-      <arg name="properties" type="a(uu)" tp:type="Property_Flags_Change[]">
+      <arg name="Properties" type="a(uu)" tp:type="Property_Flags_Change[]">
         <!-- XXX: if we're ever breaking API compatibility, make this a{uu} -->
         <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
           <p>An array of structs containing:</p>
@@ -138,7 +139,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         </tp:docstring>
       </arg>
     </signal>
-    <method name="SetProperties">
+    <method name="SetProperties" tp:name-for-bindings="Set_Properties">
       <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
         <p>Takes an array of (identifier, value) pairs containing desired
           values to set the given properties. In the case of any errors, no
@@ -151,7 +152,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
         are invalid, InvalidArgument will be returned.</p>
       </tp:docstring>
 
-      <arg direction="in" name="properties" type="a(uv)"
+      <arg direction="in" name="Properties" type="a(uv)"
         tp:type="Property_Value[]">
         <!-- XXX: if we're ever breaking API compatibility, make this a{uv} -->
       <tp:docstring>
diff --git a/spec/all.xml b/spec/all.xml
index eda2e01..6f06f72 100644
--- a/spec/all.xml
+++ b/spec/all.xml
@@ -3,7 +3,7 @@
   xmlns:xi="http://www.w3.org/2001/XInclude">
 
 <tp:title>Telepathy D-Bus Interface Specification</tp:title>
-<tp:version>0.17.9</tp:version>
+<tp:version>0.17.13</tp:version>
 
 <tp:copyright>Copyright (C) 2005-2008 Collabora Limited</tp:copyright>
 <tp:copyright>Copyright (C) 2005-2008 Nokia Corporation</tp:copyright>
@@ -31,14 +31,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 <xi:include href="Connection_Interface_Avatars.xml"/>
 <xi:include href="Connection_Interface_Capabilities.xml"/>
 <xi:include href="Connection_Interface_Contacts.xml"/>
-<!-- Never implemented, is a terrible API
-<xi:include href="Connection_Interface_Contact_Info.xml"/> -->
-<!-- Never implemented, insufficient (needs conditions)
-<xi:include href="Connection_Interface_Forwarding.xml"/> -->
 <xi:include href="Connection_Interface_Simple_Presence.xml"/>
 <xi:include href="Connection_Interface_Presence.xml"/>
-<!-- Never implemented, vague
-<xi:include href="Connection_Interface_Privacy.xml"/> -->
 <xi:include href="Connection_Interface_Renaming.xml"/>
 <xi:include href="Connection_Interface_Requests.xml"/>
 
@@ -47,8 +41,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 <xi:include href="Channel.xml"/>
 <xi:include href="Channel_Future.xml"/>
 <xi:include href="Channel_Type_Contact_List.xml"/>
-<!-- Never implemented, can't be implemented with current dbus-glib, vague
-<xi:include href="Channel_Type_Contact_Search.xml"/> -->
 <xi:include href="Channel_Type_Streamed_Media.xml"/>
 <xi:include href="Channel_Type_Room_List.xml"/>
 <xi:include href="Channel_Type_Text.xml"/>
@@ -58,13 +50,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 <xi:include href="Channel_Interface_Call_State.xml"/>
 <xi:include href="Channel_Interface_Chat_State.xml"/>
 <xi:include href="Channel_Interface_Delivery_Reporting.xml"/>
+<xi:include href="Channel_Interface_Destroyable.xml"/>
 <xi:include href="Channel_Interface_DTMF.xml"/>
 <xi:include href="Channel_Interface_Group.xml"/>
 <xi:include href="Channel_Interface_Hold.xml"/>
 <xi:include href="Channel_Interface_HTML.xml"/>
 <xi:include href="Channel_Interface_Password.xml"/>
-<!-- Causes havoc, never implemented, unclear requirements
-<xi:include href="Channel_Interface_Transfer.xml"/> -->
 <xi:include href="Channel_Interface_Media_Signalling.xml"/>
 <xi:include href="Channel_Interface_Messages.xml"/>
 
@@ -75,10 +66,32 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</
 
 <xi:include href="Account_Manager.xml"/>
 <xi:include href="Account.xml"/>
+<xi:include href="Account_Interface_Avatar.xml"/>
+
+<xi:include href="Channel_Dispatcher.xml"/>
+<xi:include href="Channel_Dispatcher_Interface_Operation_List.xml"/>
+<xi:include href="Channel_Dispatch_Operation.xml"/>
+<xi:include href="Channel_Request.xml"/>
+
+<xi:include href="Client.xml"/>
+<xi:include href="Client_Observer.xml"/>
+<xi:include href="Client_Approver.xml"/>
+<xi:include href="Client_Handler.xml"/>
 
 <xi:include href="Channel_Handler.xml"/>
 
 <xi:include href="errors.xml"/>
 <xi:include href="generic-types.xml"/>
 
+<!-- Never implemented, is a terrible API
+<xi:include href="Connection_Interface_Contact_Info.xml"/> -->
+<!-- Never implemented, insufficient (needs conditions)
+<xi:include href="Connection_Interface_Forwarding.xml"/> -->
+<!-- Never implemented, vague
+<xi:include href="Connection_Interface_Privacy.xml"/> -->
+<!-- Never implemented, can't be implemented with current dbus-glib, vague
+<xi:include href="Channel_Type_Contact_Search.xml"/> -->
+<!-- Causes havoc, never implemented, unclear requirements
+<xi:include href="Channel_Interface_Transfer.xml"/> -->
+
 </tp:spec>
diff --git a/spec/errors.xml b/spec/errors.xml
index 81ab440..679e3f4 100644
--- a/spec/errors.xml
+++ b/spec/errors.xml
@@ -1,5 +1,8 @@
 <?xml version="1.0" ?>
 <tp:errors xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" namespace="org.freedesktop.Telepathy.Error">
+  <!-- Don't re-order these errors until fd.o #17588 is fixed, or you will
+       break telepathy-glib's ABI.
+    -->
   <tp:error name="Network Error">
     <tp:docstring>
     Raised when there is an error reading from or writing to the network.
@@ -60,8 +63,22 @@
     </tp:docstring>
   </tp:error>
 
-  <tp:copyright>Copyright (C) 2005, 2006, 2007 Collabora Limited</tp:copyright>
-  <tp:copyright>Copyright (C) 2005, 2006, 2007 Nokia Corporation</tp:copyright>
+  <tp:error name="Not Yours">
+    <tp:docstring>
+      The requested channel or other resource already exists, and another
+      client is responsible for it
+    </tp:docstring>
+  </tp:error>
+
+  <tp:error name="Cancelled">
+    <tp:docstring>
+      Raised by an ongoing request if it is cancelled by user request before
+      it has completed.
+    </tp:docstring>
+  </tp:error>
+
+  <tp:copyright>Copyright (C) 2005-2008 Collabora Limited</tp:copyright>
+  <tp:copyright>Copyright (C) 2005-2008 Nokia Corporation</tp:copyright>
   <tp:license xmlns="http://www.w3.org/1999/xhtml">
 <p>This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
diff --git a/spec/generic-types.xml b/spec/generic-types.xml
index c0a000d..9d8501d 100644
--- a/spec/generic-types.xml
+++ b/spec/generic-types.xml
@@ -2,7 +2,19 @@
   xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
 
   <tp:simple-type name="Unix_Timestamp" type="u">
-    <tp:docstring>An unsigned 32-bit integer representing time since 1970</tp:docstring>
+    <tp:docstring>An unsigned 32-bit integer representing time as the number
+      of seconds elapsed since the Unix epoch
+      (1970-01-01T00:00:00Z)</tp:docstring>
+  </tp:simple-type>
+
+  <tp:simple-type name="Unix_Timestamp64" type="t">
+    <tp:docstring>An unsigned 64-bit integer representing time as the number
+      of seconds elapsed since the Unix epoch
+      (1970-01-01T00:00:00Z)</tp:docstring>
+
+    <tp:rationale>The Text interface is the only user of Unix_Timestamp so
+      far, and we'd like to be Y2038 compatible in future
+      interfaces.</tp:rationale>
   </tp:simple-type>
 
   <tp:simple-type name="DBus_Bus_Name" type="s">
@@ -11,6 +23,11 @@
       like ":1.123"</tp:docstring>
   </tp:simple-type>
 
+  <tp:simple-type name="DBus_Well_Known_Name" type="s">
+    <tp:docstring>A string representing a D-Bus well-known
+      name like "org.freedesktop.Telepathy.MissionControl".</tp:docstring>
+  </tp:simple-type>
+
   <tp:simple-type name="DBus_Unique_Name" type="s">
     <tp:docstring>A string representing a D-Bus unique name, such as
       ":1.123"</tp:docstring>
@@ -24,6 +41,12 @@
       "org.freedesktop.DBus.Peer".</tp:docstring>
   </tp:simple-type>
 
+  <tp:simple-type name="DBus_Error_Name" type="s">
+    <tp:docstring>An ASCII string representing a D-Bus error. This is
+      syntactically the same as a <tp:type>DBus_Interface</tp:type>, but the
+      meaning is different.</tp:docstring>
+  </tp:simple-type>
+
   <tp:simple-type name="DBus_Signature" type="s">
     <tp:docstring>A string representing a D-Bus signature
       (the 'g' type isn't used because of poor interoperability, particularly
@@ -44,7 +67,8 @@
       "org.freedesktop.DBus.Peer.Ping".</tp:docstring>
   </tp:simple-type>
 
-  <tp:mapping name="Qualified_Property_Value_Map">
+  <tp:mapping name="Qualified_Property_Value_Map"
+    array-name="Qualified_Property_Value_Map_List">
     <tp:docstring>A mapping from strings representing D-Bus
       properties (by their namespaced names) to their values.</tp:docstring>
     <tp:member type="s" name="Key" tp:type="DBus_Qualified_Member">
-- 
1.5.6.5



More information about the Telepathy-commits mailing list