correct impl of smo