add test && some fixes