Total reworking. Provide async and sync API