   onMouseMove: (event) ->
     super arguments...
 
-    @currentPixelCoordinates
+    currentPixelCoordinates = @currentPixelCoordinates()
+
+    newPixelCoordinates =
       x: @mouseState.x
       y: @mouseState.y
 
+    return if EJSON.equals currentPixelCoordinates, newPixelCoordinates
+
+    @currentPixelCoordinates newPixelCoordinates
+
     @applyPencil()
 
   onMouseUp: (event) ->


    if event.which is AC.Keys.shift
      if @mouseState.leftButton
        @drawStraight true
        
      else


      else
        # Apply locked coordinate.
        if @drawStraight()
          currentPixelCoordinates = _.extend {}, currentPixelCoordinates, @lockedCoordinate()

        # Draw bresenham line from last stroke coordinates (reset after end of stroke).
        bresenhamLine lastStrokeCoordinates.x, lastStrokeCoordinates.y, currentPixelCoordinates.x, currentPixelCoordinates.y, (x, y) => pixels.push {x, y}
