don't rely on non-public fun