create abstract resolver. tests for utils. a lot of refactoring code.