now refactring Differ. many bug