try to impl upval