Implemented the section controls in the flight engineer menu.
Implemented the section controls in the flight engineer menu.

 Binary files a/Assets/Plugins/KerbalEngineer.Unity.dll and b/Assets/Plugins/KerbalEngineer.Unity.dll differ
--- a/Assets/Prefabs/FlightMenu.prefab
+++ b/Assets/Prefabs/FlightMenu.prefab
@@ -1,5 +1,21 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &104160
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 22478204}
+  - 114: {fileID: 11445012}
+  m_Layer: 5
+  m_Name: Space
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
 --- !u!1 &104452
 GameObject:
   m_ObjectHideFlags: 1
@@ -11,7 +27,7 @@
   - 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
@@ -101,7 +117,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 +134,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 +151,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
@@ -216,7 +232,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
@@ -350,6 +366,8 @@
   m_EditorClassIdentifier: 
   m_ShowEngineerToggle: {fileID: 11485338}
   m_ControlBarToggle: {fileID: 11415068}
+  m_MenuSectionPrefab: {fileID: 130812, guid: 1755c05344f574d4787a372d34a4e3fb, type: 2}
+  m_ContentTransform: {fileID: 22475412}
   m_FastFadeDuration: .200000003
   m_SlowFadeDuration: .5
 --- !u!114 &11423044
@@ -377,12 +395,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,15 +450,15 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 25
+  m_PreferredHeight: 15
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
---- !u!114 &11451984
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 194088}
+--- !u!114 &11445012
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 104160}
   m_Enabled: 1
   m_EditorHideFlags: 0
   m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
@@ -450,7 +468,25 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 20
+  m_PreferredHeight: -1
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
+--- !u!114 &11451984
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 194088}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: 15
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
 --- !u!114 &11453198
@@ -513,7 +549,7 @@
   m_MinWidth: -1
   m_MinHeight: -1
   m_PreferredWidth: -1
-  m_PreferredHeight: 20
+  m_PreferredHeight: 15
   m_FlexibleWidth: -1
   m_FlexibleHeight: -1
 --- !u!114 &11463504
@@ -564,7 +600,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
@@ -781,8 +817,8 @@
   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_AnchoredPosition: {x: 1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
   m_Pivot: {x: .5, y: .5}
 --- !u!224 &22401786
 RectTransform:
@@ -885,8 +921,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 +935,7 @@
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children:
   - {fileID: 22478174}
+  - {fileID: 22478204}
   m_Father: {fileID: 22476196}
   m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
@@ -939,6 +976,23 @@
   - {fileID: 22401100}
   m_Father: {fileID: 22475412}
   m_RootOrder: 0
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!224 &22478204
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 104160}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22475412}
+  m_RootOrder: 1
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
@@ -988,6 +1042,18 @@
       propertyPath: m_SlowFadeDuration
       value: .5
       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}

--- a/Assets/Prefabs/FlightMenuSection.prefab
+++ b/Assets/Prefabs/FlightMenuSection.prefab
@@ -224,8 +224,8 @@
   onValueChanged:
     m_PersistentCalls:
       m_Calls:
-      - m_Target: {fileID: 0}
-        m_MethodName: set_controlBar
+      - m_Target: {fileID: 11494744}
+        m_MethodName: SetEditorVisible
         m_Mode: 0
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -298,8 +298,8 @@
   onValueChanged:
     m_PersistentCalls:
       m_Calls:
-      - m_Target: {fileID: 0}
-        m_MethodName: set_showEngineer
+      - m_Target: {fileID: 11494744}
+        m_MethodName: SetDisplayVisible
         m_Mode: 0
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -642,7 +642,15 @@
   serializedVersion: 2
   m_Modification:
     m_TransformParent: {fileID: 0}
-    m_Modifications: []
+    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}
     m_RemovedComponents: []
   m_ParentPrefab: {fileID: 0}
   m_RootGameObject: {fileID: 130812}

--- a/Assets/Scenes/main.unity
+++ b/Assets/Scenes/main.unity
@@ -152,6 +152,57 @@
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 0}
   m_GameObject: {fileID: 476101859}
