public void PropagateVariablesInCategory(string changedMember)
        {
            var currentCategory = SelectedState.Self.SelectedStateCategorySave;

            /////////////////////Early Out//////////////////////////
            if (currentCategory == null)
            {
                return;
            }
            ///////////////////End Early Out////////////////////////

            var defaultState    = SelectedState.Self.SelectedElement.DefaultState;
            var defaultVariable = defaultState.GetVariableSave(changedMember);

            if (defaultVariable == null)
            {
                defaultVariable = defaultState.GetVariableRecursive(changedMember);
            }

            // If the user is setting a variable that is a categorized state, the
            // default may be null. If so, then we need to select the first value
            // as the default so that values are always set:
            if (defaultVariable != null && defaultVariable.Value == null)
            {
                var variableContainer = SelectedState.Self.SelectedElement;


                var sourceObjectName = VariableSave.GetSourceObject(changedMember);

                if (!string.IsNullOrEmpty(sourceObjectName))
                {
                    var nos = variableContainer.GetInstance(sourceObjectName);

                    if (nos != null)
                    {
                        variableContainer = ObjectFinder.Self.GetElementSave(nos);
                    }
                }

                ElementSave       categoryContainer;
                StateSaveCategory category;
                var isState = defaultVariable.IsState(variableContainer, out categoryContainer, out category);

                if (isState)
                {
                    // we're going to assign a value on the variable, but we don't want to modify the original one so,
                    // let's clone it:
                    defaultVariable = defaultVariable.Clone();
                    if (category != null)
                    {
                        defaultVariable.Value = category.States.FirstOrDefault()?.Name;
                    }
                    else
                    {
                        defaultVariable.Value = variableContainer.DefaultState?.Name;
                    }
                }
            }

            var defaultValue = defaultVariable?.Value;

            foreach (var state in currentCategory.States)
            {
                var existingVariable = state.GetVariableSave(changedMember);

                if (existingVariable == null)
                {
                    if (defaultVariable != null)
                    {
                        VariableSave newVariable = defaultVariable.Clone();
                        newVariable.Value     = defaultValue;
                        newVariable.SetsValue = true;
                        newVariable.Name      = changedMember;

                        state.Variables.Add(newVariable);

                        GumCommands.Self.GuiCommands.PrintOutput(
                            $"Adding {changedMember} to {currentCategory.Name}/{state.Name}");
                    }
                }
                else if (existingVariable.SetsValue == false)
                {
                    existingVariable.SetsValue = true;
                }
            }
        }