major refactor into Token model