now refactring Differ. passed current all test