new impl-free function