refactor to use coercion and sim transformations from protean-core