diff --git a/modules/image/motion detect b/modules/image/motion detect
index 01baa5d3f4631651a7d39b1482f3efc2fa093c81..604e9b9ced7a69645d0c9bb659b1b5a045f6ddae 100755
--- a/modules/image/motion detect	
+++ b/modules/image/motion detect	
@@ -148,7 +148,7 @@ function timeout() {
    setTimeout(timeout,parseFloat(mod.time.value)*1000)
    }
 function compare_images() {
-   mod.change.nodeValue = Date.now()
+   //mod.change.nodeValue = Date.now()
    var blob = new Blob(['('+worker.toString()+'())'])
    var url = window.URL.createObjectURL(blob)
    var webworker = new Worker(url)
@@ -156,12 +156,7 @@ function compare_images() {
       window.URL.revokeObjectURL(url)
       var h = mod.img.height
       var w = mod.img.width
-      /*
-      var buf = new Uint8ClampedArray(evt.data.buffer)
-      var imgdata = new ImageData(buf,w,h)
-      var ctx = mod.img.getContext("2d")
-      ctx.putImageData(imgdata,0,0)
-      */
+      mod.change.nodeValue = 'relative change: '+evt.data.change.toFixed(3)
       if (w > h) {
          var x0 = 0
          var y0 = mod.canvas.height*.5*(1-h/w)
@@ -198,7 +193,22 @@ function worker() {
       var t = evt.data.threshold
       var buf = new Uint8ClampedArray(evt.data.buffer)
       var lastbuf = new Uint8ClampedArray(evt.data.lastbuffer)
-      self.postMessage({buffer:buf.buffer})
+      var change = 0
+      for (var row = 0; row < h; ++row) {
+         for (var col = 0; col < w; ++col) {
+            r = buf[(h-1-row)*w*4+col*4+0] 
+            g = buf[(h-1-row)*w*4+col*4+1] 
+            b = buf[(h-1-row)*w*4+col*4+2] 
+            rl = lastbuf[(h-1-row)*w*4+col*4+0] 
+            gl = lastbuf[(h-1-row)*w*4+col*4+1] 
+            bl = lastbuf[(h-1-row)*w*4+col*4+2] 
+            change += (Math.abs(r-rl)/255 
+               +Math.abs(g-gl)/255
+               +Math.abs(b-bl)/255)/3
+            }
+         }
+      change = change/(w*h)
+      self.postMessage({change:change})
       })
    }
 // return values