Part Tools Import
Part Tools Import

--- /dev/null
+++ b/Assets/PartTools/Editor/InternalSpaceEditor.cs
@@ -1,1 +1,37 @@
+using UnityEngine;
+using UnityEditor;
 
+[CustomEditor(typeof(KSPPartTools.InternalSpace))]
+public class InternalSpaceEditor : Editor
+{
+    KSPPartTools.InternalSpaceInspector owner;
+
+    public InternalSpaceEditor()
+    {
+        owner = new KSPPartTools.InternalSpaceInspector(this);
+    }
+
+    #region EditorInspector Methods
+
+    public override void OnInspectorGUI()
+    {
+        owner.OnInspectorGUI();
+    }
+
+    public override bool HasPreviewGUI()
+    {
+        return owner.HasPreviewGUI();
+    }
+
+    public override void OnPreviewGUI(Rect r, GUIStyle background)
+    {
+        owner.OnPreviewGUI(r, background);
+    }
+
+    public override void OnPreviewSettings()
+    {
+        owner.OnPreviewSettings();
+    }
+
+    #endregion
+}

--- /dev/null
+++ b/Assets/PartTools/Editor/KSPParticleEmitterEditor.cs
@@ -1,1 +1,42 @@
+using UnityEngine;
+using UnityEditor;
 
+[CustomEditor(typeof(KSPPartTools.KSPParticleEmitter))]
+public class KSPParticleEmitterEditor : Editor
+{
+    KSPPartTools.KSPParticleEmitterInspector  owner;
+
+    public KSPParticleEmitterEditor()
+    {
+        owner = new KSPPartTools.KSPParticleEmitterInspector(this);
+    }
+
+    #region EditorInspector Methods
+
+    public override void OnInspectorGUI()
+    {
+        owner.OnInspectorGUI();
+    }
+
+    public override bool HasPreviewGUI()
+    {
+        return owner.HasPreviewGUI();
+    }
+
+    public override void OnPreviewGUI(Rect r, GUIStyle background)
+    {
+        owner.OnPreviewGUI(r, background);
+    }
+
+    public override void OnPreviewSettings()
+    {
+        owner.OnPreviewSettings();
+    }
+
+    public void OnSceneGUI()
+    {
+        owner.OnSceneGUI();
+    }
+
+    #endregion
+}

--- /dev/null
+++ b/Assets/PartTools/Editor/PartToolsEditor.cs
@@ -1,1 +1,37 @@
+using UnityEngine;
+using UnityEditor;
 
+[CustomEditor(typeof(KSPPartTools.PartTools))]
+public class PartToolsEditor : Editor
+{
+    KSPPartTools.PartToolsInspector owner;
+
+    public PartToolsEditor()
+    {
+        owner = new KSPPartTools.PartToolsInspector(this);
+    }
+
+    #region EditorInspector Methods
+
+    public override void OnInspectorGUI()
+    {
+        owner.OnInspectorGUI();
+    }
+
+    public override bool HasPreviewGUI()
+    {
+        return owner.HasPreviewGUI();
+    }
+
+    public override void OnPreviewGUI(Rect r, GUIStyle background)
+    {
+        owner.OnPreviewGUI(r, background);
+    }
+
+    public override void OnPreviewSettings()
+    {
+        owner.OnPreviewSettings();
+    }
+
+    #endregion
+}

--- /dev/null
+++ b/Assets/PartTools/Editor/PartToolsWindows.cs
@@ -1,1 +1,11 @@
+using UnityEngine;
+using UnityEditor;
 
+public class PartToolsWindows
+{
+    [MenuItem("Tools/KSP Part Tools")]
+    public static void ShowPartToolsWindow()
+    {
+        KSPPartTools.PartToolsWindow.ShowWindow();
+    }
+}

--- /dev/null
+++ b/Assets/PartTools/Editor/PropEditor.cs
@@ -1,1 +1,37 @@
+using UnityEngine;
+using UnityEditor;
 
+[CustomEditor(typeof(KSPPartTools.Prop))]
+public class PropEditor : Editor
+{
+    KSPPartTools.PropInspector owner;
+
+    public PropEditor()
+    {
+        owner = new KSPPartTools.PropInspector(this);
+    }
+
+    #region EditorInspector Methods
+
+    public override void OnInspectorGUI()
+    {
+        owner.OnInspectorGUI();
+    }
+
+    public override bool HasPreviewGUI()
+    {
+        return owner.HasPreviewGUI();
+    }
+
+    public override void OnPreviewGUI(Rect r, GUIStyle background)
+    {
+        owner.OnPreviewGUI(r, background);
+    }
+
+    public override void OnPreviewSettings()
+    {
+        owner.OnPreviewSettings();
+    }
+
+    #endregion
+}

 Binary files /dev/null and b/Assets/PartTools/Lib/PartTools.dll differ
 Binary files /dev/null and b/Assets/PartTools/Lib/PartToolsEditor.dll differ
--- /dev/null
+++ b/Assets/PartTools/Shaders/Alpha.shader
@@ -1,1 +1,80 @@
+Shader "KSP/Alpha/Translucent"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGBA)", 2D) = "white" {}
+		_Color("TintColor", Color) = (1,1,1,1)
+		_Opacity("_Opacity", Range(0,1)) = 1
+		_Fresnel("Fresnel", Range(0,10)) = 0
+		[MaterialToggle] _FresnelInvert("Invert Fresnel", Float) = 0
 
+		_RimFalloff("Rim Falloff", Range(0.01,5) ) = 0.1
+		_RimColor("Rim Color", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "Queue" = "Transparent" }
+
+		Pass
+		{
+			ZWrite On
+			ColorMask 0
+		}
+
+		//ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+        #include "LightingKSP.cginc"
+		#pragma surface surf BlinnPhongSmooth alpha:fade
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float _Fresnel;
+		float _FresnelInvert;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor * _Color;
+
+			float3 normal = float3(0,0,1);
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 fresnel = (_FresnelInvert + (pow(1 - rim, _Fresnel))) * (1 - _FresnelInvert + 1 - (pow(1 - rim, _Fresnel)));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+            o.Gloss = 0;
+            o.Specular = 0;
+			o.Normal = normal;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity * color.a * fresnel;
+		}
+
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/AlphaAdditive.shader
@@ -1,1 +1,63 @@
+Shader "KSP/Alpha/Translucent Additive"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGBA)", 2D) = "white" {}
+		_TintColor("TintColor", Color) = (1,1,1,1)
+		_Fresnel("Fresnel", Range(0,10)) = 0
+		//_FresnelInvert("Inverse Fresnel", Range(0,10)) = 0
+	}
 
+
+
+	SubShader
+	{
+		Tags{ "Queue" = "Transparent" }
+
+		ZWrite Off
+			ZTest LEqual
+			Blend SrcAlpha One
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf NoLighting noshadow noambient novertexlights nolightmap
+		#pragma target 3.0
+
+
+		sampler2D _MainTex;
+		float _Fresnel;
+		float _FresnelInvert;
+		float4 _TintColor;
+
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf(Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _TintColor;
+
+			float3 normal = float3(0,0,1);
+			half rim = 1.0 - saturate(dot(normalize(IN.viewDir), normal));
+
+			o.Albedo = 0;
+			//o.Emission = color.rgb*(_FresnelColor+(_FresnelInvert + (pow(1 - rim, _Fresnel))) * (1 - _FresnelInvert + 1 - (pow(1 - rim, _Fresnel))));
+			//o.Emission = color.rgb*(pow(1 - rim, _Fresnel))*((pow(rim, _FresnelInvert)));
+			o.Emission = color.rgb * (pow(1 - rim, _Fresnel));
+
+			o.Normal = normal;
+
+
+		}
+
+		ENDCG
+	}
+	Fallback "KSP/Particles/Additive"
+		
+}
+

--- /dev/null
+++ b/Assets/PartTools/Shaders/AlphaSpecular.shader
@@ -1,1 +1,89 @@
+Shader "KSP/Alpha/Translucent Specular"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGBA)", 2D) = "white" {}
+		
+		//_Gloss ("Gloss", Range (0.01, 1)) = 0.5
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
 
+
+		_Opacity("_Opacity", Range(0,1)) = 1
+		_Fresnel("Fresnel", Range(0,10)) = 0
+		[MaterialToggle] _FresnelInvert("Invert Fresnel", Float) = 0
+		_RimFalloff("Rim Falloff", Range(0.01,5) ) = 0.1
+		_RimColor("Rim Color", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "Queue" = "Transparent" }
+
+		Pass
+		{
+			ZWrite On
+			ColorMask 0
+		}
+
+		//ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf BlinnPhongSmooth alpha:fade
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+
+		//float _Gloss;
+
+		float _Opacity;
+		float _Fresnel;
+		float _FresnelInvert;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+
+			float3 normal = float3(0,0,1);
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 fresnel = (_FresnelInvert + (pow(1 - rim, _Fresnel))) * (1 - _FresnelInvert + 1 - (pow(1 - rim, _Fresnel)));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+            o.Gloss = color.a;
+            o.Specular = _Shininess;
+			o.Normal = normal;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity * color.a * fresnel;
+		}
+
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/Bumped.shader
@@ -1,1 +1,71 @@
+Shader "KSP/Bumped"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "gray" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Normal = normal;
+            o.Gloss = 0;
+            o.Specular = 0;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/BumpedSpecular.shader
@@ -1,1 +1,74 @@
+Shader "KSP/Bumped Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "gray" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.4
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+		    o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/Cutoff.shader
@@ -1,1 +1,51 @@
+Shader "KSP/Alpha/Cutoff"
+{
+    Properties{
+        _Color("Main Color", Color) = (1,1,1,1)
+        _MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
+        _Cutoff("Alpha cutoff", Range(0,1)) = 0.5
+        _RimFalloff("_RimFalloff", Range(0.01,5)) = 0.1
+        _RimColor("_RimColor", Color) = (0,0,0,0)
 
+        _TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+        _BurnColor("Burn Color", Color) = (1,1,1,1)
+    }
+
+        SubShader{
+        Tags{ "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" }
+        LOD 300
+
+        CGPROGRAM
+        #pragma surface surf Lambert alphatest:_Cutoff
+
+        sampler2D _MainTex;
+        sampler2D _BumpMap;
+        fixed4 _Color;
+        float _RimFalloff;
+        float4 _RimColor;
+        float4 _TemperatureColor;
+        float4 _BurnColor;
+
+        struct Input {
+        float2 uv_MainTex;
+        float2 uv_Emissive;
+        float3 viewDir;
+        };
+
+    void surf(Input IN, inout SurfaceOutput o)
+    {
+        fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color * _BurnColor;
+        float3 normal = float3(0, 0, 1);
+        half rim = 1.0 - saturate(dot(normalize(IN.viewDir), normal));
+        float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+        emission += _TemperatureColor.rgb * _TemperatureColor.a;
+        o.Albedo = c.rgb;
+        o.Emission = emission;
+        o.Alpha = c.a;
+        o.Normal = normal;
+    }
+    ENDCG
+    }
+
+        FallBack "Legacy Shaders/Transparent/Cutout/Diffuse"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/CutoffBumped.shader
@@ -1,1 +1,53 @@
+Shader "KSP/Alpha/Cutoff Bumped"
+{
+    Properties{
+        _Color("Main Color", Color) = (1,1,1,1)
+        _MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
+        _BumpMap("Normalmap", 2D) = "bump" {}
+        _Cutoff("Alpha cutoff", Range(0,1)) = 0.5
+        _RimFalloff("_RimFalloff", Range(0.01,5)) = 0.1
+        _RimColor("_RimColor", Color) = (0,0,0,0)
 
+        _TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+        _BurnColor("Burn Color", Color) = (1,1,1,1)
+    }
+
+        SubShader{
+        Tags{ "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout" }
+        LOD 300
+
+        CGPROGRAM
+        #pragma surface surf Lambert alphatest:_Cutoff
+
+        sampler2D _MainTex;
+        sampler2D _BumpMap;
+        fixed4 _Color;
+        float _RimFalloff;
+        float4 _RimColor;
+        float4 _TemperatureColor;
+        float4 _BurnColor;
+
+        struct Input {
+        float2 uv_MainTex;
+        float2 uv_BumpMap;
+        float2 uv_Emissive;
+        float3 viewDir;
+    };
+
+    void surf(Input IN, inout SurfaceOutput o) 
+    {
+        fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color * _BurnColor;
+        float3 normal = float3(0, 0, 1);
+        half rim = 1.0 - saturate(dot(normalize(IN.viewDir), normal));
+        float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+        emission += _TemperatureColor.rgb * _TemperatureColor.a;
+        o.Albedo = c.rgb;
+        o.Emission = emission;
+        o.Alpha = c.a;
+        o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+    }
+    ENDCG
+    }
+
+        FallBack "Legacy Shaders/Transparent/Cutout/Diffuse"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/DepthMask.shader
@@ -1,1 +1,11 @@
-
+Shader "DepthMask" {
+    SubShader {
+    	Tags { "Queue" = "Background" }
+        Lighting Off
+        ZTest LEqual
+        ZWrite On
+        Cull Off
+        ColorMask 0
+        Pass {}
+    }
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/Diffuse.shader
@@ -1,1 +1,67 @@
+Shader "KSP/Diffuse"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB)", 2D) = "gray" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
 
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Normal = normal;
+            o.Gloss = 0;
+            o.Specular = 0;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/Emissive.shader
@@ -1,1 +1,73 @@
+Shader "KSP/Emissive/Diffuse"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB)", 2D) = "gray" {}
 
+		_EmissiveColor("_EmissiveColor", Color) = (0,0,0,1)
+		_Emissive("_Emissive", 2D) = "white" {}
+
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+
+	}
+	
+	SubShader 
+	{
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float4 _EmissiveColor;
+		sampler2D _Emissive;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+			emission += (tex2D(_Emissive, IN.uv_Emissive).rgb * _EmissiveColor.rgb) * _EmissiveColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/EmissiveBumpedSpecular.shader
@@ -1,1 +1,82 @@
+Shader "KSP/Emissive/Bumped Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "gray" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.4
 
+		_EmissiveColor("_EmissiveColor", Color) = (0,0,0,1)
+		_Emissive("_Emissive", 2D) = "white" {}
+		
+
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float4 _EmissiveColor;
+		sampler2D _Emissive;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 emissive = tex2D(_Emissive, (IN.uv_Emissive));
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+			emission += (emissive.rgb * _EmissiveColor.rgb) * _EmissiveColor.a;
+			
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/EmissiveSpecular.shader
@@ -1,1 +1,81 @@
+Shader "KSP/Emissive/Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "gray" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.4
 
+		_EmissiveColor("_EmissiveColor", Color) = (0,0,0,1)
+		_Emissive("_Emissive", 2D) = "white" {}
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+		
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+
+		float4 _EmissiveColor;
+		sampler2D _Emissive;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+        
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 emissive = tex2D(_Emissive,(IN.uv_Emissive));
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+			emission += (emissive.rgb * _EmissiveColor.rgb) * _EmissiveColor.a;
+
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/InternalBumpedSpecular 1.shader
@@ -1,1 +1,69 @@
+Shader "KSP/InternalSpace/Bumped Specular2"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		_LightMap ("_LightMap", 2D) = "gray" {}
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+        //_EdgeColor ("Edge Color", Color) = (1,1,1,1)
+        //_EdgeThreshold ("Edge Threshold", Range(0.01, 3)) = 1
+        _LightColor ("Internal Light Color", Color) = (1,1,1,1)
 
+	}
+	
+	SubShader 
+	{
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+        #pragma surface surf BlinnPhongSmooth
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+		sampler2D _LightMap;
+
+        //uniform float _EdgeThreshold;
+        //uniform float4 _EdgeColor;
+        //uniform float _EdgeIntensity;
+        uniform float _AOIntensity;
+        uniform float _Shininess;
+        uniform float4 _SpecularColor;
+        uniform float4 _LightColor;
+        //uniform float4 _LightWrapping;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv2_LightMap;
+			float2 uv_Emissive;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex));
+			float4 lightmap = tex2D(_LightMap, IN.uv2_LightMap);
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+			//float3 edge = pow(lightmap.r, _EdgeThreshold);
+			float3 light1 = lightmap.g * UNITY_LIGHTMODEL_AMBIENT*3;
+			float3 light2 = lightmap.b * _LightColor;
+			float3 AO = lightmap.r + light2;
+
+			o.Albedo = color.rgb * AO;
+			o.Emission = (light1 + light2) * color.rgb * AO;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+			o.Alpha = 1;
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/InternalBumpedSpecular.shader
@@ -1,1 +1,147 @@
+Shader "KSP/InternalSpace/Bumped Specular"
+{
+	Properties 
+	{
+        [Header(Texture Maps)]
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		_LightMap ("_LightMap", 2D) = "gray" {}
 
+        [Header(Specular)]
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+        _Shininess ("Shininess", Range (0.03, 1)) = 0.4
+
+        [Header(Lightmaps and Occlusion)]
+        [Toggle(LMTOGGLE)] _LMTOGGLE("Enable Lightmap", Float) = 0
+        [KeywordEnum(Single Colored, Multi Grayscale)] _LM_Mode("Mode", Float) = 0
+        _LightColor1 ("Internal Light Color 1", Color) = (1,1,1,1)
+        _LightColor2 ("Internal Light Color 2", Color) = (1,1,1,1)
+        _LightAmbient("Ambient Boost", Range(0, 3)) = 1
+
+        _Occlusion("Occlusion Tightness", Range(0, 3)) = 1
+        [Space] //Im in Spaaaaaaaace
+
+        [Header(Fog)]
+        [Toggle(FOGTOGGLE)] _FOGTOGGLE("Enable Fog", Float) = 0
+        _FogColor("Color (RGB) Density (A)", Color) = (0.3, 0.4, 0.7, 0.5)
+        _FogStart("Start", Float) = 1
+        _FogEnd("End", Float) = 10
+
+	}
+	
+	SubShader 
+	{
+        Tags{ "RenderType" = "Opaque" }
+        LOD 200
+		//ZWrite On
+		//ZTest LEqual
+		//Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+
+        #pragma surface surf BlinnPhongSmooth vertex:fogVertex finalcolor:fogColor
+        #pragma shader_feature LMTOGGLE
+        #pragma shader_feature FOGTOGGLE
+        #pragma multi_compile _LM_MODE_MULTI_GREYSCALE _LM_MODE_SINGLE_COLORED
+
+		#pragma target 3.0
+
+
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+        #if LMTOGGLE
+		sampler2D _LightMap;
+        #endif
+
+
+
+        uniform float _Shininess;
+        uniform float4 _SpecularColor;
+
+        #if LMTOGGLE
+        uniform float4 _LightColor1;
+        uniform float4 _LightColor2;
+        uniform float _LightAmbient;
+        uniform float _Occlusion;
+        #endif
+
+        #if FOGTOGGLE
+        uniform float4 _FogColor;
+        uniform float _FogStart;
+        uniform float _FogEnd;
+        #endif
+
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+            float4 color : COLOR;   //vertex color
+
+            #if LMTOGGLE
+			float2 uv2_LightMap;
+            #endif
+
+            #if FOGTOGGLE
+            half fogFactor;
+            #endif
+		};
+
+        void fogVertex(inout appdata_full v, out Input data)
+        {
+            UNITY_INITIALIZE_OUTPUT(Input, data);
+            #if FOGTOGGLE
+            float cameraVertDist = length(mul(UNITY_MATRIX_MV, v.vertex).xyz);
+            data.fogFactor = lerp(saturate((_FogEnd.x - cameraVertDist) / (_FogEnd.x - _FogStart.x)), 1, 1 - _FogColor.a);
+            #endif
+        }
+
+        void fogColor(Input IN, SurfaceOutput o, inout fixed4 c)
+        {
+            #if FOGTOGGLE
+            c.rgb = lerp(_FogColor.rgb, c.rgb, IN.fogFactor);
+            #endif
+        }
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 c = tex2D(_MainTex,(IN.uv_MainTex));
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+            #if LMTOGGLE
+
+            float4 lightmap = tex2D(_LightMap, IN.uv2_LightMap);
+
+            #if _LM_MODE_SINGLE_COLORED
+            float3 light = lightmap.rgb * _LightColor1 + UNITY_LIGHTMODEL_AMBIENT * _LightAmbient * lightmap.rgb;
+            float3 AO = pow(lightmap.a, _Occlusion);
+            float3 finalLight = light * c.rgb * AO;
+            #endif
+
+            #if _LM_MODE_MULTI_GREYSCALE
+            float3 light1 = lightmap.r * _LightColor1;
+            float3 light2 = lightmap.g * _LightColor2;
+			float3 light3 = lightmap.b * UNITY_LIGHTMODEL_AMBIENT * _LightAmbient;
+			float3 AO = lerp(pow(lightmap.a, _Occlusion), 1, light1 + light2);
+            float3 finalLight = (light1 + light2 + light3) * c.rgb * AO;
+            #endif
+
+            #endif
+
+			o.Albedo = c.rgb * step(0.5,IN.color.rgb);
+			o.Gloss = c.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+			o.Alpha = 1;
+
+            #if LMTOGGLE
+            o.Albedo *= AO;
+            o.Emission = finalLight;
+            #endif
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/KSPParticle AddSmooth.shader
@@ -1,1 +1,77 @@
+Shader "KSP/Particles/Additive (Soft)" {
+Properties {
+	_MainTex ("Particle Texture", 2D) = "white" {}
+	_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
+	_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
+}
 
+Category {
+	Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+	Blend One OneMinusSrcColor
+	ColorMask RGB
+	Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
+
+	SubShader {
+		Pass {
+		
+			CGPROGRAM
+			#pragma vertex vert
+			#pragma fragment frag
+			#pragma multi_compile_particles
+
+			#include "UnityCG.cginc"
+
+			sampler2D _MainTex;
+			fixed4 _TintColor;
+			
+			struct appdata_t {
+				float4 vertex : POSITION;
+				fixed4 color : COLOR;
+				float2 texcoord : TEXCOORD0;
+			};
+
+			struct v2f {
+				float4 vertex : POSITION;
+				fixed4 color : COLOR;
+				float2 texcoord : TEXCOORD0;
+				#ifdef SOFTPARTICLES_ON
+				float4 projPos : TEXCOORD1;
+				#endif
+			};
+
+			float4 _MainTex_ST;
+			
+			v2f vert (appdata_t v)
+			{
+				v2f o;
+				o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
+				#ifdef SOFTPARTICLES_ON
+				o.projPos = ComputeScreenPos (o.vertex);
+				COMPUTE_EYEDEPTH(o.projPos.z);
+				#endif
+				o.color = v.color;
+				o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+				return o;
+			}
+
+			sampler2D _CameraDepthTexture;
+			float _InvFade;
+			
+			fixed4 frag (v2f i) : COLOR
+			{
+				#ifdef SOFTPARTICLES_ON
+				float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
+				float partZ = i.projPos.z;
+				float fade = saturate (_InvFade * (sceneZ-partZ));
+				i.color.a *= fade;
+				#endif
+				
+				half4 prev = i.color * tex2D(_MainTex, i.texcoord);
+				prev.rgb *= prev.a;
+				return prev * _TintColor;
+			}
+			ENDCG 
+		}
+	} 
+}
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/LightingKSP.cginc
@@ -1,1 +1,68 @@
+inline fixed4 LightingBlinnPhongSmooth(SurfaceOutput s, fixed3 lightDir, half3 viewDir, fixed atten)
+{
+    s.Normal = normalize(s.Normal);
+    half3 h = normalize(lightDir + viewDir);
 
+    fixed diff = max(0, dot(s.Normal, lightDir));
+
+    float nh = max(0, dot(s.Normal, h));
+    float spec = pow(nh, s.Specular*128.0) * s.Gloss;
+
+    fixed4 c;
+    c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * _SpecColor.rgb * spec) * (atten);
+    c.a = s.Alpha + _LightColor0.a * _SpecColor.a * spec * atten;
+    return c;
+}
+
+
+
+
+inline half4 LightingUnlit(SurfaceOutput s, half3 lightDir, half atten)
+{
+    // half diff = max (0, dot (s.Normal, lightDir));
+
+    half4 c;
+    c.rgb = s.Albedo;
+    c.a = s.Alpha;
+    return c;
+}
+
+
+
+
+inline half4 LightingUnlit_PrePass(SurfaceOutput s, half4 light)
+{
+    half4 c;
+    c.rgb = s.Albedo;
+    c.a = s.Alpha;
+    return c;
+}
+
+
+
+
+fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten) { return fixed4(0, 0, 0, 0); }
+
+
+
+
+
+float4 _Color;
+half _LightBoost;
+half4 LightingLightWrapped(SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) {
+    float3 w = _Color.rgb*0.5;
+    half3 NdotL = dot(s.Normal, lightDir);
+
+    //Specular term
+    half3 h = normalize(lightDir + viewDir);
+    s.Normal = normalize(s.Normal);
+    float NdotH = dot(s.Normal, h);
+    float spec = pow(max(NdotH, 0), s.Specular * 128.0) * s.Gloss;
+    fixed3 specColor = _SpecColor.rgb * _LightColor0.rgb;
+
+    half3 diff = NdotL * (1 - w) + w;
+    half4 c;
+    c.rgb = ((s.Albedo * _LightColor0.rgb * diff) + (specColor * spec)) * (atten * _LightBoost);
+    c.a = s.Alpha + (_LightColor0.a * _SpecColor.a * spec * atten);
+    return c;
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/LightwrapSpecular.shader
@@ -1,1 +1,68 @@
+Shader "KSP/Lightwrapped/Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_Color ("Light Wrapping", Color) = (0,0,0,0)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.4
+		_LightBoost("Light Boost", Range(1, 2)) = 1.0
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+	}
+	
+	SubShader 
+	{
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
 
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf LightWrapped
+		#pragma target 3.0
+
+
+		
+		
+		half _Shininess;
+
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float3 viewDir;
+		};
+		
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex));
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a * _Shininess;
+			o.Specular = color.a * _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/PBR/KSP_Standard_Bumped.shader
@@ -1,1 +1,171 @@
+Shader "KSP/Standard_Bumped"
+{
+    Properties
+    {
+        [Header(Texture Maps)]
+        _MainTex("Map A (RGB albedo, A smoothness)", 2D) = "white" {}
+        _MapB("Map B (R metalness, G emission1, B emission2, A occlusion)", 2D) = "white" {}
+        _MapC("Map C (RGBA color mask)", 2D) = "black" {}
+        [KeywordEnum(UV1, UV2)] _CUV("_MapC UV set", Float) = 0
+        [Space]
+        _BumpMap("BumpMap", 2D) = "bump" {}
 
+        [Header(ReColor (RGB_Albedo A_Metallic))]
+        _Color1("Mask1", Color) = (1,1,1,0)
+        //[Toggle]_Metallic1("Mask1 Metallic", Float) = 0
+        //[Space]
+        _Color2("Mask2", Color) = (1,1,1,0)
+        //[Toggle]_Metallic2("Mask2 Metallic", Float) = 0
+        //[Space]
+        _Color3("Mask3", Color) = (1,1,1,0)
+        //[Toggle]_Metallic3("Mask3 Metallic", Float) = 0
+        //[Space]
+        _Color4("Mask4", Color) = (1,1,1,0)
+        //[Toggle]_Metallic4("Mask4 Metallic", Float) = 0
+        [Space]
+        _MetallicGloss("_MetallicGloss", Range(0,1)) = 0.25
+
+        [Header(Emissive)]
+        _EmissiveColorLow1("_EmissiveColorLow1", Color) = (0,0,0,1)
+        _EmissiveColorHigh1("_EmissiveColorHigh1", Color) = (0,0,0,1)
+        [Space]
+        _EmissiveColorLow2("_EmissiveColorLow2", Color) = (0,0,0,1)
+        _EmissiveColorHigh2("_EmissiveColorHigh2", Color) = (0,0,0,1)
+       
+        [Header(Other)]
+        //[Toggle(ENABLE_VC)] _VC("Vertex Colors enable", Int) = 0
+        //[Toggle(ENABLE_VCAO)] _VCAO("Vertex Color R = Occlusion", Int) = 0
+        [KeywordEnum(none, RGBA, Occlusion)] _VCOL("Vertex Color", Float) = 0
+
+        _Opacity("Opacity", Range(0,1)) = 1
+
+        [HideInInspector]_RimFalloff("Rim highlight falloff", Range(0.01,5)) = 0.1
+        [HideInInspector]_RimColor("Rim highlight color", Color) = (0,0,0,0)
+        [HideInInspector]_TemperatureColor("Heat color", Color) = (0,0,0,0)
+        [HideInInspector]_BurnColor("Burn color", Color) = (1,1,1,1)
+
+    }
+
+        SubShader
+    {
+        Tags{ "RenderType" = "Opaque" }
+        ZWrite On
+        ZTest LEqual
+        Blend SrcAlpha OneMinusSrcAlpha
+
+        CGPROGRAM
+
+        #pragma surface surf Standard keepalpha
+        #pragma target 3.0
+        #pragma multi_compile _CUV_UV1 _CUV_UV2
+        #pragma multi_compile _VCOL_NONE _VCOL_RGBA _VCOL_OCCLUSION
+
+
+        //#pragma shader_feature ENABLE_VCAO
+        //#pragma shader_feature ENABLE_VC
+
+
+        sampler2D _MainTex;
+        sampler2D _MapB;
+        sampler2D _MapC;
+        sampler2D _BumpMap;
+
+        float4 _EmissiveColorLow1;
+        float4 _EmissiveColorHigh1;
+        float4 _EmissiveColorLow2;
+        float4 _EmissiveColorHigh2;
+
+        float _Opacity;
+        float _RimFalloff;
+        float4 _RimColor;
+        float4 _TemperatureColor;
+        float4 _BurnColor;
+        float4 _Color1;
+        float4 _Color2;
+        float4 _Color3;
+        float4 _Color4;
+        //float _Metallic1;
+        //float _Metallic2;
+        //float _Metallic3;
+        //float _Metallic4;
+        float _MetallicGloss;
+
+        struct Input
+        {
+            float2 uv_MainTex;
+            float2 uv_MapB;
+            #if _CUV_UV1
+            float2 uv_MapC;
+            #endif
+            #if _CUV_UV2
+            float2 uv2_MapC;
+            #endif
+
+            float2 uv_BumpMap;
+            float3 viewDir;
+            #if _VCOL_RGBA
+            float4 color : COLOR;   //vertex color
+            #endif
+            #if _VCOL_OCCLUSION
+            float4 color : COLOR;   //vertex color
+            #endif
+        };
+
+        void surf(Input IN, inout SurfaceOutputStandard o)
+        {
+            float4 mainSample = tex2D(_MainTex, (IN.uv_MainTex));
+            float4 mapBSample = tex2D(_MapB, (IN.uv_MapB));
+            #if _CUV_UV1
+            float4 mapCSample = tex2D(_MapC, (IN.uv_MapC));
+            #endif
+            #if _CUV_UV2
+            float4 mapCSample = tex2D(_MapC, (IN.uv2_MapC));
+            #endif
+            float3 albedo = mainSample.rgb * _BurnColor.rgb * lerp(1, _Color1, mapCSample.r) * lerp(1, _Color2, mapCSample.g) * lerp(1, _Color3, mapCSample.b) * lerp(1, _Color4, mapCSample.a);
+            float metallic = mapCSample.r * _Color1.a + mapCSample.g * _Color2.a + mapCSample.b * _Color3.a + mapCSample.a * _Color4.a;
+            float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+            half rim = 1.0 - saturate(dot(normalize(IN.viewDir), normal));
+
+            float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+            emission += _TemperatureColor.rgb * _TemperatureColor.a;
+            emission += lerp(_EmissiveColorLow1.rgb, _EmissiveColorHigh1.rgb, mapBSample.g)*mapBSample.g + lerp(_EmissiveColorLow2.rgb, _EmissiveColorHigh2.rgb, mapBSample.b)*mapBSample.b;
+
+            o.Albedo = albedo;
+            o.Emission = emission.rgb;
+            o.Smoothness = saturate(mainSample.a + _MetallicGloss * metallic) * _BurnColor.r;
+            o.Metallic = saturate(mapBSample.r + metallic);
+            o.Occlusion = mapBSample.a;
+            o.Normal = normal;
+
+            o.Emission *= _Opacity;
+            o.Alpha = _Opacity;
+
+
+            #if _VCOL_RGBA
+                o.Albedo *= IN.color.rgb;
+                o.Occlusion *= IN.color.a;           
+            #endif
+            #if _VCOL_OCCLUSION
+                o.Smoothness *= IN.color.r;
+                o.Occlusion *= IN.color.r;
+            #endif
+
+//                o.Albedo *= float3(1, 0, 0);
+
+ //           #if ENABLE_VC
+ //               #if !ENABLE_VCAO
+ //               o.Albedo *= IN.color.rgb;
+  //              o.Occlusion *= IN.color.a;
+  //              #endif
+//
+ //               #if ENABLE_VCAO
+ //               o.Smoothness *= IN.color.r;
+ //               o.Occlusion *= IN.color.r;
+ //               #endif
+ //           #endif
+        }
+    ENDCG
+    }
+    Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/ParticleAdd.shader
@@ -1,1 +1,115 @@
+Shader "KSP/Particles/Additive"
+{
+	Properties
+	{
+		_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
+		_MainTex ("Particle Texture", 2D) = "white" {}
+		_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
+	}
 
+	Category
+	{
+		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+		Blend SrcAlpha One
+		AlphaTest Greater .01
+		ColorMask RGB
+		Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
+		BindChannels {
+			Bind "Color", color
+			Bind "Vertex", vertex
+			Bind "TexCoord", texcoord
+	}
+	
+		// ---- Fragment program cards
+		SubShader
+		{
+			Pass
+			{
+		
+				CGPROGRAM
+				#pragma vertex vert
+				#pragma fragment frag
+				#pragma fragmentoption ARB_precision_hint_fastest
+				#pragma multi_compile_particles
+
+				#include "UnityCG.cginc"
+
+				sampler2D _MainTex;
+				fixed4 _TintColor;
+			
+				struct appdata_t
+				{
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+				};
+
+				struct v2f
+				{
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+					#ifdef SOFTPARTICLES_ON
+					float4 projPos : TEXCOORD1;
+					#endif
+				};
+			
+				float4 _MainTex_ST;
+
+				v2f vert (appdata_t v)
+				{
+					v2f o;
+					o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
+					#ifdef SOFTPARTICLES_ON
+					o.projPos = ComputeScreenPos (o.vertex);
+					COMPUTE_EYEDEPTH(o.projPos.z);
+					#endif
+					o.color = v.color;
+					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+					return o;
+				}
+
+				sampler2D _CameraDepthTexture;
+				float _InvFade;
+			
+				fixed4 frag (v2f i) : COLOR
+				{
+					#ifdef SOFTPARTICLES_ON
+					float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
+					float partZ = i.projPos.z;
+					float fade = saturate (_InvFade * (sceneZ-partZ));
+					i.color.a *= fade;
+					#endif
+				
+					return 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord);
+				}
+				ENDCG 
+			}
+		} 	
+	
+		// ---- Dual texture cards
+		SubShader {
+			Pass {
+				SetTexture [_MainTex] {
+					constantColor [_TintColor]
+					combine constant * primary
+				}
+				SetTexture [_MainTex] {
+					combine texture * previous DOUBLE
+				}
+			}
+		}
+	
+		// ---- Single texture cards (does not do color tint)
+		SubShader
+		{
+			Pass
+			{
+				SetTexture [_MainTex] { 
+					combine texture * primary 
+				}
+			}
+		}
+	}
+}
+

