I did consider using a stream listener, but found it simpler to use a single point↦point (rotate) function because an inverse was also required.