     @param  {function}  A function to execute each time the fields change.
     @return {object}    A object observe state.
     ###
-    observe: (handler, events = DEFAULT_EVENTS) ->
-      @observer = Object.observe @, (states) =>
+    observe: (callback, events = DEFAULT_EVENTS) ->
+      observer = Object.observe @, (states) =>
         for state in states when state.name in @constructor.names
           delete state.object.observer
-          handler state
+          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 @fields, @observer
+    unobserve: ->
+      Object.unobserve @, observer for observer in @observers
+      @callbacks = []
+      @observers = []
 
     ###
     Destroy current Hamsa instance
     @method destroy
     @return {object}    Current Hamsa instance
     ###
-    destroy: -> delete @constructor.records[@uid]
+    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

    @return {object}    A object observe state.
    ###
    @unobserve: ->
      Object.unobserve @records, @observer


    # -- INSTANCE ----------------------------------------------------------------
    ###

  class Hamsa

    # -- STATIC ------------------------------------------------------------------
    @records    = {}
    @fields     = {}
    @names      = []
    @callbacks  = []
    @observers  = []

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