added pragma marks for readability