FIX: the cancel method should not be synchronised if we want it to actually do something