refact, finish