--- /dev/null
+++ b/Assets/PartTools/Shaders/ParticleAdditiveFresnel.shader
@@ -1,1 +1,86 @@
+// Shader created with Shader Forge v1.18 
+// Shader Forge (c) Neat Corporation / Joachim Holmer - http://www.acegikmo.com/shaderforge/
+// Note: Manually altering this data may prevent you from opening it in Shader Forge
+/*SF_DATA;ver:1.18;sub:START;pass:START;ps:flbk:,iptp:0,cusa:False,bamd:0,lico:1,lgpr:1,limd:0,spmd:1,trmd:0,grmd:0,uamb:True,mssp:True,bkdf:False,hqlp:False,rprd:False,enco:False,rmgx:True,rpth:0,hqsc:True,nrmq:1,nrsp:0,vomd:0,spxs:False,tesm:0,culm:2,bsrc:0,bdst:0,dpts:2,wrdp:False,dith:0,rfrpo:True,rfrpn:Refraction,coma:15,ufog:True,aust:True,igpj:True,qofs:0,qpre:3,rntp:2,fgom:False,fgoc:True,fgod:False,fgor:False,fgmd:0,fgcr:0,fgcg:0,fgcb:0,fgca:1,fgde:0.01,fgrn:0,fgrf:300,stcl:False,stva:128,stmr:255,stmw:255,stcp:6,stps:0,stfa:0,stfz:0,ofsf:0,ofsu:0,f2p0:False;n:type:ShaderForge.SFN_Final,id:4795,x:32987,y:32660,varname:node_4795,prsc:2|emission-1451-OUT;n:type:ShaderForge.SFN_Tex2d,id:6074,x:32235,y:32601,ptovrint:False,ptlb:MainTex,ptin:_MainTex,varname:_MainTex,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,ntxv:0,isnm:False;n:type:ShaderForge.SFN_Multiply,id:2393,x:32495,y:32793,varname:node_2393,prsc:2|A-6074-RGB,B-2053-RGB,C-797-RGB,D-9248-OUT,E-6554-OUT;n:type:ShaderForge.SFN_VertexColor,id:2053,x:32235,y:32772,varname:node_2053,prsc:2;n:type:ShaderForge.SFN_Color,id:797,x:32235,y:32930,ptovrint:True,ptlb:Color,ptin:_TintColor,varname:_TintColor,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,c1:0.5,c2:0.5,c3:0.5,c4:1;n:type:ShaderForge.SFN_Vector1,id:9248,x:32235,y:33081,varname:node_9248,prsc:2,v1:2;n:type:ShaderForge.SFN_Fresnel,id:3878,x:32179,y:33234,varname:node_3878,prsc:2|EXP-8837-OUT;n:type:ShaderForge.SFN_Slider,id:8837,x:31808,y:33254,ptovrint:False,ptlb:Fresnel Exponent,ptin:_FresnelExponent,varname:node_8837,prsc:2,glob:False,taghide:False,taghdr:False,tagprd:False,tagnsco:False,tagnrm:False,min:1,cur:2.944261,max:4;n:type:ShaderForge.SFN_Subtract,id:6554,x:32506,y:33094,varname:node_6554,prsc:2|A-4911-OUT,B-3878-OUT;n:type:ShaderForge.SFN_Vector1,id:4911,x:32235,y:33139,varname:node_4911,prsc:2,v1:1;n:type:ShaderForge.SFN_Multiply,id:1451,x:32673,y:32885,varname:node_1451,prsc:2|A-2393-OUT,B-797-A;proporder:6074-797-8837;pass:END;sub:END;*/
 
+Shader "Shader Forge/ParticleAdditiveFresnel" {
+    Properties {
+        _MainTex ("MainTex", 2D) = "white" {}
+        _TintColor ("Color", Color) = (0.5,0.5,0.5,1)
+        _FresnelExponent ("Fresnel Exponent", Range(1, 4)) = 2.944261
+    }
+    SubShader {
+        Tags {
+            "IgnoreProjector"="True"
+            "Queue"="Transparent"
+            "RenderType"="Transparent"
+        }
+        Pass {
+            Name "FORWARD"
+            Tags {
+                "LightMode"="ForwardBase"
+            }
+            Blend One One
+            Cull Off
+            ZWrite Off
+            
+            CGPROGRAM
+            #pragma vertex vert
+            #pragma fragment frag
+            #define UNITY_PASS_FORWARDBASE
+            #include "UnityCG.cginc"
+            #pragma multi_compile_fwdbase
+            #pragma multi_compile_fog
+            #pragma exclude_renderers gles3 metal d3d11_9x xbox360 xboxone ps3 ps4 psp2 
+            #pragma target 3.0
+            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
+            uniform float4 _TintColor;
+            uniform float _FresnelExponent;
+            struct VertexInput {
+                float4 vertex : POSITION;
+                float3 normal : NORMAL;
+                float2 texcoord0 : TEXCOORD0;
+                float4 vertexColor : COLOR;
+            };
+            struct VertexOutput {
+                float4 pos : SV_POSITION;
+                float2 uv0 : TEXCOORD0;
+                float4 posWorld : TEXCOORD1;
+                float3 normalDir : TEXCOORD2;
+                float4 vertexColor : COLOR;
+                UNITY_FOG_COORDS(3)
+            };
+            VertexOutput vert (VertexInput v) {
+                VertexOutput o = (VertexOutput)0;
+                o.uv0 = v.texcoord0;
+                o.vertexColor = v.vertexColor;
+                o.normalDir = UnityObjectToWorldNormal(v.normal);
+                o.posWorld = mul(_Object2World, v.vertex);
+                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
+                UNITY_TRANSFER_FOG(o,o.pos);
+                return o;
+            }
+            float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
+                float isFrontFace = ( facing >= 0 ? 1 : 0 );
+                float faceSign = ( facing >= 0 ? 1 : -1 );
+                i.normalDir = normalize(i.normalDir);
+                i.normalDir *= faceSign;
+/////// Vectors:
+                float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
+                float3 normalDirection = i.normalDir;
+////// Lighting:
+////// Emissive:
+                float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
+                float3 emissive = ((_MainTex_var.rgb*i.vertexColor.rgb*_TintColor.rgb*2.0*(1.0-pow(1.0-max(0,dot(normalDirection, viewDirection)),_FresnelExponent)))*_TintColor.a);
+                float3 finalColor = emissive;
+                fixed4 finalRGBA = fixed4(finalColor,1);
+                UNITY_APPLY_FOG_COLOR(i.fogCoord, finalRGBA, fixed4(0,0,0,1));
+                return finalRGBA;
+            }
+            ENDCG
+        }
+    }
+    FallBack "Diffuse"
+    CustomEditor "ShaderForgeMaterialInspector"
+}
+

--- /dev/null
+++ b/Assets/PartTools/Shaders/ParticleAlpha.shader
@@ -1,1 +1,118 @@
+Shader "KSP/Particles/Alpha Blended"
+{
+	Properties
+	{
+		_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
+		_MainTex ("Particle Texture", 2D) = "white" {}
+		_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
+	}
 
+	Category
+	{
+		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+		Blend SrcAlpha OneMinusSrcAlpha
+		AlphaTest Greater .01
+		ColorMask RGB
+		Cull Off Lighting Off ZWrite Off
+		BindChannels {
+			Bind "Color", color
+			Bind "Vertex", vertex
+			Bind "TexCoord", texcoord
+	}
+	
+		// ---- Fragment program cards
+		SubShader
+		{
+			Pass
+			{
+		
+				CGPROGRAM
+				#pragma vertex vert
+				#pragma fragment frag
+				#pragma fragmentoption ARB_precision_hint_fastest
+				#pragma multi_compile_particles
+			
+				#include "UnityCG.cginc"
+
+				sampler2D _MainTex;
+				fixed4 _TintColor;
+			
+				struct appdata_t {
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+				};
+
+				struct v2f {
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+					#ifdef SOFTPARTICLES_ON
+					float4 projPos : TEXCOORD1;
+					#endif
+				};
+			
+				float4 _MainTex_ST;
+
+				v2f vert (appdata_t v)
+				{
+					v2f o;
+					o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
+					#ifdef SOFTPARTICLES_ON
+					o.projPos = ComputeScreenPos (o.vertex);
+					COMPUTE_EYEDEPTH(o.projPos.z);
+					#endif
+					o.color = v.color;
+					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+					return o;
+				}
+
+				sampler2D _CameraDepthTexture;
+				float _InvFade;
+			
+				fixed4 frag (v2f i) : COLOR
+				{
+					#ifdef SOFTPARTICLES_ON
+					float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
+					float partZ = i.projPos.z;
+					float fade = saturate (_InvFade * (sceneZ-partZ));
+					i.color.a *= fade;
+					#endif
+				
+					return 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord);
+				}
+				ENDCG 
+			}
+		} 	
+	
+		// ---- Dual texture cards
+		SubShader
+		{
+			Pass
+			{
+				SetTexture [_MainTex]
+				{
+					constantColor [_TintColor]
+					combine constant * primary
+				}
+				SetTexture [_MainTex]
+				{
+					combine texture * previous DOUBLE
+				}
+			}
+		}
+	
+		// ---- Single texture cards (does not do color tint)
+		SubShader
+		{
+			Pass
+			{
+				SetTexture [_MainTex]
+				{
+					combine texture * primary
+				}
+			}
+		}
+	}
+}
+

--- /dev/null
+++ b/Assets/PartTools/Shaders/ScrollingUnlit.shader
@@ -1,1 +1,109 @@
+Shader "KSP/FX/ScrollingUnlit"
+{
+	Properties 
+	{
+        _MainTex("MainTex (RGB Alpha(A))", 2D) = "white" {}
+		_Color("Color (RGB Alpha(A))", Color) = (1,1,1,1)
+        [Space]
+		_SpeedX("Scroll Speed X", Float) = 0
+        _SpeedY("Scroll Speed Y", Float) = 1
+        [Space]
+        [KeywordEnum(UV, Screen Space)] _TexCoord("Texture Coordinates", Float) = 0
+        _TileX("ScreenSpace Tiling X", Float) = 1
+        _TileY("ScreenSpace Tiling Y", Float) = 1
+        [Space]
+        [KeywordEnum(Off, Outer, Inner)] _Fresnel("Fresnel Fade", Float) = 0
+        _FresnelPow("Fresnel Falloff", Range(0,5)) = 1
+        _FresnelInt("Fresnel Intensity", Range(0,1)) = 1
+	}
+	
+	SubShader 
+	{
+		Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
 
+		Pass
+		{
+			ZWrite On
+			ColorMask 0
+		}
+
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf Unlit noforwardadd noshadow noambient novertexlights alpha:fade
+		#pragma target 3.0
+        #pragma multi_compile _TEXCOORD_UV _TEXCOORD_SCREEN_SPACE
+        #pragma multi_compile _FRESNEL_OFF _FRESNEL_OUTER _FRESNEL_INNER
+
+
+		sampler2D _MainTex;
+
+        float _SpeedX;
+        float _SpeedY;
+        float _TileX;
+        float _TileY;
+
+        #if !_FRESNEL_OFF
+        float _FresnelPow;
+        float _FresnelInt;
+        #endif
+
+        struct Input
+		{
+            #if _TEXCOORD_UV
+            float2 uv_MainTex;
+            #endif
+
+            #if _TEXCOORD_SCREEN_SPACE
+            float4 screenPos;
+            #endif
+
+            #if !_FRESNEL_OFF
+            float3 viewDir;
+            #endif
+        };
+
+
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+            #if _TEXCOORD_SCREEN_SPACE
+            float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
+            screenUV.x += _Time * _SpeedX;
+            screenUV.y += _Time * _SpeedY;
+            screenUV.x *= _TileX;
+            screenUV.y *= _TileY;
+            float4 c = tex2D(_MainTex, (screenUV));
+            #endif
+
+
+            #if _TEXCOORD_UV
+            fixed2 scrollUV = IN.uv_MainTex ;            
+            fixed xScrollValue = _SpeedX * _Time.x;
+            fixed yScrollValue = _SpeedY * _Time.x;
+            scrollUV += fixed2(xScrollValue, yScrollValue);
+            half4 c = tex2D(_MainTex, scrollUV);
+            #endif
+		    float3 normal = float3(0,0,1);
+
+			o.Albedo = c.rgb * _Color.rgb;
+			o.Normal = normal;
+			o.Alpha = c.a * _Color.a;
+
+            #if _FRESNEL_INNER
+            half rim = 1.0 - saturate(dot(normalize(IN.viewDir), float3(0, 0, 1)));
+            o.Alpha *= lerp(pow(rim, _FresnelPow), 1, 1- _FresnelInt);
+            #endif
+            #if _FRESNEL_OUTER
+            half rim = 1.0 - saturate(dot(normalize(IN.viewDir), float3(0, 0, 1)));
+            o.Alpha *= lerp(pow(1 - rim, _FresnelPow), 1, 1 - _FresnelInt);
+            #endif
+
+		}
+		ENDCG
+	}
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/SolidColorAlpha.shader
@@ -1,1 +1,49 @@
+Shader "Solid Color (Alpha)" {
+	Properties 
+	{
+		_Color ("Color", Color) = (0.5, 0.5, 0.5, 0.5)
+	}
+	SubShader
+	{
+		
+		ZWrite On
+        GrabPass { }
+		Pass
+		{
+			Fog { Mode Off }
+			Blend SrcAlpha OneMinusSrcAlpha
 
+			CGPROGRAM
+
+			#pragma vertex vert
+			#pragma fragment frag
+	
+			fixed4 _Color;
+			sampler2D _GrabTexture;
+
+			struct appdata
+			{
+				float4 vertex : POSITION;
+			};
+			struct v2f
+			{
+				float4 pos : SV_POSITION;
+				float4 uv : TEXCOORD0;
+			};
+			v2f vert (appdata v)
+			{
+				v2f o;
+				o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
+				o.uv = o.pos;
+				return o;
+			}
+			half4 frag(v2f i) : COLOR
+			{
+				float2 coord = 0.5 + 0.5 * i.uv.xy / i.uv.w;
+				fixed4 tex = tex2D(_GrabTexture, float2(coord.x, 1 - coord.y));
+				return fixed4(lerp(tex.rgb, _Color.rgb, _Color.a), 1);
+			}
+			ENDCG
+		}
+	}
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/Specular.shader
@@ -1,1 +1,71 @@
+Shader "KSP/Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "gray" {}
+		_Color ("MainColor", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf BlinnPhongSmooth keepalpha
+		#pragma target 3.0
+
+		half _Shininess;
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/SpecularBumpTransparent.shader
@@ -1,1 +1,89 @@
+Shader "KSP/Bumped Specular (Transparent)"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		
+		_MainColor ("Main Color", Color) = (1,1,1,1)
+		
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_Fresnel("Fresnel", Range(0,10)) = 0
+		[MaterialToggle] _FresnelInvert("Invert Fresnel", Float) = 0
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
+		
+		Pass 
+		{
+			ZWrite On
+			ColorMask 0
+		}
+		
+		//ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf BlinnPhongSmooth alpha:fade
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+		
+		float4 _MainColor;
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		float _Fresnel;
+		float _FresnelInvert;
+		float _Brightness;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _MainColor * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+			
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 fresnel = (_FresnelInvert + (pow(1 - rim, _Fresnel))) * (1 - _FresnelInvert + 1 - (pow(1 - rim, _Fresnel)));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+            o.Gloss = color.a;
+            o.Specular = _Shininess;
+			o.Normal = normal;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity * color.a * fresnel;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/SpecularTransparent.shader
@@ -1,1 +1,82 @@
+Shader "KSP/Specular (Transparent)"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_MainColor ("Main Color", Color) = (1,1,1,1)
+		
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_Fresnel("Fresnel", Range(0,10)) = 0
+		[MaterialToggle] _FresnelInvert("Invert Fresnel", Float) = 0
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
+		
+		Pass 
+		{
+			ZWrite On
+			ColorMask 0
+		}
+		
+		//ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+		
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf BlinnPhongSmooth alpha:fade
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		
+		float4 _MainColor;
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		float _Fresnel;
+		float _FresnelInvert;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float3 viewDir;
+			float3 worldNormal;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _MainColor * _BurnColor;
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), IN.worldNormal));
+
+			float3 fresnel = (_FresnelInvert + (pow(1 - rim, _Fresnel))) * (1 - _FresnelInvert + 1 - (pow(1 - rim, _Fresnel)));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+            o.Gloss = color.a;
+            o.Specular = _Shininess;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity * color.a * fresnel;
+		}
+		ENDCG
+		
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/Unlit.shader
@@ -1,1 +1,67 @@
+Shader "KSP/Unlit"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB)", 2D) = "white" {}
+		_Color("Color", Color) = (1,1,1,1)
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+        #include "LightingKSP.cginc"
+		#pragma surface surf Unlit noforwardadd noshadow noambient novertexlights keepalpha
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+
+
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = _Color.rgb * color.rgb + emission;
+			//o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/UnlitColor.shader
@@ -1,1 +1,38 @@
+Shader "KSP/UnlitColor"
+{
+	Properties 
+	{
+		_Color("Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+        Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
 
+        Pass
+        {
+            ZWrite On
+            ColorMask 0
+        }
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+        #include "LightingKSP.cginc"
+		#pragma surface surf Unlit noforwardadd noshadow noambient novertexlights alpha:fade
+		#pragma target 3.0
+        struct Input
+        {
+            float4 color : COLOR; //vertex color
+        };
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			o.Albedo = _Color.rgb * IN.color.rgb;
+			o.Alpha = _Color.a * IN.color.a;
+		}
+		ENDCG
+	}
+	Fallback "Unlit/Color"
+}

--- /dev/null
+++ b/Assets/PartTools/Shaders/UnlitTransparent.shader
@@ -1,1 +1,77 @@
+Shader "KSP/Alpha/Unlit Transparent"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGB Alpha(A))", 2D) = "white" {}
+		_Color("Color", Color) = (1,1,1,1)
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_Fresnel("Fresnel", Range(0,10)) = 0
+		[MaterialToggle] _FresnelInvert("Invert Fresnel", Float) = 0
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
+
+		Pass
+		{
+			ZWrite On
+			ColorMask 0
+		}
+
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+        #include "LightingKSP.cginc"
+		#pragma surface surf Unlit noforwardadd noshadow noambient novertexlights alpha:fade
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _Fresnel;
+		float _FresnelInvert;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+
+
+        struct Input
+		{
+            float2 uv_MainTex;
+			float3 viewDir;
+        };
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+			float alpha = _Color.a * color.a;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+			float3 fresnel = (_FresnelInvert + (pow(1 - rim, _Fresnel))) * (1 - _FresnelInvert + 1 - (pow(1 - rim, _Fresnel)));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = _Color.rgb * color.rgb + emission;
+			//o.Emission = emission * _Opacity;
+			o.Normal = normal;
+			o.Alpha = _Color.a * color.a * _Opacity * fresnel;
+		}
+		ENDCG
+	}
+	Fallback "Standard"
+}

 Binary files /dev/null and b/Assets/Plugins/KSPAssets/KSPAssetCompiler.dll differ
 Binary files /dev/null and b/Assets/Plugins/KSPAssets/KSPAssets.dll differ
