         callback? err, vm, info
       , no
 
+  fetchRegion: (vmName, callback)->
+    if region = @vmRegions[vmName]
+      return @utils.defer -> callback region
+
+    KD.remote.api.JVM.fetchVmInfo vmName, (err, info)=>
+      if err
+        warn err
+        callback 'aws'
+      else
+        @vmRegions[vmName] = info.region
+        callback @vmRegions[vmName]
+
   fetchVmName: (options, callback) ->
     if options.vmName?
       @utils.defer -> callback null, options.vmName

    @groupVms = []
    @defaultVmName = null
    @vmDomains = {}

  fetchTotalVMCount:(callback)->
    KD.remote.api.JVM.count (err, count)->

    @fetchVmName options, (err, vmName) =>
      return callback err  if err?
      options.correlationName = vmName
      @fetchRegion vmName, (region)=>
        options.kiteName = "os-#{region}"
        @kc.run options, (rest...) ->
          # log rest...
          callback rest...

  _runWrapper:(command, vm, callback)->
    [callback, vm] = [vm, callback]  unless 'string' is typeof vm
