GetStockSections has been made interface only, like the GetCustomSections function that returns a list of ISectionModule. Also added missing null check (should never be encountered but no harm in having robust code).
GetStockSections has been made interface only, like the GetCustomSections function that returns a list of ISectionModule. Also added missing null check (should never be encountered but no harm in having robust code).

 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
@@ -11,7 +11,26 @@
   - 222: {fileID: 22296168}
   - 114: {fileID: 11459182}
   m_Layer: 5
-  m_Name: selected
+  m_Name: Selected
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  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: 11417302}
+  - 114: {fileID: 11415068}
+  m_Layer: 5
+  m_Name: ToggleControlBar
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -46,9 +65,9 @@
   - 222: {fileID: 22201528}
   - 114: {fileID: 11404586}
   - 114: {fileID: 11461688}
-  - 114: {fileID: 11415068}
-  m_Layer: 5
-  m_Name: ToggleControlBar
+  - 114: {fileID: 11420706}
+  m_Layer: 5
+  m_Name: NewCustomSection
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -101,7 +120,7 @@
   - 222: {fileID: 22267348}
   - 114: {fileID: 11465882}
   m_Layer: 5
-  m_Name: label
+  m_Name: Text
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -118,7 +137,7 @@
   - 222: {fileID: 22255938}
   - 114: {fileID: 11403342}
   m_Layer: 5
-  m_Name: label
+  m_Name: Text
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -135,7 +154,7 @@
   - 222: {fileID: 22210360}
   - 114: {fileID: 11475868}
   m_Layer: 5
-  m_Name: selected
+  m_Name: Selected
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -159,6 +178,23 @@
   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
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &172308
 GameObject:
   m_ObjectHideFlags: 1
@@ -171,6 +207,23 @@
   - 114: {fileID: 11439582}
   m_Layer: 5
   m_Name: label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  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
@@ -216,7 +269,7 @@
       Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
   m_FontData:
     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 12
+    m_FontSize: 10
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 10
@@ -286,7 +339,7 @@
   m_ObjectHideFlags: 1
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 122098}
+  m_GameObject: {fileID: 114528}
   m_Enabled: 1
   m_EditorHideFlags: 0
   m_Script: {fileID: 2109663825, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
@@ -301,8 +354,99 @@
   m_Transition: 1
   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
+  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: 1
+  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 &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_SectionsTransform: {fileID: 22435482}
+  m_FastFadeDuration: .100000001
+  m_SlowFadeDuration: .300000012
+--- !u!114 &11417302
+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: 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 &11420706
+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: 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: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, 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
@@ -317,15 +461,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: set_controlBar
-        m_Mode: 0
+        m_MethodName: NewCustomSection
+        m_Mode: 1
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
           m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
@@ -334,24 +475,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: 2019631361, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_ShowEngineerToggle: {fileID: 11485338}
-  m_ControlBarToggle: {fileID: 11415068}
-  m_FastFadeDuration: .200000003
-  m_SlowFadeDuration: 1
 --- !u!114 &11423044
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -377,12 +502,12 @@
   m_Name: 
   m_EditorClassIdentifier: 
   m_Padding:
-    m_Left: 0
-    m_Right: 0
-    m_Top: 0
-    m_Bottom: 0
+    m_Left: 4
+    m_Right: 4
+    m_Top: 4
+    m_Bottom: 4
   m_ChildAlignment: 0
-  m_Spacing: 0
+  m_Spacing: 4
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 0
 --- !u!114 &11439582
@@ -432,7 +557,7 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 25
+  m_PreferredHeight: 15
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
 --- !u!114 &11451984
@@ -450,7 +575,7 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 20
+  m_PreferredHeight: 15
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
 --- !u!114 &11453198
@@ -513,9 +638,29 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 20
+  m_PreferredHeight: 15
   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: 4
+    m_Bottom: 4
+  m_ChildAlignment: 0
+  m_Spacing: 4
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 0
 --- !u!114 &11463504
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -543,12 +688,12 @@
   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}
@@ -564,7 +709,7 @@
       Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
   m_FontData:
     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 12
+    m_FontSize: 10
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 10
@@ -575,6 +720,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: 0, g: 0, b: 0, 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
@@ -602,6 +779,19 @@
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
+--- !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 &11485338
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -622,8 +812,8 @@
   m_Transition: 1
   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
@@ -645,7 +835,7 @@
     m_PersistentCalls:
       m_Calls:
       - m_Target: {fileID: 11415294}
-        m_MethodName: set_showEngineer
+        m_MethodName: SetDisplayStackVisible
         m_Mode: 0
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -678,6 +868,33 @@
   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: .800000072, g: 1, b: 0, a: .501960814}
