added alternate functions with less context switching