POC: lazy loading outline (WIP)
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
index 122eb38..e33f60f 100644
--- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
+++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/basic/tree/AbstractTree.java
@@ -707,7 +707,7 @@
    * Runtime
    */
   @Override
-  protected final void initInternal() {
+  protected void initInternal() {
     super.initInternal();
     initTreeInternal();
     interceptInitTree();
@@ -1097,7 +1097,7 @@
     if (m_rootNode != null) {
       m_rootNode.setTreeInternal(null, true);
       // inform root of remove
-      root.nodeRemovedNotify();
+      m_rootNode.nodeRemovedNotify();
     }
     m_rootNode = root;
     if (m_rootNode != null) {
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
index e0ca703..f035d00 100644
--- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
+++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/AbstractDesktop.java
@@ -1208,7 +1208,10 @@
         BEANS.get(ExceptionHandler.class).handle(e);
       }
     }
-    m_outline.setNodeExpanded(m_outline.getRootNode(), true);
+    if (m_outline.getRootNode() != null) {
+      // XXX CGU Wieso macht man das hier und nicht in activate?
+      m_outline.setNodeExpanded(m_outline.getRootNode(), true);
+    }
     setPageDetailForm(m_outline.getDetailForm());
     setPageDetailTable(m_outline.getDetailTable());
     setPageSearchForm(m_outline.getSearchForm(), true);
diff --git a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java
index 23d9384..7878cab 100644
--- a/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java
+++ b/org.eclipse.scout.rt.client/src/main/java/org/eclipse/scout/rt/client/ui/desktop/outline/AbstractOutline.java
@@ -112,6 +112,14 @@
   }
 
   @Override
+  protected void initInternal() {
+    if (getRootNode() == null) {
+      return;
+    }
+    super.initInternal();
+  }
+
+  @Override
   public ClientRunContext createDisplayParentRunContext() {
     return ClientRunContexts
         .copyCurrent()
@@ -301,14 +309,11 @@
         TreeEvent.TYPE_NODES_CHECKED);
     addNodeFilter(new P_TableFilterBasedTreeNodeFilter());
     super.initConfig();
-    IPage<?> rootPage = interceptCreateRootPage();
-    setRootNode(rootPage);
+    setRootNode(null);
     setVisible(getConfiguredVisible());
     setOrder(calculateViewOrder());
     setNavigateButtonsVisible(getConfiguredNavigateButtonsVisible());
     setOutlineOverviewVisible(getConfiguredOutlineOverviewVisible());
-    ensureDefaultDetailFormCreated();
-    ensureDefaultDetailFormStarted();
   }
 
   @Override
@@ -814,6 +819,13 @@
 
   @Override
   public void activate() {
+    if (getRootNode() == null) {
+      IPage<?> rootPage = interceptCreateRootPage();
+      setRootNode(rootPage);
+      ensureDefaultDetailFormCreated();
+      ensureDefaultDetailFormStarted();
+      initInternal();
+    }
     interceptActivated();
   }
 
diff --git a/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java b/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java
index 21c245c..6a15ca2 100644
--- a/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java
+++ b/org.eclipse.scout.rt.ui.html/src/main/java/org/eclipse/scout/rt/ui/html/json/tree/JsonTree.java
@@ -894,6 +894,9 @@
 
   protected List<ITreeNode> getTopLevelNodes() {
     ITreeNode rootNode = getModel().getRootNode();
+    if (rootNode == null) {
+      return new ArrayList<>();
+    }
     if (getModel().isRootNodeVisible()) {
       return CollectionUtility.arrayList(rootNode);
     }