     # Top-level module
     if not isSubModule
       @injector.map('Configuration').to(@Configuration)
-      # Provide lifecycle hook after this module was configured and injected
+      @_autoMapSingletons()
       @_runOnInitializeHooks()
-      # After all modules in the tree have been configured etc. invoke last hook
+      @_autoCreateSingletons()
       @_runAfterInitializeHooks()
 
   start: ->

    this["on#{Space.capitalizeString(action)}"]?()
    this["after#{Space.capitalizeString(action)}"]?()

  _runOnInitializeHooks: ->
    @_invokeActionOnRequiredModules '_runOnInitializeHooks'
    # Never run this hook twice

      @_state = 'initializing'
      # Inject required dependencies into this module
      @injector.injectInto this
      # Call custom lifecycle hook if existant
      @onInitialize?()

  _autoCreateSingletons: ->
    @_invokeActionOnRequiredModules '_autoCreateSingletons'
    if @is('initializing')
      # Create singleton classes
      @injector.create(singleton) for singleton in @Singletons

  # After all modules in the tree have been configured etc. invoke last hook
  _runAfterInitializeHooks: ->
    @_invokeActionOnRequiredModules '_runAfterInitializeHooks'
    # Never run this hook twice
    if @is('initializing')
      @_state = 'initialized'
      # Call custom lifecycle hook if existant
      @afterInitialize?()

