API made block-based instead of delegate-based; though not tested yet