why return?  different from original semantic.