added circular dependency support