 
     histocache = @getAvatarPositions()?.positions or {}
 
-    @skip_frame = false 
+    @skip_frame = !!SKIP_FRAMES 
     if SKIP_FRAMES
-      skippable = 0 
-      tot = 0
-      opacity_updated = false 
       for key, __ of histocache
         sprite = @sprites[key]
+        continue if !sprite
         updating_opacity = sprite.target_opacity != sprite.from_opacity || sprite.opacity != 1
 
         if updating_opacity
-          opacity_updated = true
+          @skip_frame = false
           break
 
-        if (sprite.last_render_x && Math.abs(sprite.x - sprite.last_render_x) < SKIP_FRAMES) &&
-           (sprite.last_render_y && Math.abs(sprite.y - sprite.last_render_y) < SKIP_FRAMES) &&
-           (sprite.last_render_size && Math.abs(sprite.width - sprite.last_render_size) < SKIP_FRAMES)
-          skippable += 1
-        tot += 1
-
-      @skip_frame = !opacity_updated && skippable / tot > .5
-
+        if (!sprite.last_render_x?    || Math.abs(sprite.x - sprite.last_render_x) > SKIP_FRAMES) ||
+           (!sprite.last_render_y?    || Math.abs(sprite.y - sprite.last_render_y) > SKIP_FRAMES) ||
+           (!sprite.last_render_size? || Math.abs(sprite.width - sprite.last_render_size) > SKIP_FRAMES)
+          @skip_frame = false
+          break
 
     if !@skip_frame
 

  onMouseLeave: (ev) ->     
    return if fetch(namespaced_key('slider', @props.proposal)).is_moving

    opinion_views = fetch 'opinion_views'
    active = opinion_views.active_views
    originating_histogram = (active.single_opinion_selected or active.region_selected)?.created_by == @props.histo_key

    @local.mouse_opinion_value = null    
    save @local

    # return if originating_histogram






      for key, __ of histocache
        sprite = @sprites[key]
        continue if !sprite
        updating_opacity = sprite.target_opacity != sprite.from_opacity || sprite.opacity != 1
        if updating_opacity
          @buff_ctx.save()
