Fixed requirements
Constants
Replaced conditionals with Polymorphism