private void ImportDynamicGroup(DynamicSoundGroup aGroup) {
        var newGroup = CreateBlankGroup(aGroup.name);

        var groupTrans = newGroup.transform;

        foreach (var t in aGroup.groupVariations) {
            var aVariation = t;

            var newVariation = (GameObject)Instantiate(_organizer.dynVariationTemplate.gameObject, groupTrans.position, Quaternion.identity);
            newVariation.transform.parent = groupTrans;

            var variation = newVariation.GetComponent<DynamicGroupVariation>();

            var clipName = aVariation.name;

            var aVarAudio = aVariation.GetComponent<AudioSource>();

#if UNITY_3_0 || UNITY_3_1 || UNITY_3_2 || UNITY_3_3 || UNITY_3_4 || UNITY_3_5 || UNITY_4_0
            // copy fields one by one like below.
#else
            UnityEditorInternal.ComponentUtility.CopyComponent(aVarAudio);
            // ReSharper disable once ArrangeStaticMemberQualifier
            GameObject.DestroyImmediate(variation.VarAudio);
            UnityEditorInternal.ComponentUtility.PasteComponentAsNew(variation.gameObject);
            UnityEditorInternal.ComponentUtility.MoveComponentUp(variation.VarAudio);
#endif

            switch (aVariation.audLocation) {
                case MasterAudio.AudioLocation.Clip:
                    var clip = aVarAudio.clip;
                    if (clip == null) {
                        continue;
                    }
                    variation.VarAudio.clip = clip;
                    break;
                case MasterAudio.AudioLocation.ResourceFile:
                    variation.resourceFileName = aVariation.resourceFileName;
                    variation.useLocalization = aVariation.useLocalization;
                    break;
                case MasterAudio.AudioLocation.FileOnInternet:
                    variation.internetFileUrl = aVariation.internetFileUrl;
                    break;
            }

            variation.audLocation = aVariation.audLocation;
            variation.VarAudio.dopplerLevel = aVarAudio.dopplerLevel;
            variation.VarAudio.maxDistance = aVarAudio.maxDistance;
            variation.VarAudio.minDistance = aVarAudio.minDistance;
            variation.VarAudio.bypassEffects = aVarAudio.bypassEffects;
            variation.VarAudio.ignoreListenerVolume = aVarAudio.ignoreListenerVolume;
            variation.VarAudio.mute = aVarAudio.mute;

#if UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_3_5
            variation.VarAudio.pan = aVarAudio.pan;
#else
            variation.VarAudio.panStereo = aVarAudio.panStereo;
#endif

            variation.VarAudio.rolloffMode = aVarAudio.rolloffMode;
            variation.VarAudio.spread = aVarAudio.spread;

            variation.VarAudio.loop = aVarAudio.loop;
            variation.VarAudio.pitch = aVarAudio.pitch;
            variation.transform.name = clipName;
            variation.isExpanded = aVariation.isExpanded;

            variation.useRandomPitch = aVariation.useRandomPitch;
            variation.randomPitchMode = aVariation.randomPitchMode;
            variation.randomPitchMin = aVariation.randomPitchMin;
            variation.randomPitchMax = aVariation.randomPitchMax;

            variation.useRandomVolume = aVariation.useRandomVolume;
            variation.randomVolumeMode = aVariation.randomVolumeMode;
            variation.randomVolumeMin = aVariation.randomVolumeMin;
            variation.randomVolumeMax = aVariation.randomVolumeMax;

            variation.useFades = aVariation.useFades;
            variation.fadeInTime = aVariation.fadeInTime;
            variation.fadeOutTime = aVariation.fadeOutTime;

            variation.useIntroSilence = aVariation.useIntroSilence;
            variation.introSilenceMin = aVariation.introSilenceMin;
            variation.introSilenceMax = aVariation.introSilenceMax;
            variation.fxTailTime = aVariation.fxTailTime;

            variation.useRandomStartTime = aVariation.useRandomStartTime;
            variation.randomStartMinPercent = aVariation.randomStartMinPercent;
            variation.randomStartMaxPercent = aVariation.randomStartMaxPercent;

            // remove unused filter FX
            if (variation.LowPassFilter != null && !variation.LowPassFilter.enabled) {
                Destroy(variation.LowPassFilter);
            }
            if (variation.HighPassFilter != null && !variation.HighPassFilter.enabled) {
                Destroy(variation.HighPassFilter);
            }
            if (variation.DistortionFilter != null && !variation.DistortionFilter.enabled) {
                Destroy(variation.DistortionFilter);
            }
            if (variation.ChorusFilter != null && !variation.ChorusFilter.enabled) {
                Destroy(variation.ChorusFilter);
            }
            if (variation.EchoFilter != null && !variation.EchoFilter.enabled) {
                Destroy(variation.EchoFilter);
            }
            if (variation.ReverbFilter != null && !variation.ReverbFilter.enabled) {
                Destroy(variation.ReverbFilter);
            }
        }
        // added to Hierarchy!

        // populate sounds for playing!
        var groupScript = newGroup.GetComponent<DynamicSoundGroup>();
        // populate other properties.
        groupScript.retriggerPercentage = aGroup.retriggerPercentage;
        groupScript.groupMasterVolume = aGroup.groupMasterVolume;
        groupScript.limitMode = aGroup.limitMode;
        groupScript.limitPerXFrames = aGroup.limitPerXFrames;
        groupScript.minimumTimeBetween = aGroup.minimumTimeBetween;
        groupScript.limitPolyphony = aGroup.limitPolyphony;
        groupScript.voiceLimitCount = aGroup.voiceLimitCount;
        groupScript.curVariationSequence = aGroup.curVariationSequence;
        groupScript.useInactivePeriodPoolRefill = aGroup.useInactivePeriodPoolRefill;
        groupScript.inactivePeriodSeconds = aGroup.inactivePeriodSeconds;
        groupScript.curVariationMode = aGroup.curVariationMode;
        groupScript.useDialogFadeOut = aGroup.useDialogFadeOut;
        groupScript.dialogFadeOutTime = aGroup.dialogFadeOutTime;

        groupScript.chainLoopDelayMin = aGroup.chainLoopDelayMin;
        groupScript.chainLoopDelayMax = aGroup.chainLoopDelayMax;
        groupScript.chainLoopMode = aGroup.chainLoopMode;
        groupScript.chainLoopNumLoops = aGroup.chainLoopNumLoops;

        groupScript.childGroupMode = aGroup.childGroupMode;
        groupScript.childSoundGroups = aGroup.childSoundGroups;

#if UNITY_5
        groupScript.spatialBlendType = aGroup.spatialBlendType;
        groupScript.spatialBlend = aGroup.spatialBlend;
#endif

        groupScript.targetDespawnedBehavior = aGroup.targetDespawnedBehavior;
        groupScript.despawnFadeTime = aGroup.despawnFadeTime;

        groupScript.resourceClipsAllLoadAsync = aGroup.resourceClipsAllLoadAsync;
        groupScript.logSound = aGroup.logSound;
        groupScript.alwaysHighestPriority = aGroup.alwaysHighestPriority;

		var dyn = aGroup.GetComponentInParent<DynamicSoundGroupCreator>();
		if (aGroup.busIndex > 0) {
			var srcBus = dyn.groupBuses[aGroup.busIndex - DynamicSoundGroupCreator.HardCodedBusOptions];
			if (srcBus.isExisting) {
				groupScript.isExistingBus = true;
			}
			groupScript.busName = srcBus.busName;
		}

		groupScript.isCopiedFromDGSC = true;
	}