  [-] Architecture of the elements
  [-] Overall structure of the classes and modules
  [X] Connect modules
  [X] Simple commands (start, pause, stop)
  [X] Parse arguments to commands
  [X] More commands (previous, next)
  [X] Playlist basic commands (list of PL, save as, delete)
  [X] Handle playlists internally (use)
  [X] Prepare an output module to show results (column objects, displayable entry objects)
  [X] Develop a clever Printable class usable for diff. types of data (value, retrieval)
  [X] Test the output module (list songs, current playlist, given playlist)
  [X] More features in output (selection, counter column, align, zero-count of songs in playlist)
  [X] Develop pattern representation
  [X] Pattern parsing into the representation
  [X] Command-line arguments to the program parsed as commands
  [X] Pattern testing with medialib (info, enqueue)
  [X] New enqueue methods (replace, insert) when available in clientlib
  ==> v0.1

  [X] Make result counter start at 0 and adapt sequences to match that
  [X] Fix bug causing endless loop for "INFO +99"
  [X] Avoid invalid queries ("WHERE ()")
  [X] Fix sequence hack (problem with templates)
  [X] Improve help (summary and per-command)
  [X] Improve pattern features (orderby)
  [X] Ignore and protect playlists starting with '_'
  ==> v0.2

  [X] Configure script, using autoconf/automake
  [X] Allow escaped spaces and quoted string to be a single token
  [X] Code cleanup, bugs, FIXME's
  [X] Read the XMMS_PATH env var to open the server connection
  [X] Improve pattern features (order by rand())
  [X] More commands (clear, shuffle, jump, status, remove)
  [X] Important refactoring of the Printable tree, now using AbstractResult
  [X] Fixed parsing order bug (fixes "info -7")
  [X] Fixed the playlist-list command that returned incorrect results
  [X] Fixed pattern syntax bug (now '#' matches '1#0-' indeed)
  ==> v0.3

  [X] Make readline use async, redesign main-loop, remove waits
      [X] Clean isolation of the message-passing block of code, reuse everywhere
          * One class handles the main loop.
          * Configure which signal to listen (xmms2, readline).
      [X] Special DelayedVoid type, possibly parent of Delayed<T>
      [X] How to instantiate complex types in or from Delayed<T> ?
            Simple use of constructor? Do we need extra arguments?
            For simple types, we need to use API functions to retrieve product!
            => Modular solution to vary how products are created.
      [X] Do we need product, handlers and receivers?
            handlers: yes but more general, mostly to handle errors or similar stuff,
                      dedicated classes, *not* any method of any class.
            receivers: not really needed if we wait (pass the Delayed object),
                       needed if we set a callback => nice way of running a method (type problem) ?
            tests: playback->tickle(), mlib->usePlaylist()
      [X] runCallbacks() should wait (?) on callbacks returning Delayed<T> objects.
      [X] Use C++ features (template specialisation, overloading) to
          make the class structures simpler and cleaner, and to make
          the construction of Delayed objects straighter. Also, to unref
          results in ProductMaker cleanly.
      [X] Use delayed object in songresult.cc too!
      [X] Improve quality of Asynchronizer
            Will have to call Dispatcher::parseInput().
            Make it available without requiring the call to wait(async)
      [X] Free all the allocated delayed objects
  [X] Brainstorm on abstraction layer, make it reliable, dynamic (broadcast, etc)
  [X] Design proper abstraction layer (all async events, current PL, collections)
  [X] Add command to import files in mlib (import)
  [X] PLAYLIST-LIST doesn't always display empty playlists
  [X] Cannot replace song when playing the last song of the playlist
  [X] When loading a playlist, jump to previous position and tickle
  [X] Make ^D quit the shell.
  ==> v0.4

  [ ] Add License and Copyright in all files!
  [ ] Context-sensitive completion
  [ ] manpage
  [X] New commands (seek)
  [X] Make all commands use patterns (jump, remove)
  [X] Fixed problem with SQLite (very slow queries using IN)
  [X] New pattern symbols: _ and FROM_TO (current and surrounding entries)
  [ ] New Server class that handles all the existing modules.
  [ ] Make default pattern customizable (config variable).
  [ ] Make + the default pattern.
  [ ] No infinite loop if server disconnects.
  [ ] Adapt columns to fit window size.
  [ ] Use wchar* instead of char* for UTF-8 support
  [ ] Correct display, using wcs instead of str?
  [ ] Use string class whenever possible (including in the parser)
  [ ] Special admin commands (server [quit|rehash|config|plugin|stats])
  [ ] Support all flags (year, tracknr, genre)
R [ ] More commands (move, filter)

  [ ] Develop collection handling and classes
  [ ] Save collections in a file (apply, save as, delete)
R [ ] Handle collections internally (enter)
R [ ] Randomize playlist from a collection (playlist-random)

Design issues and needed improvements
  [ ] Make error message handling more flexible in Delayed<T>

Unscheduled fixes (by order of importance, most important first)
  [ ] Sync with API changes, e.g. userconf_dir location function
  [ ] Improve pattern features (comparators, limit)
  [ ] Reference counter for the reused PatternNodes
  [ ] Free all the allocated memory, i.e. fix the leaks!
  [ ] When no metadata is present, display Title=filename
  [ ] Templatize the STATUS output
  [ ] Allow no-network operations (e.g. help) even without a server
  [ ] Handle import of HTTP urls
  [ ] Use glob() to match paths to import
  [ ] Valgrind the app.
  [ ] Customizable prompt (can display current song, playtime, etc).
  [ ] Colors in output
  [ ] Do we need all those pointers anyway?
  [ ] Generalize the #argument check in the dispatcher
  [ ] Only instantiate modules (Playback, MediaLibrary) when they are needed
      (shell-mode or required by the inline command).

Known bugs
  [ ] "info 2 OR /" always returns an empty set, which is wrong (due to ORDER BY in subquery)
  [ ] NOT and XOR not working at all
  [ ] Playlist sequences are broken (non-continuous ids in the DB)
  [ ] 'info foo -o l ; enqueue #' doesn't retain ordering
