Complete re-write with a ton of options.