     @param  {function}  A function to execute each time the object is changed.
     @return {object}    A object observe state.
     ###
-    @observe: (handler, events = DEFAULT_EVENTS) ->
-      @observer = Object.observe @records, (states) =>
+    @observe: (callback, events = DEFAULT_EVENTS) ->
+      observer = Object.observe @records, (states) =>
         for state in states
           event = type: state.type, name: state.name
           if state.type in ["add", "update"]
             event.object = @records[state.name]
           else
             event.oldValue = state.oldValue
-          handler event
+          callback event
       , events
+      @callbacks.push callback
+      @observers.push observer
 
     ###
     Unobserve changes in instance repository.

  class Hamsa

    # -- STATIC ------------------------------------------------------------------
    ###
    Instance repository
    ###
    @records  = {}
    @fields   = {}
    @names    = []

    ###
    Observer reference
    ###
    @observer = undefined

    ###
    Set a array of fields used in the Class

    @param  {function}  A function to execute each time the fields change.
    @return {object}    A object observe state.
    ###
    observe: (callback, events = DEFAULT_EVENTS) ->
      observer = Object.observe @, (states) =>
        for state in states when state.name in @constructor.names
          delete state.object.observer
          callback state
      , events
      @callbacks.push callback
      @observers.push observer
      observer

    ###
    Unobserve changes in a determinate Hamsa instance.
    @method unobserve
    @return {object}    A object observe state.
    ###
    unobserve: ->
      Object.unobserve @, observer for observer in @observers
      @callbacks = []
      @observers = []

    ###
    Destroy current Hamsa instance
    @method destroy
    @return {object}    Current Hamsa instance
    ###
    destroy: (trigger = true) ->
      if trigger
        for callback in @callbacks
          callback
            type    : "destroy"
            name    : @uid
            oldValue: @fields()
      delete @constructor.records[@uid]

    fields: ->
      value = {}
      value[name] = @[name] for name in @constructor.names
      value

  if typeof define is "function" and define.amd
    define -> Hamsa
