redone the whole thing