The fuses on your ATmega168 aren't set correctly; fuses being the bane of microcontroller programming - a few important but obscure options that you can only set with an external programmer. The ATmega168 defaults to the use of a 1 MHz internal clock (e.g. ignoring the 16 MHZ crystal on your board).
The fuses you want might be: high fuse: 0xdf low fuse: 0xc7 extended fuse: 0x08 but it's also possible that they will make your ATmega168 unusable. I've had lots of problems trying to find the right fuse settings, and particularly with setting the extended fuse (which most AVRs, like the ATmega8, don't have).