returns self on save