           return next err if err
           return next 'could not find source site' if not src_site
           log "source site found: #{src_site.get('_id').val()}"
-          next null, {db, src_site}
+          next null, {db, user, src_site}
 
       # get the source site's objects
-      ({db, src_site}, next) ->
+      ({db, user, src_site}, next) ->
         log 'find the objects'
         db.objects.find {
           site_id: src_site.get('_id').val()

            ids[src_id] = dst_id
            callback null, dst_object
        ), (err, dst_objects) ->
          next err, {db, src_site, src_objects, dst_site, dst_objects, ids}

      # update object references
      ({db, src_site, src_objects, dst_site, dst_objects, ids}, next) ->
        async.forEach dst_objects, ((dst_object, callback) ->
          data_ref = dst_object.get 'data'
          data = JSON.stringify data_ref.val()

        }, (err, src_objects) ->
          return next err if err
          log "#{src_objects.length} objects found"
          next null, {db, user, src_site, src_objects}

      # make sure new site doesn't already exist
      ({db, user, src_site, src_objects}, next) ->
        log 'make sure new site is available'
        db.sites.findOne {
          slug: dst_slug
        }, (err, dst_site) ->
          err = 'dst_slug already taken' if dst_site
          next err, {db, user, src_site, src_objects}

      # create new site
      ({db, user, src_site, src_objects}, next) ->
        site = src_site.val()
        site.slug = dst_slug
        site.name = dst_slug
