         then @utils.defer -> cb KD.getSingleton('router')
         else KodingRouter.on 'RouterReady', cb
 
-    options.route = [options.route]  unless Array.isArray options.route
-    registerRoute route for route in options.route
+    if   options.route
+    then registerRoute options.route
+    else if options.routes
+    then registerRoute route, handler for own route, handler of options.routes
 
     if options.navItem?.order
       @registerNavItem options.navItem

      writable      : no
      value         : { fn, options }

    if options.labels.length > 0
      @setAppLabels options.name, options.labels

  setAppLabels       : (name, labels)-> @appLabels[name] = labels

  getAppName         : (name)->
    for own app, labels of @appLabels
      return app  if name in labels or name is app
    return name

  registerNavItem    : (itemData)-> @navItems.push itemData

  getNavItems        : -> @navItems.sort (a, b)-> a.order - b.order

  setNavItems        : (navItems)-> @navItems = navItems.sort (a, b)-> a.order - b.order

  unregisterAppClass :(name)-> delete KD.appClasses[@getAppName name]

  getAppClass        :(name)-> KD.appClasses[@getAppName name]?.fn or null

  getAppOptions      :(name)-> KD.appClasses[@getAppName name]?.options or null

  getAppScript       :(name)-> @appScripts[@getAppName name] or null

  registerAppScript  :(name, script)-> @appScripts[@getAppName name] = script

  unregisterAppScript:(name)-> delete @appScripts[@getAppName name]

  resetAppScripts    :-> @appScripts = {}


    options.navItem      or= {}           # <Object{title: string, eventName: string, shortcut: string}>
    options.labels       or= []           # <Array<string>> list of labels to use as app name
    options.version       ?= "1.0"        # <string> version
    options.route        or= null         # <string> or <Object{slug: string, handler: function}>
    options.routes       or= null         # <string> or <Object{slug: string, handler: function}>

    registerRoute = (route, handler)=>
      slug        = if "string" is typeof route then route else route.slug
      route       =
        slug      : slug or '/'
        handler   : handler or route.handler or null


      if route.slug isnt '/'

        {slug, handler} = route
        cb = (router)->
          handler or= ({params:{name}, query})->
            router.openSection options.name, name, query
