added differentiation