optimize some func