add ability for interfaces to be used instead of concrete classes.