Refactor visibility for a clean crate interface