refactor coercion API