Large Rewrite

See change log for more info