--- /dev/null
+++ b/Assets/Plugins/KSPAssets/ReadMe.txt
@@ -1,1 +1,1 @@
-
+KSPAssets ReadMe v1

 Binary files a/Assets/Plugins/KerbalEngineer.Unity.dll and b/Assets/Plugins/KerbalEngineer.Unity.dll differ
--- a/Assets/Prefabs/FlightMenu.prefab
+++ b/Assets/Prefabs/FlightMenu.prefab
@@ -1,21 +1,5 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
---- !u!1 &104160
-GameObject:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  serializedVersion: 4
-  m_Component:
-  - 224: {fileID: 22478204}
-  - 114: {fileID: 11445012}
-  m_Layer: 5
-  m_Name: Space
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
 --- !u!1 &104452
 GameObject:
   m_ObjectHideFlags: 1
@@ -33,6 +17,25 @@
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!1 &114528
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22468796}
+  - 222: {fileID: 22254028}
+  - 114: {fileID: 11494262}
+  - 114: {fileID: 11482720}
+  - 114: {fileID: 11400468}
+  m_Layer: 5
+  m_Name: ToggleControlBar
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &116014
 GameObject:
   m_ObjectHideFlags: 0
@@ -42,7 +45,6 @@
   m_Component:
   - 224: {fileID: 22475412}
   - 222: {fileID: 22223226}
-  - 114: {fileID: 11409704}
   - 114: {fileID: 11424646}
   m_Layer: 5
   m_Name: Content
@@ -62,9 +64,10 @@
   - 222: {fileID: 22201528}
   - 114: {fileID: 11404586}
   - 114: {fileID: 11461688}
-  - 114: {fileID: 11415068}
+  - 114: {fileID: 11420706}
+  - 114: {fileID: 11482140}
   m_Layer: 5
-  m_Name: ToggleControlBar
+  m_Name: NewCustomSection
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -83,6 +86,8 @@
   - 114: {fileID: 11485532}
   - 225: {fileID: 22567868}
   - 114: {fileID: 11415294}
+  - 114: {fileID: 11447982}
+  - 114: {fileID: 11478508}
   m_Layer: 5
   m_Name: FlightMenu
   m_TagString: Untagged
@@ -168,8 +173,26 @@
   - 222: {fileID: 22267572}
   - 114: {fileID: 11463504}
   - 114: {fileID: 11453198}
+  - 114: {fileID: 11400370}
   m_Layer: 5
   m_Name: Titlebar
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &157290
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22435482}
+  - 114: {fileID: 11462752}
+  - 114: {fileID: 11483978}
+  m_Layer: 5
+  m_Name: Sections
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -192,6 +215,23 @@
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!1 &193852
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22411946}
+  - 222: {fileID: 22255200}
+  - 114: {fileID: 11465050}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &194088
 GameObject:
   m_ObjectHideFlags: 1
@@ -202,8 +242,8 @@
   - 224: {fileID: 22469574}
   - 222: {fileID: 22281674}
   - 114: {fileID: 11498756}
-  - 114: {fileID: 11451984}
-  - 114: {fileID: 11485338}
+  - 114: {fileID: 11483870}
+  - 114: {fileID: 11489252}
   m_Layer: 5
   m_Name: ToggleShowEngineer
   m_TagString: Untagged
@@ -211,6 +251,74 @@
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!114 &11400370
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 156848}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 1
+--- !u!114 &11400468
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 114528}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 0
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
+    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
+    m_ColorMultiplier: 1
+    m_FadeDuration: .100000001
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11494262}
+  toggleTransition: 0
+  graphic: {fileID: 11459182}
+  m_Group: {fileID: 0}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 11415294}
+        m_MethodName: SetControlBarVisible
+        m_Mode: 0
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+    m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_IsOn: 0
 --- !u!114 &11403342
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -223,7 +331,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -255,7 +363,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .501960814}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -270,34 +378,24 @@
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
---- !u!114 &11409704
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 116014}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: .313725501, g: .313725501, b: .313725501, a: .70588237}
-  m_RaycastTarget: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
-      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
-  m_Sprite: {fileID: 0}
-  m_Type: 1
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
---- !u!114 &11415068
+--- !u!114 &11415294
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 126098}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 571159103, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ShowEngineerToggle: {fileID: 11489252}
+  m_ControlBarToggle: {fileID: 11400468}
+  m_MenuSectionPrefab: {fileID: 130812, guid: 2147dc5ac8aa16a4ca2003dfcd024533, type: 2}
+  m_SectionsTransform: {fileID: 22435482}
+  m_FastFadeDuration: .200000003
+  m_SlowFadeDuration: .200000003
+--- !u!114 &11420706
 MonoBehaviour:
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
@@ -305,7 +403,7 @@
   m_GameObject: {fileID: 122098}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Navigation:
@@ -314,11 +412,11 @@
     m_SelectOnDown: {fileID: 0}
     m_SelectOnLeft: {fileID: 0}
     m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
+  m_Transition: 0
   m_Colors:
     m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
-    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_HighlightedColor: {r: .467545569, g: 1, b: .448529422, a: 1}
+    m_PressedColor: {r: .800000072, g: 1, b: 0, a: 1}
     m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
     m_ColorMultiplier: 1
     m_FadeDuration: .100000001
@@ -333,15 +431,12 @@
     m_DisabledTrigger: Disabled
   m_Interactable: 1
   m_TargetGraphic: {fileID: 11404586}
-  toggleTransition: 1
-  graphic: {fileID: 11459182}
-  m_Group: {fileID: 0}
-  onValueChanged:
+  m_OnClick:
     m_PersistentCalls:
       m_Calls:
       - m_Target: {fileID: 11415294}
-        m_MethodName: SetControlBar
-        m_Mode: 0
+        m_MethodName: NewCustomSection
+        m_Mode: 1
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
           m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
@@ -350,26 +445,8 @@
           m_StringArgument: 
           m_BoolArgument: 0
         m_CallState: 2
-    m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
-  m_IsOn: 0
---- !u!114 &11415294
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 126098}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 571159103, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_ShowEngineerToggle: {fileID: 11485338}
-  m_ControlBarToggle: {fileID: 11415068}
-  m_MenuSectionPrefab: {fileID: 130812, guid: 1755c05344f574d4787a372d34a4e3fb, type: 2}
-  m_ContentTransform: {fileID: 22475412}
-  m_FastFadeDuration: .200000003
-  m_SlowFadeDuration: .5
 --- !u!114 &11423044
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -400,7 +477,7 @@
     m_Top: 4
     m_Bottom: 4
   m_ChildAlignment: 0
-  m_Spacing: 4
+  m_Spacing: 2
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 0
 --- !u!114 &11439582
@@ -450,45 +527,36 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 15
+  m_PreferredHeight: 18
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
---- !u!114 &11445012
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 104160}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreLayout: 0
-  m_MinWidth: -1
-  m_MinHeight: -1
-  m_PreferredWidth: -1
-  m_PreferredHeight: -1
-  m_FlexibleWidth: -1
-  m_FlexibleHeight: -1
---- !u!114 &11451984
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 194088}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreLayout: 0
-  m_MinWidth: -1
-  m_MinHeight: -1
-  m_PreferredWidth: -1
-  m_PreferredHeight: 15
-  m_FlexibleWidth: -1
-  m_FlexibleHeight: -1
+--- !u!114 &11447982
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 126098}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &11453198
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -519,7 +587,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .784313738}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -549,9 +617,29 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 15
+  m_PreferredHeight: 18
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
+--- !u!114 &11462752
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 157290}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 1
+    m_Bottom: 1
+  m_ChildAlignment: 0
+  m_Spacing: 0
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 0
 --- !u!114 &11463504
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -564,7 +652,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .183823526, g: .183823526, b: .183823526, a: .90196079}
+  m_Color: {r: .600000024, g: .600000024, b: .600000024, a: .784313738}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -579,19 +667,19 @@
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
---- !u!114 &11465882
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 137786}
+--- !u!114 &11465050
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 193852}
   m_Enabled: 1
   m_EditorHideFlags: 0
   m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -611,6 +699,38 @@
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: CONTROL BAR
+--- !u!114 &11465882
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 137786}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 10
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: NEW CUSTOM SECTION
 --- !u!114 &11475868
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -623,7 +743,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .784313738}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -638,7 +758,88 @@
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
---- !u!114 &11485338
+--- !u!114 &11478508
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 126098}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 1
+--- !u!114 &11482140
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 122098}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 3
+--- !u!114 &11482720
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 114528}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 4
+--- !u!114 &11483870
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 194088}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 4
+--- !u!114 &11483978
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 157290}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 0
+  m_VerticalFit: 2
+--- !u!114 &11485532
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 126098}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 0
+  m_Spacing: 0
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+--- !u!114 &11489252
 MonoBehaviour:
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
@@ -655,7 +856,7 @@
     m_SelectOnDown: {fileID: 0}
     m_SelectOnLeft: {fileID: 0}
     m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
+  m_Transition: 0
   m_Colors:
     m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
     m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
@@ -674,14 +875,14 @@
     m_DisabledTrigger: Disabled
   m_Interactable: 1
   m_TargetGraphic: {fileID: 11498756}
-  toggleTransition: 1
+  toggleTransition: 0
   graphic: {fileID: 11475868}
   m_Group: {fileID: 0}
   onValueChanged:
     m_PersistentCalls:
       m_Calls:
       - m_Target: {fileID: 11415294}
-        m_MethodName: SetShowEngineer
+        m_MethodName: SetDisplayStackVisible
         m_Mode: 0
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -694,26 +895,33 @@
     m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
   m_IsOn: 0
---- !u!114 &11485532
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 126098}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Padding:
-    m_Left: 0
-    m_Right: 0
-    m_Top: 0
-    m_Bottom: 0
-  m_ChildAlignment: 0
-  m_Spacing: 0
-  m_ChildForceExpandWidth: 1
-  m_ChildForceExpandHeight: 1
+--- !u!114 &11494262
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 114528}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &11498756
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -726,7 +934,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .501960814}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -765,6 +973,18 @@
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 172308}
+--- !u!222 &22254028
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 114528}
+--- !u!222 &22255200
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 193852}
 --- !u!222 &22255938
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -811,14 +1031,13 @@
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
-  - {fileID: 22454998}
   - {fileID: 22444606}
-  m_Father: {fileID: 22478174}
-  m_RootOrder: 1
-  m_AnchorMin: {x: .5, y: 0}
-  m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 1, y: 0}
-  m_SizeDelta: {x: -2, y: 0}
+  m_Father: {fileID: 22475412}
+  m_RootOrder: 2
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: .5, y: .5}
 --- !u!224 &22401786
 RectTransform:
@@ -854,29 +1073,46 @@
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: .5, y: .5}
---- !u!224 &22444606
+--- !u!224 &22411946
 RectTransform:
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 137786}
+  m_GameObject: {fileID: 193852}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
-  m_Father: {fileID: 22401100}
+  m_Father: {fileID: 22468796}
   m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: .5, y: .5}
---- !u!224 &22454998
+--- !u!224 &22435482
 RectTransform:
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 104452}
+  m_GameObject: {fileID: 157290}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22475412}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22444606
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 137786}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
@@ -888,6 +1124,23 @@
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: .5, y: .5}
+--- !u!224 &22454998
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 104452}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22468796}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
 --- !u!224 &22463980
 RectTransform:
   m_ObjectHideFlags: 1
@@ -904,6 +1157,25 @@
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22468796
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 114528}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22454998}
+  - {fileID: 22411946}
+  m_Father: {fileID: 22478174}
+  m_RootOrder: 1
+  m_AnchorMin: {x: .5, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
   m_Pivot: {x: .5, y: .5}
 --- !u!224 &22469574
 RectTransform:
@@ -935,7 +1207,8 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 22478174}
-  - {fileID: 22478204}
+  - {fileID: 22435482}
+  - {fileID: 22401100}
   m_Father: {fileID: 22476196}
   m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
@@ -973,26 +1246,9 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 22469574}
-  - {fileID: 22401100}
+  - {fileID: 22468796}
   m_Father: {fileID: 22475412}
   m_RootOrder: 0
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: .5, y: .5}
---- !u!224 &22478204
-RectTransform:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 104160}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_Children: []
-  m_Father: {fileID: 22475412}
-  m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
@@ -1036,11 +1292,11 @@
     m_Modifications:
     - target: {fileID: 0}
       propertyPath: m_FastFadeDuration
-      value: .200000003
+      value: .100000001
       objectReference: {fileID: 0}
     - target: {fileID: 0}
       propertyPath: m_SlowFadeDuration
-      value: .5
+      value: .200000003
       objectReference: {fileID: 0}
     - target: {fileID: 0}
       propertyPath: m_ContentTransform

--- a/Assets/Prefabs/FlightMenuSection.prefab
+++ b/Assets/Prefabs/FlightMenuSection.prefab
@@ -10,8 +10,8 @@
   - 224: {fileID: 22409126}
   - 222: {fileID: 22266612}
   - 114: {fileID: 11461446}
-  - 114: {fileID: 11496274}
   - 114: {fileID: 11436568}
+  - 114: {fileID: 11403482}
   m_Layer: 5
   m_Name: ToggleDisplay
   m_TagString: Untagged
@@ -46,8 +46,8 @@
   - 224: {fileID: 22444842}
   - 222: {fileID: 22269896}
   - 114: {fileID: 11449350}
-  - 114: {fileID: 11489918}
   - 114: {fileID: 11421724}
+  - 114: {fileID: 11411294}
   m_Layer: 5
   m_Name: ToggleEdit
   m_TagString: Untagged
@@ -123,6 +123,18 @@
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
+--- !u!114 &11403482
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121376}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 4
 --- !u!114 &11408784
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -135,7 +147,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -155,6 +167,18 @@
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: DISPLAY
+--- !u!114 &11411294
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 130136}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 4
 --- !u!114 &11418436
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -167,7 +191,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .784313738}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -199,11 +223,11 @@
     m_SelectOnDown: {fileID: 0}
     m_SelectOnLeft: {fileID: 0}
     m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
+  m_Transition: 0
   m_Colors:
     m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
-    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_HighlightedColor: {r: .467545569, g: 1, b: .448529422, a: 1}
+    m_PressedColor: {r: .800000072, g: 1, b: 0, a: 1}
     m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
     m_ColorMultiplier: 1
     m_FadeDuration: .100000001
@@ -218,7 +242,7 @@
     m_DisabledTrigger: Disabled
   m_Interactable: 1
   m_TargetGraphic: {fileID: 11449350}
-  toggleTransition: 1
+  toggleTransition: 0
   graphic: {fileID: 11484356}
   m_Group: {fileID: 0}
   onValueChanged:
@@ -253,7 +277,7 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 15
+  m_PreferredHeight: 18
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
 --- !u!114 &11436568
@@ -273,11 +297,11 @@
     m_SelectOnDown: {fileID: 0}
     m_SelectOnLeft: {fileID: 0}
     m_SelectOnRight: {fileID: 0}
-  m_Transition: 1
+  m_Transition: 0
   m_Colors:
     m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
-    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
-    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_HighlightedColor: {r: .467545569, g: 1, b: .448529422, a: 1}
+    m_PressedColor: {r: .800000072, g: 1, b: 0, a: 1}
     m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
     m_ColorMultiplier: 1
     m_FadeDuration: .100000001
@@ -292,7 +316,7 @@
     m_DisabledTrigger: Disabled
   m_Interactable: 1
   m_TargetGraphic: {fileID: 11461446}
-  toggleTransition: 1
+  toggleTransition: 0
   graphic: {fileID: 11418436}
   m_Group: {fileID: 0}
   onValueChanged:
@@ -324,7 +348,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .501960814}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -351,7 +375,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .501960814}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -378,7 +402,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0, g: 0, b: 0, a: 1}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -410,7 +434,7 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: .800000072, g: 1, b: 0, a: .784313738}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -425,24 +449,6 @@
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
---- !u!114 &11489918
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 130136}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreLayout: 0
-  m_MinWidth: -1
-  m_MinHeight: -1
-  m_PreferredWidth: -1
-  m_PreferredHeight: 20
-  m_FlexibleWidth: -1
-  m_FlexibleHeight: -1
 --- !u!114 &11494744
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -451,30 +457,12 @@
   m_GameObject: {fileID: 130812}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: -1842827791, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
+  m_Script: {fileID: -1842827791, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_DisplayToggle: {fileID: 11436568}
   m_DisplayText: {fileID: 11408784}
   m_EditToggle: {fileID: 11421724}
---- !u!114 &11496274
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 121376}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreLayout: 0
-  m_MinWidth: -1
-  m_MinHeight: -1
-  m_PreferredWidth: -1
-  m_PreferredHeight: 20
-  m_FlexibleWidth: -1
-  m_FlexibleHeight: -1
 --- !u!222 &22219086
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -651,6 +639,78 @@
       propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
       value: SetEditorVisible
       objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_NormalColor.r
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_NormalColor.b
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_HighlightedColor.r
+      value: .467545569
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_HighlightedColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_HighlightedColor.b
+      value: .448529422
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_NormalColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_PressedColor.r
+      value: .800000072
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_PressedColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Colors.m_PressedColor.b
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_DisplayToggle
+      value: 
+      objectReference: {fileID: 11436568}
+    - target: {fileID: 0}
+      propertyPath: m_Transition
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.r
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.b
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.a
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_ElementType
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_PreferredHeight
+      value: 18
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: toggleTransition
+      value: 0
+      objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_ParentPrefab: {fileID: 0}
   m_RootGameObject: {fileID: 130812}

--- /dev/null
+++ b/Assets/Prefabs/Setting.prefab
@@ -1,1 +1,274 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &120186
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22457826}
+  - 222: {fileID: 22284884}
+  - 114: {fileID: 11446448}
+  m_Layer: 5
+  m_Name: Label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &139342
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22475724}
+  - 114: {fileID: 11457692}
+  - 114: {fileID: 11461286}
+  m_Layer: 5
+  m_Name: Setting
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &152604
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22432972}
+  - 114: {fileID: 11476120}
+  m_Layer: 5
+  m_Name: Buttons
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11446448
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 120186}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 12
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Setting Label
+--- !u!114 &11457692
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 139342}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: 400
+  m_PreferredHeight: 20
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
+--- !u!114 &11461286
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 139342}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 644905346, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Label: {fileID: 11446448}
+  m_ButtonsTransform: {fileID: 22432972}
+  m_SettingButtonPrefab: {fileID: 168214, guid: 345debd9876196a4e95d8718febe5301,
+    type: 2}
+  m_SettingTogglePrefab: {fileID: 153220, guid: b0b78ee2755669241a6e82c70b5988cf,
+    type: 2}
+--- !u!114 &11476120
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 152604}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 5
+  m_Spacing: 2
+  m_ChildForceExpandWidth: 0
+  m_ChildForceExpandHeight: 1
+--- !u!222 &22284884
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 120186}
+--- !u!224 &22432972
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 152604}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22475724}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 1, y: .5}
+--- !u!224 &22457826
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 120186}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22475724}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: .5, y: 1}
+  m_AnchoredPosition: {x: 2.5, y: 0}
+  m_SizeDelta: {x: -5, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22475724
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 139342}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22457826}
+  - {fileID: 22432972}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 0}
+      propertyPath: m_ButtonsTransform
+      value: 
+      objectReference: {fileID: 22432972}
+    - target: {fileID: 0}
+      propertyPath: m_Label
+      value: 
+      objectReference: {fileID: 11446448}
+    - target: {fileID: 0}
+      propertyPath: m_SettingButtonPrefab
+      value: 
+      objectReference: {fileID: 168214, guid: 345debd9876196a4e95d8718febe5301, type: 2}
+    - target: {fileID: 0}
+      propertyPath: m_SettingTogglePrefab
+      value: 
+      objectReference: {fileID: 153220, guid: b0b78ee2755669241a6e82c70b5988cf, type: 2}
+    - target: {fileID: 0}
+      propertyPath: m_Color.r
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.b
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Text
+      value: Setting Label
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_PreferredWidth
+      value: 400
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_SizeDelta.x
+      value: -5
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_AnchorMax.x
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Spacing
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_AnchoredPosition.x
+      value: 2.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_ChildForceExpandWidth
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_ChildAlignment
+      value: 5
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 139342}
+  m_IsPrefabParent: 1
 

--- /dev/null
+++ b/Assets/Prefabs/SettingButton.prefab
@@ -1,1 +1,260 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &168214
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22424224}
+  - 222: {fileID: 22268938}
+  - 114: {fileID: 11467924}
+  - 114: {fileID: 11423954}
+  - 114: {fileID: 11425436}
+  - 114: {fileID: 11431978}
+  m_Layer: 5
+  m_Name: SettingButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &190018
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22434708}
+  - 222: {fileID: 22253606}
+  - 114: {fileID: 11411402}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11411402
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 190018}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 12
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Button
+--- !u!114 &11423954
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168214}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 0
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
+    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
+    m_ColorMultiplier: 1
+    m_FadeDuration: .100000001
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11467924}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11425436
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168214}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 3
+--- !u!114 &11431978
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168214}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: -1
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
+--- !u!114 &11467924
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168214}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!222 &22253606
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 190018}
+--- !u!222 &22268938
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168214}
+--- !u!224 &22424224
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168214}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22434708}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22434708
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 190018}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22424224}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 0}
+      propertyPath: m_FontData.m_FontSize
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FontData.m_RichText
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_RaycastTarget
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.r
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.b
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FontData.m_FontStyle
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FlexibleWidth
+      value: -1
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 168214}
+  m_IsPrefabParent: 1
 

--- /dev/null
+++ b/Assets/Prefabs/SettingToggle.prefab
@@ -1,1 +1,344 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &112456
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22471524}
+  - 222: {fileID: 22262292}
+  - 114: {fileID: 11411192}
+  m_Layer: 5
+  m_Name: Selected
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &153220
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22458510}
+  - 222: {fileID: 22234250}
+  - 114: {fileID: 11474744}
+  - 114: {fileID: 11492986}
+  - 114: {fileID: 11473012}
+  - 114: {fileID: 11469566}
+  m_Layer: 5
+  m_Name: SettingToggle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &159822
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22412684}
+  - 222: {fileID: 22267242}
+  - 114: {fileID: 11484368}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11411192
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 112456}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11469566
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153220}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: -1
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
+--- !u!114 &11473012
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153220}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 0
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
+    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
+    m_ColorMultiplier: 1
+    m_FadeDuration: .100000001
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11474744}
+  toggleTransition: 0
+  graphic: {fileID: 11411192}
+  m_Group: {fileID: 0}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_IsOn: 0
+--- !u!114 &11474744
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153220}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11484368
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 159822}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 12
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Button
+--- !u!114 &11492986
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153220}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 4
+--- !u!222 &22234250
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153220}
+--- !u!222 &22262292
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 112456}
+--- !u!222 &22267242
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 159822}
+--- !u!224 &22412684
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 159822}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22458510}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22458510
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153220}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22471524}
+  - {fileID: 22412684}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22471524
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 112456}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22458510}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 0}
+      propertyPath: m_ElementType
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Transition
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FontData.m_FontSize
+      value: 12
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FontData.m_RichText
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_RaycastTarget
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.r
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Color.b
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FontData.m_FontStyle
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: toggleTransition
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_FlexibleWidth
+      value: -1
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 153220}
+  m_IsPrefabParent: 1
 

--- /dev/null
+++ b/Assets/Prefabs/Window.prefab
@@ -1,1 +1,731 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &115950
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22465080}
+  - 222: {fileID: 22224666}
+  - 114: {fileID: 11463020}
+  - 114: {fileID: 11473370}
+  - 114: {fileID: 11452824}
+  m_Layer: 5
+  m_Name: Titlebar
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &147848
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22498172}
+  - 222: {fileID: 22241544}
+  - 114: {fileID: 11472350}
+  - 114: {fileID: 11482324}
+  - 114: {fileID: 11478236}
+  m_Layer: 5
+  m_Name: Close
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &153670
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22461526}
+  - 222: {fileID: 22240064}
+  - 114: {fileID: 11470056}
+  - 114: {fileID: 11400662}
+  - 114: {fileID: 11453036}
+  - 225: {fileID: 22579498}
+  - 114: {fileID: 11464560}
+  - 114: {fileID: 11409628}
+  m_Layer: 5
+  m_Name: Window
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &158314
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22418124}
+  - 222: {fileID: 22254660}
+  - 114: {fileID: 11457960}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &173368
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22447524}
+  - 114: {fileID: 11403752}
+  - 114: {fileID: 11450476}
+  m_Layer: 5
+  m_Name: Padding
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &182900
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22456320}
+  - 114: {fileID: 11481312}
+  - 114: {fileID: 11443188}
+  - 222: {fileID: 22252016}
+  - 114: {fileID: 11454192}
+  - 114: {fileID: 11486264}
+  m_Layer: 5
+  m_Name: Content
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &194536
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22474276}
+  - 222: {fileID: 22295052}
+  - 114: {fileID: 11464580}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11400662
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 604723565, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Title: {fileID: 11464580}
+  m_Content: {fileID: 22456320}
+--- !u!114 &11403752
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173368}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 5
+    m_Right: 5
+    m_Top: 5
+    m_Bottom: 5
+  m_ChildAlignment: 0
+  m_Spacing: 0
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+--- !u!114 &11409628
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 0
+  m_VerticalFit: 2
+--- !u!114 &11443188
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 182900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 0
+  m_VerticalFit: 2
+--- !u!114 &11450476
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173368}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 0
+  m_VerticalFit: 2
+--- !u!114 &11452824
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 115950}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: 20
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
+--- !u!114 &11453036
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 1
+--- !u!114 &11454192
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 182900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11457960
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 158314}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 12
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: X
+--- !u!114 &11463020
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 115950}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: .600000024, g: .600000024, b: .600000024, a: .784313738}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11464560
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 0
+  m_Spacing: 0
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 0
+--- !u!114 &11464580
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 194536}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: .800000072, g: 1, b: 0, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 12
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: New Text
+--- !u!114 &11470056
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11472350
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 147848}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11473370
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 115950}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 1
+--- !u!114 &11478236
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 147848}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 3
+--- !u!114 &11481312
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 182900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 5
+    m_Right: 5
+    m_Top: 5
+    m_Bottom: 5
+  m_ChildAlignment: 0
+  m_Spacing: 2
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 0
+--- !u!114 &11482324
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 147848}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 0
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: .960784316, g: .960784316, b: .960784316, a: 1}
+    m_PressedColor: {r: .784313738, g: .784313738, b: .784313738, a: 1}
+    m_DisabledColor: {r: .784313738, g: .784313738, b: .784313738, a: .501960814}
+    m_ColorMultiplier: 1
+    m_FadeDuration: .100000001
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11472350}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 11400662}
+        m_MethodName: Close
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11486264
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 182900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_ElementType: 2
+--- !u!222 &22224666
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 115950}
+--- !u!222 &22240064
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+--- !u!222 &22241544
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 147848}
+--- !u!222 &22252016
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 182900}
+--- !u!222 &22254660
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 158314}
+--- !u!222 &22295052
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 194536}
+--- !u!224 &22418124
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 158314}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22498172}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22447524
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173368}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22456320}
+  m_Father: {fileID: 22461526}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22456320
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 182900}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22447524}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22461526
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22465080}
+  - {fileID: 22447524}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_AnchorMin: {x: .5, y: .5}
+  m_AnchorMax: {x: .5, y: .5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 100, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22465080
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 115950}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22474276}
+  - {fileID: 22498172}
+  m_Father: {fileID: 22461526}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: 1}
+--- !u!224 &22474276
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 194536}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22465080}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 2.5, y: 0}
+  m_SizeDelta: {x: -5, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22498172
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 147848}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22418124}
+  m_Father: {fileID: 22465080}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 1, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -2, y: 0}
+  m_SizeDelta: {x: 16, y: -4}
+  m_Pivot: {x: 1, y: .5}
+--- !u!225 &22579498
+CanvasGroup:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 153670}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 0}
+      propertyPath: m_Padding.m_Left
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Padding.m_Right
+      value: 5
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_Spacing
+      value: 2
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 153670}
+  m_IsPrefabParent: 1
 

