added SOO and tests