Complete Rewrite with new stuff