refactor provider interfaces and add proxy provider