adds DiInterface for clearer implementation