       if firechange
         @trigger('change:' + prop_name, this, @get(prop_name))
         @trigger('change', this)
+
     prop_spec =
       'getter': getter,
       'dependencies': [],

      'callbacks':
        changedep: changedep
        propchange: propchange
    @_computed[prop_name] = prop_spec
    # bind propchange callback to change dep event
    @listenTo(this, "changedep:#{prop_name}",
              prop_spec['callbacks']['propchange'])
    return prop_spec

  remove_property: (prop_name) ->
    # removes the property,
    # unbinding all associated callbacks that implemented it
    prop_spec = @_computed[prop_name]
    dependencies = prop_spec.dependencies
    for dep in dependencies

    for fld in fields
      @listenTo(object, "change:" + fld, prop_spec['callbacks']['changedep'])

  register_property:  (prop_name, getter, use_cache) ->
    # #### Parameters
    # * prop_name: name of property
    # * getter: function, calculates computed value, takes no arguments
    # * use_cache: whether to cache or not
    # #### Returns
    # * prop_spec: specification of the property, with the getter,
    if _.isUndefined(use_cache)
      use_cache = true
    if _.has(@_computed, prop_name)
      @remove_property(prop_name)

    changedep = () =>
      @trigger('changedep:' + prop_name)

    propchange = () =>
      firechange = true
      if prop_spec['use_cache']
