updated interface to return T for update create