add assign, not tested