Integrated Chenguang's changes with the rest

aila ooo aila ooo aila ooo aila ooo aila ooo aila ooo aila ooo aila ooo