         opts = defaults opts,
             host : undefined   # if given and project not on any host (so @host undefined), then this host will be used
             cb   : required
-        if @host
+        if @host and @_state != 'closed'
             # already opened
             opts.cb()
             return

            ], opts.cb)
            return

        host = @host
        async.series([
            (cb) =>
                if not host
                    if opts.host
                        host = opts.host
                        cb()
                    else
                        dbg("choose a host")
                        @get_host
                            cb : (err, h) =>
                                host = h; cb(err)
                else
                    cb()
            (cb) =>
                dbg("request to open on '#{host}'")
                @_storage_request

                @_synctable.wait
                    until   : (table) => table.getIn([@project_id, 'host', 'host'])?
                    timeout : 30  # should be very fast
                    cb      : cb
            (cb) =>
                dbg('update state')
                @state
                    force  : true
                    update : true
                    cb     : cb
        ], (err) =>
            dbg("opening done -- #{err}")
            opts.cb(err)
