         unless @alive
             throw new Meteor.Error "Can't call toDoc on dead #{@modelClass.name} instance"
 
-        doc = J.Model.toSubdoc(@_fields.toObj(), denormalize)
+        doc = J.Model.toSubdoc(@_fields.tryToObj(), denormalize)
 
         if denormalize and @modelClass.idSpec is J.PropTypes.key
             key = @key()

        )

        setter = {}
        newDoc = EJSON.parse EJSON.stringify oldDoc ? {_id: instanceId}
        for fieldName, newValue of fields
            if newValue isnt undefined
                setter[fieldName] = newValue
                newDoc[fieldName] = newValue

        modelClass.collection.upsert instanceId,
            $set: setter

        if not _reserved
            J.denorm.resetWatchers modelName, instanceId, oldDoc ? {_id: instanceId}, newDoc

        instanceId

    _jRemove: (modelName, instanceId, oldDoc = null) ->
        # This also runs on the client as a stub

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

        doc = Tracker.nonreactive => @toDoc()

        doc._id ?= Random.hexString(10)

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

        doc._id


    set: (fields) ->
