Piston events. At the moment the implementation is kind of roundabout but this is done to keep the ASM footprint small and not too complex