start implement model polymorphism