$Id$ Sam Hocevar - main programmer