fixed cirular dependency with an interface