       when 'Events', 'DeviceID' then
         # Do nothing
       when 'Downloads'
-        if currentPath.length == 3 and currentPath.wildcard == 0 and declareAttributeValues.value?
+        if currentPath.length == 3 and currentPath.wildcard == 0 and declareAttributeValues?.value?
           if currentPath[2] == 'Download'
             syncState.downloadsDownload.set(currentPath, declareAttributeValues.value[0])
           else

      for ad in aliasDecs
        p = sessionContext.deviceData.paths.add(ad[0])
        allDeclareTimestamps.set(p, Math.max(ad[1] or 1, allDeclareTimestamps.get(p) or 0))
        attrTrackers = []
        if ad[2]
          cur = allDeclareAttributeTimestamps.get(p)
          allDeclareAttributeTimestamps.set(p, cur = {}) if not cur
          for k, v of ad[2]
            attrTrackers.push(k)
            cur[k] = Math.max(v, cur[k] or 0)

        device.track(sessionContext.deviceData, p, 'prerequisite', attrTrackers)

      unpacked = device.unpack(sessionContext.deviceData, path)
      for u in unpacked
        allDeclareTimestamps.set(u, Math.max(declaration[1] or 1, allDeclareTimestamps.get(u) or 0))
        if declaration[2]
          cur = allDeclareAttributeTimestamps.get(u)
          allDeclareAttributeTimestamps.set(u, cur = {}) if not cur
          for k, v of declaration[2]
            cur[k] = Math.max(v, cur[k] or 0)

        if declaration[4]
          cur = allDeclareAttributeValues.get(u)
          allDeclareAttributeValues.set(u, cur = {}) if not cur
          for k, v of declaration[4]
            cur[k] = v
    else
      path = sessionContext.deviceData.paths.add(path)
      allDeclareTimestamps.set(path, Math.max(declaration[1] or 1, allDeclareTimestamps.get(path) or 0))
      if declaration[2]
        cur = allDeclareAttributeTimestamps.get(path)
        allDeclareAttributeTimestamps.set(path, cur = {}) if not cur
        for k, v of declaration[2]
          cur[k] = Math.max(v, cur[k] or 0)

      if declaration[4]
        if declaration[4]
          cur = allDeclareAttributeValues.get(path)
          allDeclareAttributeValues.set(path, cur = {}) if not cur
          for k, v of declaration[4]
            cur[k] = v

      device.track(sessionContext.deviceData, path, 'prerequisite')

    if declaration[3]?
      if Array.isArray(declaration[3])


  allVirtualParameters = virtualParametersCache.get(sessionContext)

  mergeAttributeTimestamps = (p, attrs) ->
    if cur = allDeclareAttributeTimestamps.get(p)
      cur = Object.assign({}, cur)
      cur[k] = Math.max(v, cur[k] or 0) for k, v of attrs
      allDeclareAttributeTimestamps.set(p, cur)
    else
      allDeclareAttributeTimestamps.set(p, attrs)

  mergeAttributeValues = (p, attrs) ->
    if cur = allDeclareAttributeValues.get(p)
      cur = Object.assign({}, cur, attrs)
      allDeclareAttributeValues.set(p, cur)
    else
      allDeclareAttributeValues.set(p, attrs)

  for declaration, i in declarations
    path = common.addPathMeta(declaration[0])
    unpacked = null
