This is a more or less incomplete list of more or less independant tasks that
would be nice to have done for the first stable release.

Performance (Some ideas to improve performance, profile to verify!):
  * callgrind suggests g_object_new requires much time, especially for objects
    that are often instantianted, such as InfAdoptedRequest,
    InfTextDefaultInsertOperation and InfTextDefaultDeleteOperation. Maybe we
    can improve this by not initializing the member variables by properties,
    but by setting them after the g_object_new() call.
  * Move state vector helper functions in algorithm to InfAdoptedStateVector,
    with a better O(n) implementation.
  * Cache request.vector[request.user] in every request, this seems to be
    used pretty often.
  * Optionally compile with
    - G_DISABLE_CAST_CHECKS
    - G_DISABLE_ASSERT
    - G_DISABLE_CHECKS
    defined.

Others:

 * Split InfXmppConnection (XMPP)
   - InfXmppConnection: XMPP core implementation
   - InfJabberConnection: Connection to jabber server, managing roster, presence, etc. Derives from InfXmppConnection, not used on server side
   - InfRawXmppConnection: InfXmlConnection implementation by sending raw messages to XMPP server (Derive from InfXmppConnection, make XMPP server create these connections (unsure: rather add a vfunc and subclass InfXmppServer?))
   - InfJabberUserConnection: Implements InfXmlConnection by sending stuff to a particular Jabber user (owns InfJabberConnection)
   - InfJabberDiscovery (owns InfJabberConnection)
 * Make InfTextChunk reference-counted, or implement copy-on-write semantics. It is currently copied way too often. (InfText)
 * Implement inf_text_chunk_insert_substring, and make use in InfTextDeleteOperation (InfText)
 * Add a set_caret paramater to insert_text and erase_text of InfTextBuffer and derive a InfTextRequest with a "set-caret" flag.
 * InfTextEncoding boxed type
 * Create a pseudo XML connection implementation, re-enable INF_IS_XML_CONNECTION check in inf_net_object_received
 * Add accessor API in InfGtkBrowserModel, so InfGtkBrowserView does not need to call gtk_tree_model_get all the time (which unnecssarily dups/refs)
 * Add append() and clear() virtual methods to InfTextBuffer. These may not have to be implemented since a default implementation can be used if no special one is provided, but it could help to speed up special operations. Make use in infd_note_plugin_text.
 * Make InfcExploreRequest derive from InfcNodeRequest. This saves some code duplication in InfcBrowser.
 * Change the storage interface to be asynchronous
 * Replace the various begin-foo signals in InfcBrowser by a begin-operation
   with iter and request as parameters, detailed on the operation type
   (add-node, remove-node, subscribe-session etc.). Similar with the
   infc_browser_iter_get_foo_request functions (replace by a generic
   infc_browser_iter_get_pending_request function).
 * Make InfLocalPublisher take a InfdXmlServer instead of a port number. Maybe
   even rename to InfPublisher, with InfDiscoveryAvahi assuming an
   InfdXmppServer. Or, consider simply removing the interface, and require
   people to use InfDiscoveryAvahi directly (check how well that works with
   InfdServerPool).
 * Assert in infc_explore_request_progress/_finish instead of setting error,
   check error condition in InfcBrowser.
