new, another version with extra function