modified SOPlus
merged conflict on main