Refactor, add HasManyThrough