differentiation is optional