                     instance = modelClass.fromDoc doc
                     instance.collection = collection
                     instance.attached = true
-
                     instance._fields.setReadOnly true, true
-
-                    # The @_reactives dict stores the published values of reactives
-                    # with denorm:true (i.e. server handles all their reactivity).
-                    instance._reactives = J.Dict() # denormedReactiveName: value
-                    for reactiveName, reactiveSpec of modelClass.reactiveSpecs
-                        if reactiveSpec.denorm
-                            instance._reactives.setOrAdd reactiveName, J.makeValueNotReadyObject()
-
-                    if reactivesObj?
-                        reactivesSetter = {}
-
-                        for reactiveName, reactiveObj of reactivesObj
-                            reactivesSetter[reactiveName] = modelClass._getUnescapedSubdoc reactiveObj.val
-                            if reactivesSetter[reactiveName] is undefined
-                                reactivesSetter[reactiveName] = J.makeValueNotReadyObject()
-
-                        instance._reactives.set reactivesSetter
+                    instance._setReactives reactivesObj ? {}
 
                     collection._attachedInstances[id] = instance
 

        @_save true, collection, callback


    _save: (upsert, collection, callback) ->
        unless collection instanceof Mongo.Collection
            throw new Meteor.Error "Invalid collection to #{@modelClass.name}.save"

        if @attached and @collection is collection
            throw new Meteor.Error "Can't save #{@modelClass.name} instance into its own attached collection"

        unless @alive
            throw new Meteor.Error "Can't save dead #{@modelClass.name} instance"

        doc = Tracker.nonreactive => @toDoc()

        if @modelClass.idSpec is J.PropTypes.key and not doc._id?
            key = @key()
            if not key?
                throw new Error "<#{@modelClass.name}>.key() returned #{key}"
            doc._id = key
        else
            doc._id = @_id ? Random.hexString(10)

        Meteor.call '_jSave', @modelClass.name, doc, upsert, callback

        # Returns @_id
        @_id ?= doc._id


    set: (fields) ->
        unless J.util.isPlainObject fields
            throw new Meteor.Error "Invalid fields setter: #{fields}"

                        fieldName = fieldSpec.split('.')[0]
                        continue if fieldName is '_id'

                        fieldNameSet[fieldName] = true

                    mongoOptions = _.clone options
                    mongoOptions.fields = mongoFieldsArg
