diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 48ba68a..edfa0a9 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -153,6 +153,123 @@
     <event name="release"/>
   </interface>
 
+
+  <interface name="wl_transfer" version="1">
+    <!-- Indicate that the client can accept the given mime-type, or
+         NULL for not accepted.  Use for feedback during drag and
+         drop. -->
+    <request name="accept">
+      <arg name="time" type="uint"/>
+      <arg name="type" type="string"/>
+    </request>
+
+    <request name="receive">
+      <arg name="mime_type" type="string"/>
+      <arg name="fd" type="fd"/>
+    </request>
+
+    <!-- Indicate successful copy/transfer of the data.  Redundant?
+         accept+destroy should enough, for both dnd and
+         selections. -->
+    <request name="take" type="destructor"/>
+
+    <request name="destroy" type="destructor"/>
+
+    <!-- Sent immediately after creating the wl_transfer object.  One
+         event per offered mime type.  Use sync callback to mark end
+         of list. -->
+    <event name="offer">
+      <arg name="type" type="string"/>
+    </event>
+  </interface>
+
+  <interface name="wl_transfer_source" version="1">
+    <!-- Add an offered mime type.  Can be called several times to
+         offer multiple types. -->
+    <request name="offer">
+      <arg name="type" type="string"/>
+    </request>
+
+    <!-- Destroy the selection. -->
+    <request name="destroy" type="destructor"/>
+
+    <!-- Sent when a target accepts pointer_focus or motion events.
+         If a target does not accept any of the offered types, type is
+         NULL -->
+    <event name="target">
+      <arg name="mime_type" type="string"/>
+    </event>
+
+    <!-- Request for data from another client.  Send the data in the
+         specified mime-type over the passed fd, the close it. -->
+    <event name="send">
+      <arg name="mime_type" type="string"/>
+      <arg name="fd" type="fd"/>
+    </event>
+
+    <!-- Another selection became active. -->
+    <event name="cancelled"/>
+  </interface>
+
+  <interface name="wl_transfer_device" version="1">
+    <request name="start_drag">
+      <arg name="source" type="object" interface="wl_transfer_source"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="time" type="uint"/>
+    </request>
+
+    <request name="attach">
+      <arg name="time" type="uint"/>
+      <arg name="buffer" type="object" interface="wl_buffer"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+    </request>
+
+    <request name="set_selection">
+      <arg name="source" type="object" interface="wl_transfer_source"/>
+      <arg name="time" type="uint"/>
+    </request>
+
+    <request name="get_drag_transfer">
+      <arg name="id" type="new_id" interface="wl_transfer"/>
+    </request>
+
+    <request name="get_selection_transfer">
+      <arg name="id" type="new_id" interface="wl_transfer"/>
+    </request>
+
+    <event name="pointer_focus">
+      <arg name="time" type="uint"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+    </event>
+
+    <event name="motion">
+      <arg name="time" type="uint"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+    </event>
+
+    <event name="drop"/>
+
+    <event name="selection">
+      <!-- PRIMARY, SECONDARY, ORLY?  Do we want this?-->
+      <arg name="name" type="string"/>
+    </event>
+  </interface>
+
+  <interface name="wl_transfer_manager" version="1">
+    <request name="create_transfer_source">
+      <arg name="id" type="new_id" interface="wl_transfer_source"/>
+    </request>
+
+    <request name="get_transfer_device">
+      <arg name="id" type="new_id" interface="wl_transfer_device"/>
+      <arg name="input_device" type="object" interface="wl_input_device"/>
+    </request>
+  </interface>
+
   <interface name="wl_shell" version="1">
     <request name="move">
       <arg name="surface" type="object" interface="wl_surface"/>
