Massive rewriting, can use one from scratch