void DrawUnityTools () {
			#if SPINE_SKELETON_ANIMATOR
			showMecanim = EditorGUILayout.Foldout(showMecanim, new GUIContent("SkeletonAnimator", SpineEditorUtilities.Icons.unityIcon));
			if (showMecanim) {
				EditorGUI.indentLevel++;
				EditorGUILayout.PropertyField(controller, new GUIContent("Controller", SpineEditorUtilities.Icons.controllerIcon));		
				if (controller.objectReferenceValue == null) {
					GUILayout.BeginHorizontal();
					GUILayout.Space(32);
					if (GUILayout.Button(new GUIContent("Generate Mecanim Controller"), GUILayout.Width(195), GUILayout.Height(20)))
						SkeletonBaker.GenerateMecanimAnimationClips(m_skeletonDataAsset);
					GUILayout.EndHorizontal();
					EditorGUILayout.LabelField("SkeletonAnimator is the Mecanim alternative to SkeletonAnimation. It is not required.", EditorStyles.miniLabel);
				} else {
					GUILayout.BeginHorizontal();
					GUILayout.Space(32);
					if (GUILayout.Button(new GUIContent("Update Controller Animations"), GUILayout.Width(195), GUILayout.Height(20)))
						SkeletonBaker.GenerateMecanimAnimationClips(m_skeletonDataAsset);				
					GUILayout.EndHorizontal();
				}
				EditorGUI.indentLevel--;
			}
			#endif

			bool pre = showBaking;
			showBaking = EditorGUILayout.Foldout(showBaking, new GUIContent("Baking", SpineEditorUtilities.Icons.unityIcon));
			if (pre != showBaking)
				EditorPrefs.SetBool("SkeletonDataAssetInspector_showUnity", showBaking);

			if (showBaking) {
				EditorGUI.indentLevel++;
				EditorGUILayout.HelpBox("WARNING!\n\nBaking is NOT the same as SkeletonAnimator!\nDoes not support the following:\n\tFlipX or Y\n\tInheritScale\n\tColor Keys\n\tDraw Order Keys\n\tIK and Curves are sampled at 60fps and are not realtime.\n\tPlease read SkeletonBaker.cs comments for full details.\n\nThe main use of Baking is to export Spine projects to be used without the Spine Runtime (ie: for sale on the Asset Store, or background objects that are animated only with a wind noise generator)", MessageType.Warning, true);
				EditorGUI.indentLevel++;
				bakeAnimations = EditorGUILayout.Toggle("Bake Animations", bakeAnimations);
				EditorGUI.BeginDisabledGroup(!bakeAnimations);
				{
					EditorGUI.indentLevel++;
					bakeIK = EditorGUILayout.Toggle("Bake IK", bakeIK);
					bakeEventOptions = (SendMessageOptions)EditorGUILayout.EnumPopup("Event Options", bakeEventOptions);
					EditorGUI.indentLevel--;
				}
				EditorGUI.EndDisabledGroup();

				EditorGUI.indentLevel++;
				using (new EditorGUILayout.HorizontalScope()) {
					if (GUILayout.Button(new GUIContent("Bake All Skins", SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(150)))
						SkeletonBaker.BakeToPrefab(m_skeletonDataAsset, m_skeletonData.Skins, "", bakeAnimations, bakeIK, bakeEventOptions);

					string skinName = "<No Skin>";

					if (m_skeletonAnimation != null && m_skeletonAnimation.skeleton != null) {

						Skin bakeSkin = m_skeletonAnimation.skeleton.Skin;
						if (bakeSkin == null) {
							skinName = "Default";
							bakeSkin = m_skeletonData.Skins.Items[0];
						} else
							skinName = m_skeletonAnimation.skeleton.Skin.Name;

						using (var m = new EditorGUILayout.VerticalScope()) {
							if (GUILayout.Button(new GUIContent("Bake " + skinName, SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(250)))
								SkeletonBaker.BakeToPrefab(m_skeletonDataAsset, new ExposedList<Skin>(new [] { bakeSkin }), "", bakeAnimations, bakeIK, bakeEventOptions);
							using (new EditorGUILayout.HorizontalScope()) {
								GUILayout.Label(new GUIContent("Skins", SpineEditorUtilities.Icons.skinsRoot), GUILayout.Width(50));
								if (GUILayout.Button(skinName, EditorStyles.popup, GUILayout.Width(196))) {
									SelectSkinContext();
								}
							}

						}
					}

				}
				EditorGUI.indentLevel--;
				EditorGUI.indentLevel--;
			}


		}
        protected void OnGUI()
        {
            GUI.skin.label.richText = true;
            
#if UNITY_5
            using (var verticalScope = new EditorGUILayout.VerticalScope())
            {
                using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPosition, GUILayout.Width(base.position.width), GUILayout.Height(base.position.height - 16)))
                {
                    scrollPosition = scrollView.scrollPosition;
#else
            {
                scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition, false, true);
                {
#endif
                    GUILayout.Space(8f);

                    if (ShowAboutFirst)
                    {
                        this.DrawAboutCinemaSuiteSection();
                    }

                    Rect productsRect = EditorGUILayout.GetControlRect(GUILayout.Width(base.position.width - 22));
                    GUI.Box(new Rect(productsRect.x-4, productsRect.y, productsRect.width+8, productsRect.height), string.Empty, EditorStyles.toolbar);
                    showInstalledProducts.target = EditorGUI.Foldout(productsRect, showInstalledProducts.target, "Installed Products");

                    if (showInstalledProducts.target)
                    {
                        if (installedProducts.Count > 0)
                        {
                            foreach (ProductInfo product in installedProducts)
                            {
                                drawProduct(product);
                            }
                        }

                        
                    }

                    Rect availProductsRect = EditorGUILayout.GetControlRect(GUILayout.Width(base.position.width - 22));
                    GUI.Box(new Rect(availProductsRect.x - 4, availProductsRect.y, availProductsRect.width + 8, availProductsRect.height), string.Empty, EditorStyles.toolbar);
                    showAvailableProducts.target = EditorGUI.Foldout(availProductsRect, showAvailableProducts.target, "Available Products");

                    if (showAvailableProducts.target)
                    {
                        // Draw the available products
                        if (availableProducts.Count > 0)
                        {
                            foreach (ProductInfo product in availableProducts)
                            {
                                drawProduct(product);
                            }

                            GUILayout.Space(4f);
                        }
                    }

                    if (!ShowAboutFirst)
                    {
                        this.DrawAboutCinemaSuiteSection();
                    }
                }
#if !UNITY_5
                EditorGUILayout.EndScrollView();
#endif
            }


            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            bool tempShowOnStartup = EditorGUILayout.Toggle(new GUIContent("Show on Startup"), showOnStartup);
            if(tempShowOnStartup != showOnStartup)
            {
                showOnStartup = tempShowOnStartup;
                EditorPrefs.SetBool("CinemaSuite.WelcomeWindow.ShowOnStartup", showOnStartup);
            }
            EditorGUILayout.EndHorizontal();
        }