         writeResponse(currentRequest, res)
       )
 
-    if res == informHash
+    if oldInformHash == informHash and not lastBootstrap?
       return updateAndRespond()
+
+    db.redisClient.setex("#{currentRequest.deviceId}_inform_hash", config.PRESETS_CACHE_DURATION, informHash, (err, res) ->
+      throw err if err
+    )
 
     # populate projection and parameterStructure
     parameterStructure = {}

        for cmd of deviceCustomCommands
          actions.deletedObjects ?= []
          actions.deletedObjects.push("_customCommands.#{cmd}")

        apiFunctions.insertTasks(_tasks, {}, () ->
          updateAndRespond()

  actions.set._lastBoot = now if '1 BOOT' in cwmpRequest.methodRequest.event
  actions.set._lastBootstrap = lastBootstrap = now if '0 BOOTSTRAP' in cwmpRequest.methodRequest.event

  db.redisClient.get("#{currentRequest.deviceId}_inform_hash", (err, oldInformHash) ->
    throw err if err

    updateAndRespond = () ->
      updateDevice(currentRequest, actions, (err) ->
