Well fixed it already. Shock horror it's actually alot faster now too.
Method Rotate( nPitch:Double,nYaw:Double,nRoll:Double ) Local A!,B!,C!,D!,E!,F!,AD!,BD! A = Cos( npitch) B = Sin( npitch) C = Cos(nyaw) D = Sin(nyaw) E = Cos(nroll) F = Sin(nroll) AD = A * D BD = B * D mat[0] = C * E mat[1] = -C * F mat[2] = D mat[4] = BD * E + A * F mat[5] = -BD * F + A * E mat[6] = -B * C mat[8] = -AD * E + B * F mat[9] = AD * F + B * E mat[10] = A * C mat[3] = mat[7] = mat[11] = mat[12] = mat[13] = mat[14] = 0 mat[15] = 1 End Method