         async.series tasks, callback
     
     setPersisting: (data, callback) ->
+        F.demandGoodObject(data, 'data')
+        F.demandFunction(callback, 'callback')
+
         tasks = [ ]
         for key, value of data
             if (@_asyncProperties[key]?.set?)

        })

    loadAsyncProperties: (properties..., callback) ->
        tasks = {}
        for property in properties
            return callback("Invalid property #{property}") if !(@_asyncProperties[property]?)

            enumerable: property.enumerable?
            writable: property.writable?

            value: (values..., callback) ->
                if _.isEmpty(values)
                    return callback("Get for #{key} not implemented") if !(property.get?)
                    return @getAsync(key, callback)

                return callback("Set for #{key} not implemented") if !(property.set?)
                return @setAsync(key, values, callback)
        })

    getAsync: (key, callback) ->
        F.demandGoodString(key, 'key')
        F.demandFunction(callback, 'callback')

        @_asyncProperties[key].get.call(@, callback)

    setAsync: (key, values, callback) ->
        F.demandGoodString(key, 'key')
        F.demandGoodArray(values, 'valeus')
        F.demandFunction(callback, 'callback')

        @_asyncProperties[key].set.apply(@, values.concat [ callback ])

    get: (key) -> @_changed[key] ? @_persisted[key]
      
