added as much as i can