   @param  {function}  A function to execute each time the object is changed.
   @return {object}    A object observe state.
   ###
-  @observe: (callback) ->
+  @observe: (callback, events = DEFAULT_EVENTS) ->
     @observer = Object.observe @records, (states) ->
       callback state for state in states
+    , events
 
   ###
-  Observe changes in instance repository.
-  @method observe
-  @param  {function}  A function to execute each time the object is changed.
+  Unobserve changes in instance repository.
+  @method unobserve
   @return {object}    A object observe state.
   ###
   @unobserve: ->

  @param  {function}  A function to execute each time the fields change.
  @return {object}    A object observe state.
  ###
  observe: (callback, add = true, update = true, destroy = true) ->
    available = []
    available.push "add" if add
    available.push "update" if update
    available.push "delete" if destroy
    Object.observe @fields, (states) ->
      callback state for state in states when state.type in available


# -- PRIVATE -------------------------------------------------------------------

  @param  {function}  A function to execute each time the fields change.
  @return {object}    Hamsa instance.
  ###
  constructor: (@fields, callback, events = DEFAULT_EVENTS) ->
    @constructor.className = @constructor.name
    @constructor.records[@uid = _guid()] = @fields
    @observe callback, events if observe?
    @

  ###
