             queue.defer (callback) ->
               model.get field, (err, related_model) ->
                 return callback(err) if err
-                JSONUtils.renderJSON related_model, args, (err, value) ->
+                # Clone the args so we don't clobber the key if we're using it for more than one model
+                render_args = _.extend({}, args)
+                delete render_args[field]
+                JSONUtils.renderJSON related_model, render_args, (err, value) ->
                   return callback(err) if err
                   result[key] = value
                   callback()

        # is_great: {fn: 'isGreatFor', args: [options.user]}
        else if args.fn
          queue.defer (callback) ->
            args.args or= []
            args.args = [args.args] unless _.isArray(args.args)
            args.args.push((err, json) -> result[key] = json; callback())
            model[args.fn].apply(model, args.args)

        # full_name:      'name'
        else if _.isString(args)

        # can_delete: {fn: (photo, options, callback) -> }
        if _.isFunction(args.fn)
          queue.defer (callback) ->
            args.fn model, options, (err, json) ->
              result[key] = json
              callback()
