         else
           callback? err, apps
 
+  fetchAppFromFs:(appName, cb)->
+
+    manifests = @constructor.manifests
+    appsPath = "/home/#{KD.nick()}/Applications/"
+    suffix   = ".kdapp/manifest.json"
+
+    manifest = FSHelper.createFileFromPath "#{appsPath}#{appName}#{suffix}"
+    manifest.fetchContents (err, response)=>
+      warn err  if err
+      return cb null  if err
+      return cb null  unless response
+
+      try
+        manifest = JSON.parse response
+        manifests["#{manifest.name}"] = manifest
+      catch e
+        warn "Manifest file is broken:", e
+        return cb null
+
+      @putAppsToAppStorage manifests
+      cb null
+
+  fetchIndividualAppsFromFS:(apps, callback)->
+
+    stack = []
+    apps.forEach (app)=>
+      stack.push (cb)=> @fetchAppFromFs app, cb
+    async.parallel stack, callback
+
   fetchAppsFromFs:(cb)->
 
     @_fetchQueue.push cb  if cb

    @appStorage.reset()
    @appStorage.setValue 'shortcuts', defaultShortcuts, callback

  putAppsToAppStorage:(apps)->

    @appStorage.setValue 'apps', apps


        callback()  for callback in @_fetchQueue
        @_fetchQueue = []
      else
        apps = @filterAppsFromFileList files
        @fetchIndividualAppsFromFS apps, (result)=>
          for callback in @_fetchQueue
            callback null, @constructor.manifests
          @_fetchQueue = []
    , ->
      warn msg = "Timeout reached for kite request"
