code: @SuppressWarnings("unchecked")
      private <IC extends Component<?>> void addInnerComponent(final InnerComponent<IC> innerComponent) {
  
          if (!getInnerComponentMap().isPresent()) {
              // Initialize default storage objects only on demand (to save some bits)
              this.innerComponentMap = new IdentityHashMap<>(10);
              // this.innerComponentList = new ArrayList<Component<?>>();
          }
  
          // If the inner model hasn't been loaded before, build it from UIFacade
          if (!this.innerComponentMap.containsKey(innerComponent)) {
  
              final Class<IC> innerComponentClass = innerComponent.key().classField();
  
              IC childComponent = null;
              // Use the right facade according to the inner component type
              if (Command.class.isAssignableFrom(innerComponentClass)) {
                  // Initialize the Inner Command
                  childComponent = (IC) localFacade().globalFacade().commandFacade().retrieve((UniqueKey<Command>) innerComponent.key());
              } else if (Service.class.isAssignableFrom(innerComponentClass)) {
                  // Initialize the Inner Service
                  childComponent = (IC) localFacade().globalFacade().serviceFacade().retrieve((UniqueKey<Service>) innerComponent.key());
              } else if (Model.class.isAssignableFrom(innerComponentClass)) {
                  // Initialize the Inner Model
                  childComponent = (IC) localFacade().globalFacade().uiFacade().retrieve((UniqueKey<Model>) innerComponent.key());
              } else if (Behavior.class.isAssignableFrom(innerComponentClass)) {
                  // Cannot initialize Inner Behavior, they cannot be nested
                  throw new CoreRuntimeException("Behaviors can not be used as Inner EnhancedComponent"); // FIXME add MessageItem
              }
  
              // Inner EnhancedComponent creation has failed throw an exception
              if (childComponent == null) {
                  throw new CoreRuntimeException("Impossible to create Inner EnhancedComponent"); // FIXME add MessageItem
              }
  
              // Store the component into the multitonKey map
              this.innerComponentMap.put(innerComponent, childComponent);
              // this.innerComponentList.add(childComponent);
  
              // Link the current root model
              childComponent.rootComponent(this);
          }
      }
docs: {@inheritDoc}