move token generation to a concern