--- a/Assets/Scenes/main.unity
+++ b/Assets/Scenes/main.unity
@@ -85,6 +85,11 @@
     cellSize: .166666672
     manualCellSize: 0
   m_NavMeshData: {fileID: 0}
+--- !u!224 &26094926 stripped
+RectTransform:
+  m_PrefabParentObject: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354,
+    type: 2}
+  m_PrefabInternal: {fileID: 1928878396}
 --- !u!1 &476101859
 GameObject:
   m_ObjectHideFlags: 0
@@ -138,7 +143,7 @@
       m_Calls: []
     m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
       Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
-  m_Sprite: {fileID: 21300000, guid: 0115c816d260a0947976c8ea804febbc, type: 3}
+  m_Sprite: {fileID: 21300000, guid: 4105bbb9c3877934f99f89c091ba0b8b, type: 3}
   m_Type: 0
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -152,300 +157,6 @@
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 476101859}
---- !u!1 &533639931
-GameObject:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  serializedVersion: 4
-  m_Component:
-  - 224: {fileID: 533639932}
-  - 114: {fileID: 533639933}
-  m_Layer: 5
-  m_Name: Space
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!224 &533639932
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 533639931}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_Children: []
-  m_Father: {fileID: 1587294051}
-  m_RootOrder: 1
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 0, y: 0}
-  m_Pivot: {x: .5, y: .5}
---- !u!114 &533639933
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 0}
-  m_GameObject: {fileID: 533639931}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_IgnoreLayout: 0
-  m_MinWidth: -1
-  m_MinHeight: -1
-  m_PreferredWidth: -1
-  m_PreferredHeight: -1
-  m_FlexibleWidth: -1
-  m_FlexibleHeight: -1
---- !u!224 &1026898450 stripped
-RectTransform:
-  m_PrefabParentObject: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f,
-    type: 2}
-  m_PrefabInternal: {fileID: 1220268543}
---- !u!1001 &1220268543
-Prefab:
-  m_ObjectHideFlags: 0
-  serializedVersion: 2
-  m_Modification:
-    m_TransformParent: {fileID: 1866791882}
-    m_Modifications:
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalPosition.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalRotation.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalRotation.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalRotation.z
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_LocalRotation.w
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_RootOrder
-      value: 2
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.x
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: 250
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 47
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMin.x
-      value: .5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMin.y
-      value: .5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMax.x
-      value: .5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMax.y
-      value: .5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Pivot.x
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Pivot.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMin.y
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMax.y
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.x
-      value: 125
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.y
-      value: -11.5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: 242
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 15
-      objectReference: {fileID: 0}
-    - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMin.y
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMax.y
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.x
-      value: 125
-      objectReference: {fileID: 0}
-    - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: 250
-      objectReference: {fileID: 0}
-    - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 20
-      objectReference: {fileID: 0}
-    - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMin.y
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchorMax.y
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.x
-      value: 125
-      objectReference: {fileID: 0}
-    - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.y
-      value: -33.5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: 250
-      objectReference: {fileID: 0}
-    - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 27
-      objectReference: {fileID: 0}
-    - target: {fileID: 11461688, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_PreferredHeight
-      value: 15
-      objectReference: {fileID: 0}
-    - target: {fileID: 11451984, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_PreferredHeight
-      value: 15
-      objectReference: {fileID: 0}
-    - target: {fileID: 150266, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Name
-      value: Selected
-      objectReference: {fileID: 0}
-    - target: {fileID: 138760, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Name
-      value: Text
-      objectReference: {fileID: 0}
-    - target: {fileID: 104452, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Name
-      value: Selected
-      objectReference: {fileID: 0}
-    - target: {fileID: 137786, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Name
-      value: Text
-      objectReference: {fileID: 0}
-    - target: {fileID: 11465882, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_FontData.m_FontSize
-      value: 10
-      objectReference: {fileID: 0}
-    - target: {fileID: 11403342, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_FontData.m_FontSize
-      value: 10
-      objectReference: {fileID: 0}
-    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.x
-      value: -1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: -2
-      objectReference: {fileID: 0}
-    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.x
-      value: 1
-      objectReference: {fileID: 0}
-    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: -2
-      objectReference: {fileID: 0}
-    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_AnchoredPosition.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 0
-      objectReference: {fileID: 0}
-    - target: {fileID: 11443382, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_PreferredHeight
-      value: 15
-      objectReference: {fileID: 0}
-    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Padding.m_Left
-      value: 4
-      objectReference: {fileID: 0}
-    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Padding.m_Right
-      value: 4
-      objectReference: {fileID: 0}
-    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Padding.m_Top
-      value: 4
-      objectReference: {fileID: 0}
-    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Padding.m_Bottom
-      value: 4
-      objectReference: {fileID: 0}
-    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_Spacing
-      value: 4
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-  m_ParentPrefab: {fileID: 100100000, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-  m_IsPrefabParent: 0
 --- !u!1 &1398276586
 GameObject:
   m_ObjectHideFlags: 0
@@ -520,11 +231,6 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_RootOrder: 2
---- !u!224 &1587294051 stripped
-RectTransform:
-  m_PrefabParentObject: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f,
-    type: 2}
-  m_PrefabInternal: {fileID: 1220268543}
 --- !u!1 &1866791878
 GameObject:
   m_ObjectHideFlags: 0
@@ -609,7 +315,7 @@
   m_Children:
   - {fileID: 2037475081}
   - {fileID: 476101860}
-  - {fileID: 1026898450}
+  - {fileID: 26094926}
   m_Father: {fileID: 0}
   m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
@@ -617,6 +323,132 @@
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0, y: 0}
+--- !u!1001 &1928878396
+Prefab:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 1866791882}
+    m_Modifications:
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 30
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMin.x
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMax.x
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_Pivot.x
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22461526, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_Pivot.y
+      value: .5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22456320, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22456320, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22456320, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 50
+      objectReference: {fileID: 0}
+    - target: {fileID: 22456320, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -25
+      objectReference: {fileID: 0}
+    - target: {fileID: 22456320, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 22456320, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 22465080, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22465080, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22465080, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 50
+      objectReference: {fileID: 0}
+    - target: {fileID: 22465080, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 22465080, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 20
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 100100000, guid: 1146896f042c04546abd10ef08dc0354, type: 2}
+  m_IsPrefabParent: 0
 --- !u!1 &2037475080
 GameObject:
   m_ObjectHideFlags: 0
@@ -670,7 +502,7 @@
       m_Calls: []
     m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
       Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
-  m_Sprite: {fileID: 21300000, guid: b0e2a09d07dbbcb40b0d4db43cd044f9, type: 3}
+  m_Sprite: {fileID: 21300000, guid: 696e4ea6d01cf324889c1a7fa0c2fb06, type: 3}
   m_Type: 0
   m_PreserveAspect: 0
   m_FillCenter: 1

--- a/Assets/Scripts/Editor/BuildAssetBundles.cs
+++ b/Assets/Scripts/Editor/BuildAssetBundles.cs
@@ -21,7 +21,7 @@
 
 public class BuildAssetBundles : MonoBehaviour
 {
-    [MenuItem("Assets/Build Asset Bundles")]
+    [MenuItem("Build/Asset Bundles")]
     public static void Build()
     {
         BuildPipeline.BuildAssetBundles(Application.dataPath + "/../Output/KerbalEngineer", BuildAssetBundleOptions.UncompressedAssetBundle);

 Binary files /dev/null and b/Assets/SquadCore/KSPedia/Backgrounds/BackgroundBlack.png differ
 Binary files /dev/null and b/Assets/SquadCore/KSPedia/Backgrounds/BackgroundBlue.png differ
 Binary files /dev/null and b/Assets/SquadCore/KSPedia/Backgrounds/BackgroundBlueGrid.png differ
 Binary files /dev/null and b/Assets/SquadCore/KSPedia/Backgrounds/BackgroundKSC.png differ
 Binary files /dev/null and b/Assets/SquadCore/KSPedia/Backgrounds/BackgroundWhite.png differ
--- /dev/null
+++ b/Assets/SquadCore/Shaders/Alpha.shader
@@ -1,1 +1,65 @@
+Shader "KSP/Alpha/Translucent"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGBA)", 2D) = "white" {}
 
+		_RimFalloff("Rim Falloff", Range(0.01,5) ) = 0.1
+		_RimColor("Rim Color", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "Queue" = "Transparent" }
+
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf Lambert alpha
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+
+			float3 normal = float3(0,0,1);
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Alpha = color.a;
+		}
+
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/AlphaSpecular.shader
@@ -1,1 +1,73 @@
+Shader "KSP/Alpha/Translucent Specular"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGBA)", 2D) = "white" {}
+		
+		_Gloss ("Gloss", Range (0.01, 1)) = 0.5
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
 
+		_RimFalloff("Rim Falloff", Range(0.01,5) ) = 0.1
+		_RimColor("Rim Color", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "Queue" = "Transparent" }
+
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong alpha
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+
+		float _Gloss;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+
+			float3 normal = float3(0,0,1);
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Alpha = color.a;
+		}
+
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/Bumped.shader
@@ -1,1 +1,69 @@
+Shader "KSP/Bumped"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf Lambert
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Bumped Diffuse"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/BumpedSpecular.shader
@@ -1,1 +1,72 @@
+Shader "KSP/Bumped Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Bumped Specular"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/Cutoff.shader
@@ -1,1 +1,67 @@
+Shader "KSP/Alpha/Cutoff"
+{
+	Properties 
+	{		
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_MainTex("_MainTex (RGB Alpha(A))", 2D) = "white" {}
+	    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags {"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+		AlphaTest GEqual [_Cutoff]
+				
+		CGPROGRAM
+
+		#pragma surface surf Lambert alphatest:_Cutoff
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Alpha = color.a;
+		}
+		ENDCG
+	}
+	Fallback "Transparent/Cutout/VertexLit"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/CutoffBumped.shader
@@ -1,1 +1,66 @@
+Shader "KSP/Alpha/Cutoff Bumped"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB Alpha(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+	    _Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
 
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+		AlphaTest GEqual [_Cutoff]
+		
+		CGPROGRAM
+
+		#pragma surface surf Lambert
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Alpha = color.a;
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/Diffuse.shader
@@ -1,1 +1,64 @@
+Shader "KSP/Diffuse"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB)", 2D) = "white" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf Lambert
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/Emissive.shader
@@ -1,1 +1,70 @@
+Shader "KSP/Emissive/Diffuse"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB)", 2D) = "white" {}
 
+		_EmissiveColor("_EmissiveColor", Color) = (0,0,0,1)
+		_Emissive("_Emissive", 2D) = "white" {}
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf Lambert
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+
+		float4 _EmissiveColor;
+		sampler2D _Emissive;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+			emission += (tex2D(_Emissive, IN.uv_Emissive).rgb * _EmissiveColor.rgb) * _EmissiveColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/EmissiveBumpedSpecular.shader
@@ -1,1 +1,79 @@
+Shader "KSP/Emissive/Bumped Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
 
+		_EmissiveColor("_EmissiveColor", Color) = (0,0,0,1)
+		_Emissive("_Emissive", 2D) = "white" {}
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+
+		float4 _EmissiveColor;
+		sampler2D _Emissive;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+			emission += (tex2D(_Emissive, IN.uv_Emissive).rgb * _EmissiveColor.rgb) * _EmissiveColor.a;
+			
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Self-Illumin/Bumped Specular"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/EmissiveSpecular.shader
@@ -1,1 +1,76 @@
+Shader "KSP/Emissive/Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
 
+		_EmissiveColor("_EmissiveColor", Color) = (0,0,0,1)
+		_Emissive("_Emissive", 2D) = "white" {}
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
+
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+
+		float4 _EmissiveColor;
+		sampler2D _Emissive;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+			emission += (tex2D(_Emissive, IN.uv_Emissive).rgb * _EmissiveColor.rgb) * _EmissiveColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Self-Illumin/Specular"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/KSPParticle AddSmooth.shader
@@ -1,1 +1,77 @@
+Shader "KSP/Particles/Additive (Soft)" {
+Properties {
+	_MainTex ("Particle Texture", 2D) = "white" {}
+	_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
+	_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
+}
 
+Category {
+	Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+	Blend One OneMinusSrcColor
+	ColorMask RGB
+	Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
+
+	SubShader {
+		Pass {
+		
+			CGPROGRAM
+			#pragma vertex vert
+			#pragma fragment frag
+			#pragma multi_compile_particles
+
+			#include "UnityCG.cginc"
+
+			sampler2D _MainTex;
+			fixed4 _TintColor;
+			
+			struct appdata_t {
+				float4 vertex : POSITION;
+				fixed4 color : COLOR;
+				float2 texcoord : TEXCOORD0;
+			};
+
+			struct v2f {
+				float4 vertex : POSITION;
+				fixed4 color : COLOR;
+				float2 texcoord : TEXCOORD0;
+				#ifdef SOFTPARTICLES_ON
+				float4 projPos : TEXCOORD1;
+				#endif
+			};
+
+			float4 _MainTex_ST;
+			
+			v2f vert (appdata_t v)
+			{
+				v2f o;
+				o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
+				#ifdef SOFTPARTICLES_ON
+				o.projPos = ComputeScreenPos (o.vertex);
+				COMPUTE_EYEDEPTH(o.projPos.z);
+				#endif
+				o.color = v.color;
+				o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+				return o;
+			}
+
+			sampler2D _CameraDepthTexture;
+			float _InvFade;
+			
+			fixed4 frag (v2f i) : COLOR
+			{
+				#ifdef SOFTPARTICLES_ON
+				float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
+				float partZ = i.projPos.z;
+				float fade = saturate (_InvFade * (sceneZ-partZ));
+				i.color.a *= fade;
+				#endif
+				
+				half4 prev = i.color * tex2D(_MainTex, i.texcoord);
+				prev.rgb *= prev.a;
+				return prev * _TintColor;
+			}
+			ENDCG 
+		}
+	} 
+}
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/ParticleAdd.shader
@@ -1,1 +1,115 @@
+Shader "KSP/Particles/Additive"
+{
+	Properties
+	{
+		_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
+		_MainTex ("Particle Texture", 2D) = "white" {}
+		_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
+	}
 
+	Category
+	{
+		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+		Blend SrcAlpha One
+		AlphaTest Greater .01
+		ColorMask RGB
+		Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
+		BindChannels {
+			Bind "Color", color
+			Bind "Vertex", vertex
+			Bind "TexCoord", texcoord
+	}
+	
+		// ---- Fragment program cards
+		SubShader
+		{
+			Pass
+			{
+		
+				CGPROGRAM
+				#pragma vertex vert
+				#pragma fragment frag
+				#pragma fragmentoption ARB_precision_hint_fastest
+				#pragma multi_compile_particles
+
+				#include "UnityCG.cginc"
+
+				sampler2D _MainTex;
+				fixed4 _TintColor;
+			
+				struct appdata_t
+				{
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+				};
+
+				struct v2f
+				{
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+					#ifdef SOFTPARTICLES_ON
+					float4 projPos : TEXCOORD1;
+					#endif
+				};
+			
+				float4 _MainTex_ST;
+
+				v2f vert (appdata_t v)
+				{
+					v2f o;
+					o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
+					#ifdef SOFTPARTICLES_ON
+					o.projPos = ComputeScreenPos (o.vertex);
+					COMPUTE_EYEDEPTH(o.projPos.z);
+					#endif
+					o.color = v.color;
+					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+					return o;
+				}
+
+				sampler2D _CameraDepthTexture;
+				float _InvFade;
+			
+				fixed4 frag (v2f i) : COLOR
+				{
+					#ifdef SOFTPARTICLES_ON
+					float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
+					float partZ = i.projPos.z;
+					float fade = saturate (_InvFade * (sceneZ-partZ));
+					i.color.a *= fade;
+					#endif
+				
+					return 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord);
+				}
+				ENDCG 
+			}
+		} 	
+	
+		// ---- Dual texture cards
+		SubShader {
+			Pass {
+				SetTexture [_MainTex] {
+					constantColor [_TintColor]
+					combine constant * primary
+				}
+				SetTexture [_MainTex] {
+					combine texture * previous DOUBLE
+				}
+			}
+		}
+	
+		// ---- Single texture cards (does not do color tint)
+		SubShader
+		{
+			Pass
+			{
+				SetTexture [_MainTex] { 
+					combine texture * primary 
+				}
+			}
+		}
+	}
+}
+

--- /dev/null
+++ b/Assets/SquadCore/Shaders/ParticleAlpha.shader
@@ -1,1 +1,118 @@
+Shader "KSP/Particles/Alpha Blended"
+{
+	Properties
+	{
+		_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
+		_MainTex ("Particle Texture", 2D) = "white" {}
+		_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
+	}
 
+	Category
+	{
+		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+		Blend SrcAlpha OneMinusSrcAlpha
+		AlphaTest Greater .01
+		ColorMask RGB
+		Cull Off Lighting Off ZWrite Off
+		BindChannels {
+			Bind "Color", color
+			Bind "Vertex", vertex
+			Bind "TexCoord", texcoord
+	}
+	
+		// ---- Fragment program cards
+		SubShader
+		{
+			Pass
+			{
+		
+				CGPROGRAM
+				#pragma vertex vert
+				#pragma fragment frag
+				#pragma fragmentoption ARB_precision_hint_fastest
+				#pragma multi_compile_particles
+			
+				#include "UnityCG.cginc"
+
+				sampler2D _MainTex;
+				fixed4 _TintColor;
+			
+				struct appdata_t {
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+				};
+
+				struct v2f {
+					float4 vertex : POSITION;
+					fixed4 color : COLOR;
+					float2 texcoord : TEXCOORD0;
+					#ifdef SOFTPARTICLES_ON
+					float4 projPos : TEXCOORD1;
+					#endif
+				};
+			
+				float4 _MainTex_ST;
+
+				v2f vert (appdata_t v)
+				{
+					v2f o;
+					o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
+					#ifdef SOFTPARTICLES_ON
+					o.projPos = ComputeScreenPos (o.vertex);
+					COMPUTE_EYEDEPTH(o.projPos.z);
+					#endif
+					o.color = v.color;
+					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
+					return o;
+				}
+
+				sampler2D _CameraDepthTexture;
+				float _InvFade;
+			
+				fixed4 frag (v2f i) : COLOR
+				{
+					#ifdef SOFTPARTICLES_ON
+					float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
+					float partZ = i.projPos.z;
+					float fade = saturate (_InvFade * (sceneZ-partZ));
+					i.color.a *= fade;
+					#endif
+				
+					return 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord);
+				}
+				ENDCG 
+			}
+		} 	
+	
+		// ---- Dual texture cards
+		SubShader
+		{
+			Pass
+			{
+				SetTexture [_MainTex]
+				{
+					constantColor [_TintColor]
+					combine constant * primary
+				}
+				SetTexture [_MainTex]
+				{
+					combine texture * previous DOUBLE
+				}
+			}
+		}
+	
+		// ---- Single texture cards (does not do color tint)
+		SubShader
+		{
+			Pass
+			{
+				SetTexture [_MainTex]
+				{
+					combine texture * primary
+				}
+			}
+		}
+	}
+}
+

--- /dev/null
+++ b/Assets/SquadCore/Shaders/SolidColorAlpha.shader
@@ -1,1 +1,49 @@
+Shader "Solid Color (Alpha)" {
+	Properties 
+	{
+		_Color ("Color", Color) = (0.5, 0.5, 0.5, 0.5)
+	}
+	SubShader
+	{
+		
+		ZWrite On
+        GrabPass { }
+		Pass
+		{
+			Fog { Mode Off }
+			Blend SrcAlpha OneMinusSrcAlpha
 
+			CGPROGRAM
+
+			#pragma vertex vert
+			#pragma fragment frag
+	
+			fixed4 _Color;
+			sampler2D _GrabTexture;
+
+			struct appdata
+			{
+				float4 vertex : POSITION;
+			};
+			struct v2f
+			{
+				float4 pos : SV_POSITION;
+				float4 uv : TEXCOORD0;
+			};
+			v2f vert (appdata v)
+			{
+				v2f o;
+				o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
+				o.uv = o.pos;
+				return o;
+			}
+			half4 frag(v2f i) : COLOR
+			{
+				float2 coord = 0.5 + 0.5 * i.uv.xy / i.uv.w;
+				fixed4 tex = tex2D(_GrabTexture, float2(coord.x, 1 - coord.y));
+				return fixed4(lerp(tex.rgb, _Color.rgb, _Color.a), 1);
+			}
+			ENDCG
+		}
+	}
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/Specular.shader
@@ -1,1 +1,68 @@
+Shader "KSP/Specular"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_Color ("Main Color", Color) = (1,1,1,1)
+		_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong
+		#pragma target 3.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Specular"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/SpecularBumpTransparent.shader
@@ -1,1 +1,80 @@
+Shader "KSP/Bumped Specular (Transparent)"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_BumpMap("_BumpMap", 2D) = "bump" {}
+		
+		_MainColor ("Main Color", Color) = (1,1,1,1)
+		
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
+		
+		Pass 
+		{
+			ZWrite On
+			ColorMask 0
+		}
+		
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong
+		#pragma target 2.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		sampler2D _BumpMap;
+		
+		float4 _MainColor;
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_BumpMap;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _MainColor * _BurnColor;
+			float3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
+			
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+			o.Normal = normal;
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Bumped Specular"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/SpecularTransparent.shader
@@ -1,1 +1,76 @@
+Shader "KSP/Specular (Transparent)"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB spec(A))", 2D) = "white" {}
+		_MainColor ("Main Color", Color) = (1,1,1,1)
+		
+		_Shininess ("Shininess", Range (0.03, 1)) = 0.078125
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
+		
+		Pass 
+		{
+			ZWrite On
+			ColorMask 0
+		}
+		
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+		
+		CGPROGRAM
+
+		#pragma surface surf BlinnPhong
+		#pragma target 2.0
+		
+		half _Shininess;
+
+		sampler2D _MainTex;
+		
+		float4 _MainColor;
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		struct Input
+		{
+			float2 uv_MainTex;
+			float3 viewDir;
+			float3 worldNormal;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _MainColor * _BurnColor;
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), IN.worldNormal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = color.rgb;
+			o.Emission = emission;
+			o.Gloss = color.a;
+			o.Specular = _Shininess;
+
+			o.Emission *= _Opacity * rim;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+		
+	}
+	Fallback "Specular"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/Unlit.shader
@@ -1,1 +1,84 @@
+Shader "KSP/Unlit"
+{
+	Properties 
+	{
+		_MainTex("_MainTex (RGB)", 2D) = "white" {}
+		_Color("Color", Color) = (1,1,1,1)
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		Tags { "RenderType"="Opaque" }
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+
+		CGPROGRAM
+
+		#pragma surface surf Unlit
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+		float4 _Color;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		inline half4 LightingUnlit (SurfaceOutput s, half3 lightDir, half atten)
+		{
+            half diff = max (0, dot (s.Normal, lightDir));
+
+            half4 c;
+            c.rgb = s.Albedo;
+            c.a = s.Alpha;
+            return c;
+        }
+
+        inline half4 LightingUnlit_PrePass (SurfaceOutput s, half4 light)
+		{
+            half4 c;
+            c.rgb = s.Albedo;
+            c.a = s.Alpha;
+            return c;
+        }
+
+		struct Input
+		{
+			float2 uv_MainTex;
+			float2 uv_Emissive;
+			float3 viewDir;
+		};
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex,(IN.uv_MainTex)) * _BurnColor;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = _Color.rgb * color.rgb;
+			o.Emission = emission;
+			o.Gloss = 0;
+			o.Specular = 0;
+			o.Normal = normal;
+
+			o.Emission *= _Opacity;
+			o.Alpha = _Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Unlit/Texture"
+}

--- /dev/null
+++ b/Assets/SquadCore/Shaders/UnlitTransparent.shader
@@ -1,1 +1,79 @@
+Shader "KSP/Alpha/Unlit Transparent"
+{
+	Properties 
+	{
+		_MainTex("MainTex (RGB Alpha(A))", 2D) = "white" {}
+		_Color("Color", Color) = (1,1,1,1)
+		
+		_Opacity("_Opacity", Range(0,1) ) = 1
+		_RimFalloff("_RimFalloff", Range(0.01,5) ) = 0.1
+		_RimColor("_RimColor", Color) = (0,0,0,0)
 
+		_TemperatureColor("_TemperatureColor", Color) = (0,0,0,0)
+		_BurnColor ("Burn Color", Color) = (1,1,1,1)
+	}
+	
+	SubShader 
+	{
+		ZWrite On
+		ZTest LEqual
+		Blend SrcAlpha OneMinusSrcAlpha 
+		Cull Off 
+
+		CGPROGRAM
+
+		#pragma surface surf Unlit alpha
+		#pragma target 3.0
+
+		sampler2D _MainTex;
+		float4 _Color;
+
+		float _Opacity;
+		float _RimFalloff;
+		float4 _RimColor;
+		float4 _TemperatureColor;
+		float4 _BurnColor;
+		
+		inline half4 LightingUnlit (SurfaceOutput s, half3 lightDir, half atten)
+		{
+            half diff = max (0, dot (s.Normal, lightDir));
+
+            half4 c;
+            c.rgb = s.Albedo;
+            c.a = s.Alpha;
+            return c;
+        }
+
+        inline half4 LightingUnlit_PrePass (SurfaceOutput s, half4 light)
+		{
+            half4 c;
+            c.rgb = s.Albedo;
+            c.a = s.Alpha;
+            return c;
+        }
+
+        struct Input
+		{
+            float2 uv_MainTex;
+			float3 viewDir;
+        };
+
+		void surf (Input IN, inout SurfaceOutput o)
+		{
+			float4 color = tex2D(_MainTex, (IN.uv_MainTex)) * _BurnColor;
+			float alpha = _Color.a * color.a;
+			float3 normal = float3(0,0,1);
+
+			half rim = 1.0 - saturate(dot (normalize(IN.viewDir), normal));
+
+			float3 emission = (_RimColor.rgb * pow(rim, _RimFalloff)) * _RimColor.a;
+			emission += _TemperatureColor.rgb * _TemperatureColor.a;
+
+			o.Albedo = _Color.rgb * color.rgb;
+			o.Emission = emission * _Opacity;
+			o.Alpha = _Color.a * color.a*_Opacity;
+		}
+		ENDCG
+	}
+	Fallback "Diffuse"
+}

--- a/Documents/CHANGES.txt
+++ b/Documents/CHANGES.txt
@@ -1,21 +1,31 @@
+1.1.0.1, 2016-04-01, KSP Build #1179
+    Fixed: Heat shields acting as staged decouplers when not set to be staged.
+    Fixed: Enabling and disabling of decouplers in staging is now correctly handled.
+    Fixed: Issue in simulation staging that caused no deltaV above a fairing whilst landed.
+    Fixed: Fairing mass calculations to work using module mass only (Changed from 1.0.5).
+
+1.1.0.0, 2016-03-30, KSP Build #1171
     Added: Asset bundle loading and integration.
+    Added: Styling system so that Unity UI objects can use KSP stock styles.
+    Added: Unity UI window system.
     Changed: Thermal flux is now correctly indicated in kilowatts.
     Changed: Complete rewrite of code underpinning the stock toolbar icons.
     Changed: Flight Engineer toolbar menu recreated using Unity UI.
     Changed: Replaced occurances of IMGUI using RenderingManager to use OnGUI directly.
     Fixed: Toggling the 'Control Bar' now appropriately resizes the display stack.
-
-1.0.19.4, 12-02-16
+    Fixed: Part info tooltips in the editor remaining open when no part is selected.
+
+1.0.19.4, 2016-02-12
     Fixed: Only 'STAGE_STACK_FLOW' and 'STAGE_STACK_FLOW_BALANCE' resources include surface mounted parts as fuel targets.
     Fixed: Fairing mass being doubled in the VAB (removed workaround for a KSP bug which has been fixed).
 
-1.0.19.3, 09-02-16
+1.0.19.3, 2016-02-09
     Fixed: Fuel cross-feed from surface attached parts.
 
-1.0.19.2, 19-11-15
+1.0.19.2, 2016-11-19
     Rebuild for KSP 1.0.5.1028 silent update.
     
-1.0.19.1, 09-11-15
+1.0.19.1, 2016-11-09
     Added: Key binding editor accessible under 'Settings' on the Build Engineer.
     Added: Added current vessel name readout. (antplant)
     Added: 'Relative Radial Velocity' and 'Time To Rendezvous' readouts. (itwtx)
@@ -74,10 +84,10 @@
     Fixed: Thrust issues introduced with Sarbian's simulation alterations.
     Fixed: Issue where HUDs positioned close to the top/bottom of the screen could be pushed out of position.
 
-1.0.16.6, 02-05-15
+1.0.16.6, 2015-05-02
     Fixed: Separately staged fairing mass jettisons are now calculated in the editor.
 
-1.0.16.5, 02-05-2015
+1.0.16.5, 2015-05-02
     Fixed: Delta-V not being correctly calculated.
     Changed: Editor locking now uses the InputLockManager.
 
@@ -90,44 +100,44 @@
         Removed LINQ expressions.
         Converted foreach to for loops.
 
-1.0.16.3, 27-04-2015
+1.0.16.3, 2015-04-27
     Fixed issue with the toolbar icons not being created.
     Removed superfluous 'm/s' on the mach slider in the build engineer.
 
-1.0.16.2, 27-04-2015
+1.0.16.2, 2015-04-27
     Changed the atmospheric slider on the build engineer to default to 0km when changing bodies.
 
-1.0.16.1, 26-04-2015, KSP Build #828
+1.0.16.1, 2015-04-26, KSP Build #828
     Merged Sarbian's mach adjustments.
     Fixed bugs relating to thrust and atmosphere/velocity curves.
     Changed the atmospheric slider on the Build Engineer to work based on altitude.
     Changed the atmospheric slider to clamp to the maximum altitude for the selected body.
     Changed the velocity slider to clamp to the maximum usable mach value for the current vessel.
 
-1.0.16.0, 25-04-2015, KSP Build #821
+1.0.16.0, 2015-04-25, KSP Build #821
     Fixed errors relating to KSP 1.0 update.
     Fixed fuel simulation to account for new thrust system.
     Fixed atmospheric engines to use the new velocity curve.
     Fixed atmospheric readouts to work with the new atmospheric model.
 
-1.0.15.2, 13-02-2015
+1.0.15.2, 2015-02-13
     Padishar's Fixes:
         Fixed: Calculation of per-stage resource mass.
 
-1.0.15.1, 13-02-2015
+1.0.15.1, 2015-02-13
     Rebuild
 
-1.0.15.0, 08-02-2015
+1.0.15.0, 2015-02-08
     Padishar's Fixes:
         Added: Support KIDS ISP thrust correction.
         Fixed: Log spam for stage priority mode.
         Fixed: Locked tanks preventing simulation from staging.
         Fixed: No flow and all vessel modes to respect flow states.
 
-1.0.14.1, 28-12-2014
+1.0.14.1, 2014-12-28
     Fixed: Missing texture on the ER-7500 model.
 
-1.0.14.0, 28-12-2014
+1.0.14.0, 2014-12-28
     Added: Career mode that limits the Flight Engineer by:
         - Requiring an Engineer Kerbal of any level, or placement of an Engineer Chip or ER-7500 part.
         - Tracking station level 3 enables Flight Engineer everywhere.
@@ -144,10 +154,10 @@
     Fixed: Issue with the formatting large Mass and Cost values.
     Fixed: Error when loading the Engineer7500 part model.
 
-1.0.13.1, 16-12-2014
+1.0.13.1, 2014-12-16
     Fixed: Issue with manoeuvre node readouts and low tier tracking station.
 
-1.0.13.0, 16-12-2014
+1.0.13.0, 2014-12-16
     Updated for KSP version 0.90
 
     Added: New readouts to the vessel category:
@@ -160,7 +170,7 @@
     Fixed: Altitude (Terrain) will no longer give a reading below sea level.
     Fixed: Suicide burn now uses radar altitude that clamps to sea level.
 
-1.0.12.0, 01-12-2014
+1.0.12.0, 2014-12-01
     Added: Setting in Build Engineer to enable/disable vectored thrust calculations.
     Added: Thrust torque field in Build Engineer (courtesy of mic_e).
     Added: New readouts to the vessel category:
@@ -181,15 +191,15 @@
     Fixed: Issue where the vessel simulation can sometimes permanently freeze.
     Fixed: Issue where the vessel simulation would not show updates when the delay was set lower than the frame rate.
 
-1.0.11.3, 11-11-2014
+1.0.11.3, 2014-11-11
     Changed: Gravity measurements for Isp to 9.82.
 
-1.0.11.2, 10-11-2014
+1.0.11.2, 2014-11-10
     Changed: Gravity measurements for Isp calculations from 9.81 to 9.8066 for accuracy.
     Changed: Manoeuvre node burn times are now more accurate.
     Fixed: Bug in the manoeuvre node burn time calculations where it was not averaging acceleration correctly.
 
-1.0.11.1, 07-11-2014
+1.0.11.1, 2014-11-07
     Changed: Build Engineer now shows stage part count as well as total.
     Changed: Build Overlay Vessel tab data:
         DeltaV: stage / total
@@ -199,7 +209,7 @@
 
     Fixed: Issue with the vessel tab vanishing from the editor.
 
-1.0.11.0, 06-11-2014
+1.0.11.0, 201-11-06
     Added: New readouts to the orbital category:
         - Current SOI
         - Manoeuvre Node DeltaV (Prograde)
@@ -222,7 +232,7 @@
         Fixed: Issue with multicouplers when attached to parent by bottom node.
         Fixed: Issue with sepratrons on solid rocket boosters.
 
-1.0.10.0, 19-10-2014
+1.0.10.0, 2014-10-19
     UPDATE NOTICE: If you are updating from a previous version of Kerbal Engineer 1.0, please
     delete the 'Settings/SectionLibrary.xml' file, or remove the old install first.  This will
     reset the Flight Engineer sections to their default values and enable the new HUD functionality.
@@ -241,7 +251,7 @@
     Fixed: Bug in the phase angle calculations.
     Fixed: Bug where the Build Engineer would stay locked after hiding with the shortcut key.
 
-1.0.9.3, 08-10-2014
+1.0.9.3, 2014-10-08
     Added: Title of the build engineer in compact mode now shows if you are using atmospheric data.
     Added: New readout to the surface category:
         - Vertical Acceleration
@@ -251,16 +261,16 @@
     Changed: Atmospheric settings (pressure/velocity) in the editor condensed onto a single line.
     Fixed: Bug where the overlays in the editor would stay open outside of parts screen.
 
-1.0.9.2, 07-10-2014
+1.0.9.2, 2014-10-07
     Updated for KSP v0.25.0
     Changed: Prettyfied Latitude and Longitude readouts.
     Changed: ModuleLandingGear now uses the physical significance flag.
     Changed: Updated MiniAVC to 1.0.2.4.
 
-1.0.9.1, 17-09-2014
+1.0.9.1, 2014-09-17
     Fixed: Part size bug caused by TweakScale's cost calculator.
 
-1.0.9.0, 15-09-2014
+1.0.9.0, 2014-09-15
     Added: Build Engineer now also implements the '\' backslash show/hide shortcut.
     Added: New readouts to the vessel category:
         - Current Stage DeltaV
@@ -278,10 +288,10 @@
 
     Fixed: Cost calculation now works with mods implementing IPartCostModifier.
 
-1.0.8.1, 06-09-2014
+1.0.8.1, 2014-09-06
     Fixed: Bug which caused rendezvous readouts to freeze the game or show all zeros.
 
-1.0.8.0, 06-09-2014
+1.0.8.0, 2014-09-06
     Added: New readouts to the vessel category:
         - Intake Air (Usage)
 
@@ -292,14 +302,14 @@
     Fixed: An issue where deltaV would not be calculated whilst flying.
     Fixed: NullRef whilst loading the in flight Action Menu.
 
-1.0.7.1, 02-09-2014
+1.0.7.1, 2014-09-02
     Changed: Reversed Intake Air readout from 'S/D' to 'D/S' for easier reading.
     Changed: Increased Intake Air readout precision to 4 decimal places.
     Fixed: Issue where Intake Air supply was not representative of total supply.
     Fixed: Bug where actual thrust does not reset to zero on deactivated engines.
     Fixed: Thrust now scales with velocity for atmospheric engines. (Padishar's fix)
 
-1.0.7.0, 01-09-2014
+1.0.7.0, 2014-09-01
     Added: Part count information to the Build Engineer.
     Added: Reset button to the G-Force readout.
     Added: Preset system to the Flight Engineer.
@@ -335,7 +345,7 @@
     Fixed: Issues with large value wrap around in the Flight Engineer.
     Fixed: Bug in the phase angle calculation.
 
-1.0.6.0, 23-08-2014
+1.0.6.0, 2014-08-23
     Added: Time and Angle to equatorial ascending/descending nodes in the orbital display.
     Added: Time and Angle to relative ascending/descending nodes in the rendezvous display.
     Added: Overlay tooltip information delay adjustment slider to the Build Engineer settings.
@@ -345,7 +355,7 @@
     Changed: Licensing and readme structures are now more verbose to satisfy the new add-on rules.
     Fixed: Updated MiniAVC to v1.0.2.1 (fixes remote check bug as well as other minor bugs).
 
-1.0.5.0, 13-08-2014
+1.0.5.0, 2014-08-13
     Added: Acceleration readout to the Vessel category (current / maximum).
     Added: Category library system for the Flight Engineer readouts.
     Added: Drop-down category selection to better support the new system.
@@ -355,7 +365,7 @@
     Fixed: Flight Engineer toolbar menu now hides when hiding the GUI with F2.
     Fixed: Flight Engineer toolbar button now disables when in module mode and no engineer is running.
 
-1.0.4.0, 12-08-2014
+1.0.4.0, 2014-08-12
     Added: Better stock toolbar support in the flight engineer.
     Added: Dynamically generated celestial body library for supporting add-ons that modify the star system.
     Changed: Reference bodies are now listed with a nestable menu system.
@@ -365,7 +375,7 @@
     Changed: Increased Semi-major/minor axis precision to 3 decimal places.
     Fixed: Impact altitude was mistakenly formatted as an angle, it is now formatted correctly as a distance.
 
-1.0.3.0, 30-07-2014
+1.0.3.0, 2014-07-30
     Added: Integrated KSP-AVC support with MiniAVC.
     Added: Setting to change the simulation delay in the Build Engineer.
     Added: Setting to enable and disable the build overlay system.
@@ -376,7 +386,7 @@
     Fixed: Flickering in VAB and Vessel display.
     Fixed: Bug saving the GUI display size.
 
-1.0.2.0, 27-07-2014
+1.0.2.0, 2014-07-27
     Added: Separator readout module under Misc in the Flight Engineer.
     Added: Adjustable GUI display size.
     Added: Display size can be adjusted in the Build Engineer settings.
@@ -386,7 +396,7 @@
     Fixed: Engines that have a minimum thrust are now calculated properly. (Thanks to nosscire.)
     Fixed: Compact collapse mode is now saved in the Build Engineer.
 
-1.0.1.0, 26-07-2014
+1.0.1.0, 2014-07-26
     Added: Part-less Flight Engineer.
     Added: Ability to collapse the Build Engineer into compact mode from left or right.
     Added: Settings in Build Engineer for compact collapse mode and partless/module Flight Engineer.
@@ -399,11 +409,11 @@
     Changed: ER7500 part has no physical significance.
     Fixed: ActionMenu and DisplayStack destruction bug.
 
-1.0.0.1, 24-07-2014
+1.0.0.1, 2014-06-24
     Added: Stock toolbar support in the Flight Engineer.
     Changed: Orbital Period has higher precision.
     Fixed: Various NullRefs in editor window and overlay.
 
-1.0.0.0, 24-07-2014
+1.0.0.0, 2014-07-24
     Initial release for public testing.
 

--- a/KerbalEngineer.CSharp.Editor.csproj
+++ b/KerbalEngineer.CSharp.Editor.csproj
@@ -55,6 +55,9 @@
     <Reference Include="UnityEditor">
       <HintPath>Library\UnityAssemblies\UnityEditor.dll</HintPath>
     </Reference>
+    <Reference Include="UnityEngine.Advertisements">
+      <HintPath>Library\UnityAssemblies\UnityEngine.Advertisements.dll</HintPath>
+    </Reference>
     <Reference Include="UnityEditor.Advertisements">
       <HintPath>Library\UnityAssemblies\UnityEditor.Advertisements.dll</HintPath>
     </Reference>
@@ -69,6 +72,9 @@
     </Reference>
     <Reference Include="UnityEditor.Networking">
       <HintPath>Library\UnityAssemblies\UnityEditor.Networking.dll</HintPath>
+    </Reference>
+    <Reference Include="UnityEngine.Analytics">
+      <HintPath>Library\UnityAssemblies\UnityEngine.Analytics.dll</HintPath>
     </Reference>
     <Reference Include="UnityEditor.Graphs">
       <HintPath>Library\UnityAssemblies\UnityEditor.Graphs.dll</HintPath>
@@ -115,9 +121,77 @@
     <Reference Include="KerbalEngineer.Unity">
       <HintPath>Assets\Plugins\KerbalEngineer.Unity.dll</HintPath>
     </Reference>
+    <Reference Include="KSPAssetCompiler">
+      <HintPath>Assets\Plugins\KSPAssets\KSPAssetCompiler.dll</HintPath>
+    </Reference>
+    <Reference Include="KSPAssets">
+      <HintPath>Assets\Plugins\KSPAssets\KSPAssets.dll</HintPath>
+    </Reference>
+    <Reference Include="PartTools">
+      <HintPath>Assets\PartTools\Lib\PartTools.dll</HintPath>
+    </Reference>
+    <Reference Include="PartToolsEditor">
+      <HintPath>Assets\PartTools\Lib\PartToolsEditor.dll</HintPath>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Assets\PartTools\Editor\InternalSpaceEditor.cs" />
+    <Compile Include="Assets\PartTools\Editor\KSPParticleEmitterEditor.cs" />
+    <Compile Include="Assets\PartTools\Editor\PartToolsEditor.cs" />
+    <Compile Include="Assets\PartTools\Editor\PartToolsWindows.cs" />
+    <Compile Include="Assets\PartTools\Editor\PropEditor.cs" />
     <Compile Include="Assets\Scripts\Editor\BuildAssetBundles.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Assets\PartTools\Shaders\Alpha.shader" />
+    <None Include="Assets\PartTools\Shaders\AlphaAdditive.shader" />
+    <None Include="Assets\PartTools\Shaders\AlphaSpecular.shader" />
+    <None Include="Assets\PartTools\Shaders\Bumped.shader" />
+    <None Include="Assets\PartTools\Shaders\BumpedSpecular.shader" />
+    <None Include="Assets\PartTools\Shaders\Cutoff.shader" />
+    <None Include="Assets\PartTools\Shaders\CutoffBumped.shader" />
+    <None Include="Assets\PartTools\Shaders\DepthMask.shader" />
+    <None Include="Assets\PartTools\Shaders\Diffuse.shader" />
+    <None Include="Assets\PartTools\Shaders\Emissive.shader" />
+    <None Include="Assets\PartTools\Shaders\EmissiveBumpedSpecular.shader" />
+    <None Include="Assets\PartTools\Shaders\EmissiveSpecular.shader" />
+    <None Include="Assets\PartTools\Shaders\InternalBumpedSpecular 1.shader" />
+    <None Include="Assets\PartTools\Shaders\InternalBumpedSpecular.shader" />
+    <None Include="Assets\PartTools\Shaders\KSPParticle AddSmooth.shader" />
+    <None Include="Assets\PartTools\Shaders\LightingKSP.cginc" />
+    <None Include="Assets\PartTools\Shaders\LightwrapSpecular.shader" />
+    <None Include="Assets\PartTools\Shaders\PBR\KSP_Standard_Bumped.shader" />
+    <None Include="Assets\PartTools\Shaders\ParticleAdd.shader" />
+    <None Include="Assets\PartTools\Shaders\ParticleAdditiveFresnel.shader" />
+    <None Include="Assets\PartTools\Shaders\ParticleAlpha.shader" />
+    <None Include="Assets\PartTools\Shaders\ScrollingUnlit.shader" />
+    <None Include="Assets\PartTools\Shaders\SolidColorAlpha.shader" />
+    <None Include="Assets\PartTools\Shaders\Specular.shader" />
+    <None Include="Assets\PartTools\Shaders\SpecularBumpTransparent.shader" />
+    <None Include="Assets\PartTools\Shaders\SpecularTransparent.shader" />
+    <None Include="Assets\PartTools\Shaders\Unlit.shader" />
+    <None Include="Assets\PartTools\Shaders\UnlitColor.shader" />
+    <None Include="Assets\PartTools\Shaders\UnlitTransparent.shader" />
+    <None Include="Assets\Plugins\KSPAssets\ReadMe.txt" />
+    <None Include="Assets\SquadCore\Shaders\Alpha.shader" />
+    <None Include="Assets\SquadCore\Shaders\AlphaSpecular.shader" />
+    <None Include="Assets\SquadCore\Shaders\Bumped.shader" />
+    <None Include="Assets\SquadCore\Shaders\BumpedSpecular.shader" />
+    <None Include="Assets\SquadCore\Shaders\Cutoff.shader" />
+    <None Include="Assets\SquadCore\Shaders\CutoffBumped.shader" />
+    <None Include="Assets\SquadCore\Shaders\Diffuse.shader" />
+    <None Include="Assets\SquadCore\Shaders\Emissive.shader" />
+    <None Include="Assets\SquadCore\Shaders\EmissiveBumpedSpecular.shader" />
+    <None Include="Assets\SquadCore\Shaders\EmissiveSpecular.shader" />
+    <None Include="Assets\SquadCore\Shaders\KSPParticle AddSmooth.shader" />
+    <None Include="Assets\SquadCore\Shaders\ParticleAdd.shader" />
+    <None Include="Assets\SquadCore\Shaders\ParticleAlpha.shader" />
+    <None Include="Assets\SquadCore\Shaders\SolidColorAlpha.shader" />
+    <None Include="Assets\SquadCore\Shaders\Specular.shader" />
+    <None Include="Assets\SquadCore\Shaders\SpecularBumpTransparent.shader" />
+    <None Include="Assets\SquadCore\Shaders\SpecularTransparent.shader" />
+    <None Include="Assets\SquadCore\Shaders\Unlit.shader" />
+    <None Include="Assets\SquadCore\Shaders\UnlitTransparent.shader" />
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\SyntaxTree\UnityVS\2015\UnityVS.CSharp.targets" />
 </Project>

--- a/KerbalEngineer.Unity/CanvasGroupFader.cs
+++ b/KerbalEngineer.Unity/CanvasGroupFader.cs
@@ -28,7 +28,7 @@
         private CanvasGroup m_CanvasGroup;
         private IEnumerator m_FadeCoroutine;
 
-        public bool fading
+        public bool IsFading
         {
             get
             {
@@ -88,6 +88,9 @@
         /// </summary>
         private IEnumerator FadeCoroutine(float from, float to, float duration, Action callback)
         {
+            // wait for end of frame so that only the last call to fade that frame is honoured.
+            yield return new WaitForEndOfFrame();
+
             float progress = 0.0f;
 
             while (progress <= 1.0f)
@@ -97,7 +100,6 @@
                 yield return null;
             }
 
-            print(m_CanvasGroup.alpha);
             callback?.Invoke();
 
             m_FadeCoroutine = null;

--- a/KerbalEngineer.Unity/Flight/FlightMenu.cs
+++ b/KerbalEngineer.Unity/Flight/FlightMenu.cs
@@ -36,7 +36,7 @@
         private GameObject m_MenuSectionPrefab = null;
 
         [SerializeField]
-        private Transform m_ContentTransform = null;
+        private Transform m_SectionsTransform = null;
 
         [SerializeField]
         private float m_FastFadeDuration = 0.2f;
@@ -45,7 +45,6 @@
         private float m_SlowFadeDuration = 1.0f;
 
         private IFlightAppLauncher m_FlightAppLauncher;
-
         private RectTransform m_RectTransform;
 
         public void OnPointerEnter(PointerEventData eventData)
@@ -56,7 +55,7 @@
         public void OnPointerExit(PointerEventData eventData)
         {
             // slow-fade out if the application launcher button is off
-            if (m_FlightAppLauncher != null && m_FlightAppLauncher.isOn == false)
+            if (m_FlightAppLauncher != null && m_FlightAppLauncher.IsOn == false)
             {
                 FadeTo(0.0f, m_SlowFadeDuration, Destroy);
             }
@@ -79,13 +78,35 @@
         }
 
         /// <summary>
+        ///     Creates a new custom section.
+        /// </summary>
+        public void NewCustomSection()
+        {
+            if (m_FlightAppLauncher != null)
+            {
+                CreateSectionControl(m_FlightAppLauncher.NewCustomSection());
+            }
+        }
+
+        /// <summary>
         ///     Sets the control bar visiblity.
         /// </summary>
-        public void SetControlBar(bool visible)
+        public void SetControlBarVisible(bool visible)
         {
             if (m_FlightAppLauncher != null)
             {
-                m_FlightAppLauncher.controlBar = visible;
+                m_FlightAppLauncher.IsControlBarVisible = visible;
+            }
+        }
+
+        /// <summary>
+        ///     Sets the display stack visibility.
+        /// </summary>
+        public void SetDisplayStackVisible(bool visible)
+        {
+            if (m_FlightAppLauncher != null)
+            {
+                m_FlightAppLauncher.IsDisplayStackVisible = visible;
             }
         }
 
@@ -106,17 +127,6 @@
             CreateSectionControls(m_FlightAppLauncher.GetCustomSections());
         }
 
-        /// <summary>
-        ///     Sets the display stack visibility.
-        /// </summary>
-        public void SetShowEngineer(bool visible)
-        {
-            if (m_FlightAppLauncher != null)
-            {
-                m_FlightAppLauncher.showEngineer = visible;
-            }
-        }
-
         protected override void Awake()
         {
             base.Awake();
@@ -140,8 +150,8 @@
             }
 
             // set toggle states to match the actual states
-            SetToggle(m_ShowEngineerToggle, m_FlightAppLauncher.showEngineer);
-            SetToggle(m_ControlBarToggle, m_FlightAppLauncher.controlBar);
+            SetToggle(m_ShowEngineerToggle, m_FlightAppLauncher.IsDisplayStackVisible);
+            SetToggle(m_ControlBarToggle, m_FlightAppLauncher.IsControlBarVisible);
 
             // update anchor position
             if (m_RectTransform != null)
@@ -163,30 +173,17 @@
         }
 
         /// <summary>
-        ///     Creates a list of section controls from a given list of sections.
-        /// </summary>
-        private void CreateSectionControls(IList<ISectionModule> sections)
-        {
-            if (sections == null || m_MenuSectionPrefab == null || m_ContentTransform == null)
-            {
-                return;
-            }
-
-            for (int i = 0; i < sections.Count; i++)
-            {
-                ISectionModule section = sections[i];
-                if (section == null)
-                {
-                    continue;
-                }
-
-                GameObject menuSectionObject = Instantiate(m_MenuSectionPrefab);
-                if (menuSectionObject == null)
-                {
-                    continue;
-                }
-
-                menuSectionObject.transform.SetParent(m_ContentTransform, false);
+        ///     Creates a menu section control.
+        /// </summary>
+        private void CreateSectionControl(ISectionModule section)
+        {
+            GameObject menuSectionObject = Instantiate(m_MenuSectionPrefab);
+            if (menuSectionObject != null)
+            {
+                // apply ksp theme to the created menu section object
+                m_FlightAppLauncher.ApplyTheme(menuSectionObject);
+
+                menuSectionObject.transform.SetParent(m_SectionsTransform, false);
 
                 FlightMenuSection menuSection = menuSectionObject.GetComponent<FlightMenuSection>();
                 if (menuSection != null)
@@ -197,6 +194,26 @@
         }
 
         /// <summary>
+        ///     Creates a list of section controls from a given list of sections.
+        /// </summary>
+        private void CreateSectionControls(IList<ISectionModule> sections)
+        {
+            if (sections == null || m_MenuSectionPrefab == null || m_SectionsTransform == null)
+            {
+                return;
+            }
+
+            for (int i = 0; i < sections.Count; i++)
+            {
+                ISectionModule section = sections[i];
+                if (section != null)
+                {
+                    CreateSectionControl(section);
+                }
+            }
+        }
+
+        /// <summary>
         ///     Destroys the game object.
         /// </summary>
         private void Destroy()

--- a/KerbalEngineer.Unity/Flight/FlightMenuSection.cs
+++ b/KerbalEngineer.Unity/Flight/FlightMenuSection.cs
@@ -37,7 +37,7 @@
         /// <summary>
         ///     Gets or sets the section's editor visibility.
         /// </summary>
-        public bool editorVisible
+        public bool IsEditorVisible
         {
             get
             {
@@ -102,8 +102,9 @@
         /// </summary>
         private void UpdateControls()
         {
-            if (m_Section == null)
+            if (m_Section == null || m_Section.IsDeleted)
             {
+                Destroy(gameObject);
                 return;
             }
 
@@ -116,7 +117,7 @@
             // display name
             if (m_DisplayText != null)
             {
-                m_DisplayText.text = m_Section.Name;
+                m_DisplayText.text = m_Section.Name.ToUpperInvariant();
             }
 
             // editor visible

--- a/KerbalEngineer.Unity/Flight/IFlightAppLauncher.cs
+++ b/KerbalEngineer.Unity/Flight/IFlightAppLauncher.cs
@@ -23,11 +23,13 @@
 
     public interface IFlightAppLauncher
     {
-        bool controlBar { get; set; }
+        bool IsControlBarVisible { get; set; }
 
-        bool isOn { get; }
+        bool IsDisplayStackVisible { get; set; }
 
-        bool showEngineer { get; set; }
+        bool IsOn { get; }
+
+        void ApplyTheme(GameObject gameObject);
 
         void ClampToScreen(RectTransform rectTransform);
 
@@ -36,5 +38,7 @@
         IList<ISectionModule> GetCustomSections();
 
         IList<ISectionModule> GetStockSections();
+
+        ISectionModule NewCustomSection();
     }
 }

--- a/KerbalEngineer.Unity/Flight/ISectionModule.cs
+++ b/KerbalEngineer.Unity/Flight/ISectionModule.cs
@@ -20,6 +20,8 @@
 {
     public interface ISectionModule
     {
+        bool IsDeleted { get; }
+
         bool IsEditorVisible { get; set; }
 
         bool IsVisible { get; set; }

--- a/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj
+++ b/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj
@@ -37,6 +37,10 @@
     <Compile Include="Flight\IFlightAppLauncher.cs" />
     <Compile Include="Flight\ISectionModule.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Setting.cs" />
+    <Compile Include="UI\TextStyle.cs" />
+    <Compile Include="UI\StyleApplicator.cs" />
+    <Compile Include="UI\Window.cs" />
   </ItemGroup>
   <ItemGroup>
     <Reference Include="System">

--- /dev/null
+++ b/KerbalEngineer.Unity/Setting.cs
@@ -1,1 +1,147 @@
+namespace KerbalEngineer.Unity
+{
+    using System;
+    using UnityEngine;
+    using UnityEngine.Events;
+    using UnityEngine.UI;
 
+    public class Setting : MonoBehaviour
+    {
+        [SerializeField]
+        private Text m_Label = null;
+
+        [SerializeField]
+        private Transform m_ButtonsTransform = null;
+
+        [SerializeField]
+        private GameObject m_SettingButtonPrefab = null;
+
+        [SerializeField]
+        private GameObject m_SettingTogglePrefab = null;
+
+        private Action m_OnUpdate;
+
+        public Button AddButton(string text, float width, UnityAction onClick)
+        {
+            Button button = null;
+
+            if (m_SettingButtonPrefab != null)
+            {
+                GameObject buttonObject = Instantiate(m_SettingButtonPrefab);
+                if (buttonObject != null)
+                {
+                    button = buttonObject.GetComponent<Button>();
+
+                    SetParentTransform(buttonObject, m_ButtonsTransform);
+                    SetWidth(buttonObject, width);
+                    SetText(buttonObject, text);
+                    SetButton(buttonObject, onClick);
+                }
+            }
+
+            return button;
+        }
+
+        public Toggle AddToggle(string text, float width, UnityAction<bool> onValueChanged)
+        {
+            Toggle toggle = null;
+
+            if (m_SettingTogglePrefab != null)
+            {
+                GameObject toggleObject = Instantiate(m_SettingTogglePrefab);
+                if (toggleObject != null)
+                {
+                    toggle = toggleObject.GetComponent<Toggle>();
+
+                    SetParentTransform(toggleObject, m_ButtonsTransform);
+                    SetWidth(toggleObject, width);
+                    SetText(toggleObject, text);
+                    SetToggle(toggleObject, onValueChanged);
+                }
+            }
+
+            return toggle;
+        }
+
+        public void AddUpdateHandler(Action onUpdate)
+        {
+            m_OnUpdate = onUpdate;
+        }
+
+        public void SetLabel(string text)
+        {
+            if (m_Label != null)
+            {
+                m_Label.text = text;
+            }
+        }
+
+        protected virtual void Update()
+        {
+            m_OnUpdate?.Invoke();
+        }
+
+        private static void SetButton(GameObject buttonObject, UnityAction onClick)
+        {
+            if (buttonObject != null)
+            {
+                Button button = buttonObject.GetComponent<Button>();
+                if (button != null)
+                {
+                    button.onClick.AddListener(onClick);
+                }
+            }
+        }
+
+        private static void SetParentTransform(GameObject childObject, Transform parentTransform)
+        {
+            if (childObject != null && parentTransform != null)
+            {
+                childObject.transform.SetParent(parentTransform, false);
+            }
+        }
+
+        private static void SetText(GameObject parentObject, string text)
+        {
+            if (parentObject != null)
+            {
+                Text textComponent = parentObject.GetComponentInChildren<Text>();
+                if (textComponent != null)
+                {
+                    textComponent.text = text;
+                }
+            }
+        }
+
+        private static void SetToggle(GameObject toggleObject, UnityAction<bool> onValueChanged)
+        {
+            if (toggleObject != null)
+            {
+                Toggle toggle = toggleObject.GetComponent<Toggle>();
+                if (toggle != null)
+                {
+                    toggle.onValueChanged.AddListener(onValueChanged);
+                }
+            }
+        }
+
+        private static void SetWidth(GameObject parentObject, float width)
+        {
+            if (parentObject != null)
+            {
+                LayoutElement layout = parentObject.GetComponent<LayoutElement>();
+                if (layout != null)
+                {
+                    if (width > 0.0f)
+                    {
+                        layout.preferredWidth = width;
+                    }
+                    else
+                    {
+                        layout.flexibleWidth = 1.0f;
+                    }
+                }
+            }
+        }
+    }
+}

--- /dev/null
+++ b/KerbalEngineer.Unity/UI/StyleApplicator.cs
@@ -1,1 +1,130 @@
+// 
+//     Kerbal Engineer Redux
+// 
+//     Copyright (C) 2016 CYBUTEK
+// 
+//     This program is free software: you can redistribute it and/or modify
+//     it under the terms of the GNU General Public License as published by
+//     the Free Software Foundation, either version 3 of the License, or
+//     (at your option) any later version.
+// 
+//     This program is distributed in the hope that it will be useful,
+//     but WITHOUT ANY WARRANTY; without even the implied warranty of
+//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//     GNU General Public License for more details.
+//     You should have received a copy of the GNU General Public License
+//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//  
 
+namespace KerbalEngineer.Unity.UI
+{
+    using UnityEngine;
+    using UnityEngine.UI;
+
+    public class StyleApplicator : MonoBehaviour
+    {
+        public enum ElementTypes
+        {
+            None,
+            Window,
+            Box,
+            Button,
+            ButtonToggle,
+            Label
+        }
+
+        [SerializeField]
+        private ElementTypes m_ElementType = ElementTypes.None;
+
+        /// <summary>
+        ///     Gets the UI element type used by the ThemeManager for selecting how to apply the theme.
+        /// </summary>
+        public ElementTypes ElementType
+        {
+            get
+            {
+                return m_ElementType;
+            }
+        }
+
+        /// <summary>
+        ///     Sets a the applicator to apply the selected sprite to an attached image component.
+        /// </summary>
+        public void SetImage(Sprite sprite, Image.Type type)
+        {
+            Image image = GetComponent<Image>();
+            if (image == null)
+            {
+                return;
+            }
+
+            image.sprite = sprite;
+            image.type = type;
+        }
+
+        /// <summary>
+        ///     Sets the applicator to apply the specified values to an attached selectable component.
+        /// </summary>
+        public void SetSelectable(TextStyle textStyle, Sprite normal, Sprite highlight, Sprite pressed, Sprite disabled)
+        {
+            SetText(textStyle, GetComponentInChildren<Text>());
+
+            Selectable selectable = GetComponent<Selectable>();
+            if (selectable != null)
+            {
+                selectable.image.sprite = normal;
+                selectable.image.type = Image.Type.Sliced;
+
+                selectable.transition = Selectable.Transition.SpriteSwap;
+
+                SpriteState spriteState = selectable.spriteState;
+                spriteState.highlightedSprite = highlight;
+                spriteState.pressedSprite = pressed;
+                spriteState.disabledSprite = disabled;
+                selectable.spriteState = spriteState;
+            }
+        }
+
+        /// <summary>
+        ///     Sets the applicator to apply a style to an attached text component.
+        /// </summary>
+        public void SetText(TextStyle textStyle)
+        {
+            SetText(textStyle, GetComponent<Text>());
+        }
+
+        /// <summary>
+        ///     Sets the applicator to apply the specified values to an attached toggle component.
+        /// </summary>
+        public void SetToggle(TextStyle textStyle, Sprite normal, Sprite highlight, Sprite pressed, Sprite disabled)
+        {
+            SetSelectable(textStyle, normal, highlight, pressed, disabled);
+
+            Image toggleImage = GetComponent<Toggle>()?.graphic as Image;
+            if (toggleImage != null)
+            {
+                toggleImage.sprite = pressed;
+                toggleImage.type = Image.Type.Sliced;
+            }
+        }
+
+        /// <summary>
+        ///     Sets the applicator to apply a style to the supplied text component.
+        /// </summary>
+        private static void SetText(TextStyle textStyle, Text textComponent)
+        {
+            if (textStyle == null || textComponent == null)
+            {
+                return;
+            }
+
+            if (textStyle.Font != null)
+            {
+                textComponent.font = textStyle.Font;
+            }
+            textComponent.fontSize = textStyle.Size;
+            textComponent.fontStyle = textStyle.Style;
+            textComponent.color = textStyle.Colour;
+        }
+    }
+}

--- /dev/null
+++ b/KerbalEngineer.Unity/UI/TextStyle.cs
@@ -1,1 +1,60 @@
+namespace KerbalEngineer.Unity.UI
+{
+    using UnityEngine;
 
+    public class TextStyle
+    {
+        private Color m_Colour;
+        private Font m_Font;
+        private int m_Size;
+        private FontStyle m_Style;
+
+        public Color Colour
+        {
+            get
+            {
+                return m_Colour;
+            }
+            set
+            {
+                m_Colour = value;
+            }
+        }
+
+        public Font Font
+        {
+            get
+            {
+                return m_Font;
+            }
+            set
+            {
+                m_Font = value;
+            }
+        }
+
+        public int Size
+        {
+            get
+            {
+                return m_Size;
+            }
+            set
+            {
+                m_Size = value;
+            }
+        }
+
+        public FontStyle Style
+        {
+            get
+            {
+                return m_Style;
+            }
+            set
+            {
+                m_Style = value;
+            }
+        }
+    }
+}

--- /dev/null
+++ b/KerbalEngineer.Unity/UI/Window.cs
@@ -1,1 +1,167 @@
+namespace KerbalEngineer.Unity.UI
+{
+    using System;
+    using System.Collections;
+    using UnityEngine;
+    using UnityEngine.EventSystems;
+    using UnityEngine.UI;
 
+    [RequireComponent(typeof(RectTransform), typeof(CanvasGroup))]
+    public class Window : MonoBehaviour, IBeginDragHandler, IDragHandler
+    {
+        [SerializeField]
+        private Text m_Title = null;
+
+        [SerializeField]
+        private Transform m_Content = null;
+
+        private Vector2 m_BeginMousePosition;
+        private Vector3 m_BeginWindowPosition;
+        private CanvasGroup m_CanvasGroup;
+        private RectTransform m_RectTransform;
+        private IEnumerator m_ScaleFadeCoroutine;
+
+        /// <summary>
+        ///     Gets the content transform.
+        /// </summary>
+        public Transform Content
+        {
+            get
+            {
+                return m_Content;
+            }
+        }
+
+        /// <summary>
+        ///     Gets the rect transform component.
+        /// </summary>
+        public RectTransform RectTransform
+        {
+            get
+            {
+                return m_RectTransform;
+            }
+        }
+
+        public void OnBeginDrag(PointerEventData eventData)
+        {
+            if (m_RectTransform == null)
+            {
+                return;
+            }
+
+            // cache starting positions
+            m_BeginMousePosition = eventData.position;
+            m_BeginWindowPosition = m_RectTransform.position;
+        }
+
+        public void OnDrag(PointerEventData eventData)
+        {
+            if (m_RectTransform != null)
+            {
+                // new position is the starting window position plus the delta of the current and starting mouse positions
+                m_RectTransform.position = m_BeginWindowPosition + (Vector3)(eventData.position - m_BeginMousePosition);
+            }
+        }
+
+        /// <summary>
+        ///     Adds a game object as a child of the window content.
+        /// </summary>
+        public void AddToContent(GameObject childObject)
+        {
+            if (m_Content != null && childObject != null)
+            {
+                childObject.transform.SetParent(m_Content, false);
+            }
+        }
+
+        /// <summary>
+        ///     Closes the window.
+        /// </summary>
+        public void Close()
+        {
+            ScaleFade(1.0f, 0.0f, () => Destroy(gameObject));
+        }
+
+        /// <summary>
+        ///     Sets the window title.
+        /// </summary>
+        public void SetTitle(string title)
+        {
+            if (m_Title != null)
+            {
+                m_Title.text = title;
+            }
+        }
+
+        /// <summary>
+        ///     Sets the window size.
+        /// </summary>
+        public void SetWidth(float width)
+        {
+            if (m_RectTransform != null)
+            {
+                Vector2 size = m_RectTransform.sizeDelta;
+                size.x = width;
+                m_RectTransform.sizeDelta = size;
+            }
+        }
+
+        protected virtual void Awake()
+        {
+            // component caching
+            m_RectTransform = GetComponent<RectTransform>();
+            m_CanvasGroup = GetComponent<CanvasGroup>();
+        }
+
+        protected virtual void OnEnable()
+        {
+            // scales and fades the window into view
+            ScaleFade(0.0f, 1.0f, null);
+        }
+
+        /// <summary>
+        ///     Scales and fades from a value to another with callback.
+        /// </summary>
+        private void ScaleFade(float from, float to, Action callback)
+        {
+            if (m_ScaleFadeCoroutine != null)
+            {
+                StopCoroutine(m_ScaleFadeCoroutine);
+            }
+
+            m_ScaleFadeCoroutine = ScaleFadeCoroutine(from, to, callback);
+            StartCoroutine(m_ScaleFadeCoroutine);
+        }
+
+        /// <summary>
+        ///     Coroutine to handle the scale and fading of the window.
+        /// </summary>
+        private IEnumerator ScaleFadeCoroutine(float from, float to, Action callback)
+        {
+            float progress = 0.0f;
+            float value;
+
+            while (progress <= 1.0f)
+            {
+                progress += (Time.deltaTime / 0.2f);
+                value = Mathf.Lerp(from, to, progress);
+
+                // scale
+                transform.localScale = Vector3.one * value;
+
+                // fade if a canvas group is attached
+                if (m_CanvasGroup != null)
+                {
+                    m_CanvasGroup.alpha = Mathf.Clamp01(value);
+                }
+
+                yield return null;
+            }
+
+            callback?.Invoke();
+
+            m_ScaleFadeCoroutine = null;
+        }
+    }
+}

--- a/KerbalEngineer/AppLauncherButton.cs
+++ b/KerbalEngineer/AppLauncherButton.cs
@@ -24,13 +24,13 @@
 
     public class AppLauncherButton : MonoBehaviour
     {
-        private static Texture m_IconTexture;
+        private static Texture s_IconTexture;
         private ApplicationLauncherButton m_Button;
 
         /// <summary>
         ///     Gets or sets the toggle button state.
         /// </summary>
-        public bool isOn
+        public bool IsOn
         {
             get
             {
@@ -77,7 +77,7 @@
                 m_Button.Enable();
             }
         }
-        
+
         /// <summary>
         ///     Gets the anchor position for pop-up content.
         /// </summary>
@@ -87,7 +87,7 @@
             {
                 return Vector3.zero;
             }
-            
+
             Vector3 anchor = m_Button.GetAnchor();
 
             anchor.x -= 3.0f;
@@ -104,29 +104,29 @@
 
             if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.False)
             {
+                m_Button.SetFalse();
+            }
+        }
+
+        /// <summary>
+        ///     Enables and sets the button to on.
+        /// </summary>
+        public void SetOn()
+        {
+            Enable();
+
+            if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.True)
+            {
                 m_Button.SetTrue();
             }
         }
 
-        /// <summary>
-        ///     Enables and sets the button to on.
-        /// </summary>
-        public void SetOn()
-        {
-            Enable();
-
-            if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.True)
-            {
-                m_Button.SetTrue();
-            }
-        }
-
         protected virtual void Awake()
         {
             // cache icon texture
-            if (m_IconTexture == null && AssetBundleLoader.images != null)
-            {
-                m_IconTexture = AssetBundleLoader.images.LoadAsset<Texture2D>("app-launcher-icon");
+            if (s_IconTexture == null && AssetBundleLoader.Images != null)
+            {
+                s_IconTexture = AssetBundleLoader.Images.LoadAsset<Texture2D>("app-launcher-icon");
             }
 
             // subscribe event listeners
@@ -186,7 +186,7 @@
             // create button
             if (ApplicationLauncher.Instance != null)
             {
-                m_Button = ApplicationLauncher.Instance.AddModApplication(OnTrue, OnFalse, OnHover, OnHoverOut, OnEnable, OnDisable, ApplicationLauncher.AppScenes.ALWAYS, m_IconTexture);
+                m_Button = ApplicationLauncher.Instance.AddModApplication(OnTrue, OnFalse, OnHover, OnHoverOut, OnEnable, OnDisable, ApplicationLauncher.AppScenes.ALWAYS, s_IconTexture);
             }
 
             OnReady();

--- a/KerbalEngineer/AssetBundleLoader.cs
+++ b/KerbalEngineer/AssetBundleLoader.cs
@@ -23,28 +23,28 @@
     [KSPAddon(KSPAddon.Startup.Instantly, false)]
     public class AssetBundleLoader : MonoBehaviour
     {
-        private static AssetBundle m_Images;
-        private static AssetBundle m_Prefabs;
+        private static AssetBundle s_Images;
+        private static AssetBundle s_Prefabs;
 
         /// <summary>
         ///     Gets the loaded images asset bundle.
         /// </summary>
-        public static AssetBundle images
+        public static AssetBundle Images
         {
             get
             {
-                return m_Images;
+                return s_Images;
             }
         }
 
         /// <summary>
         ///     Gets the loaded prefabs asset bundle.
         /// </summary>
-        public static AssetBundle prefabs
+        public static AssetBundle Prefabs
         {
             get
             {
-                return m_Prefabs;
+                return s_Prefabs;
             }
         }
 
@@ -52,8 +52,8 @@
         {
             string bundlePath = EngineerGlobals.AssemblyPath;
 
-            m_Images = AssetBundle.CreateFromFile(bundlePath + "/images");
-            m_Prefabs = AssetBundle.CreateFromFile(bundlePath + "/prefabs");
+            s_Images = AssetBundle.CreateFromFile(bundlePath + "/images");
+            s_Prefabs = AssetBundle.CreateFromFile(bundlePath + "/prefabs");
         }
     }
 }

--- a/KerbalEngineer/Editor/BuildAdvanced.cs
+++ b/KerbalEngineer/Editor/BuildAdvanced.cs
@@ -24,6 +24,7 @@
     using KeyBinding;
     using Settings;
     using UIControls;
+    using Unity;
     using UnityEngine;
     using VesselSimulator;
 
@@ -811,6 +812,10 @@
                 // When not in compact mode draw the 'All Stages' and 'Atmospheric' toggles.
                 if (!compactMode)
                 {
+                    //if (GUI.Button(new Rect(position.width - 143.0f * GuiDisplaySize.Offset, 5.0f, 70.0f * GuiDisplaySize.Offset, 20.0f), "SETTINGS", buttonStyle))
+                    //{
+                    //    SettingsWindow.Open();
+                    //}
                     if (GUI.Toggle(new Rect(position.width - 143.0f * GuiDisplaySize.Offset, 5.0f, 70.0f * GuiDisplaySize.Offset, 20.0f), showSettings, "SETTINGS", buttonStyle) != showSettings)
                     {
                         hasChanged = true;

--- a/KerbalEngineer/Editor/BuildAppLauncher.cs
+++ b/KerbalEngineer/Editor/BuildAppLauncher.cs
@@ -48,7 +48,7 @@
             if (EditorLogic.RootPart != null)
             {
                 // set button state based on existing visibility
-                isOn = BuildAdvanced.Instance.Visible;
+                IsOn = BuildAdvanced.Instance.Visible;
             }
             else
             {

--- a/KerbalEngineer/Editor/BuildOverlayPartInfo.cs
+++ b/KerbalEngineer/Editor/BuildOverlayPartInfo.cs
@@ -1,7 +1,7 @@
 // 
 //     Kerbal Engineer Redux
 // 
-//     Copyright (C) 2014 CYBUTEK
+//     Copyright (C) 2016 CYBUTEK
 // 
 //     This program is free software: you can redistribute it and/or modify
 //     it under the terms of the GNU General Public License as published by
@@ -12,10 +12,9 @@
 //     but WITHOUT ANY WARRANTY; without even the implied warranty of
 //     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 //     GNU General Public License for more details.
-// 
 //     You should have received a copy of the GNU General Public License
 //     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-// 
+//  
 
 namespace KerbalEngineer.Editor
 {
@@ -102,7 +101,7 @@
                     return;
                 }
 
-                position = GUILayout.Window(GetInstanceID(), position, Window, String.Empty, BuildOverlay.WindowStyle);
+                position = GUILayout.Window(GetInstanceID(), position, Window, string.Empty, BuildOverlay.WindowStyle);
             }
             catch (Exception ex)
 
@@ -131,7 +130,16 @@
                     position.x = Input.mousePosition.x - 3 - position.width;
                 }
 
-                part = EditorLogic.fetch.ship.parts.Find(p => p.stackIcon.Highlighted) ?? EditorLogic.SelectedPart;
+                RaycastHit rayHit;
+                if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out rayHit))
+                {
+                    part = rayHit.transform.GetComponent<Part>();
+                }
+                else
+                {
+                    part = EditorLogic.fetch.ship.parts.Find(p => p.highlighter.highlighted) ?? EditorLogic.SelectedPart;
+                }
+
                 if (part != null)
                 {
                     if (!part.Equals(selectedPart))

--- a/KerbalEngineer/EngineerGlobals.cs
+++ b/KerbalEngineer/EngineerGlobals.cs
@@ -25,7 +25,7 @@
         /// <summary>
         ///     Current version of the Kerbal Engineer assembly.
         /// </summary>
-        public const string ASSEMBLY_VERSION = "1.0.19.4";
+        public const string ASSEMBLY_VERSION = "1.1.0.1";
 
         private static string assemblyFile;
         private static string assemblyName;

--- a/KerbalEngineer/Extensions/PartExtensions.cs
+++ b/KerbalEngineer/Extensions/PartExtensions.cs
@@ -572,6 +572,7 @@
 
             public double EjectionForce { get; private set; }
             public bool IsOmniDecoupler { get; private set; }
+            public bool IsStageEnabled { get; private set; }
 
             private void SetModuleAnchoredDecoupler()
             {
@@ -582,6 +583,7 @@
                 }
 
                 EjectionForce = decoupler.ejectionForce;
+                IsStageEnabled = decoupler.stagingEnabled;
             }
 
             private void SetModuleDecouple()
@@ -594,6 +596,7 @@
 
                 EjectionForce = decoupler.ejectionForce;
                 IsOmniDecoupler = decoupler.isOmniDecoupler;
+                IsStageEnabled = decoupler.stagingEnabled;
             }
         }
 

--- a/KerbalEngineer/Flight/FlightAppLauncher.cs
+++ b/KerbalEngineer/Flight/FlightAppLauncher.cs
@@ -35,7 +35,7 @@
         /// <summary>
         ///     Gets the current instance of the FlightAppLauncher object.
         /// </summary>
-        public static FlightAppLauncher instance
+        public static FlightAppLauncher Instance
         {
             get
             {
@@ -44,6 +44,14 @@
         }
 
         /// <summary>
+        ///     Applies the KSP theme to a game object and its children.
+        /// </summary>
+        public void ApplyTheme(GameObject gameObject)
+        {
+            StyleManager.Process(gameObject);
+        }
+
+        /// <summary>
         ///     Clamps the given rect transform within the screen bounds.
         /// </summary>
         public void ClampToScreen(RectTransform rectTransform)
@@ -52,9 +60,25 @@
         }
 
         /// <summary>
+        ///     Gets a list of custom sections.
+        /// </summary>
+        IList<ISectionModule> IFlightAppLauncher.GetCustomSections()
+        {
+            return new List<ISectionModule>(SectionLibrary.CustomSections.ToArray());
+        }
+
+        /// <summary>
+        ///     Gets a list of stock sections.
+        /// </summary>
+        IList<ISectionModule> IFlightAppLauncher.GetStockSections()
+        {
+            return new List<ISectionModule>(SectionLibrary.StockSections.ToArray());
+        }
+
+        /// <summary>
         ///     Gets or sets the control bar's visibility.
         /// </summary>
-        public bool controlBar
+        public bool IsControlBarVisible
         {
             get
             {
@@ -75,25 +99,9 @@
         }
 
         /// <summary>
-        ///     Gets a list of custom sections.
-        /// </summary>
-        IList<ISectionModule> IFlightAppLauncher.GetCustomSections()
-        {
-            return new List<ISectionModule>(SectionLibrary.CustomSections.ToArray());
-        }
-
-        /// <summary>
-        ///     Gets a list of stock sections.
-        /// </summary>
-        public IList<ISectionModule> GetStockSections()
-        {
-            return new List<ISectionModule>(SectionLibrary.StockSections.ToArray());
-        }
-
-        /// <summary>
         ///     Gets or sets the display stack's visibility.
         /// </summary>
-        public bool showEngineer
+        public bool IsDisplayStackVisible
         {
             get
             {
@@ -111,6 +119,25 @@
                     DisplayStack.Instance.Hidden = !value;
                 }
             }
+        }
+
+        /// <summary>
+        ///     Creates and initialises a new custom section.
+        /// </summary>
+        public ISectionModule NewCustomSection()
+        {
+            SectionModule section = new SectionModule
+            {
+                Name = "Custom " + (SectionLibrary.CustomSections.Count + 1),
+                Abbreviation = "CUST " + (SectionLibrary.CustomSections.Count + 1),
+                IsVisible = true,
+                IsCustom = true,
+                IsEditorVisible = true
+            };
+
+            SectionLibrary.CustomSections.Add(section);
+
+            return section;
         }
 
         protected override void Awake()
@@ -121,9 +148,9 @@
             m_Instance = this;
 
             // cache menu prefab
-            if (m_MenuPrefab == null && AssetBundleLoader.prefabs != null)
-            {
-                m_MenuPrefab = AssetBundleLoader.prefabs.LoadAsset<GameObject>("FlightMenu");
+            if (m_MenuPrefab == null && AssetBundleLoader.Prefabs != null)
+            {
+                m_MenuPrefab = AssetBundleLoader.Prefabs.LoadAsset<GameObject>("FlightMenu");
             }
         }
 
@@ -139,7 +166,7 @@
 
         protected override void OnHoverOut()
         {
-            if (isOn == false)
+            if (IsOn == false)
             {
                 Close();
             }
@@ -159,7 +186,7 @@
             {
                 m_FlightMenu.Close();
             }
-            else
+            else if (m_MenuObject != null)
             {
                 Destroy(m_MenuObject);
             }
@@ -189,6 +216,8 @@
                 return;
             }
 
+            StyleManager.Process(m_MenuObject);
+
             // set object as a child of the main canvas
             m_MenuObject.transform.SetParent(MainCanvasUtil.MainCanvas.transform);
 

--- a/KerbalEngineer/Flight/FlightEngineerModule.cs
+++ b/KerbalEngineer/Flight/FlightEngineerModule.cs
@@ -23,8 +23,17 @@
 
 namespace KerbalEngineer.Flight
 {
+    using VesselSimulator;
+
     /// <summary>
     ///     Module that can be attached to parts, giving them FlightEngineerCore management.
     /// </summary>
-    public class FlightEngineerModule : PartModule { }
+    public class FlightEngineerModule : PartModule
+    {
+        [KSPEvent(guiName = "Verbose Simulation Log", guiActive = true, guiActiveEditor = true)]
+        public void SimulationDump()
+        {
+            SimManager.logOutput = true;
+        }
+    }
 }

--- a/KerbalEngineer/Flight/Readouts/Vessel/DeltaVStaged.cs
+++ b/KerbalEngineer/Flight/Readouts/Vessel/DeltaVStaged.cs
@@ -28,6 +28,8 @@
 
 namespace KerbalEngineer.Flight.Readouts.Vessel
 {
+    using KSP.UI.Screens;
+
     public class DeltaVStaged : ReadoutModule
     {
         #region Constructors
@@ -51,7 +53,7 @@
                 return;
             }
 
-            foreach (var stage in SimulationProcessor.Stages.Where(stage => stage.deltaV > 0 || stage.number == Staging.CurrentStage))
+            foreach (var stage in SimulationProcessor.Stages.Where(stage => stage.deltaV > 0 || stage.number == StageManager.CurrentStage))
             {
                 this.DrawLine("DeltaV (S" + stage.number + ")", stage.deltaV.ToString("N0") + "m/s (" + TimeFormatter.ConvertToString(stage.time) + ")", section.IsHud);
             }

--- a/KerbalEngineer/Flight/Readouts/Vessel/SuicideBurnProcessor.cs
+++ b/KerbalEngineer/Flight/Readouts/Vessel/SuicideBurnProcessor.cs
@@ -17,32 +17,16 @@
 //     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // 
 
-#region Using Directives
-
-
-
-#endregion
-
 namespace KerbalEngineer.Flight.Readouts.Vessel
 {
-    #region Using Directives
-
     using System;
-
-    #endregion
 
     public class SuicideBurnProcessor : IUpdatable, IUpdateRequest
     {
-        #region Fields
-
-        private static readonly SuicideBurnProcessor instance = new SuicideBurnProcessor();
-        private double acceleration;
-        private double gravity;
-        private double radarAltitude;
-
-        #endregion
-
-        #region Properties
+        private static readonly SuicideBurnProcessor s_Instance = new SuicideBurnProcessor();
+        private double m_Acceleration;
+        private double m_Gravity;
+        private double m_RadarAltitude;
 
         public static double Altitude { get; private set; }
 
@@ -52,50 +36,48 @@
 
         public static SuicideBurnProcessor Instance
         {
-            get { return instance; }
+            get
+            {
+                return s_Instance;
+            }
         }
 
         public static bool ShowDetails { get; set; }
 
+        public void Update()
+        {
+            if (FlightGlobals.currentMainBody == null || FlightGlobals.ActiveVessel == null || SimulationProcessor.LastStage == null ||
+                FlightGlobals.ship_orbit.PeA >= 0.0 || !SimulationProcessor.ShowDetails)
+            {
+                ShowDetails = false;
+                return;
+            }
+
+            m_Gravity = FlightGlobals.currentMainBody.gravParameter / Math.Pow(FlightGlobals.currentMainBody.Radius, 2.0);
+            m_Acceleration = SimulationProcessor.LastStage.thrust / SimulationProcessor.LastStage.totalMass;
+            m_RadarAltitude = FlightGlobals.ActiveVessel.terrainAltitude > 0.0
+                ? FlightGlobals.ship_altitude - FlightGlobals.ActiveVessel.terrainAltitude
+                : FlightGlobals.ship_altitude;
+
+            DeltaV = Math.Sqrt((2 * m_Gravity * m_RadarAltitude) + Math.Pow(FlightGlobals.ship_verticalSpeed, 2.0));
+            Altitude = Math.Pow(DeltaV, 2.0) / (2.0 * m_Acceleration);
+            Distance = m_RadarAltitude - Altitude;
+
+            ShowDetails = !double.IsInfinity(Distance);
+        }
+
         public bool UpdateRequested { get; set; }
-
-        #endregion
-
-        #region Methods
 
         public static void RequestUpdate()
         {
-            instance.UpdateRequested = true;
+            s_Instance.UpdateRequested = true;
             SimulationProcessor.RequestUpdate();
         }
 
         public static void Reset()
         {
             FlightEngineerCore.Instance.AddUpdatable(SimulationProcessor.Instance);
-            FlightEngineerCore.Instance.AddUpdatable(instance);
+            FlightEngineerCore.Instance.AddUpdatable(s_Instance);
         }
-
-        public void Update()
-        {
-            if (FlightGlobals.ship_orbit.PeA >= 0.0 || !SimulationProcessor.ShowDetails)
-            {
-                ShowDetails = false;
-                return;
-            }
-
-            this.gravity = FlightGlobals.currentMainBody.gravParameter / Math.Pow(FlightGlobals.currentMainBody.Radius, 2.0);
-            this.acceleration = SimulationProcessor.LastStage.thrust / SimulationProcessor.LastStage.totalMass;
-            this.radarAltitude = FlightGlobals.ActiveVessel.terrainAltitude > 0.0
-                ? FlightGlobals.ship_altitude - FlightGlobals.ActiveVessel.terrainAltitude
-                : FlightGlobals.ship_altitude;
-
-            DeltaV = Math.Sqrt((2 * this.gravity * this.radarAltitude) + Math.Pow(FlightGlobals.ship_verticalSpeed, 2.0));
-            Altitude = Math.Pow(DeltaV, 2.0) / (2.0 * this.acceleration);
-            Distance = this.radarAltitude - Altitude;
-
-            ShowDetails = !Double.IsInfinity(Distance);
-        }
-
-        #endregion
     }
 }

--- a/KerbalEngineer/Flight/Readouts/Vessel/SurfaceThrustToWeight.cs
+++ b/KerbalEngineer/Flight/Readouts/Vessel/SurfaceThrustToWeight.cs
@@ -1,7 +1,7 @@
 // 
 //     Kerbal Engineer Redux
 // 
-//     Copyright (C) 2014 CYBUTEK
+//     Copyright (C) 2016 CYBUTEK
 // 
 //     This program is free software: you can redistribute it and/or modify
 //     it under the terms of the GNU General Public License as published by
@@ -12,55 +12,41 @@
 //     but WITHOUT ANY WARRANTY; without even the implied warranty of
 //     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 //     GNU General Public License for more details.
-// 
 //     You should have received a copy of the GNU General Public License
 //     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-// 
-
-#region Using Directives
-
-using System;
-
-using KerbalEngineer.Flight.Sections;
-
-#endregion
+//  
 
 namespace KerbalEngineer.Flight.Readouts.Vessel
 {
+    using System;
+    using Sections;
+
     public class SurfaceThrustToWeight : ReadoutModule
     {
-        #region Fields
-
-        private string actual = string.Empty;
-        private double gravity;
-        private string total = string.Empty;
-
-        #endregion
-
-        #region Constructors
+        private string m_Actual = string.Empty;
+        private double m_Gravity;
+        private string m_Total = string.Empty;
 
         public SurfaceThrustToWeight()
         {
-            this.Name = "Surface Thrust to Weight Ratio";
-            this.Category = ReadoutCategory.GetCategory("Vessel");
-            this.HelpString = "Shows the vessel's surface thrust to weight ratio.";
-            this.IsDefault = true;
+            Name = "Surface Thrust to Weight Ratio";
+            Category = ReadoutCategory.GetCategory("Vessel");
+            HelpString = "Shows the vessel's surface thrust to weight ratio.";
+            IsDefault = true;
         }
-
-        #endregion
-
-        #region Methods: public
 
         public override void Draw(SectionModule section)
         {
-            if (!SimulationProcessor.ShowDetails)
+            if (FlightGlobals.currentMainBody == null || SimulationProcessor.LastStage == null ||
+                !SimulationProcessor.ShowDetails)
             {
                 return;
             }
-            this.gravity = FlightGlobals.currentMainBody.gravParameter / Math.Pow(FlightGlobals.currentMainBody.Radius, 2);
-            this.actual = (SimulationProcessor.LastStage.actualThrust / (SimulationProcessor.LastStage.totalMass * this.gravity)).ToString("F2");
-            this.total = (SimulationProcessor.LastStage.thrust / (SimulationProcessor.LastStage.totalMass * this.gravity)).ToString("F2");
-            this.DrawLine("TWR (Surface)", this.actual + " / " + this.total, section.IsHud);
+
+            m_Gravity = FlightGlobals.currentMainBody.gravParameter / Math.Pow(FlightGlobals.currentMainBody.Radius, 2);
+            m_Actual = (SimulationProcessor.LastStage.actualThrust / (SimulationProcessor.LastStage.totalMass * m_Gravity)).ToString("F2");
+            m_Total = (SimulationProcessor.LastStage.thrust / (SimulationProcessor.LastStage.totalMass * m_Gravity)).ToString("F2");
+            DrawLine("TWR (Surface)", m_Actual + " / " + m_Total, section.IsHud);
         }
 
         public override void Reset()
@@ -72,7 +58,5 @@
         {
             SimulationProcessor.RequestUpdate();
         }
-
-        #endregion
     }
 }

--- a/KerbalEngineer/Flight/Sections/SectionEditor.cs
+++ b/KerbalEngineer/Flight/Sections/SectionEditor.cs
@@ -236,6 +236,7 @@
                 {
                     this.ParentSection.IsFloating = false;
                     this.ParentSection.IsEditorVisible = false;
+                    this.ParentSection.IsDeleted = true;
                     SectionLibrary.CustomSections.Remove(this.ParentSection);
                     DisplayStack.Instance.RequestResize();
                 }

--- a/KerbalEngineer/Flight/Sections/SectionModule.cs
+++ b/KerbalEngineer/Flight/Sections/SectionModule.cs
@@ -159,6 +159,11 @@
         }
 
         /// <summary>
+        ///     Gets and sets whether the section module has been deleted.
+        /// </summary>
+        public bool IsDeleted { get; set; }
+
+        /// <summary>
         ///     Gets and sets whether the section module has a background as a HUD.
         /// </summary>
         public bool IsHudBackground { get; set; }

--- a/KerbalEngineer/KerbalEngineer.csproj
+++ b/KerbalEngineer/KerbalEngineer.csproj
@@ -155,6 +155,8 @@
     <Compile Include="KeyBinding\KeyBinder.cs" />
     <Compile Include="Control\ControlCentre.cs" />
     <Compile Include="KeyBinding\KeyBindingsObject.cs" />
+    <Compile Include="Settings\SettingsWindow.cs" />
+    <Compile Include="StyleManager.cs" />
     <Compile Include="UIControls\DropDown.cs" />
     <Compile Include="Logger.cs" />
     <Compile Include="EngineerGlobals.cs" />

--- a/KerbalEngineer/LogMsg.cs
+++ b/KerbalEngineer/LogMsg.cs
@@ -1,6 +1,4 @@
 using System.Text;
-
-using UnityEngine;
 
 namespace KerbalEngineer
 {
@@ -16,7 +14,9 @@
         public void Flush()
         {
             if (this.buf.Length > 0)
-                MonoBehaviour.print(this.buf);
+            {
+                Logger.Log(this.buf);
+            }
             this.buf.Length = 0;
         }
     }

--- a/KerbalEngineer/Logger.cs
+++ b/KerbalEngineer/Logger.cs
@@ -19,31 +19,30 @@
 
 #region Using Directives
 
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-
-using UnityEngine;
-
 #endregion
 
 namespace KerbalEngineer
 {
+    using System;
+    using System.Collections;
+    using System.Collections.Generic;
+    using System.IO;
+    using System.Reflection;
+    using UnityEngine;
+
     [KSPAddon(KSPAddon.Startup.Instantly, false)]
     public class Logger : MonoBehaviour
     {
+        #region Fields
+
+        private static readonly List<string[]> messages = new List<string[]>();
+
+        #endregion
+
         #region Constants
 
         private static readonly string fileName;
         private static readonly AssemblyName assemblyName;
-
-        #endregion
-
-        #region Fields
-
-        private static readonly List<string[]> messages = new List<string[]>();
 
         #endregion
 
@@ -86,50 +85,58 @@
             {
                 try
                 {
-                    if (obj is IEnumerable)
+                    messages.Add(new[] {"Log " + DateTime.Now.TimeOfDay, GetObjString(obj)});
+                }
+                catch (Exception ex)
+                {
+                    Exception(ex);
+                }
+            }
+        }
+
+        public static void Log(string name, object obj)
+        {
+            lock (messages)
+            {
+                try
+                {
+                    messages.Add(new[] {"Log " + DateTime.Now.TimeOfDay, name + "\n" + GetObjString(obj)});
+                }
+                catch (Exception ex)
+                {
+                    Exception(ex);
+                }
+            }
+        }
+
+        private static string GetObjString(object obj, int tabs = 0)
+        {
+            string objString;
+            string tabString = string.Empty;
+            for (int i = 0; i < tabs; i++)
+            {
+                tabString += " ";
+            }
+
+            if (obj != null)
+            {
+                objString = tabString + obj;
+
+                IEnumerable items = obj as IEnumerable;
+                if (items != null)
+                {
+                    foreach (object item in items)
                     {
-                        messages.Add(new[] {"Log " + DateTime.Now.TimeOfDay, obj.ToString()});
-                        foreach (var o in obj as IEnumerable)
-                        {
-                            messages.Add(new[] {"\t", o.ToString()});
-                        }
+                        objString += "\n" + GetObjString(item, tabs + 1);
                     }
-                    else
-                    {
-                        messages.Add(new[] {"Log " + DateTime.Now.TimeOfDay, obj.ToString()});
-                    }
-                }
-                catch (Exception ex)
-                {
-                    Exception(ex);
-                }
-            }
-        }
-
-        public static void Log(string name, object obj)
-        {
-            lock (messages)
-            {
-                try
-                {
-                    if (obj is IEnumerable)
-                    {
-                        messages.Add(new[] {"Log " + DateTime.Now.TimeOfDay, name});
-                        foreach (var o in obj as IEnumerable)
-                        {
-                            messages.Add(new[] {"\t", o.ToString()});
-                        }
-                    }
-                    else
-                    {
-                        messages.Add(new[] {"Log " + DateTime.Now.TimeOfDay, obj.ToString()});
-                    }
-                }
-                catch (Exception ex)
-                {
-                    Exception(ex);
-                }
-            }
+                }
+            }
+            else
+            {
+                objString = "Null";
+            }
+
+            return objString;
         }
 
         public static void Log(string message)
@@ -186,9 +193,9 @@
             {
                 if (messages.Count > 0)
                 {
-                    using (var file = File.AppendText(fileName))
+                    using (StreamWriter file = File.AppendText(fileName))
                     {
-                        foreach (var message in messages)
+                        foreach (string[] message in messages)
                         {
                             file.WriteLine(message.Length > 0 ? message.Length > 1 ? "[" + message[0] + "]: " + message[1] : message[0] : string.Empty);
                             if (message.Length > 0)

--- /dev/null
+++ b/KerbalEngineer/Settings/SettingsWindow.cs
@@ -1,1 +1,112 @@
+namespace KerbalEngineer.Settings
+{
+    using System;
+    using Editor;
+    using Flight;
+    using KeyBinding;
+    using Unity;
+    using Unity.UI;
+    using UnityEngine;
+    using UnityEngine.Events;
+    using UnityEngine.UI;
 
+    public class SettingsWindow : MonoBehaviour
+    {
+        private static Window m_Window;
+
+        public static void Close()
+        {
+            if (m_Window != null)
+            {
+                m_Window.Close();
+            }
+        }
+
+        public static void Open()
+        {
+            if (m_Window == null)
+            {
+                m_Window = StyleManager.CreateWindow("SETTINGS", 600.0f);
+
+                AddKeyBindingsButton();
+                AddFlightActivationModes();
+                AddBuildOverlayOptions();
+
+                StyleManager.Process(m_Window);
+            }
+        }
+
+        private static void AddBuildOverlayOptions()
+        {
+            if (m_Window != null)
+            {
+                Setting buildOverlay = StyleManager.CreateSetting("Build Engineer Overlay", m_Window);
+                Toggle buildOverlayVisible = AddToggle(buildOverlay, "VISIBLE", 100.0f, value => BuildOverlay.Visible = value);
+                Toggle buildOverlayNamesOnly = AddToggle(buildOverlay, "NAMES ONLY", 100.0f, value => BuildOverlayPartInfo.NamesOnly = value);
+                Toggle buildOverlayClickToOpen = AddToggle(buildOverlay, "CLICK TO OPEN", 100.0f, value => BuildOverlayPartInfo.ClickToOpen = value);
+                AddUpdateHandler(buildOverlay, () =>
+                {
+                    buildOverlayVisible.isOn = BuildOverlay.Visible;
+                    buildOverlayNamesOnly.isOn = BuildOverlayPartInfo.NamesOnly;
+                    buildOverlayClickToOpen.isOn = BuildOverlayPartInfo.ClickToOpen;
+                });
+            }
+        }
+
+        private static Button AddButton(Setting setting, string text, float width, UnityAction onClick)
+        {
+            Button button = null;
+
+            if (setting != null)
+            {
+                button = setting.AddButton(text, width, onClick);
+            }
+
+            return button;
+        }
+
+        private static void AddFlightActivationModes()
+        {
+            if (m_Window != null)
+            {
+                Setting flightActivationMode = StyleManager.CreateSetting("Flight Engineer Activation Mode", m_Window);
+                Toggle flightActivationModeCareer = AddToggle(flightActivationMode, "CAREER", 100.0f, value => FlightEngineerCore.IsCareerMode = value);
+                Toggle flightActivationModePartless = AddToggle(flightActivationMode, "PARTLESS", 100.0f, value => FlightEngineerCore.IsCareerMode = !value);
+                AddUpdateHandler(flightActivationMode, () =>
+                {
+                    flightActivationModeCareer.isOn = FlightEngineerCore.IsCareerMode;
+                    flightActivationModePartless.isOn = !FlightEngineerCore.IsCareerMode;
+                });
+            }
+        }
+
+        private static void AddKeyBindingsButton()
+        {
+            if (m_Window != null)
+            {
+                Setting keyBindings = StyleManager.CreateSetting("Key Bindings", m_Window);
+                AddButton(keyBindings, "EDIT KEY BINDINGS", 304.0f, KeyBinder.Show);
+            }
+        }
+
+        private static Toggle AddToggle(Setting setting, string text, float width, UnityAction<bool> onValueChanged)
+        {
+            Toggle toggle = null;
+
+            if (setting != null)
+            {
+                toggle = setting.AddToggle(text, width, onValueChanged);
+            }
+
+            return toggle;
+        }
+
+        private static void AddUpdateHandler(Setting setting, Action onUpdate)
+        {
+            if (setting != null && onUpdate != null)
+            {
+                setting.AddUpdateHandler(onUpdate);
+            }
+        }
+    }
+}

--- /dev/null
+++ b/KerbalEngineer/StyleManager.cs
@@ -1,1 +1,220 @@
-
+// 
+//     Kerbal Engineer Redux
+// 
+//     Copyright (C) 2016 CYBUTEK
+// 
+//     This program is free software: you can redistribute it and/or modify
+//     it under the terms of the GNU General Public License as published by
+//     the Free Software Foundation, either version 3 of the License, or
+//     (at your option) any later version.
+// 
+//     This program is distributed in the hope that it will be useful,
+//     but WITHOUT ANY WARRANTY; without even the implied warranty of
+//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//     GNU General Public License for more details.
+//     You should have received a copy of the GNU General Public License
+//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//  
+
+namespace KerbalEngineer
+{
+    using Unity;
+    using Unity.UI;
+    using UnityEngine;
+    using UnityEngine.UI;
+
+    public static class StyleManager
+    {
+        private static GameObject s_WindowPrefab;
+        private static GameObject s_SettingPrefab;
+
+        /// <summary>
+        ///     Creates a setting on the supplied window.
+        /// </summary>
+        public static Setting CreateSetting(string label, Window window)
+        {
+            Setting setting = null;
+
+            GameObject settingPrefab = GetSettingPrefab();
+
+            if (settingPrefab != null && window != null)
+            {
+                GameObject settingObject = Object.Instantiate(settingPrefab);
+
+                if (settingObject != null)
+                {
+                    setting = settingObject.GetComponent<Setting>();
+                    if (setting != null)
+                    {
+                        setting.SetLabel(label);
+                        window.AddToContent(settingObject);
+                    }
+                }
+            }
+
+            return setting;
+        }
+
+        /// <summary>
+        ///     Creates and returns a new window object.
+        /// </summary>
+        public static Window CreateWindow(string title, float width)
+        {
+            GameObject windowPrefab = GetWindowPrefab();
+            if (windowPrefab == null)
+            {
+                return null;
+            }
+
+            GameObject windowObject = Object.Instantiate(windowPrefab);
+            if (windowObject == null)
+            {
+                return null;
+            }
+
+            // process style applicators
+            Process(windowObject);
+
+            // assign game object to be a child of the main canvas
+            windowObject.transform.SetParent(MainCanvasUtil.MainCanvas.transform, false);
+
+            // set window values
+            Window window = windowObject.GetComponent<Window>();
+            if (window != null)
+            {
+                window.SetTitle(title);
+                window.SetWidth(width);
+            }
+
+            return window;
+        }
+
+        /// <summary>
+        ///     Processes all of the style applicators on the supplied game object.
+        /// </summary>
+        public static void Process(GameObject gameObject)
+        {
+            if (gameObject == null)
+            {
+                return;
+            }
+
+            StyleApplicator[] applicators = gameObject.GetComponentsInChildren<StyleApplicator>();
+
+            if (applicators != null)
+            {
+                for (int i = 0; i < applicators.Length; i++)
+                {
+                    Process(applicators[i]);
+                }
+            }
+        }
+
+        /// <summary>
+        ///     Processes all the style applicators on the supplied component's game object.
+        /// </summary>
+        public static void Process(Component component)
+        {
+            if (component != null)
+            {
+                Process(component.gameObject);
+            }
+        }
+
+        /// <summary>
+        ///     Gets a setting prefab object.
+        /// </summary>
+        private static GameObject GetSettingPrefab()
+        {
+            if (s_SettingPrefab == null)
+            {
+                s_SettingPrefab = AssetBundleLoader.Prefabs.LoadAsset<GameObject>("Setting");
+            }
+
+            return s_SettingPrefab;
+        }
+
+        /// <summary>
+        ///     Gets a new ThemeTextStyle created from KSP UIStyle and UIStyleState objects.
+        /// </summary>
+        private static TextStyle GetTextStyle(UIStyle style, UIStyleState styleState)
+        {
+            TextStyle textStyle = new TextStyle();
+
+            if (style != null)
+            {
+                textStyle.Font = style.font;
+                textStyle.Style = style.fontStyle;
+                textStyle.Size = style.fontSize;
+            }
+
+            if (styleState != null)
+            {
+                textStyle.Colour = styleState.textColor;
+            }
+
+            return textStyle;
+        }
+
+        /// <summary>
+        ///     Gets a window prefab object.
+        /// </summary>
+        private static GameObject GetWindowPrefab()
+        {
+            if (s_WindowPrefab == null)
+            {
+                s_WindowPrefab = AssetBundleLoader.Prefabs.LoadAsset<GameObject>("Window");
+            }
+
+            return s_WindowPrefab;
+        }
+
+        /// <summary>
+        ///     Processes a theme on the supplied applicator.
+        /// </summary>
+        private static void Process(StyleApplicator applicator)
+        {
+            if (applicator == null)
+            {
+                return;
+            }
+
+            // get the default skin
+            UISkinDef skin = UISkinManager.defaultSkin;
+            if (skin == null)
+            {
+                return;
+            }
+
+            // apply selected theme type
+            switch (applicator.ElementType)
+            {
+                case StyleApplicator.ElementTypes.Window:
+                    applicator.SetImage(skin.window.normal.background, Image.Type.Sliced);
+                    break;
+
+                case StyleApplicator.ElementTypes.Box:
+                    applicator.SetImage(skin.box.normal.background, Image.Type.Sliced);
+                    break;
+
+                case StyleApplicator.ElementTypes.Button:
+                    applicator.SetSelectable(null, skin.button.normal.background,
+                        skin.button.highlight.background,
+                        skin.button.active.background,
+                        skin.button.disabled.background);
+                    break;
+
+                case StyleApplicator.ElementTypes.ButtonToggle:
+                    applicator.SetToggle(null, skin.button.normal.background,
+                        skin.button.highlight.background,
+                        skin.button.active.background,
+                        skin.button.disabled.background);
+                    break;
+
+                case StyleApplicator.ElementTypes.Label:
+                    applicator.SetText(GetTextStyle(skin.label, skin.label.normal));
+                    break;
+            }
+        }
+    }
+}

--- a/KerbalEngineer/TapeDriveAnimator.cs
+++ b/KerbalEngineer/TapeDriveAnimator.cs
@@ -1,7 +1,7 @@
 // 
 //     Kerbal Engineer Redux
 // 
-//     Copyright (C) 2014 CYBUTEK
+//     Copyright (C) 2016 CYBUTEK
 // 
 //     This program is free software: you can redistribute it and/or modify
 //     it under the terms of the GNU General Public License as published by
@@ -12,382 +12,392 @@
 //     but WITHOUT ANY WARRANTY; without even the implied warranty of
 //     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 //     GNU General Public License for more details.
-// 
 //     You should have received a copy of the GNU General Public License
 //     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-// 
-
-#region Using Directives
-
-using UnityEngine;
-
-using Random = System.Random;
-
-#endregion
+//  
 
 namespace KerbalEngineer
 {
+    using UnityEngine;
+    using Random = System.Random;
+
     public class TapeDriveAnimator : PartModule
     {
-        #region Public Fields
-
-        [KSPField] public string Lights1 = "";
-        [KSPField] public float Lights1Speed = 0;
-        [KSPField] public string Lights2 = "";
-        [KSPField] public float Lights2Speed = 0;
-        [KSPField] public string Lights3 = "";
-        [KSPField] public float Lights3Speed = 0;
-        [KSPField] public string Lights4 = "";
-        [KSPField] public float Lights4Speed = 0;
-        [KSPField] public string Lights5 = "";
-        [KSPField] public float Lights5Speed = 0;
-        [KSPField] public string Lights6 = "";
-        [KSPField] public float Lights6Speed = 0;
-        [KSPField] public int MaxReelSpeed = 0;
-        [KSPField] public int MaxRepeatTime = 0;
-        [KSPField] public int MinReelSpeed = 0;
-        [KSPField] public int MinRepeatTime = 0;
-        [KSPField] public string Reel1 = "";
-        [KSPField] public float Reel1SpeedRatio = 1;
-        [KSPField] public string Reel2 = "";
-        [KSPField] public float Reel2SpeedRatio = 1;
-        [KSPField] public float RepeatTimeDenominator = 1;
-        [KSPField] public float SpeedChangeAmount = 0;
-        [KSPField] public float SpeedDeadZone = 0;
-        [KSPField] public float SpeedStopZone = 0;
-        [KSPField] public bool UseBakedAnimation = false;
-
-        #endregion
-
-        #region Private Fields
-
-        private float currentTime;
-        private float deltaTime;
-        private Shader lights1ShaderOff;
-        private Transform lights1Transform;
-        private Shader lights2ShaderOff;
-        private Transform lights2Transform;
-        private Shader lights3ShaderOff;
-        private Transform lights3Transform;
-        private Shader lights4ShaderOff;
-        private Transform lights4Transform;
-        private Shader lights5ShaderOff;
-        private Transform lights5Transform;
-        private Shader lights6ShaderOff;
-        private Transform lights6Transform;
-        private Shader lightsShaderOn;
-        private Random random;
-        private Transform reel1Transform;
-        private Transform reel2Transform;
-        private float repeatTime;
-        private bool sceneIsEditor;
-        private float speed;
-        private float targetSpeed;
-        private Renderer renderer;
-        private Light light;
-
-        #endregion
-
-        #region Properties
-
-        private bool isRunning;
+        [KSPField]
+        public string Lights1 = string.Empty;
+
+        [KSPField]
+        public float Lights1Speed = 0;
+
+        [KSPField]
+        public string Lights2 = string.Empty;
+
+        [KSPField]
+        public float Lights2Speed = 0;
+
+        [KSPField]
+        public string Lights3 = string.Empty;
+
+        [KSPField]
+        public float Lights3Speed = 0;
+
+        [KSPField]
+        public string Lights4 = string.Empty;
+
+        [KSPField]
+        public float Lights4Speed = 0;
+
+        [KSPField]
+        public string Lights5 = string.Empty;
+
+        [KSPField]
+        public float Lights5Speed = 0;
+
+        [KSPField]
+        public string Lights6 = string.Empty;
+
+        [KSPField]
+        public float Lights6Speed = 0;
+
+        [KSPField]
+        public int MaxReelSpeed = 0;
+
+        [KSPField]
+        public int MaxRepeatTime = 0;
+
+        [KSPField]
+        public int MinReelSpeed = 0;
+
+        [KSPField]
+        public int MinRepeatTime = 0;
+
+        [KSPField]
+        public string Reel1 = string.Empty;
+
+        [KSPField]
+        public float Reel1SpeedRatio = 1;
+
+        [KSPField]
+        public string Reel2 = string.Empty;
+
+        [KSPField]
+        public float Reel2SpeedRatio = 1;
+
+        [KSPField]
+        public float RepeatTimeDenominator = 1;
+
+        [KSPField]
+        public float SpeedChangeAmount = 0;
+
+        [KSPField]
+        public float SpeedDeadZone = 0;
+
+        [KSPField]
+        public float SpeedStopZone = 0;
+
+        [KSPField]
+        public bool UseBakedAnimation = false;
+
+        private Shader m_ButtonLightOffShader;
+        private Shader m_ButtonLightOnShader;
+        private Material m_ButtonSet1Material;
+        private Material m_ButtonSet2Material;
+        private Material m_ButtonSet3Material;
+        private Material m_ButtonSet4Material;
+        private Material m_ButtonSet5Material;
+        private Material m_ButtonSet6Material;
+        private float m_CurrentTime;
+        private float m_DeltaTime;
+        private bool m_IsRunning;
+        private Random m_Random;
+        private Transform m_Reel1Transform;
+        private Transform m_Reel2Transform;
+        private float m_RepeatTime;
+        private bool m_SceneIsEditor;
+        private float m_Speed;
+        private float m_TargetSpeed;
 
         public bool IsRunning
         {
-            get { return this.isRunning; }
+            get
+            {
+                return m_IsRunning;
+            }
             set
             {
-                this.isRunning = value;
-
-                if (this.isRunning)
-                {
-                    if (this.UseBakedAnimation)
+                m_IsRunning = value;
+
+                if (m_IsRunning)
+                {
+                    if (UseBakedAnimation)
                     {
-                        this.StartBakedAnimation();
+                        StartBakedAnimation();
                     }
                 }
                 else
                 {
-                    if (this.UseBakedAnimation)
+                    if (UseBakedAnimation)
                     {
-                        this.StopBakedAnimation();
+                        StopBakedAnimation();
                     }
                 }
             }
         }
 
-        #endregion
-
-        #region Initialisation
-
         public override void OnStart(StartState state)
         {
-            renderer = GetComponent<Renderer>();
-
-            this.random = new Random();
-
-            this.StopBakedAnimation();
-            this.IsRunning = false;
+            m_Random = new Random();
+
+            StopBakedAnimation();
+            IsRunning = false;
 
             if (HighLogic.LoadedSceneIsEditor)
             {
-                this.part.OnEditorAttach += this.OnEditorAttach;
-                this.part.OnEditorDetach += this.OnEditorDetach;
-
-                this.sceneIsEditor = true;
-
-                if (this.part.parent != null)
-                {
-                    this.IsRunning = true;
+                part.OnEditorAttach += OnEditorAttach;
+                part.OnEditorDetach += OnEditorDetach;
+
+                m_SceneIsEditor = true;
+
+                if (part.parent != null)
+                {
+                    IsRunning = true;
                 }
             }
             else if (HighLogic.LoadedSceneIsFlight)
             {
-                this.IsRunning = true;
-            }
-
-            if (!this.UseBakedAnimation)
-            {
-                this.InitialiseReels();
-                this.InitialiseLights();
-            }
+                IsRunning = true;
+            }
+
+            if (UseBakedAnimation == false)
+            {
+                InitialiseReels();
+                InitialiseLights();
+            }
+        }
+
+        public override void OnUpdate()
+        {
+            if (UseBakedAnimation)
+            {
+                return;
+            }
+
+            m_DeltaTime = m_SceneIsEditor ? Time.deltaTime : TimeWarp.deltaTime;
+
+            if (TimeWarp.CurrentRate != 1.0f && TimeWarp.WarpMode != TimeWarp.Modes.LOW)
+            {
+                return;
+            }
+
+            if (IsRunning)
+            {
+                UpdateTimerCycle();
+                UpdateSpeed();
+                UpdateReels();
+                UpdateLights();
+            }
+            else
+            {
+                m_TargetSpeed = 0;
+
+                if (m_Speed != 0)
+                {
+                    UpdateSpeed();
+                    UpdateReels();
+                    UpdateLights();
+                }
+            }
+        }
+
+        private static void SetShaderOnMaterial(Material material, Shader shader)
+        {
+            if (material != null && shader != null)
+            {
+                material.shader = shader;
+            }
+        }
+
+        private Material GetMaterialOnModelTransform(string transformName)
+        {
+            Transform modelTransform = GetModelTransform(transformName);
+            if (modelTransform != null)
+            {
+                Renderer renderer = modelTransform.GetComponent<Renderer>();
+                if (renderer != null)
+                {
+                    return renderer.material;
+                }
+            }
+
+            return null;
+        }
+
+        private Transform GetModelTransform(string transformName)
+        {
+            if (string.IsNullOrEmpty(transformName) == false)
+            {
+                return part.FindModelTransform(transformName);
+            }
+
+            return null;
+        }
+
+        private void InitialiseLights()
+        {
+            m_ButtonSet1Material = GetMaterialOnModelTransform(Lights1);
+            m_ButtonSet2Material = GetMaterialOnModelTransform(Lights2);
+            m_ButtonSet3Material = GetMaterialOnModelTransform(Lights3);
+            m_ButtonSet4Material = GetMaterialOnModelTransform(Lights4);
+            m_ButtonSet5Material = GetMaterialOnModelTransform(Lights5);
+            m_ButtonSet6Material = GetMaterialOnModelTransform(Lights6);
+
+            m_ButtonLightOffShader = Shader.Find("KSP/Specular");
+            m_ButtonLightOnShader = Shader.Find("KSP/Unlit");
         }
 
         private void InitialiseReels()
         {
-            if (this.Reel1 != "")
-            {
-                this.reel1Transform = this.part.FindModelTransform(this.Reel1);
-            }
-
-            if (this.Reel2 != "")
-            {
-                this.reel2Transform = this.part.FindModelTransform(this.Reel2);
-            }
-        }
-
-        private void InitialiseLights()
-        {
-            if (this.Lights1 != "")
-            {
-                this.lights1Transform = this.part.FindModelTransform(this.Lights1);
-                this.lights1ShaderOff = renderer.material.shader;
-            }
-
-            if (this.Lights2 != "")
-            {
-                this.lights2Transform = this.part.FindModelTransform(this.Lights2);
-                this.lights2ShaderOff = renderer.material.shader;
-            }
-
-            if (this.Lights3 != "")
-            {
-                this.lights3Transform = this.part.FindModelTransform(this.Lights3);
-                this.lights3ShaderOff = renderer.material.shader;
-            }
-
-            if (this.Lights4 != "")
-            {
-                this.lights4Transform = this.part.FindModelTransform(this.Lights4);
-                this.lights4ShaderOff = renderer.material.shader;
-            }
-
-            if (this.Lights5 != "")
-            {
-                this.lights5Transform = this.part.FindModelTransform(this.Lights5);
-                this.lights5ShaderOff = renderer.material.shader;
-            }
-
-            if (this.Lights6 != "")
-            {
-                this.lights6Transform = this.part.FindModelTransform(this.Lights6);
-                this.lights6ShaderOff = renderer.material.shader;
-            }
-
-            this.lightsShaderOn = Shader.Find("Unlit/Texture");
-        }
-
-        #endregion
-
-        #region Updating
-
-        public override void OnUpdate()
-        {
-            if (!this.UseBakedAnimation)
-            {
-                this.deltaTime = this.sceneIsEditor ? Time.deltaTime : TimeWarp.deltaTime;
-
-                if (TimeWarp.CurrentRate != 1.0f && TimeWarp.WarpMode != TimeWarp.Modes.LOW)
-                {
-                    return;
-                }
-
-                if (this.IsRunning)
-                {
-                    this.UpdateTimerCycle();
-                    this.UpdateSpeed();
-                    this.UpdateReels();
-                    this.UpdateLights();
+            if (string.IsNullOrEmpty(Reel1) == false)
+            {
+                m_Reel1Transform = part.FindModelTransform(Reel1);
+            }
+
+            if (string.IsNullOrEmpty(Reel2) == false)
+            {
+                m_Reel2Transform = part.FindModelTransform(Reel2);
+            }
+        }
+
+        private void OnEditorAttach()
+        {
+            IsRunning = true;
+        }
+
+        private void OnEditorDetach()
+        {
+            IsRunning = false;
+        }
+
+        private void StartBakedAnimation()
+        {
+            foreach (Animation animator in part.FindModelAnimators())
+            {
+                animator.Play();
+            }
+        }
+
+        private void StopBakedAnimation()
+        {
+            foreach (Animation animator in part.FindModelAnimators())
+            {
+                animator.Stop();
+            }
+        }
+
+        private void Update()
+        {
+            if (m_SceneIsEditor)
+            {
+                OnUpdate();
+            }
+        }
+
+        private void UpdateButtonMaterial(Material material, float targetSpeed)
+        {
+            if (material == null)
+            {
+                return;
+            }
+
+            bool lightsOn;
+
+            if (targetSpeed > 0)
+            {
+                lightsOn = (m_Speed > targetSpeed);
+            }
+            else if (targetSpeed < 0)
+            {
+                lightsOn = (m_Speed < targetSpeed);
+            }
+            else
+            {
+                lightsOn = (m_Speed == 0);
+            }
+
+            SetShaderOnMaterial(material, lightsOn ? m_ButtonLightOnShader : m_ButtonLightOffShader);
+        }
+
+        private void UpdateLights()
+        {
+            UpdateButtonMaterial(m_ButtonSet1Material, Lights1Speed);
+            UpdateButtonMaterial(m_ButtonSet2Material, Lights2Speed);
+            UpdateButtonMaterial(m_ButtonSet3Material, Lights3Speed);
+            UpdateButtonMaterial(m_ButtonSet4Material, Lights4Speed);
+            UpdateButtonMaterial(m_ButtonSet5Material, Lights5Speed);
+            UpdateButtonMaterial(m_ButtonSet6Material, Lights6Speed);
+        }
+
+        private void UpdateReels()
+        {
+            if (m_Reel1Transform != null && m_Speed != 0)
+            {
+                m_Reel1Transform.transform.Rotate(Vector3.right, m_Speed * Reel1SpeedRatio);
+            }
+
+            if (m_Reel2Transform != null && m_Speed != 0)
+            {
+                m_Reel2Transform.transform.Rotate(Vector3.right, m_Speed * Reel2SpeedRatio);
+            }
+        }
+
+        private void UpdateSpeed()
+        {
+            if (m_Speed < m_TargetSpeed)
+            {
+                if (m_Speed < m_TargetSpeed - SpeedDeadZone)
+                {
+                    m_Speed += SpeedChangeAmount * m_DeltaTime;
                 }
                 else
                 {
-                    this.targetSpeed = 0;
-
-                    if (this.speed != 0)
-                    {
-                        this.UpdateSpeed();
-                        this.UpdateReels();
-                        this.UpdateLights();
-                    }
-                }
-            }
-        }
-
-        private void Update()
-        {
-            if (this.sceneIsEditor)
-            {
-                this.OnUpdate();
-            }
-        }
-
-        private void OnEditorAttach()
-        {
-            this.IsRunning = true;
-        }
-
-        private void OnEditorDetach()
-        {
-            this.IsRunning = false;
-        }
-
-        private void StopBakedAnimation()
-        {
-            foreach (var animator in this.part.FindModelAnimators())
-            {
-                animator.Stop();
-            }
-        }
-
-        private void StartBakedAnimation()
-        {
-            foreach (var animator in this.part.FindModelAnimators())
-            {
-                animator.Play();
+                    m_Speed = m_TargetSpeed;
+                }
+            }
+            else if (m_Speed > m_TargetSpeed)
+            {
+                if (m_Speed > m_TargetSpeed + SpeedDeadZone)
+                {
+                    m_Speed -= SpeedChangeAmount * m_DeltaTime;
+                }
+                else
+                {
+                    m_Speed = m_TargetSpeed;
+                }
             }
         }
 
         private void UpdateTimerCycle()
         {
-            this.currentTime += this.deltaTime;
-
-            if (this.currentTime >= this.repeatTime)
-            {
-                this.targetSpeed = this.random.Next(this.MinReelSpeed, this.MaxReelSpeed);
-
-                if (this.targetSpeed > -this.SpeedStopZone && this.targetSpeed < this.SpeedStopZone)
-                {
-                    this.targetSpeed = 0;
-                }
-
-                this.repeatTime = this.random.Next(this.MinRepeatTime, this.MaxRepeatTime);
-
-                if (this.RepeatTimeDenominator != 0)
-                {
-                    this.repeatTime /= this.RepeatTimeDenominator;
-                }
-
-                this.currentTime -= this.repeatTime;
-            }
-        }
-
-        private void UpdateSpeed()
-        {
-            if (this.speed < this.targetSpeed)
-            {
-                if (this.speed < this.targetSpeed - this.SpeedDeadZone)
-                {
-                    this.speed += this.SpeedChangeAmount * this.deltaTime;
-                }
-                else
-                {
-                    this.speed = this.targetSpeed;
-                }
-            }
-            else if (this.speed > this.targetSpeed)
-            {
-                if (this.speed > this.targetSpeed + this.SpeedDeadZone)
-                {
-                    this.speed -= this.SpeedChangeAmount * this.deltaTime;
-                }
-                else
-                {
-                    this.speed = this.targetSpeed;
-                }
-            }
-        }
-
-        private void UpdateReels()
-        {
-            if (this.reel1Transform != null && this.speed != 0)
-            {
-                this.reel1Transform.transform.Rotate(Vector3.right, this.speed * this.Reel1SpeedRatio);
-            }
-
-            if (this.reel2Transform != null && this.speed != 0)
-            {
-                this.reel2Transform.transform.Rotate(Vector3.right, this.speed * this.Reel2SpeedRatio);
-            }
-        }
-
-        private void UpdateLights()
-        {
-            if (this.lights1Transform != null)
-            {
-                this.UpdateLightTransform(this.lights1Transform, this.lightsShaderOn, this.lights1ShaderOff, this.Lights1Speed);
-            }
-            if (this.lights2Transform != null)
-            {
-                this.UpdateLightTransform(this.lights2Transform, this.lightsShaderOn, this.lights2ShaderOff, this.Lights2Speed);
-            }
-            if (this.lights3Transform != null)
-            {
-                this.UpdateLightTransform(this.lights3Transform, this.lightsShaderOn, this.lights3ShaderOff, this.Lights3Speed);
-            }
-            if (this.lights4Transform != null)
-            {
-                this.UpdateLightTransform(this.lights4Transform, this.lightsShaderOn, this.lights4ShaderOff, this.Lights4Speed);
-            }
-            if (this.lights5Transform != null)
-            {
-                this.UpdateLightTransform(this.lights5Transform, this.lightsShaderOn, this.lights5ShaderOff, this.Lights5Speed);
-            }
-            if (this.lights6Transform != null)
-            {
-                this.UpdateLightTransform(this.lights6Transform, this.lightsShaderOn, this.lights6ShaderOff, this.Lights6Speed);
-            }
-        }
-
-        private void UpdateLightTransform(Component lights, Shader on, Shader off, float targetSpeed)
-        {
-            bool lightsOn;
-
-            if (targetSpeed > 0)
-            {
-                lightsOn = (this.speed > targetSpeed);
-            }
-            else if (targetSpeed < 0)
-            {
-                lightsOn = (this.speed < targetSpeed);
-            }
-            else
-            {
-                lightsOn = (this.speed == 0);
-            }
-
-            lights.GetComponent<Renderer>().material.shader = lightsOn ? @on : off;
-        }
-
-        #endregion
+            m_CurrentTime += m_DeltaTime;
+
+            if (m_CurrentTime >= m_RepeatTime)
+            {
+                m_TargetSpeed = m_Random.Next(MinReelSpeed, MaxReelSpeed);
+
+                if (m_TargetSpeed > -SpeedStopZone && m_TargetSpeed < SpeedStopZone)
+                {
+                    m_TargetSpeed = 0;
+                }
+
+                m_RepeatTime = m_Random.Next(MinRepeatTime, MaxRepeatTime);
+
+                if (RepeatTimeDenominator != 0)
+                {
+                    m_RepeatTime /= RepeatTimeDenominator;
+                }
+
+                m_CurrentTime -= m_RepeatTime;
+            }
+        }
     }
 }

--- a/KerbalEngineer/VesselSimulator/PartSim.cs
+++ b/KerbalEngineer/VesselSimulator/PartSim.cs
@@ -417,9 +417,9 @@
                 mass += resources.GetResourceMass(resources.Types[i]);
             }
 
-            if (isFairing && currentStage <= inverseStage)
-            {
-                mass -= fairingMass;
+            if (isFairing && currentStage > inverseStage)
+            {
+                mass += fairingMass;
             }
 
             return mass;
@@ -777,8 +777,7 @@
 
         private bool IsDecoupler(Part thePart)
         {
-            return thePart.HasModule<ModuleDecouple>() ||
-                   thePart.HasModule<ModuleAnchoredDecoupler>();
+            return thePart.GetProtoModuleDecoupler()?.IsStageEnabled ?? false;
         }
 
         private bool IsFairing(Part thePart)

--- a/KerbalEngineer/VesselSimulator/Simulation.cs
+++ b/KerbalEngineer/VesselSimulator/Simulation.cs
@@ -34,6 +34,7 @@
     using CompoundParts;
     using Extensions;
     using Helpers;
+    using KSP.UI.Screens;
 
     public class Simulation
     {
@@ -147,7 +148,7 @@
             this.gravity = theGravity;
             this.atmosphere = theAtmosphere;
             this.mach = theMach;
-            this.lastStage = Staging.lastStage;
+            this.lastStage = StageManager.LastStage;
             this.maxMach = 1.0f;
             //MonoBehaviour.print("lastStage = " + lastStage);
 

 Binary files a/Output/KerbalEngineer/KerbalEngineer and b/Output/KerbalEngineer/KerbalEngineer differ
 Binary files a/Output/KerbalEngineer/KerbalEngineer.Unity.dll and b/Output/KerbalEngineer/KerbalEngineer.Unity.dll differ
 Binary files a/Output/KerbalEngineer/KerbalEngineer.dll and b/Output/KerbalEngineer/KerbalEngineer.dll differ
--- a/Output/KerbalEngineer/KerbalEngineer.manifest
+++ b/Output/KerbalEngineer/KerbalEngineer.manifest
@@ -2,9 +2,9 @@
 AssetBundleManifest:
   AssetBundleInfos:
     Info_0:
+      Name: prefabs
+      Dependencies: {}
+    Info_1:
       Name: images
       Dependencies: {}
-    Info_1:
-      Name: prefabs
-      Dependencies: {}
 

--- a/Output/KerbalEngineer/KerbalEngineer.version
+++ b/Output/KerbalEngineer/KerbalEngineer.version
@@ -4,9 +4,9 @@
 	"VERSION":
 	{
 		"MAJOR":1,
-		"MINOR":0,
-		"PATCH":19,
-		"BUILD":4
+		"MINOR":1,
+		"PATCH":0,
+		"BUILD":1
 	},
 	"KSP_VERSION":
 	{

--- a/Output/KerbalEngineer/Parts/Engineer7500/part.cfg
+++ b/Output/KerbalEngineer/Parts/Engineer7500/part.cfg
@@ -14,12 +14,13 @@
 	// --- editor parameters ---
 	TechRequired = start
 	entryCost = 0
-	cost = 500
+	cost = 150
 	category = Science
 	subcategory = 0
 	title = ER-7500 Computer Flight Unit
 	manufacturer = CYBUTEK Solutions Ltd.
-	description = The ER-7500 goes back to roots with the Kerbal Engineering System.  This unit has been proven to be at least 1x10^-5 times faster than a standard hard drive.
+	description = The ER-7500 goes back to roots with the Kerbal Engineering System. This unit has been proven to be at least 1x10^-5 times faster than a standard hard drive... Don't tell anyone but it's actually just the chip version in a fancy box with flashing lights and spinny things.
+    tags = ker engi redux compu flight tape
 
 	// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
 	attachRules = 0,1,0,1,1

--- a/Output/KerbalEngineer/Parts/EngineerChip/part.cfg
+++ b/Output/KerbalEngineer/Parts/EngineerChip/part.cfg
@@ -22,12 +22,13 @@
 	// --- editor parameters ---
 	TechRequired = start
   	entryCost = 0
-	cost = 350
+	cost = 100
 	category = Science
 	subcategory = 0
 	title = Kerbal Engineering System
 	manufacturer = CYBUTEK Solutions Ltd.
 	description = The Kerbal Engineering System boasts an impressive 128bits of solid state storage and enough processing power to run at least 3 digital watches.
+    tags = ker engi redux compu flight chip
 
 	// attachment rules: stack, srfAttach, allowStack, allowSrfAttach, allowCollision
 	attachRules = 0,1,0,1,1

 Binary files a/Output/KerbalEngineer/images and b/Output/KerbalEngineer/images differ
--- a/Output/KerbalEngineer/images.manifest
+++ b/Output/KerbalEngineer/images.manifest
@@ -1,9 +1,9 @@
 ManifestFileVersion: 0
-CRC: 2833314722
+CRC: 3711738391
 Hashes:
   AssetFileHash:
     serializedVersion: 2
-    Hash: b45648c25b082800bed1fc56179dfff5
+    Hash: ed55962395cdf8d8940a4674b73fa9cb
   TypeTreeHash:
     serializedVersion: 2
     Hash: 00ffc586b3c4c12c72c7fed589b81235

 Binary files a/Output/KerbalEngineer/prefabs and b/Output/KerbalEngineer/prefabs differ
--- a/Output/KerbalEngineer/prefabs.manifest
+++ b/Output/KerbalEngineer/prefabs.manifest
@@ -1,12 +1,12 @@
 ManifestFileVersion: 0
-CRC: 2073293926
+CRC: 247544766
 Hashes:
   AssetFileHash:
     serializedVersion: 2
-    Hash: ea5be12ca0c34c6209c093eb01797f22
+    Hash: 6c0345330dfdd65954f99b5bf002cb14
   TypeTreeHash:
     serializedVersion: 2
-    Hash: e9cf51f1b73149b326a2db40fe611c59
+    Hash: f08f4b318e7775189aba716ae3ef79f9
 HashAppended: 0
 ClassTypes:
 - Class: 1
@@ -18,7 +18,11 @@
 - Class: 48
   Script: {instanceID: 0}
 - Class: 114
+  Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+- Class: 114
   Script: {fileID: 1741964061, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+- Class: 114
+  Script: {fileID: -405508275, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
 - Class: 114
   Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
 - Class: 114
@@ -30,12 +34,20 @@
 - Class: 114
   Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
 - Class: 114
-  Script: {fileID: 571159103, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
+  Script: {fileID: 571159103, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
 - Class: 114
-  Script: {fileID: -1842827791, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
+  Script: {fileID: -1842827791, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+- Class: 114
+  Script: {fileID: 644905346, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+- Class: 114
+  Script: {fileID: 323546239, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
+- Class: 114
+  Script: {fileID: 604723565, guid: 4ffb1bf511e31af45bdeaa3d272d49d4, type: 3}
 - Class: 115
   Script: {instanceID: 0}
 - Class: 128
+  Script: {instanceID: 0}
+- Class: 213
   Script: {instanceID: 0}
 - Class: 222
   Script: {instanceID: 0}
@@ -44,7 +56,11 @@
 - Class: 225
   Script: {instanceID: 0}
 Assets:
+- Assets/Prefabs/Setting.prefab
+- Assets/Prefabs/SettingToggle.prefab
+- Assets/Prefabs/SettingButton.prefab
 - Assets/Prefabs/FlightMenuSection.prefab
 - Assets/Prefabs/FlightMenu.prefab
+- Assets/Prefabs/Window.prefab
 Dependencies: []
 

file:b/PartTools.cfg (new)
--- /dev/null
+++ b/PartTools.cfg
@@ -1,1 +1,2 @@
+GameData =