protected virtual void AddSelectionButtons()
        {
            if (VRTK_SDKManager.GetLoadedSDKSetup() != null)
            {
                GameObject chooseNoneButton = Instantiate(chooseButton.gameObject, chooseButton.transform.parent);
                chooseNoneButton.GetComponentInChildren <Text>().text = "None";
                chooseNoneButton.name = "ChooseNoneButton";
                chooseNoneButton.SetActive(true);

                chooseNoneButton.GetComponent <Button>().onClick.AddListener(
                    () => VRTK_SDKManager.AttemptUnloadSDKSetup(true)
                    );

                chooseButtonGameObjects.Add(chooseNoneButton);
            }

            VRTK_SDKSetup[] setups = VRTK_SDKManager.GetAllSDKSetups();
            for (int index = 0; index < setups.Length; index++)
            {
                VRTK_SDKSetup setup = setups[index];
                if (setup == null || setup == VRTK_SDKManager.GetLoadedSDKSetup())
                {
                    continue;
                }

                GameObject chooseButtonCopy = Instantiate(chooseButton.gameObject, chooseButton.transform.parent);
                chooseButtonCopy.GetComponentInChildren <Text>().text = setup.name;
                chooseButtonCopy.name = string.Format("Choose{0}Button", setup.name);
                chooseButtonCopy.SetActive(true);

                int    indexCopy = index;
                Button button    = chooseButtonCopy.GetComponent <Button>();
                button.onClick.AddListener(
                    () => VRTK_SDKManager.AttemptTryLoadSDKSetup(indexCopy, true, setups)
                    );

                ColorBlock buttonColors = button.colors;
                buttonColors.colorMultiplier = setup.isValid ? 1.0f : 0.8f;
                button.colors = buttonColors;

                chooseButtonGameObjects.Add(chooseButtonCopy);
            }
        }