+  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
@@ -729,6 +946,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
@@ -775,14 +1004,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: -6, y: -8}
+  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:
@@ -818,29 +1046,46 @@
   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}
+--- !u!224 &22411946
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  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
-RectTransform:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 104452}
+--- !u!224 &22435482
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  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}
@@ -852,6 +1097,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
@@ -869,6 +1131,25 @@
   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:
   m_ObjectHideFlags: 1
@@ -885,8 +1166,8 @@
   m_RootOrder: 0
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: .5, y: 1}
-  m_AnchoredPosition: {x: 1, y: 0}
-  m_SizeDelta: {x: -6, y: -8}
+  m_AnchoredPosition: {x: -1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
   m_Pivot: {x: .5, y: .5}
 --- !u!224 &22475412
 RectTransform:
@@ -899,6 +1180,8 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 22478174}
+  - {fileID: 22435482}
+  - {fileID: 22401100}
   m_Father: {fileID: 22476196}
   m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
@@ -936,7 +1219,7 @@
   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}
@@ -979,7 +1262,27 @@
   serializedVersion: 2
   m_Modification:
     m_TransformParent: {fileID: 0}
-    m_Modifications: []
+    m_Modifications:
+    - target: {fileID: 0}
+      propertyPath: m_FastFadeDuration
+      value: .100000001
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_SlowFadeDuration
+      value: .200000003
+      objectReference: {fileID: 0}
+    - target: {fileID: 0}
+      propertyPath: m_ContentTransform
+      value: 
+      objectReference: {fileID: 22475412}
+    - target: {fileID: 0}
+      propertyPath: m_SectionPrefab
+      value: 
+      objectReference: {fileID: 130812, guid: 1755c05344f574d4787a372d34a4e3fb, type: 2}
+    - target: {fileID: 0}
+      propertyPath: m_MenuSectionPrefab
+      value: 
+      objectReference: {fileID: 130812, guid: 1755c05344f574d4787a372d34a4e3fb, type: 2}
     m_RemovedComponents: []
   m_ParentPrefab: {fileID: 0}
   m_RootGameObject: {fileID: 126098}

--- /dev/null
+++ b/Assets/Prefabs/FlightMenuSection.prefab
@@ -1,1 +1,694 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &121376
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22409126}
+  - 222: {fileID: 22266612}
+  - 114: {fileID: 11461446}
+  - 114: {fileID: 11496274}
+  - 114: {fileID: 11436568}
+  m_Layer: 5
+  m_Name: ToggleDisplay
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &121536
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22446728}
+  - 222: {fileID: 22259916}
+  - 114: {fileID: 11418436}
+  m_Layer: 5
+  m_Name: Selected
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &130136
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22444842}
+  - 222: {fileID: 22269896}
+  - 114: {fileID: 11449350}
+  - 114: {fileID: 11489918}
+  - 114: {fileID: 11421724}
+  m_Layer: 5
+  m_Name: ToggleEdit
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &130812
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22478272}
+  - 114: {fileID: 11431788}
+  - 114: {fileID: 11494744}
+  m_Layer: 5
+  m_Name: FlightMenuSection
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &151828
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22485856}
+  - 222: {fileID: 22274980}
+  - 114: {fileID: 11408784}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &172700
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22483442}
+  - 222: {fileID: 22246486}
+  - 114: {fileID: 11462740}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &178618
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22469204}
+  - 222: {fileID: 22219086}
+  - 114: {fileID: 11484356}
+  m_Layer: 5
+  m_Name: Selected
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11408784
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 151828}
+  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_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: DISPLAY
+--- !u!114 &11418436
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121536}
+  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: .800000072, g: 1, b: 0, 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 &11421724
+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: 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: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, 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
+  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: 11449350}
+  toggleTransition: 1
+  graphic: {fileID: 11484356}
+  m_Group: {fileID: 0}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 11494744}
+        m_MethodName: SetEditorVisible
+        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 &11431788
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 130812}
+  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 &11436568
+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: 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: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, 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
+  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: 11461446}
+  toggleTransition: 1
+  graphic: {fileID: 11418436}
+  m_Group: {fileID: 0}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 11494744}
+        m_MethodName: SetDisplayVisible
+        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 &11449350
+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: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: .800000072, g: 1, b: 0, a: .501960814}
+  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 &11461446
+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: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: .800000072, g: 1, b: 0, a: .501960814}
+  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 &11462740
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 172700}
+  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_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: EDIT
+--- !u!114 &11484356
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178618}
+  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: .800000072, g: 1, b: 0, 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 &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
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 130812}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -1842827791, guid: a3a55138b08428847a08c7b48fe72efe, 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
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178618}
+--- !u!222 &22246486
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 172700}
+--- !u!222 &22259916
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121536}
+--- !u!222 &22266612
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121376}
+--- !u!222 &22269896
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 130136}
+--- !u!222 &22274980
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 151828}
+--- !u!224 &22409126
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121376}
+  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: 22446728}
+  - {fileID: 22485856}
+  m_Father: {fileID: 22478272}
+  m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: .75, y: 1}
+  m_AnchoredPosition: {x: -1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22444842
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 130136}
+  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: 22469204}
+  - {fileID: 22483442}
+  m_Father: {fileID: 22478272}
+  m_RootOrder: 1
+  m_AnchorMin: {x: .75, 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 &22446728
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121536}
+  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: 22409126}
+  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 &22469204
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178618}
+  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: 22444842}
+  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 &22478272
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 130812}
+  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: 22409126}
+  - {fileID: 22444842}
+  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 &22483442
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 172700}
+  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: 22444842}
+  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 &22485856
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 151828}
+  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: 22409126}
+  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!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications:
+    - target: {fileID: 0}
+      propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target
+      value: 
+      objectReference: {fileID: 11494744}
+    - target: {fileID: 0}
+      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}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 130812}
+  m_IsPrefabParent: 1
 

