expose functional version