kandhu,
If you are using a common Atmel programming software (i.e., programming the chip from AVR Studio), the first step of the "programming process" is to erase the chip, including EEPROM. To avoid this, you need to change one of your fuses. In the fuse high byte, bit 3 (0 indexed), you need to set the EESAVE bit to 0 (programmed). Be careful! While you can't "toast" a chip with improper fuse settings, you can greatly complicate reprogramming it (i.e., if you change the clock settings to a value that is incompatible with your design). Read about the fuse bytes in the datasheet -- section 27 in my copy, p. 284 -- 287.
Secondly, unless you only have a single variable stored in EEPROM, if you recompile your program, it is unpredictable whether the addresses assigned to the variables will be the same or not. There are two workarounds for this. You can create a struct, and store all of your eeprom variables in the single struct. Then, through recompiles, the first variable will always be stashed in the same address (assuming you don't change compilers). If you need to add more variables, just add them at the end of the struct. This is kind of a cheap solution, but it works pretty well. An more elegant (and complicated) alternative is to reserve a block of eeprom memory (by editing your make file). Then you can explicitly assign the variables in question to specific addresses in the reserved block. The hard coded addresses obviously don't change, and because the block is reserved, auto-generated (i.e., "EEMEM") variables will not be placed there without an error at compile time.