NOTE: This is a work in progress. If you find a bug, or have suggestions, email I will (probably) reply.