reorganized with pragma marks