new idea (in the comments) for differential