public void SetGuiState <T>() where T : GuiState
    {
        newGUIState      = SystemHelper.FindOrCreateGuiState <T>();
        previousGUIState = currentGuiState;

        if (newGUIState == null)
        {
            Debug.LogError("The specified guistate equals null!");
            return;
        }

        if (currentGuiState == newGUIState)
        {
            Debug.LogWarning("You are trying to start the current guistate again, aborted!");
            return;
        }

        int i = guiStates.Count;

        while (i-- > 0)
        {
            guiStates[i].SetActiveState(false);
        }

        //foreach (GuiState guiState in guiStates) {
        //	guiState.SetActiveState(false);
        //}

        currentGuiState = newGUIState;

        currentGuiState.SetActiveState(true);

        if (OnGuiStateChange != null)
        {
            OnGuiStateChange(currentGuiState);
        }
    }