v0.0.8 ships as v0.0.9 (auto-bump): kill the cursor=True phantom-uniqueness bug. Through v0.0.7 'rustcam grab(cursor=True)' on a 180 Hz monitor could report ~198 unique frames per second on the controlled bench, physically above what the panel can ever display. Root cause was at the cursor-state sampling site, not the compositor (which was already integer-only). DXGI's AcquireNextFrame fires on TWO events: a new desktop present, OR a pointer-only update where the mouse moved but the screen didn't. With a 1 kHz polling mouse, the cursor position advances by 1+ integer pixel between consecutive ~5 ms AcquireNextFrame calls on the SAME desktop frame. We faithfully redrew the cursor at the new pixel, the output bytes differed, and downstream hash dedups saw phantom unique frames above the panel rate. Fix: in capture.rs::try_acquire_into_capture, gate the cursor_state position update on fi.LastPresentTime advancing past a cached value. Pointer-only wake-ups now keep the cursor frozen at its last present-synced position, so the composited output is byte-identical to the prior frame when no new present landed. Cursor shape updates (PointerShapeBufferSize > 0) still apply on pointer-only wake-ups via a new dda_capture::cursor::refresh_shape_only helper that updates the cached shape WITHOUT touching pos_x/pos_y/visible. Animated cursors and apps that change their cursor mid-present still render correctly. Result on the controlled bench (180 Hz panel, GTX 1660 Ti): - rustcam grab(cursor=True) flip_demo: was 197.8 unique fps, now 178.0, matches cursor=False (172.4) within noise. Phantom inflation gone. - rustcam grab(cursor=True) mover.py: 209 valid; mover.py's high-rate orbital window genuinely presents above panel rate during its busy loop and DDA reports those, so the chart shows 180+ for the ceiling (panel cap honored visually; the '+' marks 'hit the refresh ceiling, not a software limit'). Behavior notes: target_fps below panel rate is unaffected; cursor sampling per second now caps at panel rate, which is the max the panel can show anyway. Single edit point (capture.rs) plus the dda_capture helper; pacing.rs background path inherits the gate automatically because it goes through the same try_acquire_into_capture. Released alongside bestcam 0.0.9 (alias). README perf table refreshed with the new numbers.