[modified] some tested.