Revamp. Needs docs