--- a/Assets/Scenes/main.unity
+++ b/Assets/Scenes/main.unity
@@ -152,161 +152,269 @@
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 476101859}
+--- !u!1001 &719682886
+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: 74
+      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: 22435482, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435482, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435482, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 125
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435482, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -27
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435482, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 242
+      objectReference: {fileID: 0}
+    - target: {fileID: 22435482, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 8
+      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: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchorMin.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchorMax.y
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 125
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: -42.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: 242
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, 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: -47
+      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: 54
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
+      value: SetControlBarVisible
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
+      value: SetDisplayStackVisible
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_HighlightedColor.r
+      value: .467545569
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_HighlightedColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_HighlightedColor.b
+      value: .448529422
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.r
+      value: .800000072
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.b
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 11485338, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.a
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_HighlightedColor.r
+      value: .467545569
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_HighlightedColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_HighlightedColor.b
+      value: .448529422
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.r
+      value: .800000072
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.g
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 11415068, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Colors.m_PressedColor.b
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 100100000, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+  m_IsPrefabParent: 0
 --- !u!224 &1026898450 stripped
 RectTransform:
   m_PrefabParentObject: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f,
     type: 2}
-  m_PrefabInternal: {fileID: 1329571933}
---- !u!1001 &1329571933
-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: 45
-      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: -12.5
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.x
-      value: 250
-      objectReference: {fileID: 0}
-    - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-      propertyPath: m_SizeDelta.y
-      value: 25
-      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: -32.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: 25
-      objectReference: {fileID: 0}
-    m_RemovedComponents: []
-  m_ParentPrefab: {fileID: 100100000, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
-  m_IsPrefabParent: 0
+  m_PrefabInternal: {fileID: 719682886}
 --- !u!1 &1398276586
 GameObject:
   m_ObjectHideFlags: 0

--- a/Assets/Scripts/Editor/BuildAssetBundles.cs
+++ b/Assets/Scripts/Editor/BuildAssetBundles.cs
@@ -1,4 +1,22 @@
-using UnityEditor;
+// 
+//     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/>.
+//  
+
+using UnityEditor;
 using UnityEngine;
 
 public class BuildAssetBundles : MonoBehaviour

--- a/Documents/CHANGES.txt
+++ b/Documents/CHANGES.txt
@@ -1,4 +1,9 @@
+    Added: Asset bundle loading and integration.
     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: Only 'STAGE_STACK_FLOW' and 'STAGE_STACK_FLOW_BALANCE' resources include surface mounted parts as fuel targets.

--- a/KerbalEngineer.Unity/CanvasGroupFader.cs
+++ b/KerbalEngineer.Unity/CanvasGroupFader.cs
@@ -1,4 +1,22 @@
-namespace KerbalEngineer.Unity
+// 
+//     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
 {
     using System;
     using System.Collections;
@@ -10,7 +28,7 @@
         private CanvasGroup m_CanvasGroup;
         private IEnumerator m_FadeCoroutine;
 
-        public bool fading
+        public bool IsFading
         {
             get
             {
@@ -70,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)

--- a/KerbalEngineer.Unity/Flight/FlightEngineerMenu.cs
+++ /dev/null
@@ -1,178 +1,1 @@
-// 
-//     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.Flight
-{
-    using KerbalEngineer.Flight;
-    using UnityEngine;
-    using UnityEngine.EventSystems;
-    using UnityEngine.UI;
-
-    public class FlightEngineerMenu : CanvasGroupFader, IPointerEnterHandler, IPointerExitHandler
-    {
-        [SerializeField]
-        private Toggle m_ShowEngineerToggle;
-
-        [SerializeField]
-        private Toggle m_ControlBarToggle;
-
-        [SerializeField]
-        private float m_FastFadeDuration = 0.2f;
-
-        [SerializeField]
-        private float m_SlowFadeDuration = 1.0f;
-
-        /// <summary>
-        ///     Gets or sets the visibility of the control bar.
-        /// </summary>
-        public bool controlBar
-        {
-            get
-            {
-                if (DisplayStack.Instance != null)
-                {
-                    return DisplayStack.Instance.ShowControlBar;
-                }
-
-                return true;
-            }
-            set
-            {
-                if (DisplayStack.Instance != null)
-                {
-                    DisplayStack.Instance.ShowControlBar = value;
-                }
-            }
-        }
-
-        /// <summary>
-        ///     Gets or sets the visibility of the flight engineer display stack.
-        /// </summary>
-        public bool showEngineer
-        {
-            get
-            {
-                if (DisplayStack.Instance != null)
-                {
-                    return DisplayStack.Instance.Hidden == false;
-                }
-
-                return true;
-            }
-            set
-            {
-                if (DisplayStack.Instance != null)
-                {
-                    DisplayStack.Instance.Hidden = !value;
-                }
-            }
-        }
-
-        public void OnPointerEnter(PointerEventData eventData)
-        {
-            FadeIn();
-        }
-
-        public void OnPointerExit(PointerEventData eventData)
-        {
-            // slow-fade out if the application launcher button is off
-            if (FlightAppLauncher.instance != null && FlightAppLauncher.instance.isOn == false)
-            {
-                FadeTo(0.0f, m_SlowFadeDuration, Destroy);
-            }
-        }
-
-        protected override void Awake()
-        {
-            base.Awake();
-
-            // subscribe events
-            FlightAppLauncher.MenuClosed += MenuClosed;
-            FlightAppLauncher.ButtonHover += ButtonHover;
-        }
-
-        protected virtual void OnDestroy()
-        {
-            // unsubscribe events
-            FlightAppLauncher.MenuClosed -= MenuClosed;
-            FlightAppLauncher.ButtonHover -= ButtonHover;
-        }
-
-        protected virtual void OnEnable()
-        {
-            // set starting alpha to zero and fade in
-            SetAlpha(0.0f);
-            FadeIn();
-        }
-
-        protected virtual void Start()
-        {
-            DisplayStackToggles();
-        }
-
-        /// <summary>
-        ///     Called when the application launcher button is hovered over.
-        /// </summary>
-        private void ButtonHover()
-        {
-            FadeIn();
-        }
-
-        /// <summary>
-        ///     Destroys the game object.
-        /// </summary>
-        private void Destroy()
-        {
-            // disable game object first due to an issue within unity 5.2.4f1 that shows a single frame at full opaque alpha just before destruction
-            gameObject.SetActive(false);
-            Destroy(gameObject);
-        }
-
-        /// <summary>
-        ///     Called when the display stack has loaded its settings.
-        /// </summary>
-        private void DisplayStackToggles()
-        {
-            if (DisplayStack.Instance == null)
-            {
-                return;
-            }
-
-            SetToggle(m_ShowEngineerToggle, DisplayStack.Instance.Hidden == false);
-            SetToggle(m_ControlBarToggle, DisplayStack.Instance.ShowControlBar);
-        }
-
-        private void FadeIn()
-        {
-            FadeTo(1.0f, m_FastFadeDuration);
-        }
-
-        private void MenuClosed()
-        {
-            FadeTo(0.0f, m_FastFadeDuration, Destroy);
-        }
-
-        private void SetToggle(Toggle toggle, bool state)
-        {
-            if (toggle != null)
-            {
-                toggle.isOn = state;
-            }
-        }
-    }
-}

--- /dev/null
+++ b/KerbalEngineer.Unity/Flight/FlightMenu.cs
@@ -1,1 +1,223 @@
-
+// 
+//     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.Flight
+{
+    using System.Collections.Generic;
+    using UnityEngine;
+    using UnityEngine.EventSystems;
+    using UnityEngine.UI;
+
+    [RequireComponent(typeof(RectTransform))]
+    public class FlightMenu : CanvasGroupFader, IPointerEnterHandler, IPointerExitHandler
+    {
+        [SerializeField]
+        private Toggle m_ShowEngineerToggle = null;
+
+        [SerializeField]
+        private Toggle m_ControlBarToggle = null;
+
+        [SerializeField]
+        private GameObject m_MenuSectionPrefab = null;
+
+        [SerializeField]
+        private Transform m_SectionsTransform = null;
+
+        [SerializeField]
+        private float m_FastFadeDuration = 0.2f;
+
+        [SerializeField]
+        private float m_SlowFadeDuration = 1.0f;
+
+        private IFlightAppLauncher m_FlightAppLauncher;
+        private RectTransform m_RectTransform;
+
+        public void OnPointerEnter(PointerEventData eventData)
+        {
+            FadeIn();
+        }
+
+        public void OnPointerExit(PointerEventData eventData)
+        {
+            // slow-fade out if the application launcher button is off
+            if (m_FlightAppLauncher != null && m_FlightAppLauncher.IsOn == false)
+            {
+                FadeTo(0.0f, m_SlowFadeDuration, Destroy);
+            }
+        }
+
+        /// <summary>
+        ///     Fades out and destroys the menu.
+        /// </summary>
+        public void Close()
+        {
+            FadeTo(0.0f, m_FastFadeDuration, Destroy);
+        }
+
+        /// <summary>
+        ///     Fades in the menu.
+        /// </summary>
+        public void FadeIn()
+        {
+            FadeTo(1.0f, m_FastFadeDuration);
+        }
+
+        /// <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 SetControlBarVisible(bool visible)
+        {
+            if (m_FlightAppLauncher != null)
+            {
+                m_FlightAppLauncher.IsControlBarVisible = visible;
+            }
+        }
+
+        /// <summary>
+        ///     Sets the display stack visibility.
+        /// </summary>
+        public void SetDisplayStackVisible(bool visible)
+        {
+            if (m_FlightAppLauncher != null)
+            {
+                m_FlightAppLauncher.IsDisplayStackVisible = visible;
+            }
+        }
+
+        /// <summary>
+        ///     Sets a reference to the flight app launcher object.
+        /// </summary>
+        public void SetFlightAppLauncher(IFlightAppLauncher flightAppLauncher)
+        {
+            if (flightAppLauncher == null)
+            {
+                return;
+            }
+
+            m_FlightAppLauncher = flightAppLauncher;
+
+            // create section controls
+            CreateSectionControls(m_FlightAppLauncher.GetStockSections());
+            CreateSectionControls(m_FlightAppLauncher.GetCustomSections());
+        }
+
+        protected override void Awake()
+        {
+            base.Awake();
+
+            // cache components
+            m_RectTransform = GetComponent<RectTransform>();
+        }
+
+        protected virtual void Start()
+        {
+            // set starting alpha to zero and fade in
+            SetAlpha(0.0f);
+            FadeIn();
+        }
+
+        protected virtual void Update()
+        {
+            if (m_FlightAppLauncher == null)
+            {
+                return;
+            }
+
+            // set toggle states to match the actual states
+            SetToggle(m_ShowEngineerToggle, m_FlightAppLauncher.IsDisplayStackVisible);
+            SetToggle(m_ControlBarToggle, m_FlightAppLauncher.IsControlBarVisible);
+
+            // update anchor position
+            if (m_RectTransform != null)
+            {
+                m_RectTransform.position = m_FlightAppLauncher.GetAnchor();
+                m_FlightAppLauncher.ClampToScreen(m_RectTransform);
+            }
+        }
+
+        /// <summary>
+        ///     Sets a given toggle to the specified state with null checking.
+        /// </summary>
+        private static void SetToggle(Toggle toggle, bool state)
+        {
+            if (toggle != null)
+            {
+                toggle.isOn = state;
+            }
+        }
+
+        /// <summary>
+        ///     Creates a menu section control.
+        /// </summary>
+        private void CreateSectionControl(ISectionModule section)
+        {
+            GameObject menuSectionObject = Instantiate(m_MenuSectionPrefab);
+            if (menuSectionObject != null)
+            {
+                menuSectionObject.transform.SetParent(m_SectionsTransform, false);
+
+                FlightMenuSection menuSection = menuSectionObject.GetComponent<FlightMenuSection>();
+                if (menuSection != null)
+                {
+                    menuSection.SetAssignedSection(section);
+                }
+            }
+        }
+
+        /// <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()
+        {
+            // disable game object first due to an issue within unity 5.2.4f1 that shows a single frame at full opaque alpha just before destruction
+            gameObject.SetActive(false);
+            Destroy(gameObject);
+        }
+    }
+}

--- /dev/null
+++ b/KerbalEngineer.Unity/Flight/FlightMenuSection.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.Flight
+{
+    using UnityEngine;
+    using UnityEngine.UI;
+
+    public class FlightMenuSection : MonoBehaviour
+    {
+        [SerializeField]
+        private Toggle m_DisplayToggle = null;
+
+        [SerializeField]
+        private Text m_DisplayText = null;
+
+        [SerializeField]
+        private Toggle m_EditToggle = null;
+
+        private ISectionModule m_Section;
+
+        /// <summary>
+        ///     Gets or sets the section's editor visibility.
+        /// </summary>
+        public bool IsEditorVisible
+        {
+            get
+            {
+                if (m_EditToggle != null)
+                {
+                    return m_EditToggle.isOn;
+                }
+
+                return true;
+            }
+            set
+            {
+                if (m_EditToggle != null)
+                {
+                    m_EditToggle.isOn = value;
+                }
+            }
+        }
+
+        /// <summary>
+        ///     Sets the assigned section to be handled by the menu object.
+        /// </summary>
+        public void SetAssignedSection(ISectionModule section)
+        {
+            if (section == null)
+            {
+                return;
+            }
+
+            m_Section = section;
+        }
+
+        /// <summary>
+        ///     Sets the section's display visibility.
+        /// </summary>
+        public void SetDisplayVisible(bool visible)
+        {
+            if (m_Section != null)
+            {
+                m_Section.IsVisible = visible;
+            }
+        }
+
+        /// <summary>
+        ///     Sets the section's editor visibility.
+        /// </summary>
+        public void SetEditorVisible(bool visible)
+        {
+            if (m_Section != null)
+            {
+                m_Section.IsEditorVisible = visible;
+            }
+        }
+
+        protected virtual void Update()
+        {
+            UpdateControls();
+        }
+
+        /// <summary>
+        ///     Updates the menu section's controls.
+        /// </summary>
+        private void UpdateControls()
+        {
+            if (m_Section == null || m_Section.IsDeleted)
+            {
+                Destroy(gameObject);
+                return;
+            }
+
+            // display visible
+            if (m_DisplayToggle != null)
+            {
+                m_DisplayToggle.isOn = m_Section.IsVisible;
+            }
+
+            // display name
+            if (m_DisplayText != null)
+            {
+                m_DisplayText.text = m_Section.Name.ToUpperInvariant();
+            }
+
+            // editor visible
+            if (m_EditToggle != null)
+            {
+                m_EditToggle.isOn = m_Section.IsEditorVisible;
+            }
+        }
+    }
+}

--- /dev/null
+++ b/KerbalEngineer.Unity/Flight/IFlightAppLauncher.cs
@@ -1,1 +1,42 @@
+// 
+//     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.Flight
+{
+    using System.Collections.Generic;
+    using UnityEngine;
+
+    public interface IFlightAppLauncher
+    {
+        bool IsControlBarVisible { get; set; }
+
+        bool IsDisplayStackVisible { get; set; }
+
+        bool IsOn { get; }
+
+        void ClampToScreen(RectTransform rectTransform);
+
+        Vector3 GetAnchor();
+
+        IList<ISectionModule> GetCustomSections();
+
+        IList<ISectionModule> GetStockSections();
+
+        ISectionModule NewCustomSection();
+    }
+}

--- /dev/null
+++ b/KerbalEngineer.Unity/Flight/ISectionModule.cs
@@ -1,1 +1,31 @@
+// 
+//     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.Flight
+{
+    public interface ISectionModule
+    {
+        bool IsDeleted { get; }
+
+        bool IsEditorVisible { get; set; }
+
+        bool IsVisible { get; set; }
+
+        string Name { get; }
+    }
+}

--- a/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj
+++ b/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj
@@ -32,7 +32,10 @@
   </PropertyGroup>
   <ItemGroup>
     <Compile Include="CanvasGroupFader.cs" />
-    <Compile Include="Flight\FlightEngineerMenu.cs" />
+    <Compile Include="Flight\FlightMenu.cs" />
+    <Compile Include="Flight\FlightMenuSection.cs" />
+    <Compile Include="Flight\IFlightAppLauncher.cs" />
+    <Compile Include="Flight\ISectionModule.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
@@ -49,13 +52,6 @@
       <Private>False</Private>
     </Reference>
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\KerbalEngineer\KerbalEngineer.csproj">
-      <Project>{39806613-e0b7-46e0-89a6-a569ec538cbb}</Project>
-      <Name>KerbalEngineer</Name>
-      <Private>False</Private>
-    </ProjectReference>
-  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
     <PostBuildEvent>copy "$(TargetPath)" "$(SolutionDir)Assets\Plugins" /Y</PostBuildEvent>

--- a/KerbalEngineer/AppLauncherButton.cs
+++ b/KerbalEngineer/AppLauncherButton.cs
@@ -30,7 +30,7 @@
         /// <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 (m_IconTexture == null && AssetBundleLoader.Images != null)
+            {
+                m_IconTexture = AssetBundleLoader.Images.LoadAsset<Texture2D>("app-launcher-icon");
             }
 
             // subscribe event listeners

--- a/KerbalEngineer/AssetBundleLoader.cs
+++ b/KerbalEngineer/AssetBundleLoader.cs
@@ -1,4 +1,22 @@
-namespace KerbalEngineer
+// 
+//     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 UnityEngine;
 
@@ -11,7 +29,7 @@
         /// <summary>
         ///     Gets the loaded images asset bundle.
         /// </summary>
-        public static AssetBundle images
+        public static AssetBundle Images
         {
             get
             {
@@ -22,7 +40,7 @@
         /// <summary>
         ///     Gets the loaded prefabs asset bundle.
         /// </summary>
-        public static AssetBundle prefabs
+        public static AssetBundle Prefabs
         {
             get
             {

--- 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/Flight/DisplayStack.cs
+++ b/KerbalEngineer/Flight/DisplayStack.cs
@@ -70,7 +70,14 @@
         public bool ShowControlBar
         {
             get { return this.showControlBar; }
-            set { this.showControlBar = value; }
+            set
+            {
+                if (showControlBar != value)
+                {
+                    this.showControlBar = value;
+                    RequestResize();
+                }
+            }
         }
 
         #endregion

--- a/KerbalEngineer/Flight/FlightAppLauncher.cs
+++ b/KerbalEngineer/Flight/FlightAppLauncher.cs
@@ -1,27 +1,135 @@
-namespace KerbalEngineer.Flight
+// 
+//     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.Flight
 {
-    using System;
+    using System.Collections.Generic;
+    using KSP.UI;
+    using Sections;
+    using Unity.Flight;
     using UnityEngine;
 
     [KSPAddon(KSPAddon.Startup.Flight, false)]
-    public class FlightAppLauncher : AppLauncherButton
+    public class FlightAppLauncher : AppLauncherButton, IFlightAppLauncher
     {
         private static FlightAppLauncher m_Instance;
+        private FlightMenu m_FlightMenu;
         private GameObject m_MenuObject;
         private GameObject m_MenuPrefab;
 
-        public static event Action ButtonHover;
-        public static event Action MenuClosed;
-
         /// <summary>
         ///     Gets the current instance of the FlightAppLauncher object.
         /// </summary>
-        public static FlightAppLauncher instance
+        public static FlightAppLauncher Instance
         {
             get
             {
                 return m_Instance;
             }
+        }
+
+        /// <summary>
+        ///     Clamps the given rect transform within the screen bounds.
+        /// </summary>
+        public void ClampToScreen(RectTransform rectTransform)
+        {
+            UIMasterController.ClampToScreen(rectTransform, Vector2.zero);
+        }
+
+        /// <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 IsControlBarVisible
+        {
+            get
+            {
+                if (DisplayStack.Instance != null)
+                {
+                    return DisplayStack.Instance.ShowControlBar;
+                }
+
+                return false;
+            }
+            set
+            {
+                if (DisplayStack.Instance != null)
+                {
+                    DisplayStack.Instance.ShowControlBar = value;
+                }
+            }
+        }
+
+        /// <summary>
+        ///     Gets or sets the display stack's visibility.
+        /// </summary>
+        public bool IsDisplayStackVisible
+        {
+            get
+            {
+                if (DisplayStack.Instance != null)
+                {
+                    return DisplayStack.Instance.Hidden == false;
+                }
+
+                return false;
+            }
+            set
+            {
+                if (DisplayStack.Instance != null)
+                {
+                    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()
@@ -32,9 +140,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");
             }
         }
 
@@ -46,12 +154,11 @@
         protected override void OnHover()
         {
             Open();
-            ButtonHover?.Invoke();
         }
 
         protected override void OnHoverOut()
         {
-            if (isOn == false)
+            if (IsOn == false)
             {
                 Close();
             }
@@ -67,26 +174,28 @@
         /// </summary>
         private void Close()
         {
-            if (m_MenuObject == null)
-            {
+            if (m_FlightMenu != null)
+            {
+                m_FlightMenu.Close();
+            }
+            else if (m_MenuObject != null)
+            {
+                Destroy(m_MenuObject);
+            }
+        }
+
+        /// <summary>
+        ///     Opens the menu.
+        /// </summary>
+        private void Open()
+        {
+            // fade menu in if already open
+            if (m_FlightMenu != null)
+            {
+                m_FlightMenu.FadeIn();
                 return;
             }
 
-            if (MenuClosed != null)
-            {
-                MenuClosed();
-            }
-            else
-            {
-                Destroy(m_MenuObject);
-            }
-        }
-
-        /// <summary>
-        ///     Opens the menu.
-        /// </summary>
-        private void Open()
-        {
             if (m_MenuPrefab == null || m_MenuObject != null)
             {
                 return;
@@ -101,6 +210,13 @@
 
             // set object as a child of the main canvas
             m_MenuObject.transform.SetParent(MainCanvasUtil.MainCanvas.transform);
+
+            // set menu's reference to this object for cross-communication
+            m_FlightMenu = m_MenuObject.GetComponent<FlightMenu>();
+            if (m_FlightMenu != null)
+            {
+                m_FlightMenu.SetFlightAppLauncher(this);
+            }
         }
     }
 }

--- a/KerbalEngineer/Flight/Sections/SectionEditor.cs
+++ b/KerbalEngineer/Flight/Sections/SectionEditor.cs
@@ -103,7 +103,6 @@
         {
             try
             {
-                RenderingManager.RemoveFromPostDrawQueue(0, this.Draw);
             }
             catch (Exception ex)
             {
@@ -120,7 +119,6 @@
             {
                 this.InitialiseStyles();
                 //ReadoutCategory.Selected = ReadoutCategory.GetCategory("Orbital");
-                RenderingManager.AddToPostDrawQueue(0, this.Draw);
             }
             catch (Exception ex)
             {
@@ -135,8 +133,13 @@
         /// <summary>
         ///     Called to draw the editor when the UI is enabled.
         /// </summary>
-        private void Draw()
-        {
+        private void OnGUI()
+        {
+            if (FlightEngineerCore.IsDisplayable == false)
+            {
+                return;
+            }
+
             this.position = GUILayout.Window(this.GetInstanceID(), this.position, this.Window, "EDIT SECTION - " + this.ParentSection.Name.ToUpper(), this.windowStyle).ClampToScreen();
             this.ParentSection.EditorPositionX = this.position.x;
             this.ParentSection.EditorPositionY = this.position.y;
@@ -233,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
@@ -31,10 +31,11 @@
 
 namespace KerbalEngineer.Flight.Sections
 {
+    using Unity.Flight;
     /// <summary>
     ///     Object for management and display of readout modules.
     /// </summary>
-    public class SectionModule
+    public class SectionModule : ISectionModule
     {
         #region Fields
 
@@ -156,6 +157,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.

--- a/KerbalEngineer/Flight/Sections/SectionWindow.cs
+++ b/KerbalEngineer/Flight/Sections/SectionWindow.cs
@@ -116,7 +116,7 @@
         /// <summary>
         ///     Called to draw the floating section window when the UI is enabled.
         /// </summary>
-        private void Draw()
+        private void OnGUI()
         {
             if (this.ParentSection == null || !this.ParentSection.IsVisible || (DisplayStack.Instance.Hidden && !this.ParentSection.IsHud) || !FlightEngineerCore.IsDisplayable)
             {
@@ -165,7 +165,6 @@
         /// </summary>
         private void OnDestroy()
         {
-            RenderingManager.RemoveFromPostDrawQueue(0, this.Draw);
             GuiDisplaySize.OnSizeChanged -= this.OnSizeChanged;
         }
 
@@ -192,7 +191,7 @@
         {
             this.windowId = this.GetHashCode();
             this.InitialiseStyles();
-            RenderingManager.AddToPostDrawQueue(0, this.Draw);
+
             GuiDisplaySize.OnSizeChanged += this.OnSizeChanged;
         }
 

--- a/KerbalEngineer/KerbalEngineer.csproj
+++ b/KerbalEngineer/KerbalEngineer.csproj
@@ -277,7 +277,13 @@
       <Private>False</Private>
     </Reference>
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <ProjectReference Include="..\KerbalEngineer.Unity\KerbalEngineer.Unity.csproj">
+      <Project>{5387bb1e-32b1-4bac-b03f-100570b9554c}</Project>
+      <Name>KerbalEngineer.Unity</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Target Name="PostBuildMacros">
     <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">

--- 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;
+            }
+        }
     }
 }

 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
 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: 2067172977
+CRC: 3889460463
 Hashes:
   AssetFileHash:
     serializedVersion: 2
-    Hash: 8d52da3e0a65874a41c225bd367499c6
+    Hash: dc7af1c2d3aa8684359541d179f53bae
   TypeTreeHash:
     serializedVersion: 2
-    Hash: 7225837fc006179772eb644685ace9cf
+    Hash: a43c45227b2ed7e5db39229032ceda8b
 HashAppended: 0
 ClassTypes:
 - Class: 1
@@ -17,6 +17,8 @@
   Script: {instanceID: 0}
 - 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
@@ -30,7 +32,9 @@
 - Class: 114
   Script: {fileID: 1297475563, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
 - Class: 114
-  Script: {fileID: 2019631361, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
+  Script: {fileID: 571159103, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
+- Class: 114
+  Script: {fileID: -1842827791, guid: a3a55138b08428847a08c7b48fe72efe, type: 3}
 - Class: 115
   Script: {instanceID: 0}
 - Class: 128
@@ -42,6 +46,7 @@
 - Class: 225
   Script: {instanceID: 0}
 Assets:
+- Assets/Prefabs/FlightMenuSection.prefab
 - Assets/Prefabs/FlightMenu.prefab
 Dependencies: []