finish SO　part. not tested