@vesuvius: If I'm honest, I would start searching for open source implementations and start from one of those; I'm far too old and cynical to start a project like this from scratch.

Herbie