Adding several models

Also changing routing to use an abstract class rather than an interface
in te interests of keeping things DRY.