implemented diff