Rotating around the Y axis then on Z axis makes my object rotate on the X axis

Hello everyone,

I’m trying to rotate a cube over a period of time when I press the arrow keys using a corroutine. Imagine a Rubik’s cube of sorts.

I can rotate it on the Y axis without a problem. But if I try rotating it on the Z axis after rotating it on the Y, it actually rotates the cube on the X axis. How can I fix this?

Here is the code:

private Touch ft = new Touch();
    private float d = 0;
    private bool swipeCheck = false;
    public GameObject cube;
    private Vector3 lerpAngle = new Vector3();

    IEnumerator RotateMe(Vector3 byAngles, float inTime)
        var fromAngle = cube.transform.rotation;
        var toAngle = Quaternion.Euler(cube.transform.eulerAngles + byAngles);
        for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
            //Método viejo
            cube.transform.rotation = Quaternion.Lerp(fromAngle, toAngle, t);

            yield return null;

    // Use this for initialization
    void Start () {


	// Update is called once per frame
	void Update () {

        if (Input.GetKeyDown(KeyCode.UpArrow))
            StartCoroutine(RotateMe(Vector3.forward * -90f, 1.5f));

        else if (Input.GetKeyDown(KeyCode.DownArrow))
            //cube.transform.Rotate(0, 0, 90, Space.World);
            StartCoroutine(RotateMe(Vector3.forward * 90f, 1.5f));
        else if (Input.GetKeyDown(KeyCode.RightArrow))
            //cube.transform.Rotate(0, -90, 0, Space.World);
            StartCoroutine(RotateMe(Vector3.up * -90f, 1.5f));
        else if (Input.GetKeyDown(KeyCode.LeftArrow))
            //cube.transform.Rotate(0, 90, 0, Space.World);
            StartCoroutine(RotateMe(Vector3.up * 90f, 1.5f));


Thank you in advance!

Solved it! Instead of using quaternions, I used transform.Rotate(); with Space.World to use world axis instead of local ones!