some redesign
implement set methods