more refactoring
using polymorphic path