optimize predefine