removed redundant interface and allowed inheritance for easier reuse of factories