more flexable api