Added async support.  callback prototype should probably change