Weird Compass readings

Using this tutorial, I set up my new HMC5883l compass module from china onto my robot, and I had a simple program to draw the readings onto a circle.

Anyways, compass readings do not change at a constant rate. at some parts, the angle will quickly increase, and at other times, the readings will change at a slower pace, and this is all when I am rotating the bot/module at a steady pace. I wanted to use the compass to give me better 90 degree turns, but sometimes 90 degrees according to the compass translates to 180 degrees of actual rotation, and sometimes less than 30 degrees of rotation

I have set the declination angle, so that shouldn't be the problem.. Any ideas?