Initial 20% working rewrite
Finish re-write