added checkpoint 28 code