pull out unified API