update, almost finished