         else "#{styles.status_false middleware.label_false or '--'}"
         line += pad "#{statusmsg}", 20
         line += "#{styles.time print_time time}"
-        rl.cursor = 0
-        rl.line = ''
-        rl._refreshLine() unless multihost
+        refresh(true)
         if err or status?
-          rl.write line
-          rl.write '\n'
+          write line + '\n'
       .on 'wait', (middleware) ->
         return if multihost
         line = ''
-        line += pad "#{styles.fqdn ctx.config.host}", hostlength
+        line += pad "#{styles.fqdn ctx.config.shortname or ctx.config.host}", hostlength
         line += pad "#{styles.label middleware.header}", 40
         line += pad "#{styles.status_wait 'WAIT'}", 20
-        rl.cursor = 0
-        rl.line = ''
-        rl._refreshLine()
-        rl.write line
+        refresh()
+        write line
       .on 'waited', (middleware) ->
         return if multihost
         line = ''
-        line += pad "#{ctx.config.host}", hostlength
+        line += pad "#{ctx.config.shortname or ctx.config.host}", hostlength
         line += pad "#{middleware.header}", 40
         line += pad "#{styles.status_start 'WORKING'}", 20
-        rl.cursor = 0
-        rl.line = ''
-        rl._refreshLine()
-        rl.write line
-      # .on 'error', (err) ->
-      #   line = ''
-      #   line += pad "#{styles.fqdn ctx.config.host}", hostlength
-      #   line += pad "", 40
-      #   line += pad "#{styles.status_error 'ERROR'}", 20
-      #   line += '\n'
-      #   line += "#{styles.final_status_error err.stack?.trim() or err.message}\n"
-      #   rl._refreshLine() unless multihost
-      #   rl.write line
+        refresh()
+        write line
     .on 'server', (ctx, err) ->
       return unless config.servers.length
       line = ''
-      line += pad "#{ctx.config.host}", hostlength + 40
+      line += pad "#{ctx.config.shortname or ctx.config.host}", hostlength + 40
       line += if err then "#{styles.host_status_error 'FAILURE'}" else "#{styles.host_status_success 'SUCCESS'}"
-      rl.write line
-      rl.write '\n'
+      write line+'\n'
     .on 'end', ->
-      rl.write "#{styles.final_status_success 'Installation is finished'}\n"
-      rl.close()
+      write "#{styles.final_status_success 'Installation is finished'}\n"
+      close()
     .on 'error', (err) ->
       if err.errors
-        rl.write '\n'
-        rl.write "#{err.message}\n"
+        write '\n'+"#{err.message}\n"
         for err in err.errors
-          rl.write "#{styles.final_status_error err.stack?.trim() or err.message}\n"
+          write "#{styles.final_status_error err.stack?.trim() or err.message}\n"
       else
-        rl.write "#{styles.final_status_error err.stack?.trim() or err.message}\n"
-      rl.close()
+        write "#{styles.final_status_error err.stack?.trim() or err.message}\n"
+      close()

      .on 'middleware_skip', (middleware) ->
        return unless middleware.header?
        line = ''
        line += pad "#{styles.fqdn ctx.config.host}", hostlength
        line += pad "#{styles.label middleware.header}", 40
        line += pad "#{styles.status_skip 'SKIPPED'}", 20
        rl.write line
        rl.write '\n'
      .on 'middleware_start', (middleware) ->
        return unless middleware.header?
        times[ctx.config.host] = Date.now()
        return if multihost
        line = ''
        line += pad "#{styles.fqdn ctx.config.host}", hostlength
        line += pad "#{styles.label middleware.header}", 40
        line += pad "#{styles.status_start 'WORKING'}", 20
        rl.write line
      .on 'middleware_stop', (middleware, err, status) ->
        return unless middleware.header?
        time = Date.now() - times[ctx.config.host]
        line = ''
        line += pad "#{styles.fqdn ctx.config.host}", hostlength
        line += pad "#{styles.label middleware.header}", 40
        statusmsg = if err then "#{styles.status_error middleware.label_error or 'ERROR'}"
        else if typeof status is 'string' then status

      final_status_error: colors.red
      final_status_success: colors.blue
    if err
      write "#{styles.final_status_error err.stack?.trim() or err.message}\n"
      process.exit()
    hostlength = 20
    for s in config.servers then hostlength = Math.max(hostlength, (s.shortname or s.host).length+2)
    multihost = params.hosts?.length isnt 1 and config.servers.length isnt 1
    times = {}
    multihost = true
    init()
    for k, v of config.styles
      styles[k] = if typeof v is 'string' then colors[v] else v
    run params, config
