Important for 1.2
===

 - System bus activation

 - Windows port

Important for 1.0 GLib Bindings
===

 - Test point-to-point mode

 - Add support for getting sender

 - format_version in the object info doesn't look like it's handled correctly. The creator
   of the object info should specify some fixed number per struct version; the library
   should handle only specific numbers it knows about. There's no assumption that all 
   numbers >= the given one are compatible. The idea is that new versions of the lib
   can offer totally different object info structs, but old versions
   keep working.

Important for 1.0 Python bindings
===

 - Hammer down API

 - Fix removing of signals from the match tree

 - Fix refcounting and userdata lifecycles

 - Write a generic mainloop

Might as Well for 1.0
===

 - protocol version in each message is pretty silly

Can Be Post 1.0
===

 - revamp dbus-launch a bit,
   see http://lists.freedesktop.org/archives/dbus/2006-October/005906.html
   for some thoughts.

 - clean up the creds issue on *BSD's in dbus/dbus-sysdeps-unix.c.
   They should work as is but we need to rearange it to make it
   clearer which method is being used.  configure.in should
   be fixed up to make that decition.

 - _dbus_connection_unref_unlocked() is essentially always broken because
   the connection finalizer calls non-unlocked functions. One fix is to make 
   the finalizer run with the lock held, but since it calls out to the app that may 
   be pretty broken. More likely all the uses of unref_unlocked are just wrong.

 - if the GUID is obtained only during authentication, not in the address, 
   we could still share the connection

 - Allow a dbus_g_proxy_to_string()/g_object_to_string() that
   would convert the proxy to an "IOR" and dbus_g_proxy_from_string()
   that would decode; using these, dbus-glib users could avoid
   DBusConnection entirely. Of course the same applies to other kinds
   of binding. This would use dbus_connection_open()'s connection-sharing
   feature to avoid massive proliferation of connections.

 - DBusWatchList/TimeoutList duplicate a lot of code, as do
   protected_change_watch/protected_change_timeout in dbus-connection.c
   and dbus-server.c. This could all be mopped up, cut-and-paste 
   fixed, code size reduced.

 - change .service files to allow Names=list in addition to Name=string

 - The message bus internal code still says "service" for 
   "name", "base service" for "unique name", "activate" for 
   "start"; would be nice to clean up.

 - Property list feature on message bus (list of properties associated 
   with a connection). May also include message matching rules 
   that involve the properties of the source or destination
   connection.

 - Disconnecting the remote end on invalid UTF-8 is probably not a good 
   idea. The definition of "valid" is slightly fuzzy. I think it might 
   be better to just silently "fix" the UTF-8, or perhaps return an error.

 - build and install the Doxygen manual in Makefile when --enable-docs

 - if you send the same message to multiple connections, the serial number 
   will only be right for one of them. Probably need to just write() the serial 
   number, rather than putting it in the DBusMessage, or something.

 - perhaps the bus driver should have properties that reflect attributes
   of the session, such as hostname, architecture, operating system, 
   etc. Could be useful for code that wants to special-case behavior 
   for a particular host or class of hosts, for example.

 - currently the security policy stuff for messages to/from 
   the bus driver is kind of strange; basically it's hardcoded that 
   you can always talk to the driver, but the default config file 
   has rules for it anyway, or something. it's conceptually 
   screwy at the moment.

 - when making a method call, if the call serial were globally unique,
   we could forward the call serial along with any method calls made
   as a result of the first method call, and allow reentrancy that was
   strictly part of the call stack of said method call. But I don't
   really see how to do this without making the user pass around the
   call serial to all method calls all the time, or disallowing 
   async calls.

   If done post 1.0 will probably be an optional/ugly-API type 
   of thing.

 - I don't want to introduce DBusObject, but refcounting and object
   data could still be factored out into an internal "base class" 
   perhaps.

 - Keep convenience wrappers in sync with bus methods

 - document the auth protocol as a set of states and transitions, and
   then reimplement it in those terms

 - recursive dispatch, see dbus_connection_dispatch()

 - do we need per-display activation; if so I'd like to do this by setting a
   "display ID" property on screen 0, with a GUID, and keying activation by 
   said GUID. Otherwise you get all kinds of unrobust
   string/hostname-based mess. per-screen is then done by appending screen number
   to the display. If displays have a deterministic ID like this, you can 
   do per-display by simply including GUID in the service name.

 - optimization and profiling!

 - Match rules aren't in the spec (probably a lot of methods on the bus
   are not)

 - the "break loader" and valid/invalid message tests are all disabled;
   they need to be fixed and re-enabled with the new message args stuff.
   I think I want to drop the .message files thing and just have code
   that generates messages, more like the tests for
   dbus-marshal-recursive.c (this is mostly done now, just needs some
   cleanup)

 - just before 1.0, try a HAVE_INT64=0 build and be sure it runs

 - Windows port needs recursive mutexes

Should Be Post 1.0
===

 - look into supporting the concept of a "connection" generically
   (what does this TODO item mean?)

 - test/name-test should be named test/with-bus or something like that


