   draw: (cells, context) ->
     return false if (not @cellShapes) or (not @workerReady)
     #first borders
-    context.beginPath()
-    for cell, i in @cells
-      unless cells.get cell
-        runCommands context, @cellShapes[i]
-        null
-    context.stroke()
+    if @drawEmpty
+      context.beginPath()
+      for cell, i in @cells
+        unless cells.get cell
+          runCommands context, @cellShapes[i]
+          null
+      context.stroke()
 
     #then cells
     context.beginPath()

  context.restore()
  return rval

lastTime = Date.now()
fpsDefault = 30
dtMax = 1000.0/fpsDefault #

redrawLoop = ->
  if dirty
    t = Date.now()
    if t - lastTime > dtMax
      if drawEverything()
        tDraw = Date.now() - t
        #adaptively update FPS

    @cells = visibleNeighborhood @tessellation, @appendRewrite, @minCellSize
    @cellOffsets = (node2array(c) for c in @cells)
    @cellTransforms = (nodeMatrixRepr(c, @tessellation.group) for c in @cells)
    @drawEmpty = true
  rebuildAt: (newCenter) ->
    @center = newCenter
    @cells = for offset in @cellOffsets
