And if I understand correctly what you do, you compute twice the same rotation around the X axis, then once a rotation around Y axis and finally multilply the modelview matrix by all these transformations.
Or maybe, I am wrong, and each call matrix.rotate* replace the current matrix.

Yeah I know how to do matrix multiplication. But if I do it that way, it rotations but bounces in and out. The only way was to break it into seperate parts