     try
       cursor = @model_type.cursor(Utils.parseRawQuery(req.query))
       cursor = cursor.whiteList(@white_lists.index) if @white_lists.index
-      cursor.toJSON (err, json) ->
-        if err then res.send(404) else res.json(if req.query.$count then {result: json} else json)
+      cursor.toJSON (err, json) =>
+        return res.send(404) if err
+        return res.json({result: json}) if req.query.$count
+        return res.json(json) unless @renderer
+
+        # TODO: intgrate the cache -> would need to be done as part of the fetch
+        # TODO: can be optimized by using one model, etc
+        JSONUtils.renderModelsJSON _.map(json, (model_json) => new @model_type(@model_type::parse(model_json))), @renderer, @render_options or {}, (err, json) =>
+          return res.status(500).send(error: err.toString()) if err
+          res.json(json)
+
     catch err
       res.status(500).send(error: err.toString())
 

          success: =>
            json = model.toJSON()
            json = _.pick(json, @white_lists.update) if @white_lists.update
            res.json(json)
          error: -> res.send(404)
        }
    catch err

        success: =>
          json = model.toJSON()
          json = _.pick(json, @white_lists.create) if @white_lists.create
          return res.json(json) unless @renderer

          JSONUtils.renderModelJSON new @model_type(@model_type::parse(model_json)), @renderer, @render_options or {}, (err, json) =>
            return res.status(500).send(error: err.toString()) if err
            res.json(json)
        error: -> res.send(404)
      }
    catch err
