add an update() function + code cleanups