+--- !u!1 &533639931
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  serializedVersion: 4
+  m_Component:
+  - 224: {fileID: 533639932}
+  - 114: {fileID: 533639933}
+  m_Layer: 5
+  m_Name: Space
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &533639932
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 533639931}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1587294051}
+  m_RootOrder: 1
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: .5, y: .5}
+--- !u!114 &533639933
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 0}
+  m_GameObject: {fileID: 533639931}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: -1
+  m_FlexibleWidth: -1
+  m_FlexibleHeight: -1
 --- !u!224 &1026898450 stripped
 RectTransform:
   m_PrefabParentObject: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f,
@@ -210,7 +261,7 @@
       objectReference: {fileID: 0}
     - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_SizeDelta.y
-      value: 45
+      value: 47
       objectReference: {fileID: 0}
     - target: {fileID: 22476196, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_AnchorMin.x
@@ -250,15 +301,15 @@
       objectReference: {fileID: 0}
     - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_AnchoredPosition.y
-      value: -12.5
+      value: -11.5
       objectReference: {fileID: 0}
     - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_SizeDelta.x
-      value: 250
+      value: 242
       objectReference: {fileID: 0}
     - target: {fileID: 22478174, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_SizeDelta.y
-      value: 25
+      value: 15
       objectReference: {fileID: 0}
     - target: {fileID: 22483410, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_AnchorMin.y
@@ -294,7 +345,7 @@
       objectReference: {fileID: 0}
     - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_AnchoredPosition.y
-      value: -32.5
+      value: -33.5
       objectReference: {fileID: 0}
     - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_SizeDelta.x
@@ -302,7 +353,95 @@
       objectReference: {fileID: 0}
     - target: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
       propertyPath: m_SizeDelta.y
-      value: 25
+      value: 27
+      objectReference: {fileID: 0}
+    - target: {fileID: 11461688, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_PreferredHeight
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 11451984, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_PreferredHeight
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 150266, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Name
+      value: Selected
+      objectReference: {fileID: 0}
+    - target: {fileID: 138760, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Name
+      value: Text
+      objectReference: {fileID: 0}
+    - target: {fileID: 104452, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Name
+      value: Selected
+      objectReference: {fileID: 0}
+    - target: {fileID: 137786, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Name
+      value: Text
+      objectReference: {fileID: 0}
+    - target: {fileID: 11465882, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_FontData.m_FontSize
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 11403342, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_FontData.m_FontSize
+      value: 10
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22469574, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.x
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.x
+      value: -2
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 22401100, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_SizeDelta.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 11443382, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_PreferredHeight
+      value: 15
+      objectReference: {fileID: 0}
+    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Padding.m_Left
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Padding.m_Right
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Padding.m_Top
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Padding.m_Bottom
+      value: 4
+      objectReference: {fileID: 0}
+    - target: {fileID: 11424646, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
+      propertyPath: m_Spacing
+      value: 4
       objectReference: {fileID: 0}
     m_RemovedComponents: []
   m_ParentPrefab: {fileID: 100100000, guid: a41f85cb0b8964f43947e85b3e833c0f, type: 2}
@@ -381,6 +520,11 @@
   m_Children: []
   m_Father: {fileID: 0}
   m_RootOrder: 2
+--- !u!224 &1587294051 stripped
+RectTransform:
+  m_PrefabParentObject: {fileID: 22475412, guid: a41f85cb0b8964f43947e85b3e833c0f,
+    type: 2}
+  m_PrefabInternal: {fileID: 1220268543}
 --- !u!1 &1866791878
 GameObject:
   m_ObjectHideFlags: 0

--- a/KerbalEngineer.Unity/Flight/FlightMenu.cs
+++ b/KerbalEngineer.Unity/Flight/FlightMenu.cs
@@ -18,6 +18,7 @@
 
 namespace KerbalEngineer.Unity.Flight
 {
+    using System.Collections.Generic;
     using UnityEngine;
     using UnityEngine.EventSystems;
     using UnityEngine.UI;
@@ -29,6 +30,12 @@
 
         [SerializeField]
         private Toggle m_ControlBarToggle = null;
+
+        [SerializeField]
+        private GameObject m_MenuSectionPrefab = null;
+
+        [SerializeField]
+        private Transform m_ContentTransform = null;
 
         [SerializeField]
         private float m_FastFadeDuration = 0.2f;
@@ -84,7 +91,16 @@
         /// </summary>
         public void SetFlightAppLauncher(IFlightAppLauncher flightAppLauncher)
         {
+            if (flightAppLauncher == null)
+            {
+                return;
+            }
+
             m_FlightAppLauncher = flightAppLauncher;
+
+            // create section controls
+            CreateSectionControls(m_FlightAppLauncher.GetStockSections());
+            CreateSectionControls(m_FlightAppLauncher.GetCustomSections());
         }
 
         /// <summary>
@@ -127,6 +143,40 @@
         }
 
         /// <summary>
+        ///     Creates a list of section controls from a given list of sections.
+        /// </summary>
+        private void CreateSectionControls(IList<ISectionModule> sections)
+        {
+            if (sections == null || m_MenuSectionPrefab == null || m_ContentTransform == null)
+            {
+                return;
+            }
+
+            for (int i = 0; i < sections.Count; i++)
+            {
+                ISectionModule section = sections[i];
+                if (section == null)
+                {
+                    continue;
+                }
+
+                GameObject menuSectionObject = Instantiate(m_MenuSectionPrefab);
+                if (menuSectionObject == null)
+                {
+                    continue;
+                }
+
+                menuSectionObject.transform.SetParent(m_ContentTransform, false);
+
+                FlightMenuSection menuSection = menuSectionObject.GetComponent<FlightMenuSection>();
+                if (menuSection != null)
+                {
+                    menuSection.SetAssignedSection(section);
+                }
+            }
+        }
+
+        /// <summary>
         ///     Destroys the game object.
         /// </summary>
         private void Destroy()

--- a/KerbalEngineer.Unity/Flight/FlightMenuSection.cs
+++ b/KerbalEngineer.Unity/Flight/FlightMenuSection.cs
@@ -32,97 +32,98 @@
         [SerializeField]
         private Toggle m_EditToggle = null;
 
-        //    //private SectionModule m_Section;
+        private ISectionModule m_Section;
 
-        //    /// <summary>
-        //    ///     Gets or sets the section's display visibility.
-        //    /// </summary>
-        //    public bool displayVisible
-        //    {
-        //        get
-        //        {
-        //            if (m_DisplayToggle != null)
-        //            {
-        //                return m_DisplayToggle.isOn;
-        //            }
+        /// <summary>
+        ///     Gets or sets the section's editor visibility.
+        /// </summary>
+        public bool editorVisible
+        {
+            get
+            {
+                if (m_EditToggle != null)
+                {
+                    return m_EditToggle.isOn;
+                }
 
-        //            return true;
-        //        }
-        //        set
-        //        {
-        //            if (m_DisplayToggle != null)
-        //            {
-        //                m_DisplayToggle.isOn = value;
-        //            }
-        //        }
-        //    }
+                return true;
+            }
+            set
+            {
+                if (m_EditToggle != null)
+                {
+                    m_EditToggle.isOn = value;
+                }
+            }
+        }
 
-        //    /// <summary>
-        //    ///     Gets or sets the section's editor visibility.
-        //    /// </summary>
-        //    public bool editorVisible
-        //    {
-        //        get
-        //        {
-        //            if (m_EditToggle != null)
-        //            {
-        //                return m_EditToggle.isOn;
-        //            }
+        /// <summary>
+        ///     Sets the assigned section to be handled by the menu object.
+        /// </summary>
+        public void SetAssignedSection(ISectionModule section)
+        {
+            if (section == null)
+            {
+                return;
+            }
 
-        //            return true;
-        //        }
-        //        set
-        //        {
-        //            if (m_EditToggle != null)
-        //            {
-        //                m_EditToggle.isOn = value;
-        //            }
-        //        }
-        //    }
+            m_Section = section;
+        }
 
-        //    /// <summary>
-        //    ///     Sets the assigned section to be handled by the menu object.
-        //    /// </summary>
-        //    public void SetAssignedSection(ISectionModule section)
-        //    {
-        //        if (section == null)
-        //        {
-        //            return;
-        //        }
+        /// <summary>
+        ///     Sets the section's display visibility.
+        /// </summary>
+        public void SetDisplayVisible(bool visible)
+        {
+            if (m_Section != null)
+            {
+                m_Section.IsVisible = visible;
+            }
+        }
 
-        //        //m_Section = section;
+        /// <summary>
+        ///     Sets the section's editor visibility.
+        /// </summary>
+        public void SetEditorVisible(bool visible)
+        {
+            if (m_Section != null)
+            {
+                m_Section.IsEditorVisible = visible;
+            }
+        }
 
-        //        // set initial toggle states
-        //        SetDisplayVisible(section.IsVisible);
-        //        SetEditorVisible(editorVisible);
+        protected virtual void Update()
+        {
+            UpdateControls();
+        }
 
-        //        //display section name
-        //        if (m_DisplayText != null)
-        //        {
-        //            m_DisplayText.text = section.Name;
-        //        }
-        //    }
+        /// <summary>
+        ///     Updates the menu section's controls.
+        /// </summary>
+        private void UpdateControls()
+        {
+            if (m_Section == null)
+            {
+                return;
+            }
 
-        //    /// <summary>
-        //    ///     Sets the visible state of the section.
-        //    /// </summary>
-        //    public void SetDisplayVisible(bool visible)
-        //    {
-        //        if (m_DisplayToggle != null)
-        //        {
-        //            m_DisplayToggle.isOn = visible;
-        //        }
-        //    }
+            // display visible
+            if (m_DisplayToggle != null)
+            {
+                m_DisplayToggle.isOn = m_Section.IsVisible;
+            }
 
-        //    /// <summary>
-        //    ///     Sets the section's editor visible state.
-        //    /// </summary>
-        //    public void SetEditorVisible(bool visible)
-        //    {
-        //        if (m_EditToggle != null)
-        //        {
-        //            m_EditToggle.isOn = visible;
-        //        }
-        //    }
+            // display name
+            if (m_DisplayText != null)
+            {
+                m_DisplayText.text = m_Section.Name;
+            }
+
+            // editor visible
+            if (m_EditToggle != null)
+            {
+                m_EditToggle.isOn = m_Section.IsEditorVisible;
+            }
+        }
     }
 }

--- a/KerbalEngineer.Unity/Flight/IFlightAppLauncher.cs
+++ b/KerbalEngineer.Unity/Flight/IFlightAppLauncher.cs
@@ -1,11 +1,35 @@
-namespace KerbalEngineer.Unity.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.Unity.Flight
 {
+    using System.Collections.Generic;
+
     public interface IFlightAppLauncher
     {
+        bool controlBar { get; set; }
+
         bool isOn { get; }
 
-        bool controlBar { get; set; }
+        bool showEngineer { get; set; }
 
-        bool showEngineer { get; set; }
+        IList<ISectionModule> GetCustomSections();
+
+        IList<ISectionModule> GetStockSections();
     }
 }

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

--- a/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj
+++ b/KerbalEngineer.Unity/KerbalEngineer.Unity.csproj
@@ -35,6 +35,7 @@
     <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>

--- a/KerbalEngineer/Flight/FlightAppLauncher.cs
+++ b/KerbalEngineer/Flight/FlightAppLauncher.cs
@@ -18,6 +18,8 @@
 
 namespace KerbalEngineer.Flight
 {
+    using System.Collections.Generic;
+    using Sections;
     using Unity.Flight;
     using UnityEngine;
 
@@ -28,6 +30,8 @@
         private FlightMenu m_FlightMenu;
         private GameObject m_MenuObject;
         private GameObject m_MenuPrefab;
+
+        public IList<ISectionModule> GetCustomSections { get; }
 
         /// <summary>
         ///     Gets the current instance of the FlightAppLauncher object.
@@ -61,6 +65,16 @@
                     DisplayStack.Instance.ShowControlBar = value;
                 }
             }
+        }
+
+        IList<ISectionModule> IFlightAppLauncher.GetCustomSections()
+        {
+            return new List<ISectionModule>(SectionLibrary.CustomSections.ToArray());
+        }
+
+        public IList<ISectionModule> GetStockSections()
+        {
+            return new List<ISectionModule>(SectionLibrary.StockSections.ToArray());
         }
 
         /// <summary>

--- 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
 

 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: 606732409
+CRC: 2073293926
 Hashes:
   AssetFileHash:
     serializedVersion: 2
-    Hash: 1c8469db3b91f639cfcf44abac8c6dde
+    Hash: ea5be12ca0c34c6209c093eb01797f22
   TypeTreeHash:
     serializedVersion: 2
-    Hash: 175d221435a1539bf65dcce68b2c4bb2
+    Hash: e9cf51f1b73149b326a2db40fe611c59
 HashAppended: 0
 ClassTypes:
 - Class: 1