add constructor, few problems should be discussed before further implement