/// <summary>
		/// Applies random permutation of this skin to the set of renderers based on the given randomSeed.
		/// </summary>
		public void ApplyRandom( GameObject root, int randomSeed )
		{
			Assert.NotNull( root );
			Assert.HasComponent<Animator>( root, "ApplyRandom, parameter needs to have an Animator component" ); 

			if ( skeletonBones != null )
			{
				foreach ( SpriteSkeletonSkin mapping in skeletonBones )
				{
					GameObject child = root.FindChildObjectByName( mapping.name );
					
					if ( child != null )
					{
						if ( colorOptions != null && colorOptions.Length > 0 )
						{
							mapping.ApplyRandom( child.GetComponent<SpriteRenderer>(), colorOptions, randomSeed );
						}
						else
						{
							mapping.ApplyRandom( child.GetComponent<SpriteRenderer>(), randomSeed );
						}
					}
				}
			}
			else
			{
				Debug.LogWarning( "Apply random skin configuration: no bonemappings defined. No skin will be applied." );
			}
		}
		/// <summary>
		/// Merges the skin defined by the given skeleton with the current skin (much like a union).
		/// </summary>
		public void Merge( GameObject skeletonRoot )
		{
			Assert.NotNull( skeletonRoot );
			Assert.HasComponent<Animator>( skeletonRoot, "ApplyRandom, parameter needs to have an Animator component" ); 

			foreach ( SpriteSkeletonSkin mapping in skeletonBones )
			{
				GameObject bone = skeletonRoot.FindChildObjectByName( mapping.name );
				
				if ( bone != null )
				{
					SpriteRenderer renderer = bone.GetComponent<SpriteRenderer>();
					
					if ( renderer != null && !mapping.ContainsSprite( renderer.sprite ) )
					{
						mapping.AddBoneConfiguration( renderer.sprite, bone.transform, renderer.color ); 
						Debug.Log ( "[Merge] Added sprite: " + renderer.sprite + " to " + mapping.name );
					}
				}
			}
		}