I don't think it's efficient enough, but look through the code and see for yourself. I need some feedback on improvements :)