                             projects = []
                             cutoff = misc.minutes_ago(opts.time_since_last_backup_m)
                             for x in v
+                                if opts.limit? and projects.length >= opts.limit
+                                    break
                                 if x.storage?.host != hostname
                                     # only consider projects on this VM
                                     continue
-                                if opts.local and not fs.existsSync("/bups/#{x.project_id}")
+                                if opts.local and not fs.existsSync("/bups/#{x.project_id}") and fs.existsSync("/projects/#{x.project_id}")
                                     projects.push(x.project_id)
                                     continue
                                 if x.last_backup? and x.last_edited? and x.last_backup >= x.last_edited

        threads   : 1
        time_since_last_backup_m : undefined  # if given, only backup projects for which it has been at least this long since they were backed up
        local     : false      # if true, backs up *every* project on this host for which no backup exists in the /bups directory.
        cb        : required
    if process.env.USER != 'root'
        opts.cb("must be root")

    dbg("age_m=#{opts.age_m}; min_age_m=#{opts.min_age_m}; time_since_last_backup_m=#{opts.time_since_last_backup_m}")
    async.series([
        (cb) ->
            if opts.time_since_last_backup_m? or opts.local?
                opts.database.recent_projects
                    age_m     : opts.age_m
                    min_age_m : opts.min_age_m
