It's not free, but I love espindle.org. They offer a free trial so you can check it out to see if you like it. You set the grade level to start and it adjusts based on how they are doing. Once they miss a word, the word goes on their practice list and they must get it right 3 times on the next three tests before it is moved off their practice list. You can also adjust their level if you feel it is too easy or hard.