         lengthChanged = target.length isnt currentLength
         return true  if key is 'length' and not lengthChanged
 
+      return true  if typeof key is 'symbol' or /^__|__$/.test key
+
       if root = receiver[KDData.NAME]
         key = "#{root}.#{key}"
       else
         root = ''
-
-      return true  if typeof key is 'symbol' or /^__|__$/.test key
 
       if lengthChanged
         prefix = if key.indexOf('.') >= 0 then "#{root}." else ''


  proxyHandler = (base) ->

    get: (target, key) ->

      value = target[key]
      return value  if typeof key isnt 'string'

      key = getFullPath target, key

      if value and dataValue = KD.utils.JsPath.getAt base.__data__, key
        if dataValue instanceof Object and value not instanceof Date
          proxy = createProxy value, proxyHandler base
          Object.defineProperty proxy, KDData.NAME, {
            value: key, configurable: yes
          }
          return proxy

      return value


    set: (target, key, value, receiver) ->

      if base.isArray
        currentLength = target.length

      target[key] = value



      base.emit 'update', [ key ]
      return true
