 
   open: do ->
 
-    createOrShow = (appOptions, appParams, callback = noop)->
-
-      appManager  = KD.getSingleton "appManager"
-      name        = appOptions?.name
-
-      return appManager.handleAppNotFound()  unless name
-
-      appInstance = appManager.get name
-      cb          = -> appManager.show appOptions, callback
-      if appInstance then do cb
-      else appManager.create name, appParams, cb
+    createOrShow = (appOptions = {}, appParams, callback = noop)->
+
+      name = appOptions?.name
+      return @handleAppNotFound()  unless name
+
+      appInstance = @get name
+      cb = if appParams.background or appOptions.background
+      then -> KD.utils.defer callback
+      else @show.bind this, name, appParams, callback
+
+      if appInstance then cb() else @create name, appParams, cb
 
     (name, options, callback)->
 

        KD.getSingleton("kodingAppsController").putAppResources appInstance, callback
      callback? appInstance

  show:(appOptions, callback)->

    appInstance = @get appOptions.name

    if appOptions.background
      return @utils.defer -> callback? appInstance

    appView     = appInstance.getView?()
    return unless appView

      options            or= {}
      appOptions           = KD.getAppOptions name
      appParams            = options.params or {}
      defaultCallback      = createOrShow.bind this, appOptions, appParams, callback
      kodingAppsController = KD.getSingleton("kodingAppsController")

      # If app has a preCondition then first check condition in it
