I need to rewrite this whole thing soon