changed update signature to more reasonable. Update code will have to be written by subclasses