new  finally extract logic