Update to use abstract factory and checks against strings