finished it up, but could still improve